본문 바로가기
프로그래밍/Unreal 부트캠프

TIL 2025.03.08 기록

by Rozentea 2025. 3. 10.

0. 개요


오늘은 프로젝트가 끝나고.. 다시 새로운 마음으로 출발하는 첫 수업이었다.

이번 수업은 멀티에 대해서 배우는데, 오늘 수업은 서버와 네트워크에 관한 용어와 내용을 공부했다.

 

네트워크쪽은 정말정말 처음 들어보는데, 와... 용어들부터 낯설고 이해하기가 쉽지 않았다...

하지만 능히 해낼수 이따!

 

또, 오늘 챌린지 반 수업에서는 브루트포스 기법을 배우면서 비트연산자를 이용한 부분집합 순회를 배웠는데, 이렇게 사용해본적이 없었어서 충격이었다.. 사실 아주 자주 사용되는 방법인것 같아서.. 왜 이제 알게 된건지.. 반성하게되었다.. ㅠ

그래도 나름 예전에 코테 준비 열심히 하던 시절이 있었는데...

 

아무튼 오늘은 계속 수업을 듣고 정리하는 시간을 가졌기 때문에 내용들을 정리하고 마무리할 생각이다.

 

1. 브루트 포스 (Brute Force)


브루트포스(Brute Force)란?

말 그대로 무식하게 문제를 푸는 방법을 의미한다.

가능한 모든 경우의 수를 전부 시도해보는 것이다.

예를들어 어떤 배열에서 합이 특정 값이 되는 부분수열을 찾고 싶다면,

  1. 브루트 포스로 가능한 모든 부분 수열을 전부 생성하여 합을 확인해본다.
  2. 더 효율적인 기법을 이용해서 조건을 만족하는 경우만 빠르게 찾아낸다.

부분집합을 전부 순회하는 전형적인 방법중 하나로 비트마스킹이 있다.

( 오.. 신기하다 이건 처음 알았다. )

시프트 연산을 이용해 이런 부분 집합 순회를 한다.

 

부르트포스 기법은 자료의 크기가 작거나, 최적화된 알고리즘을 떠올리기 어려울 때 혹은 검증 과정을 위해서 사용되곤 한다.

 

주의할 점

아무래도 모든 경우의 수를 다 확인하기 때문에 시간 복잡도를 잘 생각해 사용해야한다.

즉, n의 크기를 신경써야한다.

 

브루트포스의 여러 전략

  1. 중첩 반복문을 활용한 직접 생성
  2. bitmasking을 활용한 부분집합 생성
  3. STL의 next_permutation 등을 활용한 순열 생성
  4. 백 트래킹

<중첩 반복문>

단순히 반복문을 여러 번 중첩하는 전략이다.

for (int i = 1; i <= 3; i++) {
    for (int j = 1; j <= 3; j++) {
        for (int k = 1; k <= 3; k++) {
            cout << i << " " << j << " " << k << "\n";
        }
    }
}

< 결과 >
1 1 1
1 1 2
1 1 3
1 2 1
...
3 3 2
3 3 3

위와 같이 매우 직관적인 방법이긴 하지만 범위가 정해져 있는 경우, 중첩의 깊이가 많아지면 코드를 일일이 짜기 힘들어진다는 단점이 있다.

 

<bitmasking을 이용한 부분집합 생성>

부분집합을 전부 순회하는 전형적인 방법 중 하나인데,

예) 어떤 집합이 { 1, 2, 3 } 이라면, 부분 집합은 총 2^3 = 8개이다.

 

비트마스킹으로 표현하면 다음과 같다.

0 -> 000 -> 공집합
1 -> 001 -> {3}
2 -> 010 -> {2}
3 -> 011 -> {2,3}
4 -> 100 -> {1}
5 -> 101 -> {1,3}
6 -> 110 -> {1,2}
7 -> 111 -> {1,2,3}

그러니까.. 음.. 비트의 자리수를 인덱스로 판단해 진행하는 기법이다.

0일 경우 해당 인덱스를 포함하지 않는다는 것이고, 1일 경우 해당 인덱스를 포함하는 것이다.

 

#include <iostream>
#include <vector>
using namespace std;

