<발단>
- Socket 서버 방에 들어가서 개발자들과 이야기하다가, 내 지식과 그들의 지식이 많이 다른걸 깨달았다.
- 단순히 내가 많이 몰라서 그런가보다 싶었던 것들이, 사실 전문성이 아예 다름을 인지하고 글을 쓴다.
<설명>
[Socket Server]
- 프로그래머가 하는 일
* TCP/IP, UDP/IP Socket을 직접 다루거나, 그것을 직접 다루는 엔진을 사용한 프로그래밍
- 특성
* OS Socket api를 이용한 Server. 이러한 api에 멀티 스레드, 메모리 관리 등 module을 붙여 Server를 제작.
* Socket Server가 Http Web Server를 포함함. Server가 원할 때 Client에 Packet을 보내거나, Packet 내용을 원하는대로 지정 가능.
* 커넥션 풀을 직접 관리.
* IP, Network Layer 인 OSI 3 Layer && TCP,UDP 등 Transport Layer 인 OSI 4 Layer.
* Server 유입량이 많아지면 안 터질 정도로 caching하고 자르면 됨. Web Server는 못 막고 터짐.
* 최적화에 더 많은 자유도가 있으나, Packet 유실 및 암호화 방식 등을 신경 쓸 게 많음
* Server 자체 메모리에 유저 data를 들고 처리 가능
* MMORPG나 FPS 등 실시간성이 중요한 게임 개발에 사용
* 주로 Multi-Thread 로 개발
* 메모리에 들고 있음 + Multi-Thread ==> 잘못 다루면 망함
* 최적화 = Server 머신 1대 당 몇 명의 동시 접속자 처리가 가능한가? == Cost
* 수평 확장 어려움. 직접 CAP 중 일부 컨셉을 차용해 개발할 수 있지만 충분한 cost, time, 기술이 필요
[Web Server]
- 프로그래머가 하는 일
* Apache, Node,js, iis 등 web server 프로그램을 띄우고, 그 내부의 Contents 작업을 함
* 모든 Request는 web request로 들어오며, routing 된 address가 각각의 함수, 인자가 됨.
- 특성
* Web Server는 browser의 범용성에 맞춰 암호화, resource 경로, 방식 등을 미리 정해놓은 http를 씀. Socket Server에 비해 자유도가 매우 낮음. (Socket Server는 일반 e-mail. Web Server는 양식을 갖춰야하는 공문.)
* 모든 Request 마다 별도로 Connection을 맺고 끊는 방식. Web request와 동일
* Application Layer 인 OSI 7 Layer. (http 소스 안에서 tcp socket을 하부 호출(4 Layer))
* Server 자체의 메모리에 유저 데이터를 들고 있지 않도록 개발 (수평 확장 때문)
* 보통 실시간성이 적은 게임개발에 사용
* 매번 Connection 맺음 + 메모리에 없음(항상 DB를 거침) ==> 상대적으로 성능이 느림.
* 수평 확장이 비교적 용이. 메모리에 없기에 그냥 Web Server를 여러대 띄우는 걸로 Load Balancing
* 성능, 실시간처러 보이는 처리를 위해 각종 middle-ware를 공부하고 사용해야 함.
* Caching 하려고 redis 씀
* 내부 요청에 대한 완벽한 보장을 하기 위해 Kafka 사용
* 여러 Web Server의 log를 잘 모아 처리하기 위해 MongoDB를 쓰기
<출처 3> https://elky84.github.io/2019/03/17/game_server_develop_difference_web_server_develop/
<출처 4>
'Programing > Knowledge' 카테고리의 다른 글
[Knowledge] Polyglot in Programming (0) | 2022.08.18 |
---|---|
[Knowledge] Overhead in C.S (0) | 2022.08.14 |
[Programing] Localization 이란? (0) | 2022.07.31 |
[Programing] Application 이란? (0) | 2022.07.30 |
댓글