서버

· 서버
C++에서 메모리 동적할당에 사용하는 malloc 함수나 new 연산자 같은 경우, 몇가지 문제가 존재한다. 다양한 메모리 사이즈들이 할당, 해제되면서 연속적인 메모리 공간이 부족해지는 메모리 파편화 문제나, 반복되는 할당+해제에 의한 성능저하를 생각해 볼 수 있다.메모리 풀(Memory Pool)을 이용하면 이런 문제들을 어느정도 해결할 수 있다.메모리 풀은 큰 사이즈의 메모리 블록을 미리 할당하여 malloc, new 연산자와 유사한 메모리 동적 할당을 가능하게 해준다. 큰 사이즈의, 연속적인 메모리 블록을 미리 할당하기 때문에 파편화를 어느 정도 해결할 수 있고, 사용한 메모리 공간을 해제하는 것이 아닌 재사용하는 방식이기 때문에 퍼포먼스 향상을 기대할 수 있다 고려사항구현 방법은 정말 다양하다. ..
· 서버
앞서 Spring은 기본적으로 멀티스레드 방식, Thread Pool에서 하나의 요청에 하나의 쓰레드를 배정하는 방식으로 작동한다. 이와 다르게 Javascript 런타임 중 하나인 NodeJs는 싱글스레드 방식으로 작동한다. 따라서 둘의 특징과 차이점을 공부해 본 내용을 정리해보았다. JavaScript 동작원리 JavaScript를 사용하면서 흔하게 접하는 것이 콜백(Callback)함수 개념이다. 주로 비동기 작업(Ajax, Timer)에 콜백함수를 연결하여 해당 콜백함수를 통해 비동기 작업의 결과를 통지받는 식으로 작성된다. 이처럼 Javascript에서는 비동기 작업마다 콜백함수를 대응하여 생각하게 된다. JavaScript의 특징은 크게 두가지이다. 싱글스레드와 비동기 논블로킹 I/O 이다. ..
· 서버
가장 많이 쓰이는 서버 프레임워크 중 하나인 Spring 프레임워크에 대해 알아보았다. 본 글은 완벽하게 Spring 프레임워크의 구조를 분석하기 보다는 다른 프레임워크와의 차이점, 특징등을 파악하기 위해 작성되었다. Spring 프레임워크 JAVA 기반의 오픈 소스 어플리케이션 프레임워크이며 주로 동적 웹 프로그래밍에 많이 쓰인다. 사용작 많은 오픈소스이기 때문에 규모가 매우 크고 대부분의 기능들이 개발되어 있다는 장점이 있다. 그 외에 특징은 특징 객체를 Bean이라는 인터페이스로 직접 관리한다. - 여기서 우리가 흔히 아는 Ioc(Inversion of control), DI(Dependancy Injection)이라는 개념이 사용된다. 기본적으로 Multi Thread 방식을 사용한다. - 사실 ..
· 서버
멀티스레드를 이용하는 서버 엔진을 설계해보면서 각 유저 세션의 송신버퍼(SendBuffer)를 불가피하게 Lock으로 관리해야 했다. 현재 구조에서는 문제가 없지만 나아가 Deadlock이나 Lock에 의한 성능 저하가 걱정되어 락 프리(Lock-Free) 알고리즘에 대해 공부해보았고 이를 정리해보았다. 락 기반 알고리즘의 문제점 Mutex, Semaphore나 를 이용한 Lock을 통해 멀티스레드를 관리할 때에는 Lock을 획득하지 못한 스레드는 Lock을 획득한 스레드가 해당 Lock을 Release 할때까지 대기상태에 머물러야 한다는 단점이 있음. 또 DeadLock과 같은 예상하지 못한 문제가 발생할 수도 있다. 한마디로 일반적으로 Lock 사용 시 공유 메모리에 접근하는 멀티쓰레드가 많아질수록 ..
· 서버
이어서 소켓 통신에 대해 알아보기 전에, 우선 I/O 하면 자주 나오는 Synchronous/Asynchronous 와 Blocking/NonBlocking을 먼저 정리하고 넘어가도록 하자. 문서는 네이버 클라우드 플랫폼에서 작성한 게시글을 참고하였다! Synchronous/Asynchronous 와 Blocking/NonBlocking #Synchronous, 동기 I/O 요청 - 응답 작업이 일련의 순서를 따름. 작업의 순서가 보장됨. 작업 완료를 user space에서 판단. #Asynchronous, 비동기 kernal에 I/O 작업을 요청해두고 다른 작업 처리가 가능하나, 작업의 순서는 보장되지 않음. 작업 완료를 kernal space에서 통보. #Blocking, 블로킹 요청한 작업이 모두 ..
· 서버
네트워크 프로그래밍을 공부하고 서버 엔진 구조를 짜보면서 공부한 필수 내용들을 정리해보았다. 물론 이 문서는 Windows 기반으로 winsock 라이브러리를 이용하여 진행되었다. 소켓 통신 소켓통신에 앞서, 소켓(Socket)이란 프로세스(어플리케이션 계층)에서 네트워크 프로그래밍을 사용하기 위한 인터페이스 정도라고 생각하면 된다. 흔히들 TCP, UDP라고 하는 전송 계층(Transport Layer)과 프로그래머가 개발하고자하는 응용 계층(Application Layer) 사이의 인터페이스로 소켓을 이용하면 간단하게 네트워크 프로그래밍을 할 수 있다. TCP vs UDP 위에서 말했듯이 전송 계층의 TCP와 UDP 프로토콜에 대해 간단하게 정리해보면 TCP 연결 지향 방식으로 패킷을 교환 - 논리적..
멍텅구링
'서버' 카테고리의 글 목록