반응형

서버 프로그래밍 24

[서평] 가상 면접 사례로 배우는 대규모 시스템 설계 기초 2

이 시리즈의 1권이 인상 깊어서 바로 구매하여 보게된 2권입니다. 2권에서는 근접성 서비스, 주변 친구, 구글 맵, 분산 메시지 큐, 지표 모니터링 및 경고 시스템, 광고 클릭 이벤트 집계,호텔 예약 시스템, 분산 이메일 서비스, S3와 유사한 객체 저장소, 실시간 게임 순위표, 결제 시스템, 전자 지갑, 증권 거래소 등을 다루고 있습니다. 1권처럼 인터뷰용이라고 하나 인터뷰 관련 내용은 간략한 요구조건 정의 정도라고 볼 수 있고 나머지는 개략적인 설계에 대해서 나와 있습니다. 개략적인 설계를 설명하면서 핵심 알고리즘은 좀 더 자세히 설명하는 형식을 취하고 있습니다. 책의 내용은 글로벌 빅테크 기업들의 백엔드 서비스를 어떻게 만드는지를 잘 설명하고 있는 듯 합니다. 책의 내용이 대규모 시스템을 대상으로 ..

[서평] 가상 면접 사례로 배우는 대규모 시스템 설계 기초

시스템 설계 면접 관련이라고 해서 면접 형식의 책인줄 알았습니다. 하지만 실제로는 면접 관련 내용은 일종의 기술적 요구사항 파악 정도 입니다. 그리고 나머지는 해당 문제에 대한 기초적인 설계와 설명을 담고 있는 책입니다. 웹이나 앱 서비스의 백엔드 시스템 관련 내용을 다루고 있습니다. 읽고 난 후의 전반적인 느낌은 백엔드 개발자에게 많은 도움이 되는 책인 듯 합니다. 내용은 신입이나 초보가 보기에는 조금 어려울 수도 있습니다. 키-값 저장소, 분산 시스템을 위한 유일 ID 생성기, URL 단축기, 웹 크롤러, 알림 시스템, 뉴스 피드 시스템, 채팅 시스템, 검색어 자동 완성, 유튜브, 구글 드라이브 설계 등 각종 서비스나 기능에 대한 설계를 담고 있습니다. 상세한 설계라기보다는 큰 그림으로 보는 개괄적인..

쓰레드 풀에서 CPU 사용량 줄이기

쓰레드풀에서 흔하게 사용되는 방법이 워커 쓰레드를 N개 생성하여 놓고 공유하는 작업 큐에서 데이터를 받아와 워커 쓰레드에서 실행하는 방법입니다. 이 때 작업 큐가 비었을 때 워커 쓰레드를 재워주는 처리를 해주지 않으면 CPU 사용량이 올라가게 됩니다. sleep을 해주는 것도 재운 시간에 작업 큐에 데이터가 들어왔다면 그 만큼 워커 쓰레드에서 늦게 실행하게 되어 재우는 시간도 민감하게 설정하여야 합니다. 이 때 사용할 수 있는 방법이 작업 큐에 조건 락(conditional lock)을 사용하는 것입니다. 이 방법을 바탕으로 작업 큐가 비어 있을 때만 워커 쓰레드를 재우고 작업 큐에 데이터가 들어왔을 때는 깨울 수 있습니다. 이 방법은 워커 쓰레드의 사용성은 높이면서 CPU 사용량을 줄이는 방법입니다. ..

성능 향상하기: IO 관련 처리 vs CPU 관련 처리

IO 관련 처리란 파일 처리, 소켓 처리와 같이 용어 그대로 IO 관련 처리를 말합니다. CPU 관련 처리란 연산 관련 처리를 말합니다. 이 둘의 처리에 대해서 말하는 이유는 이 둘을 구분하여 현재 프로그램을 보는 것이 성능을 크게 향상 시킬 수 있기 때문입니다. IO 관련 처리와 같은 경우 관련 IO API를 호출한 뒤에 API내에서 IO처리를 하는 동안 CPU가 노는 경우가 생길 수 있습니다. 이런 경우 성능을 올리기 위해서는 비동기 IO를 사용하거나 IO쓰레드를 만들어서 비동기적으로 처리하여 CPU가 노는 시간을 줄여 성능을 올릴 수 있습니다. CPU 관련 처리와 같은 경우 성능 좋은 알고리즘을 사용하여 연산을 줄이거나 멀티프로세스 프로그래밍을 활용하여 성능을 올릴 수 있습니다. 흔히 하는 실수가 ..

폴(Poll) 방식의 네트워크 처리 구현

