import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;

public class Solution {

	// 숨바꼭질 - BFS 1697번
	
	static int n = 5;
	static int m = 17;
	
	public static void bfs(int a, int b) {
		Queue<Integer> q = new LinkedList<>();
		
		int[] check = new int[100001]; // 0 ~ 17까지 만들자
		boolean[] visit = new boolean[100001];
		
		Arrays.fill(check, 0); // 전체 0으로 초기화
		
		q.offer(n); //5 넣고
		visit[n] = true; // 5 방문
		
		while (!q.isEmpty()) {
			// 5 4 6 10 3 (5) 8 (5) 7 12
			// 0 1 1 1 2 0 2 0 2 2
			int num = q.poll(); // 5 꺼내 // 4 꺼내
//				check[num] = check[num] + 1;
//				visit[num] = true; // 5 방문처리 // 4 방문처리
			
			if (num == m) {
				System.out.println(check[num]);
			}
			
			if (num < 1 || num > 50000) {
				continue;
			}
			
			if (visit[num - 1] == false) { // 4를 방문하지 않았다면 // 3을 방문하지 않았다면
				q.offer(num - 1); // 4 넣기 // 3 넣기
				check[num - 1] = Math.max(check[num - 1], check[num] + 1); // check[4] = 1이 될거야 // check[3] = 2가 될거야
				visit[num - 1] = true; // 4 방문처리 // 3 방문처리
			}
			
			if (visit[num + 1] == false) { // 6을 방문하지 않았다면 // 5는 스킵
				q.offer(num + 1); // 6 넣기
				check[num + 1] = Math.max(check[num + 1], check[num] + 1); // check[6] = 1이 될거야
				visit[num + 1] = true; // 6 방문처리
			}
			
			if (visit[num * 2] == false) { // 10을 방문하지 않았다면 // 8을 방문하지 않았다면
				q.offer(num * 2); // 10 넣기 // 8 넣기
				check[num * 2] = Math.max(check[num * 2], check[num] + 1); // check[10] = 1이 될거야 // check[8] = 2가 될거야
				visit[num * 2] = true; // 10 방문 // 8 방문
			}
		}
		
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// 횟수의 max 카운트는 17 - 5일 거야
		// +1, -1, x2 3가지 경우에 대해 계속 bfs 수행
		bfs(n, m);
	}
}

백준 BFS 1697번 숨바꼭질

'Java > 백준' 카테고리의 다른 글

[Java] 백준 [2631] 줄 세우기  (0) 2022.12.17
[Java] 백준 [9095] 1, 2, 3 더하기  (0) 2022.12.16
[Java] 백준 [1303] 전쟁 - 전투  (0) 2022.12.10
[Java] 백준 [11048] 이동하기  (0) 2022.12.10
[Java] 백준 [1026] 보물  (0) 2022.12.10
import java.util.ArrayList;

public class Solution {

	// 전쟁 - 전투 - DFS 1303번
	
	static int n = 5;
	static int m = 5;
	static char[][] arr = {{'W','B','W','W','W'}, {'W','W','W','W','W'}, {'B','B','B','B','B'}, {'B','B','B','W','W'}, {'W','W','W','W','W'}};
	static boolean[][] visit = new boolean[5][5];
	static int[] dy = {-1, 1, 0, 0};
	static int[] dx = {0, 0, -1, 1};
	static ArrayList<Integer> wList = new ArrayList<>();
	static ArrayList<Integer> bList = new ArrayList<>();
	static int cnt = 0;
	static int wValue = 0;
	static int bValue = 0;
	
//	WBWWW
//	WWWWW
//	BBBBB
//	BBBWW
//	WWWWW
	