int main() {
    vector<int> arr = {1, 2, 3};
    int n = arr.size();

    // 부분집합의 모든 경우의 수 탐색 -> 0 ~ (1<<n)-1
    for (int i = 0; i < (1 << n); i++) {
        cout << "{ ";
        for (int j = 0; j < n; j++) {
            if (i & (1 << j)) {
                cout << arr[j] << " ";
            }
        }
        cout << "}\n";
    }
}

아무래도 반복문의 조건이라던지 비트연산자들이 익숙하지 않다면 쉽게 작성하긴 어려운 코드라고 생각한다.

시프트 연산자를 이용해 각 비트 자리수를 확인해 마스킹을 하며 해당 인덱스를 포함하는지 확인해나가는 방법이다.

 

만약 n이 3이면 (1<< n)을 하면, 1000이라는 1을 3번 왼쪽으로 이동 시킨 것이다.

숫자로 보면 8이기 때문에 딱 0~7까지 반복을 수행하게 된다.

때문에 원하는 만큼 부분집합의 모든 경우의 수의 반복이 완성된다.

 

브루트 포스를 사용해볼만한 문제 예시

(a, b, c)를 전부 탐색하며 조건을 만족하는 (a, b, c)의 개수를 구하라
2차원 격자(가령 n x m) 위에서 가능한 모든 경로를 탐색하는 문제도 자주 브루트포스로 접근한다.
단, n과 m이 너무 크면 실행 시간을 넘길 수 있으니 주의해야 한다..!

 

문제 1.

Q. 이제, 실제로 bitmask를 C++ 코드로 구현을 해볼까요? 비트 연산자를 활용해서 바로 위의 예제처럼 똑같이 출력해봅시다! (15분)
0 -> 000 -> 공집합
1 -> 001 -> {3}
2 -> 010 -> {2}
3 -> 011 -> {2,3}
4 -> 100 -> {1}
5 -> 101 -> {1,3}
6 -> 110 -> {1,2}
7 -> 111 -> {1,2,3}​

 

#include <iostream>
#include <vector>

using namespace std;

int main()
{
	vector<int> arr = { 1, 2, 3 };

	for (int i = 0; i < (1 << arr.size()); ++i)
	{
		cout <<"{";
		for (int j = 0; j < arr.size(); ++j)
		{
			if (i & (1 << j))
			{
				cout << arr[j] << ",";
			}
		}
			cout << " }" << endl;
	}

	return 0;
}

비트 연산자를 너무 오랜만에 사용해서 그런지 햇갈리는 부분도 많았고, 조건을 비트연산자를 이용해 (1<<n)과 같은 형식도 만들 수 있다는 것을 알게되었다.

 

문제 2.

Q. 정수 n(1 ≤ n ≤ 100)이 주어질 때, 다음 식을 만족하는 (a, b, c)의 개수를 구하라. 단, a, b, c는 1 이상 100 이하인 자연수로 가정하고, a, b, c가 중복될 수 있음. (10분)
a + b^2 + c^3 = n​
#include <iostream>
#include <math.h>
#include <vector>

using namespace std;

int main()
{
	int n = 50;
	int count = 0;
	for (int a = 0; a <= 100; ++a)
	{
		for (int b = 0; b <= 100; ++b)
		{
			for (int c = 0; c <= 100;)
			{
				int calculate = a + pow(b, 2) + pow(c, 3);
				if (calculate == n)
				{
					count++;
				}
			}
		}
	}

	cout << count;

	return 0;
}

음.. 단순하게 풀어서 큰 문제 없이 풀 수 있었다.

대신 이번 과제가 불필요한 중복을 제거해 동일한 문제를 푸는게 주어졌는데, 생각을 조금 해봐야할 것 같다.

 

문제 3.

Q. n x m 격자에서, 오른쪽 혹은 아래쪽으로만 이동할 수 있을 때, (0,0)에서 (n-1,m-1)까지 가는 모든 경로의 개수를 구하도록 할 것. (단, n과 m은 10 이하) (20분)
#include <iostream>
#include <vector>
using namespace std;

int cntPaths = 0;

void bruteForceGrid(int r, int c, int n, int m)
{
    if (r >= n || c >= m)
    	return;
    if (r == n-1 && c == m-1)
    {
        cntPaths++;
        return;
    }
    bruteForceGrid(r, c+1, n, m);
    bruteForceGrid(r+1, c, n, m);
}