폴(Poll) 방식의 네트워크 처리란 쉽게 말하여 주기적으로 소켓에 데이터가 왔는지를 체크하고 처리하는 방식입니다. 보통 처리 방식을 슈도 코드로 나타내면 아래와 같을 것입니다. while(true) { bool data_recieved = 소켓에 받은 데이터가 있는지 체크(); if (data_recieved) { 소켓 데이터 처리(); } 소켓처리 외의 로직(); } 이런 방식을 사용하는 이유는 네트워크 처리 외의 로직을 네트워크 처리 쓰레드에서 함께 하기 위함입니다. 물론 이런 폴(Poll) 방식를 사용하지 않고 네트워크 처리 쓰레드와 네트워크 처리 외의 로직 쓰레드를 분리하여 처리하고 양쪽 쓰레드들에서 사용하는 공유 객체와 같은 경우 동기화 처리를 할 수도 있습니다. 이런 폴(Poll) 방식을 이..

boost asio io_service(io_context)의 poll과 run의 활용

boost asio io_service(io_context)를 통하여 이벤트를 호출하는 방식은 크게 poll과 run으로 나눈다고 할 수 있습니다. 간단히 두 방식을 살펴보면 아래와 같습니다. poll은 이름 그대로 poll방식으로 이전 poll 호출 후 쌓인 socket 이벤트를 실행하고 제어권을 함수를 호출한 쪽에 넘깁니다. run은 socket 이벤트를 실행하고 제어권을 함수를 호출한 쪽으로 넘기지 않고 다음 이벤트를 기다립니다. poll로 run을 구현한다고 한다면 아마 아래와 같은 코드가 될 것입니다. while(true) { poll(); } 서버에 연결하는 클라이언트에서 사용된다면 아마도 poll이 좋은 선택이 될 것입니다. 문제는 서버와 같은 경우는 이 두가지 중 어느 방식을 사용할지는 서..

boost asio io_service(io_context)의 이해 및 활용

boost asio에서 io_service(io_context)는 객체의 이벤트 처리를 담당합니다. 이 객체는 좀 더 자세히 보면 실제적으로 socket과 바인드 되어 socket의 이벤트 처리를 담당합니다. 이 객체는 OS kqueue, /dev/poo/, epoll, iocp와 같은 비동기 socket IO나 select와 같은 동기 IO를 해당 객체를 호출한 쓰레드에서 이벤트를 처리하도록 직렬화합니다. 이를 활용하는 방법을 살펴보겠습니다. io_service(io_context)는 socket에 바인드 되는 관계로 socket 이벤트 처리 그룹을 만들 수 있습니다. io_service1(io_context)에는 socket1, socket2를 바인드하고 io_service2(io_context)에는..

[서평, 소개] 클라우드 디자인 패턴(Cloud Design Patterns)

Cloud Design Pattern은 MS에서 나온 책자로 NoSQL을 활용한 최신 트랜드의 모바일용 서버를 만드는 다양한 패턴들에 대한 설명을 하고 있습니다. 패턴이라는 표현을 썼는데 우리가 흔희 아는 GOF의 Design Pattern처럼 코딩에 대한 이야기라기 보다는 좀 더 큰 범위의 모바일 서버 구성 요소에 대한 알고리즘에 관한 책이라고 보시면 될 듯 합니다. 최신 트랜드를 담고 있는 책인 관계로 CQRS, Materialized View, Event Sourcing 등등 최근에 논의되고 있는 많은 모바일 서버 디자인들에 대한 설명을 담고 있습니다. 참고로 이 중 상당수의 내용은 NoSQL 기반의 패턴입니다. 책 자체는 전반적으로 조금은 거대 시스템에서 사용할 만한 기술들에 대한 이야기가 많은데..

[서평, 소개] NoSQL

NoSQL은 이미 모바일 개발에는 흔한 개발 솔루션 중에 하나이다. 몽고DB, Redis 등등 이미 몇 년전까지는 신기술이라고 불리던 것들은 어느세 자리를 잡아가는 형세이다. 이는 NDC등 각종 컨퍼런스에서 고생하면서 튜닝하거나 부족한 많은 툴들을 만든 발표만 보아도 그렇게 느껴집니다. 솔직히 NoSQL은 Key-Value로 이루어지는 해쉬 자료 구조 및 JSON 포맷, 분산처리를 위한 샤딩 처리, 적절한 사용을 위한 CAP 정도를 이해하고 있으면 그 다음부터는 어떻게 사용한 것인가를 고민하면 된다고 봅니다. 이런 NOSQL을 아직 해보지 않았지만 알아야 하고 어떻게 기본 개념을 잡을까가 고민이라면 짧고 간략하게 잘 설명한 아래 책을 소개할까 합니다. 2명의 공저가 작성한 책으로 그 중 한명이 리팩토링책..

라인 레인저스(Line Rangers) 서버 구조 소개