	public static void dfs(int i, int j) {
		
		visit[i][j] = true; // 탐색을 위해 들어왔다면 방문처리
		cnt++;
		
		for (int k = 0; k < 4; k++) {
			
			int row = i + dy[k];
			int col = j + dx[k];
			
			if (row < 0 || row > n - 1 || col < 0 || col > m - 1) {
				continue;
			}
			
			if (arr[row][col] == arr[i][j] && visit[row][col] == false) { // 팀이 같고, 아직 방문한적 없다면
				dfs(row, col);
			}
		}
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		for (int i = 0; i < n; i++) { // 행
			
			for (int j = 0 ; j < m; j++) { // 열
				
				if (visit[i][j] == false) { // 방문 전이라면
					cnt = 0;
					
					dfs(i, j); // 상하좌우 탐색하기 위해 dfs // 덩어리의 갯수가 결정됨
					
					if (arr[i][j] == 'W') {
						System.out.println("흰색 덩어리" + cnt);
						wList.add(cnt * cnt);
					} else if (arr[i][j] == 'B') {
						System.out.println("파란 덩어리" + cnt);
						bList.add(cnt * cnt);
					}
				}
			}
		}
		
		for (int i = 0; i < wList.size(); i++) {
			wValue += wList.get(i);
		}
		
		for (int i = 0; i < bList.size(); i++) {
			bValue += bList.get(i);
		}
		
		System.out.println("흰색 팀의 위력 : " + wValue + " 파란 팀의 위력 : " + bValue);
	}
}

백준 DFS 1303번 전쟁 - 전투

'Java > 백준' 카테고리의 다른 글

[Java] 백준 [2631] 줄 세우기  (0) 2022.12.17
[Java] 백준 [9095] 1, 2, 3 더하기  (0) 2022.12.16
[Java] 백준 [1697] 숨바꼭질  (0) 2022.12.12
[Java] 백준 [11048] 이동하기  (0) 2022.12.10
[Java] 백준 [1026] 보물  (0) 2022.12.10
public class Solution {

	// 이동하기 - DP 11048번
	
	static int n = 3;
	static int m = 4;
	static int[][] arr = {{1, 2, 3, 4}, {0, 0, 0, 5}, {9, 8, 7, 6}};
	static int[] dy = {1, 1, 0};
	static int[] dx = {0, 1, 1};
	static int[][] dp = new int[n][m];
	
	public static void dfs(int a, int b) {
		
		for (int i = 0; i < 3; i++) {
			int ny = a + dy[i];
			int nx = b + dx[i];
			
			if (ny > n - 1 || nx > m - 1) {
				continue;
			}
			
			dp[ny][nx] = Math.max(dp[ny][nx], arr[ny][nx] + dp[a][b]);
			dfs(ny, nx); // 24, 25라인 순서 잘 생각하자 dfs는 한 번 들어가면 그대로 쭉 들어가
		}
	}
	
	public static void dynamicProgramming() {
		dp[0][0] = arr[0][0];
		dfs(0,0);
		
		for (int i = 0; i < dp.length; i++) {
			
			for (int j = 0; j < dp[i].length; j++) {
				System.out.print(dp[i][j] + " ");
			}
			System.out.println();
		}
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// (1,1) 좌상단에서 (N,M) 우하단까지 사탕 최대로 얻기
		dynamicProgramming();
	}
}

백준 DP 11048번 이동하기

'Java > 백준' 카테고리의 다른 글

[Java] 백준 [2631] 줄 세우기  (0) 2022.12.17
[Java] 백준 [9095] 1, 2, 3 더하기  (0) 2022.12.16
[Java] 백준 [1697] 숨바꼭질  (0) 2022.12.12
[Java] 백준 [1303] 전쟁 - 전투  (0) 2022.12.10
[Java] 백준 [1026] 보물  (0) 2022.12.10
import java.util.*;

public class Solution {

	// 보물 - Greedy 1026번
	
