전체 글 (568) 썸네일형 리스트형 [JVM] GC 알고리즘 종류 이번 장에서는 GC 알고리즘의 종류와 작동 방식, 선정 기준에 대해서 알아본다. GC 알고리즘은 크게 Non Concurrent Collectors와 Concurrent Collectors다. Non Concurrent Collectors에는 아래의 Collector들이 있다. Serial Collector Parallel Collector Parallel Old Collector Concurrent Collectors에는 아래의 Collector들이 있다. Concurrent Mark Sweep Collector (CMS) Garbage-First Collector (G1GC) Z Collector (ZGC) 이번 진행하는 프로젝트에 맞는 Collector를 선정하기 위해 벤치마크를 진행하고 많은 문서.. [JVM] Heap & GC 이번 장에서는 Oracle 공식문서와 여러 블로그들의 글을 정리하면서 Java Heap에 대해서 알아보도록 한다. 먼저 많은 블로그들에 있는 Heap 구조를 살펴보면 아래와 같다. 그림1: Java8 이전의 메모리 구조(출처: https://asfirstalways.tistory.com/158) 그림에서 Permanent영역은 java8부터는 제거되었으며 Class나 Method의 메타 정보들이 Native Memory의 Metaspace영역으로 이동하였다. Native Memory는 Heap 영역의 바깥인 Off-Heap 공간을 의미하며 시스템의 기본 메모리라고 생각하면 된다. Java 어플리케이션은 크게 Heap영영과 Off-Heap 두 공간을 활용하여 동작한다. Off-Heap영역도 Java 어플리.. [JVM] JVM 이란? 이번 장에서는 JVM이 무엇이고 어떤 역할을 하는지 알아보도록 한다. 현재 진행 중인 프로젝트의 JVM을 튜닝하고 GC를 선택하는 과정에서 JVM에 대한 지식이 많이 부족하다는 것을 느껴서 자료들을 정리하는 시간을 가져본다. JVM (Java Virtual Machine) 이란? 위키백과에 따르면 JVM을 아래와 같이 정의하고 있다. 자바 가상 머신은 자바 바이트 코드를 실행할 수 있는 주체이다. 일반적으로 인터프리터나 JIT컴파일 방식으로 다른 컴퓨터 위에서 바이트 코드를 실행할 수 있도록 구현되나 jop자바 프로세서처럼 하드웨어와 소프트웨어를 혼합해 구현하는 경우도 있다. 자바 바이트 코드는 플랫폼에 독립적이며 모든 자바 가상 머신은 자바 가상 머신 규격에 정의된 대로 자바 바이트코드를 실행한다. 따.. [SOLID] 객체지향 설계 5원칙 - LSP LSP (Liskov substitution principle) 자료형 S가 자료형 T의 하위형이라면, 프로그램에서 자료형 T의 객체는 프로그램의 속성을 변경하지 않고 자료형 S의 객체로 교체할 수 있다. 한마디로 객체는 프로그램의 정확성을 지키면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다 라는 말이다. 다형성의 관점에서 보았을 때 하위 클래스는 인터페이스 규약을 전부 지켜야지만 다형성을 지원할 수 있다. 자바에서 자식객체는 부모객체의 모든 속성을 가지고 있으며 부모객체의 확장 버전이기 때문에 가능한 속성이다. 이러한 점 때문에 필자는 상속(inheritance)라는 표현보다 확장(extend)라는 표현을 선호한다. 코드로 예를 들어보자. public abstract class Car { String.. [HTTP] 헤더 - 4 (쿠키) 쿠키의 사용 이유와 사용법에 대해서 알아본다. 하이퍼 텍스트의 기록서(HTTP)의 일종으로서 인터넷 사용자가 어떠한 웹사이트를 방문할 경우 그 사이트가 사용하고 있는 서버를 통해 인터넷 사용자의 컴퓨터에 설치되는 작은 기록 정보 파일을 일컫는다. HTTP는 무상태 (Stateless) 프로토콜이므로 클라이언트와 서버가 요청과 응답을 주고 받으면 연결이 끊어진다. 클라이언트가 다시 요청을 시도할 때 서버는 이전 요청에 대한 정보를 알지 못한다. 이러한 무상태성의 취약점을 보완하기 위하여 쿠키를 사용한다. 만약 쿠키를 사용하지 않고 요청을 한다면 모든 요청의 query parameter나 request body에 사용자 정보가 추가되야한다. GET /car?user={사용자 정보} HTTP/1.1 POST .. [HTTP] 헤더 - 3 (일반 정보) HTTP 헤더의 일반적인 정보에 대해서 알아본다. From 유저 에이전트의 이메일 정보를 표시한다. 검색 엔진등에서 주로 사용된다. 요청시에만 사용된다. 일반적으로는 잘 사용되지 않는다. Referer 현재 요청된 페이지의 이전 웹 페이지 주소를 나타낸다. 클라이언트의 유입 경로를 알기위해서 주로 사용된다. (티스토리의 유입 경로도 이 헤더를 기반으로 수집하려나..) 요청시에만 사용된다. referer은 referrer의 오타이다. User-Agent 유저 에이전트 애플리케이션 정보를 표시한다. 클라이언트가 요청시에 사용한 애플리케이션의 정보를 나타낸다. 통계 정보나 장애가 발생하는 특정 브라우저를 찾기위해서 사용된다. 요청시에만 사용된다. Server 요청을 처리하는 ORIGIN 서버의 소프트웨어 정보.. [HTTP] 헤더 - 2 (전송 방식) HTTP 전송 방식에 대해서 살펴본다. 단순 전송 (Content-Length) 요청 GET /car응답 HTTP/1.1 200 OK Content-Type: text/html;charset=UTF-8 Content-Length: 4000 body... 압축 전송 (Content-Encoding) 요청 GET /car응답 HTTP/1.1 200 OK Content-Type: text/html;charset=UTF-8 Content-Encoding: gzip Content-Length: 2000 eyJzdWIiOiJzYWxseUBpbWFzbGFiLmN...분할 전송 (Transfer-Encoding) 요청 GET /car응답 HTTP/1.1 200 OK Content-Type: text/plain Tran.. [HTTP] 헤더 - 6 (조건부 요청) 효율적인 캐싱을 위한 조건부 요청에 대해서 알아본다. Last-Modified (데이터가 마지막에 수정된 시간)을 이용 요청 GET /car.jpg응답 HTTP/1.1 200 OK Content-Type: image/jpeg Content-Length: 40000 cache-control: max-age=60 Last-Modified: 2021-06-25 10:00:00 eyJzdWIiOiJzYWxseUBpbWFzbGFiLmN...첫 번째 요청에서 클라이언트는 응답 결과, 캐시 유효 시간, 마지막 수정 일시를 저장한다. 61초 후에 재요청 GET /car.jpg if-modified-since: 2021-06-25 10:00:00이때, 로컬에 저장되어 있는 클라이언트의 캐시 유효 시간은 60초이므로 서버.. 이전 1 ··· 65 66 67 68 69 70 71 다음 목록 더보기