라인 레인저스는 라인쪽에서 만든 위와 같은 형식의 게임입니다. 조금 된 글이기는 하지만 라인 레인저스에 대한 기본 서버 구조에 대해서 잘 설명한 글이 있어서 소개할까 합니다. 모바일 서버는 온라인 게임보다 사용 기술의 폭이 넓어서 워낙 다양한 기술을 사용하기에 어떤 것이 정석이라고 말하기는 힘들지만 기본 골격 잡을 때 참고 자료로는 훌륭한 듯 합니다. 라인 레인저스 서버와 같은 경우는 MySQL, Redis (Cache) 그리고 Tomcat을 사용한 것으로 보아 Java쪽 Http 관련 기술을 사용한 듯 보입니다. [LINE Rangers 신입사원의 서버 분석기] - 서버 구조 및 인프라 환경 LINE Rangers 게임 클라이언트/서버 아키텍쳐 세미나 PPT 뒤에는 서버 관련 내용이 있는데 대부분 위 ..

[서평] 온라인 게임 서버 프로그래밍 (MMORPG서버 관련 책)

이 책을 보는 느낌을 말하자면 저자분이 한 프로젝트를 인수인계 받는 느낌이 강하다. 책을 읽으려면 기초적인 소켓프로그래밍, C프로그래밍 그리고 DB프로그래밍 지식이 필요하며 MMORPG 게임을 즐긴 경험이 필요하다. MMORPG에 대한 설명없이 해당 지식을 안다는 가정하에 특정 부분을 설명하고 있으며 코드 설명이라기 보다는 코드 속에 미쳐 써놓지 않은 주석을 설명이라고 표현하는 듯 보이기 때문이다. 이 책은 내용 설명보다는 코드 분석 스타일로 읽어야 하기 때문에 읽는데 시간이 꽤 걸린다. 하지만, 다 읽고 나면 대충 MMORPG 서버 프로그래밍의 큰 틀에 대하여 이해할 수 있다는 것이 장점이다. 말은 MMORPG 서버 프로그래밍 이지만 결국은 게임 로직을 서버에서 처리하는 모든 경우에 응용할 수 있는 기..

NAT(Network Address Translation)의 역활

NAT(Network Address Translation)란? 우리가 일반적으로 인터넷 공유기라고 부르는 기계에서 하는 일로 사설IP를 사용하는 내부의 네트워크 기기(PC등등)들이 하나의 공유IP(Public IP)를 공유하도록 하여 N개의 Public IP로 N개 이상의 사설IP를 가진 기기들이 인터넷을 사용할 수 있도록 한다. 3 가지 모드 static Public IP와 Private IP를 매핑시킴 pooled 사용가능한 Public IP들을 풀(pool)로 가지고 있어 이들 중 하나를 필요에 따라 Private IP와 매핑 시킴 PAT (Port Address Translation) IP주소를 매핑하듯 Port를 매핑하여 Public IP에서의 Port활용성을 높임. PAT를 안할 경우 내부 I..

TCP Protocol MindMap

FreeMind 0.8.1로 만든 TCP 마인드맵입니다. 처음에는 공부한거 나중에 문서 일일이 찾기 싫어서 나중에 부분적으로 찾아보기 위하여 작성한 것인데, 만들다 보니 3363x3180 size의 이미지 크기로 커져버렸군요. 솔직히 이거 만드는데 거의 한달 걸렸습니다. 처음 의도는 기존의 알고있는 지식의 복습과 몇가지 헷갈리는 부분에 대해서 찾아보는 거였는데 RFC 문서와 Wikipedia 영문판 TCP관련 내용들 찾다보니 공부시간이 무한정 늘어나 버렸네요. 그래도 그동안 추상적으로 부분 부분 이해하던 TCP 메카니즘이 완전히 머리속에 들어온게 보람이라면 보람이겠네요. TCP의 메카니즘을 뿐아니라 MSDN에서 API같이 찾다보니 Window의 TCP구현에 대한 특징도 보이고 소켓관련 FAQ의 내용도 읽..

대역폭 지연 곱 (Bandwidth-delay product)

이글은 Wikipedia의 Bandwidth-delay product을 요약한 것입니다. 대역폭 지연 곱이란? 쉽게 말하여 선로의 최대 처리량을 말하는 것으로 주어진 시간에 최대로 선로에 있는 데이터량을 말합니다. 좀 더 쉽게 설명하자면 데이터를 보냈는데 상대편에서는 아직 안받은 상태인, 선로에서 이동 중 일 수 데이터의 최대양을 말합니다. 계산단위는 초당 비트 혹은 바이트입니다. 어디에 쓰는 물건인고? TCP와 같이 신뢰성 있는 프로토콜에서 중요한데, 이유는 데이터를 보냈는데 ACK를 받지 않아 메모리에 있을 수 있는 데이터 최대 양과 비교될 수 있기 때문입니다. (에러시 TCP와 같은 경우는 Retransmission등을 처리해야 하기 때문에 메모리 버퍼에 가지고 있어야 합니다.) 덧붙이면, 윈도우 ..

반응형