	public static int minVal(int n, int[] arrA, int[] arrB) {
		
		int[] arrTempA = arrA;
		
		Integer[] tempB = Arrays.stream(arrB).boxed().toArray(Integer[]::new);
		
		Arrays.sort(tempB, Collections.reverseOrder());
		
		int[] arrTempB = Arrays.stream(tempB).mapToInt(Integer::intValue).toArray();
		
		Arrays.sort(arrTempA);
		
		int numVal = 0;
		
//		for (int i = 0; i < arrTempA.length; i++) {
//			System.out.print(arrTempA[i]);
//		}
//		
//		for (int i = 0; i < arrTempB.length; i++) {
//			System.out.print(arrTempB[i]);
//		}
		
		for (int i = 0; i < n; i++) {
			numVal += (arrTempA[i] * arrTempB[i]);
		}
		
		return numVal;
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
//		5
//		1 1 1 6 0
//		2 7 8 3 1
		// 답 18
//		int n = 5;
//		int[] arrA = {1, 1, 1, 6, 0};
//		int[] arrB = {2, 7, 8, 3, 1};
		
//		3
//		1 1 3
//		10 30 20
		// 답 80
		
		int n = 3;
		int[] arrA = {1, 1, 3};
		int[] arrB = {10, 30, 20};
		
		System.out.println(minVal(n, arrA, arrB));
	}
}

백준 Greedy 1026번 보물

'Java > 백준' 카테고리의 다른 글

[Java] 백준 [2631] 줄 세우기  (0) 2022.12.17
[Java] 백준 [9095] 1, 2, 3 더하기  (0) 2022.12.16
[Java] 백준 [1697] 숨바꼭질  (0) 2022.12.12
[Java] 백준 [1303] 전쟁 - 전투  (0) 2022.12.10
[Java] 백준 [11048] 이동하기  (0) 2022.12.10
public class Solution {
	
	// 쌍둥이 빌딩 숲
	// 전체 쌍둥이 빌딩의 수, 측면에서 봤을 때 보이는 빌딩의 수 [경우의 수]
	// 가장 높은 쌍둥이 빌딩부터 순서대로 배치
	// 1, 1 = 11 [1개]

	// 2, 1 = 1221, 1122 [2개] 1 * 2
	// 2, 2 = 2211 [1개] 1
	
	// 3, 1 = 133221, 123321, 122331, 122133, 133122, 113322, 112332, 112233 [8개] 2 * 4
	// 3, 2 = 233211, 223311, 221331, 221133, 331221, 331122 [6개] 1 * 4 + 2
	// 3, 3 = 332211 [1개] 1
	
	// 4, 1 = [48개] 8 * 6
	// 4, 2 = [44개] 6 * 6 + 8
	// 4, 3 = [12개] 1 * 6 + 6
	// 4, 4 = [1개] 1
	
	// 5, 1 = [384개] 48 * 8
	// 5, 2 = [400개] 44 * 8 + 48
	// 5, 3 = [140개] 12 * 8 + 44
	// 5, 4 = [20개] 1 * 8 + 12
	// 5, 5 = [1개] 1
	
	// (x, y)를 전체 쌍둥이 빌딩 x개 중, 측면에서 봤을 때 y개의 빌딩이 보이는 경우의 수라고 했을 때
	// (1, 1)은 1로 고정
	// x는 2 이상이고, y가 1일 때 (x, y)를 만드는 방법 => (x, y) = (x - 1, y) * (2 * (x - 1))
	// x는 2 이상이고, y가 1보다 크고 x보다 작을 때 (x, y)를 만드는 방법 => (x, y) = (x - 1, y) * (2 * (x - 1)) + (x - 1, y - 1)
	// x는 2 이상이고, y가 x일 때 (x, y)를 만드는 방법 => (x, y) = (x - 1, y - 1)
	