int main()
{
    bruteForceGrid(0, 0, 3, 3);
    cout << cntPaths << "\n";
}

결국 해당 문제는 풀지 못했다.. ㅠ

다른 수강생 분들이 푸신걸 보니 어떤분께서는 dp로 푸시고 하셨는데.. 음.. 원래 나는 dfs를 구현해 풀어보려했으나.. 이게 원하시는 답이 맞을까 고민하다가 시간내에 풀지 못했다..

그리고 오랜만에 푸는 경로 탐색 문제이다 보니.. 이전처럼 쉽게 풀리지 않는 점도 시간내에 풀지 못한 이유인 것 같다.

 

2. 네트워크 개념 이해하기


네트워크란?

사전적인 의미로 보면 Interconnected 시스템이라고 한다.

즉, 상호 연결되어 있는 망을 의미한다.

 

우리가 네트워크를 알아야하는 이유

가장 큰 이유는 한국의 게임 회사들이 대부분 온라인 게임을 바탕으로 성장을 했기 때문이다.

좀 더 정확하게는 네트워크의 원리를 이해함으로써 실무에서 다양한 문제에 응용해 해결하고, 응용 SW의 기능 구현에 있어 원리를 알고 접근법을 찾아야 하기 때문이다.

 

네트워크의 기본구성 요소

  1. 노드
    네트워크의 가장 기본 단위이다.
    엔드 노드(End node), 중간 노드(Intermediate node) 두 종류가 있다.
    통신 : 다른 노드와 데이터 교환 기능
    라우팅 : 데이터가 목적지에 도달할 수 있도록 최적의 경로를 선택하는 기능
    데이터처리 : 데이터를 패킷화, 패킷 분할 / 재조립, 오류검사 등의 기능
    네트워크 관리 : 상태감시, 트래픽 관리, 보안
  2. 링크
    각 노드들을 연결해주는 것을 링크라고 한다.
    유선 : 이더넷, 광섬유, 케이블 등
    무선 : Wifi, 블루투스 등
  3. 프로토콜
    데이터의 전송 규칙이다.
    (TCP, UDP, HTTP, HTTPS, FTP 등)
    프로토콜은 중요한 부분이다.

( 아마 사진의 점선은 무선 연결을 의미하고, 실선은 유선 연결을 의미하는 것 같다. )

 

네트워크의 배치 형태 (Topology)

  • p2p
    단 2대를 연결하는 경우이다.
    즉, 1 : 1 통신이다.

  • 버스 (Bus)
    케이블 티비를 신청하면, 물리는 동축 케이블이 있는데, 그걸 1자로 물려서 컴퓨터끼리 연결하는 것이다.
    브로드캐스팅 : 방송
    버스의 한계는 양방향 통신이 불가능하다는 것이다.

  • 링 (Ring)
    버스 대안으로 단점을 보안해 나온게 링이다.
    1개의 BNC 케이블을 원형으로 만든 뒤에 여러대의 컴퓨터를 연결해 구성한다.
    다른 브로드캐스트와 충돌할 확률을 낮춘 양방향 통신을 위해 개발된 것이다.

이젠 스위치와 허브가 싸졌기 때문에 위 3가지 것들은 최근 더이상 사용되지 않는다.

  • 🌟스타 (Star)
    중앙 허브 또는 스위치에 연결된 구조이다.
    대부분의 가정과 사무실, IDC 센터등에서 채택하는 구조이다.
    양방향 통신이 가능하고 스위치를 통해 통신이 더 빠르다.
    단점 : 스위치나 허브가 망가지면, 통신이 불가능해진다.

  • 메쉬 (Mesh)
    스타의 단점을 해결하기 위해 나온 시스템이다.
    1 : n의 구성으로 신뢰성이 높다.
    각각 개별적으로 연결되어 있어서 한쪽이 망가져도 나머지끼리의 통신엔 아무런 지장이 없다.
    군사 영역, 무선 네트워크에 주로 이용된다.
    단.. 비용이 비싸다.

  • 🌟트리 (Tree)
    라우터를 맨 위에 두고, 그 아래 스위치, 그 아래에 pc들을 두는 형태이다.
    중간 스위치 한곳이 망가져도 다른 스위치쪽의 시스템은 여전히 동작하는 형태이다.
    비용, 확장성면에서 이점이 있기 때문에 현재 많이 사용되고 있다.
    주로 회사, IDC 센터, ISP 사업자 등에 쓰인다.

 

