본문 바로가기
Programing/Knowledge

[Knowledge] Web 서버 vs Socket 서버 차이 [업데이트 예정]

by 꾸압 2022. 8. 6.

 

<발단>

  - 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를 쓰기

 

 


 

<출처 1> https://gamecodi.com/4664/%EC%9B%B9%EC%84%9C%EB%B2%84-vs-%EC%86%8C%EC%BC%93%EC%84%9C%EB%B2%84-%EB%91%98-%EC%B0%A8%EC%9D%B4%EA%B0%80-%EB%AD%94%EA%B0%80%EC%97%AC

<출처 2> https://www.masterqna.com/android/23415/socket-%ED%86%B5%EC%8B%A0-vs-http%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C-%EC%9B%B9%EC%84%9C%EB%B2%84-%ED%86%B5%EC%8B%A0

<출처 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

댓글