	// 11 (가장 높은 쌍둥이 빌딩 11 배치)
	// ☆☆ 1 ☆☆ 1 ☆☆ (다음으로 높은 쌍둥이 빌딩 배치할 위치 찾기)
	// 22 11 (다음으로 높은 빌딩 22를 제일 앞에 배치 시 보이는 건물 + 1, 경우의 수는 배치 전 그대로)
	// 1 22 1, 11 22 (다음으로 높은 빌딩 22를 빌딩 사이 또는 제일 뒤에 배치 시 보이는 건물 그대로, 경우의 수는 배치 전 * 2
	// 다음으로 높은 빌딩 33을 제일 앞에 배치 시 => 보이는 건물 + 1, 경우의 수는 배치 전 그대로
	// 2211(하나의 예) => 332211
	// 다음으로 높은 빌딩 33을 빌딩 사이 또는 제일 뒤에 배치 시 => 보이는 건물 그대로, 경우의 수는 배치 전 * (2 * (배치 후 쌍둥이 빌딩의 수 - 1))
	// 2211(하나의 예) => 233211, 223311, 221331, 221133
	
	// 3, 1의 경우의 수는 2, 1의 경우의 수에서만 생각 (2, 2는 이미 빌딩 2개가 보이는 상태)
	// 2, 1이 3, 1이 되기 위해서는 쌍둥이 빌딩 한 쌍을 추가로 배치하면서 보이는 건물은 그대로여야 한다. => 사이 또는 제일 뒤에 배치
	// 2, 1의 경우인 1221, 1122 경우의 수 2에 * (2 * (3 - 1)) => 3, 1 = 8개
	// 3, 2의 경우의 수는 2, 2의 경우의 수에서 사이 또는 제일 뒤에 배치, 2, 1의 경우의 수에서 제일 앞에 배치 (2가지 경우가 존재)
	// 2, 2의 경우인 2211 경우의 수 1에 * (2 * (3 - 1)) => 4
	// 2, 1의 경우인 1221, 1122 경우의 수 2 그대로
	// 3, 2 => 6개
	// 3, 3의 경우의 수는 2, 2의 경우의 수에서만 생각, 제일 앞에 배치 => 2, 2의 경우인 2211 경우의 수 1 그대로 (332211)
	
	public static int solution(int n, int count) {
		long[][] arr = new long[n + 1][n + 1];
		long preventOutOfRange = 1000000007;
		long temp = 0;
		
		arr[1][1] = 1;
		
		for (int x = 2; x <= n; x++) { // x는 2 이상
			
			for (int y = 1; y <= x; y++) {
				
				if (y == 1) { // y가 1일 때 arr[x][y]를 만드는 방법 => arr[x][y] = arr[x - 1][y] * (2 * (x - 1));
					temp = arr[x - 1][y] * (2 * (x - 1));
				} else if (y > 1 && y < x) { // y가 1보다 크고 x보다 작을 때 arr[x][y]를 만드는 방법 => arr[x][y] = arr[x - 1][y] * (2 * (x - 1)) + arr[x - 1][y - 1];
					temp = arr[x - 1][y] * (2 * (x - 1)) + arr[x - 1][y - 1];
				} else { // y가 x일 때 arr[x][y]를 만드는 방법 => arr[x][y] = arr[x - 1][y - 1];
					temp = arr[x - 1][y - 1];
				}
				
				arr[x][y] = temp % preventOutOfRange;
			}
		}
		
		return (int) arr[n][count];
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int n = 3;
		int count = 1;
		
		System.out.println(solution(n, count)); // 8
	}
}

(x, y)를 전체 쌍둥이 빌딩 x개 중, 측면에서 봤을 때 y개의 빌딩이 보이는 경우의 수라고 했을 때

(1, 1)은 1로 고정


x는 2 이상이고, y가 1일 때 (x, y)를 만드는 방법

=> (x, y) = (x - 1, y) * (2 * (x - 1))


x는 2 이상이고, y가 1보다 크고 x보다 작을 때 (x, y)를 만드는 방법

=> (x, y) = (x - 1, y) * (2 * (x - 1)) + (x - 1, y - 1)


x는 2 이상이고, y가 x일 때 (x, y)를 만드는 방법

=> (x, y) = (x - 1, y - 1)

프로그래머스 쌍둥이 빌딩 숲 문제 풀이 Java

Edge Computing(에지 컴퓨팅)이란?

응답 시간을 개선하고 대역폭을 절약하기 위해 필요한 곳에 연산과 데이터 스토리지를 도입하는