( 트리 시스템과 스타 토폴로지는 기억하고 갔으면 좋겠다고 하신다. )

🌟 네트워크의 레이어 (OSI 모델)

응용 소프트웨어에서 생성한 신호가 어떻게 네트워크를 통해 다른 곳으로 전달되는지 를 정의한 표준모델을 OSI 모델이라 부르며 총 7개의 층으로 구성된다.

물리 계층 (L1) 물리적 매체로 케이블, 전기신호, 광신호를 직접 관리한다.
ex) 이더넷, USB, 블루투스 디바이스 등
데이터링크 계층 (L2) 물리계층에서 전달된 비트를 프레임으로 변환하고, 에러검사, 흐름제어, 링크관리를 한다.
ex) MAC Address, MAC 프로토콜, PPP(Point-to-Point protocol) 등
네트워크 계층 (L3) 데이터를 목적지까지 옮기는 역할로 패킷의 경로를 결정하고 패킷 주소를 관리한다.
ex) IP (Internet Protocol), IPX, 라우터 등
전송 계층 (L4) 데이터 전송을 관리하며, 흐름제어, 오류제어, 세그먼트화, 연결설정, 해제를 담당하며 논리적 포트를 사용한다.
ex) TCP (Transmission Control Protocol), UDP (User Datagram Protocol)
🌟 세션 계층 (L5) 통신의 세션을 설정, 관리하며, 데이터 교환 동기화(Sync)와 체크포인트 관리를 담당한다.
ex) RPC (Remote Procedure Call), NetBIOS
🌟 프레젠테이션 계층 (L6) 데이터 형식을 변환하고 암호화 및 압축처리
ex) SSL/TLS, JPEG, MPEG 등
🌟 어플리케이션 계층 (L7) 네트워크 서비스에 접근하고 UI제공을 담당한다.
ex) HTTP, FTP, SMTP, DNS 등

우리는 보통 세션 계층 부터 어플리케이션 계층까지는 컨트롤하게 된다.

즉, 5 계층 ~ 7 계층까지는 컨트롤하게 된다.

 

레이어에 따른 스위치 종류

  참조데이터 용도
L2 스위치 MAC 주소 테이블 스위치에 몰려 있는 디바이스간의 통신 전송
L3 스위치 라우팅 테이블 라우팅 테이블을 참조하여 인접 라우터를 기억하고 원거리 통신
L4 스위치 포트 번호 포트번호를 사용해 트래픽을 분배(로드밸런싱)하는 역할
L7 스위치 데이터기반 HTTP헤더, URL, 쿠키 등의 어플리케이션 데이터를 기반으로 한 로드밸런싱, 보안 적용

 

HUB와 스위치의 차이

HUB는 데이터 전송시 연결된 모든 디바이스에 데이터가 디바이스 것인지 물어보고, 알맞은 디바이스에 전달한다.

스위치는 MAC Address를 사용해 한번에 전달한다.

 

세션이란?

세션은 클라이언트와 서버간의 통신이 시작되고 유지되는 동안의 논리적 연결을 뜻한다.

게임 세션을 예로 들면, 세션이 연결되어 있는 동안 플레이어의 상태는 유지되고, 세션이 끊기면 플레이어의 상태는 사라진다.

 

네트워크의 유형

PAN(Personal Area Network) 짧은 거리의 통신에 사용
개인용 네트워크이다.
ex) 블루투스, Zigbee, NFC (교통카드 등) 등
LAN(Local Area Network) LAN 케이블의 최대 도달 거리는 100m 정도의 거리이다.
스위치를 이용해 증폭시켜 묶으면 몇km까지 통신이 가능하다.
ex) 사무실, 집, 학교 등 네트워크
MAN(Metropolitan Area Network) 도시단위 통신망으로 공공기관이나 군부대에서 폐쇄망을 만들때 사용한다.
WAN(Wide Area Network) 광역 통신망으로 도시, 국가, 대륙 간 수백~ 수천 km의 거리이다.
ex) ISP 네트워크, 다국적 기업의 지사 연결 등
Internet 지구급 단위.. 예이! ></

 

