Java (54) 썸네일형 리스트형 [JVM] Garbage Collection 개념과 동작원리 개요GC(Garbage Collection)는 왜 필요할까?C나 C++로 작성하는 프로그램은 개발자가 직접 동적으로 할당된 메모리 영역에 대한 해제를 해줘야했다. 이렇게 런타임중에 할당한 메모리 영역을 사용하고 필요없어졌을때 정상해제가 안된다면, 메모리 누수가 발생해서 프로세스가 OS로부터 할당받은 메모리 영역이 고갈된다. Java에서는 필요없게된 Heap 영역의 객체를 자동을 해제해주고 개발자는 로직 작성에만 신경쓸수 있도록 개발하였다. 이러한 작업을 수행하는 주체는 Garbage Collector라하며, 사용이 끝나 필요없는 쓰레기(garbage) 객체를 회수(collection)하는 작업이라서 GC(Garbage Collection)라고 부른다. GC의 장점개발자의 실수로인한 메모리 누수를 방지할.. [Java] WAS의 Keep-Alive 구현 후 적용/미적용 성능 테스트 비교 Keep-Alive 구현 개요사전 질문: 왜 Keep-Alive를 구현했나?WAS의 Keep-Alive 구현 - TCP 연결과 해제 비용 줄이기에서 내가 개발한 WAS에 Keep-Alive(persistent connection) 기능을 추가해서 구현하였다. 일단 나는 WAS의 초기 모델을 구현했을때, HTTP Keep-Alive에 대해서는 이론적으로만 어느정도만 알고 있었다. 실제로는 어떻게 동작하는지는 몰랐었다. 내가 개발한 WAS를 크롬 브라우저로 테스트하기위해서 index.html파일을 GET 요청해보았다. 해당 index.html파일은 8개의 이미지 페이지 로딩이 필요했다. Hello Client! 크롬 브라우저로 요청을 날려보니, WAS에게 .. [Java] WAS의 Keep-Alive 구현 - TCP 연결과 해제 비용 줄이기 문제 발생 시나리오 이제까지 내가 구현한 초기 웹서버 모델은 하나의 TCP 연결에 대해서 하나의 요청을 처리하는 구조이다. 일단 나는 WAS의 초기 모델을 구현했을때, HTTP Keep-Alive에 대해서는 이론적으로만 어느정도 알고 있었다. 실제로는 어떻게 동작하는지는 몰랐었다. 내가 개발한 WAS를 크롬 브라우저로 테스트하기위해서 index.html파일을 GET 요청해보았다. 해당 index.html파일은 8개의 이미지 페이지 로딩이 필요했다. Hello Client! 서버의 요청 처리 결과크롬 브라우저로 요청을 날려보니, WAS에게 요청하기 위해서 병렬로 최대 6개의 연결을 맺는것을 로그로 확인하였다.아래는 클라이언트와 연결된 소켓 6개에 대한 로.. [Java] WAS의 HTTP 버전에 따른 확장성 구현 (2): 요청 메세지 파싱 객체 설계 내가 직접 구현중인 WAS의 HTTP 버전을 공통으로 처리하는 구조에서 요청 메세지의 파싱하는 객체를 설계하고 적용할려고한다. 이때 해당 객체를 설계하고 적용할려는 과정에서 겪게되는 문제를 해결하는 과정을 쓴 글이다. 공통의 구조로 여러 HTTP 버전을 처리할수 있다면, 재사용성과 확장성이 확보되어 유지보수하기 좋을것이다. 여기서 각 객체의 역할은 공통적이어야 한다. 이때 인터페이스를 정의하고 구현체를 외부에서 주입(Dependency Injection)하여, 객체 간의 결합도를 낮추고 코드의 유연성 및 재사용성을 높일수 있다.1. HTTP 버전에 따른 파싱 로직 파악하기WAS의 HTTP 버전에 따른 확장성 구현 (1) - HTTP1.1과 HTTP2.0의 메세지 전송 포맷과 방식 차이 이해에서 HTTP/.. WAS의 HTTP 버전에 따른 확장성 구현(1) - HTTP1.1과 HTTP2.0의 메세지 전송 포맷과 방식의 차이 이해 1. HTTP/1.1과 HTTP/2.0의 메세지 전송 포맷의 차이HTTP/1.1과 HTTP/2.0은 메세지의 전송 포맷과 방식이 다르다. 텍스트 기반의 HTTP/1.1 메시지 포맷HTTP/1.1에서 메세지는 텍스트 기반 메세지이며, header와 body를 CRLF(\r\n)으로 구별한다. 따라서 HTTP/1.1 메세지를 전달 받은 웹 서버는 텍스트 단위로 파싱을 수행해야한다. 바이너리 프레임 기반의 HTTP/2.0 메시지 전송 포맷과 헤더 압축반면, HTTP/2.0에서는 메세지가 바이너리 프레임 단위로 나뉘어 전송되며, header frame와 data frame으로 구분된다. 따라서 바이너리 형식으로 인코딩된 프레임을 전달받은 웹서버는 바이너리 디코딩을 해서 파싱을 해야한다. 그리고 HTTP/1... [Java] 6. HTTP 웹 서버 구현 - 중간 회고 다음 글은 1. HTTP 웹 서버 구현 - 클라이언트 요청과 처리부터 5. HTTP 웹서버 구현 - HTTP API 처리까지, '웹서버에 대해 잘 모르는 상태에서 HTTP 웹서버를 어떻게 개발했는지'와 '좋은 코드를 작성하기 위한 고민하고개선했는지' 회고를 해볼려고한다.개발해본적 없는 프로그램의 구현과 학습 과정1. 얄팍하게 파묻쳐 있는 개념의 인지나는 웹서버에 대해 잘 모르는 상태에서 구현함으로써, 시작부터 어려움이 꾀나 있었다. Spring 생태계도 김영한님의 스프링-입문-스프링부트 강의만 공부한 상태였다. 그래서 1. HTTP 웹 서버 구현 - 클라이언트 요청과 처리의 내용에서 볼수 있듯이, 최대한 간단하게 구현하고자 클라이언트 요청을 받고 "Hello Client!" 를 응답하는 기능부터 구현하.. [Java] 5. HTTP 웹서버 구현 - HTTP API 처리 3. HTTP 웹 서버 구현 - HTTP 요청 데이터 처리과 4. HTTP 웹서버 구현 - HTTP 응답 데이터 처리에서 HTTP의 요청 데이터를 처리하는 HttpRequest와 HTTP 응답 데이터를 처리하는 HttpResponse를 구현하였다. 이제 위의 그림에서 요청에 부합하는 HTTP API 처리 로직을 구현해야한다. 2. HTTP 웹서버 구현 - 요청에 대한 응답 처리와 책임 분리의 내용을 상기 시켜보면, 클라이언트의 요청에 부합하는 HTTP API를 처리하는 책임을 RequestHandler 클래스가 지게될것은 분명했었다. 따라서 요청에 부합하는 HTTP API를 처리하는 책임을 분리시킬필요가 있다.HTTP API란?HTTP API()는 Application 계층간의 프로그램에서 HTTP .. [Java] 4. HTTP 웹서버 구현 - HTTP 응답 데이터 처리 2. HTTP 웹서버 구현 - 요청에 대한 응답 처리와 책임 분리에서 클라이언트의 요청 처리하는 객체의 책임을 분리를 다음과 같이 하였다. HTTP 요청 데이터 처리는 3. HTTP 웹 서버 구현 - HTTP 요청 데이터 처리에서 작성하였고, 다음으로 HTTP 응답 데이터를 처리를 담당하는 HttpResponse 객체를 구현할려고한다.HTTP 응답 데이터 생성HTTP 응답 메세지의 데이터를 어떻게 만들것인가?HTTP 응답 메세지는 다음과 같은 포맷이다. HTTP 응답 메세지는 크게 Status Line, Response Headers, Response Message Body 구조로 분리할수 있으며, 각 구조의 여러 요소들이 존재한다. 그러므로 다음 3가지 구조를 객체로 다루어서 HTTP 응답 데이터를 .. 이전 1 2 3 4 ··· 7 다음