분산 컴퓨팅 패러다임의 하나로 쉽게 얘기하면 클라우드와 단말기 사이에 작은 클라우드를 하나 더 넣자는 개념이다.

빈도가 많은 것을 에지에 두고 단말기로부터의 요청에 빠른 응답

EX) 중식당에서 점심시간에 가장 많이 팔리는 짜장면, 짬뽕을 미리 만들어 놓는 것

'IT' 카테고리의 다른 글

[IT] Cloud Service 장단점  (0) 2023.05.30
[IT] Web Server & WAS  (0) 2023.02.26
[IT] Cloud  (0) 2022.12.05
[IT] Server  (0) 2022.12.05
[IT] Digital Transformation  (0) 2022.12.02

Cloud(클라우드)란 무엇인가?

 

업무팀이 어느 나라로 장기 파견을 갔다고 가정하자

그런데 이 가상의 국가에서는 지낼 공간을 마련하는 방법이 두 가지이다.


1. 일터와 숙소로 쓸 가건물 하나를 빌리거나,
2. 가성비가 꽤 좋은 초대형 호텔을 이용하는 방법이 있다.


건물을 빌리는 게 호텔보다는 평당 가격도 저렴하고 우리 팀만의 넓은 공간이 확보되는 장점이 있다.
다만, 건물 전체를 빌리는 것이므로 필요 이상의 공간까지 값을 치르는 것이고 그래서 내야 하는 총 금액도 클 것이다.
전기, 수도, 각종 수리 등 건물 관리도 직접 해야 하고 청소, 빨래, 요리 등 업무 외 수고가 들 것이다.
현지 일이 바빠져서 갑자기 파견팀 규모가 커지고 공간이 부족하게 되면 곤란해질 수도 있다.


반면 호텔에서는 팀에게 딱 필요한 공간만 방을 빌릴 수 있다. 상황에 따라 언제든 방을 더 빌리거나 덜 쓰거나 할 수 있다.
건물도 호텔 측이 관리해 주는 것이고 잡일을 직접 해도 되지만, 돈을 더 낼 여유가 있다면 클리닝, 빨래, 식사까지

서비스로 제공되기 때문에 주요 업무 자체에 더 집중할 수가 있게 된다. 물론 방을 많이 쓰거나 서비스를 많이 이용하면
총 금액은 건물 렌트보다 비싸질 것이다. 남이 관리하는 건물이기 때문에 보안에 민감한 팀은 불안할 수도 있다.
그리고 업무에 맞게 직접 커스터마이징한 건물보다 효율이 떨어지는 부분도 있을 수 있다.


그렇기 때문에 팀에서는 회사의 재정적 여건과 업무의 특성에 따라 둘 중 알맞은 것을 선택해야 한다.
인터넷으로 서비스하는 제품을 개발할 때 서버를 두는 두 방식을 이렇게 비유할 수 있다.

 

건물 렌트가 전통적인 방식
즉, 회사가 자사의 시설, 혹은 IDC에 자체적으로 컴퓨터 서버를 두고 운용하는 On-Premise 방식이다.
그리고 AWS, Azure, GCP 같은 대기업 브랜드 호텔에서 제공하는 게 클라우드 컴퓨팅 서비스이다.
이 클라우드들 역시 자사의 거대한 데이터 센터에 서로 연결된 수많은 컴퓨터들을 운용하고 있다.
다만, 전통적인 서버 방식처럼 사용자에게 컴퓨터를 하나씩 통째로 배당하는 게 아니라
필요한 만큼 떼어서 나눠준다. 가상 컴퓨팅이란 기술을 사용하면
물리적 컴퓨터 한 대에 가상의 컴퓨터 여러 대를 띄울 수 있다. 맥을 쓰는 사람들은 페러렐즈 같은 것으로

맥에 윈도우도 같이 띄워서 쓰기도 한다. 컴퓨터공학 수업 중 버추어 박스로 윈도우에 우분투를 설치해서 쓰는 경우도