대표적인 프로토콜 소개

프로토콜은 굉장히 다양하다.

그중에서 우리가 살펴봐야할 것은 전송 레이어에서 사용되는 TCP와 UDP이다.

이 두 가지 프로토콜의 특성 때문에 그런것이다.

(다른 업계에서는 안정성이 떨어지는 UDP를 사용하지 않지만, 게임의 경우 안정성보다 속도가 중요하기 때문에 UDP 프로토콜에 대해 반드시 알아야 한다.)

🌟 TCP 전송 계층에서 작동하며, 데이터를 보낸 후 수신을 확인한다. (연결유지)
TCP는 전송하는 쪽과 수신하는 쪽이 서로 보완인식을 한다.
그래서 전송하는 쪽이 패킷을 보내면 수신하는 쪽은 패킷을 받아서 응답을 보낸다.
때문에 중간에 손실없이 안정성이 높다.
🌟 UDP 전송 계층에서 작동하며, 데이터를 보내기만 함 (비연결)
UDP는 보내고 끝이다.
받았는지 안받았는지 체크를 하지 않는다.
때문에 안정성은 떨어지지만, 통신이 빠르다는 장점이 있다.
IP 네트워크 계층에서 작동하며, IP주소를 사용해서 패킷을 옮기는 역할로 모든 인터넷의 기반 기술이다.

데이터를 보낼때는 각 계층을 거쳐 점점 데이터가 불어나고, 다시 수신할때 각 계층을 거치며 줄어서 필요한 UserData만 얻게 된다.

 

MAC Address

국제 표준 기구에서 48bit의 주소 체계를 표준으로 설정한 것이다.

ipconfig를 치면 나오는 창에서 “C8-7F-54-52-35-29”에 해당하는 물리적 주소가 MAC Address이다.

해당 주소는 네트워크 카드에 있는 고유한 주소이다.

앞에 24bit는 제조사에 할당하고 뒤의 24bit는 제조사가 디바이스에 할당한다.

때문에 MACAddress는 디바이스마다 중복될 수 없다.

일반적으로 ROM에 탑제되어 보안상의 이유로 고유한 장비를 식별하는데 사용되지만, 메모리에 올라가서 작동하기 때문에 메모리 해킹을 할 수 있어서 완벽하진 않다.

중요한 부분은 고유한 주소 체계로 사용된다는 것이다.

 

IPv4 소개

네트워크 레이어에서는 IPv4를 사용한다.

이미 바닥이 났기 때문에 IPv6라는 128비트 체계를 개발하게 되었다.

( IPv4를 이해하면, IPv6는 쉽게 이해할 수 있고, IPv6보다 IPv4가 더 짧기 때문에 처음 공부하기에 쉬워서 IPv4로 먼저 공부한다고 한다. )

일반적으로 IP주소는 앞자리(예시에서 192에 해당)로 클래스를 나눠서 국가 및 ISP에 할당하였다.

A 클래스 0 ~ 127 (대규모 네트워크) ⇒ 16,777,214개의 호스트 주소, 128개의 네트워크
기본 서브넷 마스크 : 255.0.0.0
B 클래스 128~192 (중규모) ⇒ 65,534개의 호스트 주소, 16,384개의 네트워크
기본 서브넷 마스크 : 255.255.0.0
C 클래스 192~233 (소규모) ⇒ 254개의 호스트 주소, 2,097,152개의 네트워크
기본 서브넷 마스크 : 255.255.255.0
D 클래스 224~239 (멀티케스팅 용으로 잘 안쓰임)
E 클래스 240~255 (연구/개발용)

여러 클래스가 있는데, 보통 C클래스를 사용한다.

A클래스는 대규모 네트워크에 할당되는 경우이다.

C 클래스를 사설 인터넷 사설 IP라고 이야기한다.

왜냐하면, 외부에 누출된다하더라도 너무 많은 중복들이 있기 때문에 고정 아이피로 사용할 수 없기 때문이다.

때문에 B클래스가 실무에서 쓰이는 클래스라고 보면된다.

 

ARP (Address Resolution Protocol)

IP주소가 MACAddress로 변환되어야 사용이 가능할텐데 이때 사용하는 것이 ARP이다.