마찬가지이다. 그런 게 가상 컴퓨팅이다.
컴퓨터의 물리적 차원을 필요에 따라 분할해서 쓸 수 있는 것이다.
사용자는 원격 접속 소프트웨어를 이용해서 마치 컴퓨터 한 대를 쓰는 것처럼 인터넷으로 연결된 이 가상 컴퓨터를

사용하는 것이다. 필요한 컴퓨터 자원이 많지 않거나 수시로 변화하는 회사나 기관, 혹은 개인에게
클라우드는 아주 매력적인 선택이 된다. 세일 시즌이나 이벤트 기간에 유난히 접속량이 폭주하는 앱의 경우
클라우드에서 그때그때 필요한 만큼 자원을 늘려주거나 줄여줄 수 있다.

시간과 접속량에 따른 종량제로 운영되기 때문에 필요한 만큼만 쓰고 돈을 지불하면 된다.
하드웨어도 클라우드에서 알아서 관리해 주기  때문에 걱정할 필요 없고
여기에 비용을 더 지불하면 예전에는 회사에서 자체적으로 해야 했던 데이터베이스, 자료 백업, 스토리지, 자동화,

머신러닝, 블록체인까지 검증된 최고급 프로그래머들이 구현해놓은 것을 서비스로 이용할 수 있다.
그런 것들을 직접 개발하고 관리하는데 써야 했던 시간적, 인적, 물적 비용을 회사의 주요 업무에 투자할 수 있기 때문에
시스템 엔지니어, DB 전문가 같은 고급인력을 일일이 고용할 여력이 없는 중소기업이나 벤처에게 굉장히 유용할 것이다.
클라우드 컴퓨팅 서비스는 작은 회사들만 이용하는 것이 아니다.
글로벌한 서비스를 하는 대기업들은 각국 사업소들로부터 정보를 실시간으로 통합하고 거점마다 IT 인력을 배치하는 것이

큰 부담이다. 클라우드의 거대한 인프라가 이것을 대신해 주기 때문에 국제적으로 활동하는 대기업들도 클라우드를 

활용한다. 물론 비용이나 기밀 보안 등 한계도 있기 때문에 회사들은 On-Premise와 클라우드 중 이것저것 따져보고

적합한 것을 선택할 것이다.

클라우드 컴퓨팅 서비스도 서비스를 어디까지 해주느냐에 따라 크게 세 단계(IaaS, PaaS, SaaS)로 나뉜다.

 

 

IaaS(Infrastructure as a Service) : 서비스로 제공되는 인프라

가상 컴퓨터, 즉 하드웨어 자원의 일부를 떼어주는 것이다.

클라우드에서는 거의 하드웨어만 관리하고 내가 직접 가상 서버 하나를(본체 구매 후 OS 설치, 드라이버 다운로드,

프로그램 설치하듯) 운영하고 관리한다고 생각하면 된다. 클라우드들의 대표적 상품이다.

 

PaaS(Platform as a Service) : 플랫폼이 서비스로 제공되는 것이다.

여기에선 이 가상 컴퓨터도 내가 신경 쓸 필요 없이 클라우드에서 관리해 준다.

나는 소프트웨어만 만들어서 올리면 된다. 내가 작성한 코드를 압축해서 업로드하거나 깃으로 전송하면

클라우드에서 알아서 서버에 넣고 실행해 준다.(배포) 나는 코드만 작성하면 되기 때문에 편리하다.

 

SaaS(Software as a Service) : 아예 다 만들어진 소프트웨어를 서비스로 제공한다.

구글 독스, 온라인 페이, SNS, 이메일, 유튜브 등 사용자들이 바로 온라인으로 이용할 수 있는 서비스를 생각하면 된다.

 

2006년 아마존에서 선보인 AWS가 최초이자 현재도 가장 대표적인 클라우드 서비스이다.

유지비 먹는 하마인 기업 내 자체 데이터 센터 대신 외부 가상 서버를 '구독'하는 참신한 모델을 시장에 제시하였다.