이 변환하는 과정을 거칠때 ARP가 내부망에 있느냐 외부망에 있느냐에 따라 다르게 작동한다.

내부망일 때 ARP 프로토콜로 해당 IP를 갖고 있는 디바이스로 브로드캐스팅해서 응답이 오는 디바이스에 데이터를 전송한다.
외부망일 때 밖으로 나가야 하기 때문에 게이트웨이를 찾기 위해 ARP 프로토콜을 브로드캐스팅한다.

 

서브넷 마스크

내부망인지 외부망인지 판단하기 위해 도입된 개념이 서브넷 마스크이다.

서브넷 주소가 같다는 것은 내부망에 있다는 것이고, 서브넷 주소가 다르다는 것은 외부망에 있다는 것이다.

 

NAT

한대의 IP 주소를 여러대 디바이스가 나누어 쓸 수 있도록 해주는 것이다.

사설 IP하고 공인 IP 변환하기 위한 의미이기도 하지만, 하나의 아이피를 공유해 사용할 수 있기도 하다.

우리가 사용하는 공유기가 이 NAT를 기반으로 만들어진다.

 

DHCP

A라는 PC가 192.168.0.1이라는 아이피를 사용하다가 접속을 끄면, 해당 아이피를 DHCP로 반환한다.

그러면 DHCP는 남는 아이피를 새로 접속한 클라이언트에 할당해준다.

이걸 동적 아이피 혹은 자동 아이피 할당이라고 한다.

이것도 공유기에서 사용된다.

 

IP 포트

IP 하나에 여러가지 서비스를 구분해서 올리고 싶을 때 사용한다.

0~65535까지의 값을 가지고 있으며, 일반적으로 우리가 서비스를 개발할때 0~1203번까지는 어느 OS에 어느 서비스가 사용하는지 모르기 때문에 사용하지 않는다.

 

0~1203

서버의 기본 서비스로 잘 알려진 대역이다.

HTTP 80
HTTPS 443
FTP 21
SSH 22
SMTP 25
IMAP 143, 993

 

1024~49151

상용 소프트웨어들이 많이 사용하는 포트이다.

즉, 응용 프로그램 또는 서비스로 등록된 대역이다.

 

49152~65535

동적 또는 사설 포트인데, 실제론 잘 사용하진 않는다.

 

공인 IP와 사설 IP의 포트를 변환할 때는 IP와 비슷하게 PAT(Port Address Translation)를 사용한다.

 

DNS (도메인 이름)

공인 IP 주소로 접근을 해야하는데, 해당 IP를 일일히 외우기 너무 힘드니까 도메인을 사용한다.

해석할 때는 왼쪽에서 오른쪽으로 향한다.

Root인 “.”은 생략 가능하고, KR이라면 한국 인터넷 진흥원(KISA)에 있는 krDNS에 질의를 해 테이블에서 확인해서 IP 주소로 변경하면, 클라이언트는 IP주소로 접속하는 방식이다.

 

네트워크 장비 소개

HUB 지금은 많이 안쓰는데, 더 좋은 L2 스위치가 가격이 싸졌기 때문이다.
스위치 MAC Address로 직접 전달.
브로드 캐스팅하는 것보다 선을 직접 연결하는게 더 빠르기 때문에 그리고 가격이 허브보다 더 저렴하기 때문에 스위치로 다 전환된 상태이다.
라우터 다른 네트워크를 연결해시켜주는 것이다.
즉, 네트워크 간 데이터를 전송하는 장치이다.
모뎀 아날로그 시그널을 디지털 시그널로 바꾸거나 디지털 시그널을 아날로그 시그널로 바꾸어서 라우터까지 연결하는 일을 한다.
방화벽 해킹을 방지하기 위해 방화벽이 필수이지만, 방화벽 때문에 초기 네트워크 세팅때 오류가 많이 생기기도 한다.

NAT(Network Address Translation)으로 내부 네트워크의 IP주소를 외부로 노출시키지 않게 하거나 가상사설망(VPN, Virtual Private Network)으로 추적 불가한 접속을 가능케하는 등의 역할을 한다.
VPN 최신 방화벽들은 VPN기능을 모두 포함하고 있다.

IP가 한번 변경되기 때문에 IP 추적이 불가능하게 만들어준다.