마이크로소프트의 Azure도 맹추격 중이다.

전 세계 클라우드 시장 점유율 순위는 다음과 같다.

 

1. AWS
2. Azure
3. Google Cloud
4. Alibaba Cloud

 

클라우드 비즈니스의 핵심은 B2B에 있다. 구글은 B2C 서비스 중심이기 때문에

주로 정부기관과 기업들을 대상으로 서비스를 제공하는 AWS와 Azure가 훨씬 막대한 수입을 벌어들이는 것이다.

클라우드 시대가 도래하면서 이를 기반으로 무섭게 성장한 산업 중 하나가 OTT(Over The Top)이다.
동영상을 각자의 단말기에 다운로드해서 보던 시대를 뒤로하고 스트리밍의 시대를 연 넷플릭스가 대표적
AWS의 최애 고객 중 하나인 넷플릭스 2016년 한국 론칭할 즈음에 AWS도 서울에 아시아 태평양 리전을 개설한 건
우연이 아니다. 동반성장의 좋은 예라고 할 수 있다.

2013년 미 중앙정보국 CIA와의 계약 체결 이후 AWS의 성장은 곧 전체 클라우드 비즈니스의 확장으로 이어진다.
애플 iCloud도 AWS 기반이며, e커머스 분야의 쿠팡도 AWS 고객이다.

 

'IT' 카테고리의 다른 글

[IT] Cloud Service 장단점  (0) 2023.05.30
[IT] Web Server & WAS  (0) 2023.02.26
[IT] Edge Computing  (0) 2022.12.05
[IT] Server  (0) 2022.12.05
[IT] Digital Transformation  (0) 2022.12.02

우리가 핸드폰으로 O튜브나 네이O에 접속하면
온갖 영상들, 글들, 사진들을 볼 수 있다.
이것들이 우리 기기에 들어있던 것들인가?
아니다. 다른 어딘가에, 우리가 '서버'라고 부르는 어떤 '컴퓨터'에 들어있는 것이다.
서버란 말은 사실  '역할'의 개념이다.
한 컴퓨터가 네트워크로 연결된 다른 하나, 또는 그 이상의 컴퓨터들에게 뭔가를 해주면
예를 들어 저장된 글과 사진들을 보여주거나, 반대로, 이것들의 업로드를 받아서 보관해 주거나,
한 컴퓨터가 톡을 보내면 다른 컴퓨터에 알림을 보내거나,
위치와 목적지를 받아서, 가는 길과 소요시간을 계산해 주거나,
여럿이 온라인으로 참여할 수 있는 게임을 열어주거나 하면
그 serve(제공)를 해주는 컴퓨터가 '서버(server)'
그 서비스(service)를 받는 컴퓨터가 손님, '클라이언트(client)'가 되는 것이다.
흔히 우리가 '서버'로 알고 있는 그 컴퓨터들은
보통 IDC(Internet Data Center)란 시설에 있다.
냉각장치와 함께 수많은 컴퓨터들이 박혀서 인터넷에 연결되어 있는 것이다.
우리의 개인 컴퓨터에도 서버 역할을 하는 소프트웨어를 깔고
외부에서 특정 주소로 접속해올 수 있도록 설정하면
전 세계 사람들이 이용할 수 있는 웹 서버나 게임 서버 등으로 만들 수 있다.
다만, 컴퓨터를 계속 켜놔야 하기 때문에 전기세도 많이 들고
통신의 질이나, 컴퓨터 다운 가능성 등의 한계가 있기 때문에
보통은 IDC에 있는 특정 컴퓨터를 사용하거나
AWS 같은 클라우드 컴퓨팅 서비스를 사용한다.

'IT' 카테고리의 다른 글

[IT] Cloud Service 장단점  (0) 2023.05.30
[IT] Web Server & WAS  (0) 2023.02.26
[IT] Edge Computing  (0) 2022.12.05
[IT] Cloud  (0) 2022.12.05
[IT] Digital Transformation  (0) 2022.12.02

+ Recent posts