하지만 정확한 용도는 내부 네트워크에 붙어서 작업을 해야할 때, 내부 네트워크에 있는 IP를 외부 네트워크에 있는 IP로 변경해주는 것이다.
캐시 서버 웹, Restful API, API 서버로 요청을 하면, 미들웨어를 거쳐 최종적으로 DB에서 데이터를 획득하는데, 동일한 요청과 결과라면 이를 임시로 저장했다가 서버대신 결과를 반환하는 장비이다.

서비스는 그대로 사용하되, 내부망의 트래픽을 줄이는 역할을 한다.
로그인, 공지사항 등에 많이 쓴다.
비용대비 효과가 좋은 장비이다.

 

🌟용어 다시 정리

OSI 모델 (7 network layer) 네트워크 통신을 가능케하는 표준 모델
프로토콜 약속된 통신 규약
TCP 전송 후 데이터를 확인하는 안정성 우선 프로토콜
UDP 전송 후 데이터 확인 없는 속도 우선 프로토콜 (게임에서 많이 이용)
Reliable UDP 안정성과 속도를 동시에 잡기 위한 프로토콜
QUIC HTTP/3에 제안된 UDP 기반의 프로토콜
IP 인터넷 기반 전송 프로토콜
IP Port IP주소와 함께 사용해서 1개의 서버에서 여러 개의 서비스를 제공할 수 있도록 해주는 역할
MAC Address 네트워크 장비에 1개씩 할당된 고유 주소 (ROM에 탑재되어 원칙적으로는 변경불가)
IP4/6 Address 국가별, 지역별, ISP별로 할당된 주소
도메인 이름 사람이 읽고, 쓰고, 기억하기 위한 주소 체계, DNS를 통해서 IP주소로 변환
DNS 도메인을 IP 주소로 변환
DHCP IP주소를 여러대의 디바이스가 공유하게 하는 서버
서버 중앙에서 어떤일을 하는 컴퓨터
DB 서버 데이터베이스로 데이터를 저장하고 읽는 서버
웹 서버 HTTP (80/443번 포트) 서비스를 담당하는 서버
Restful API 서버 JSON 기반의 데이터를 송수신하는 서버
🌟API 서버 Socket 또는 다른 프로토콜 등으로 데이터 베이스의 앞에서 게이트 역할을 하는 서버
방화벽 서버 세션을 제어하기 위한 서버
클라이언트 네트워크에 접속하여 다른 클라이언트와 통신하거나 서버를 사용하는 디바이스

 

🌟 🌟 API서버를 알아야하는 이유!!🌟 🌟

FPS 게임으로 예를 들면, 가장 중요한 부분이 소캣을 통해서 시그널이 빨리 서버로 전달되고, 서버에서는 계산해서 전체로 다시 뿌려주어야 한다.

뿌려줄 때 그때 사용되는 API 서버, 그리고 해당 데이터가 정확한지, 해킹이 없는지 검증하고 그걸 최종적으로 데이터베이스에 넣어주는 역할까지 하는게 API 서버이다.

TCP IP, UDP Sokect을 사용하는 서버를 게임업계에서는 API 서버라고 하고

JSON 기반의 데이터를 송수신하는 서버를 Restful API 서버라고 한다.

구분하지 않고 실무에서는 API 서버라고 하나로 묶어서 말하기도 한다고 하신다.

 

3. 마무리


네트워크부분은 정말 처음이라 너무 낯설다.. ㅋㅋㅋ 그래도 정리를 하다보니 감도 잡히고 우선 용어와 내용만 이해하고 넘어가면 되는 부분인 것 같아서 그래도 다행이라는 생각이 들었다.

 

또.. 팀이 바뀌었는데.. 으아.. 이전조.. 그립따....

 

그래도 여기서도 해내야지.. ㅎㅎ

이번에도 누구보다 열심히 그리고 더 성과있게..! 아쟈!

'프로그래밍 > Unreal 부트캠프' 카테고리의 다른 글

TIL 2025.03.10 기록  (0) 2025.03.12
TIL 2025.03.09 기록  (0) 2025.03.11
TIL 2025.03.07 기록  (0) 2025.03.07
프로젝트 KPT 2025.03.07 기록  (1) 2025.03.07
TIL 2025.03.06 기록  (0) 2025.03.06