개요 및 프로젝트 특징(조건)작년 이맘때에 샀던 도메인의 만료로 인해 갱신도 했으니 가운영 반년, 실제 운영 1년이 넘어가는 시점이다. 약 22회의 기능 추가/수정 으로 인한 Deploy, 와 30번 이상의 hotfix, 그리고 두번의 대규모 리팩터링을 거친 나름 내가 진행해본 프로젝트 중에서 가장 공을 많이 들이고 여러 기술도 적용시켜보며 지속적으로 신경쓴 프로젝트라고 할수 있을것같다. 특징으로는 1. 최소 비용이 목표라 aws 의 프리티어 ec2를 사용중2. 특성상 카페 이용 시간대만 사용자가 몰리고, 트래픽이 증가되는 시간대가 정해져있다. 따라서 AutoScale 을 도입.3. 테스트 상으로 5명의 유저가 분당 150 내외의 GET 요청까지는 무리없이 커버한다. 스프링을 통해 서버를 구축해놓았..
개요자바를 공부하다보면 가비지 컬렉터(GC)에 대해 자주 접하게 된다. 대부분 GC과정이 메모리 관리를 위해 사용된 객체를 해제하고 메모리 관리를 최적화 하기 위해서 여러 세대로 나누어 자주 접근하거나 다른 객체들에 의해 참조되는 객체들은 오래된 세대로 이동하여, 신세대에 비해 해제 빈도를 낮추는 전략을 사용한다. 정도로만 이해하고 있을 수 있는데, 요즘 'JVM 밑바닥까지 파헤치기' 라는 책을 읽으며 GC의 작동 원리는 이보다 훨씬 더 복잡하고 여러 과정을 거쳐서 발전해왔음을 확인할 수 있었다. 따라서 이번 포스팅에서는 용어와 알고리즘을 정리한후에 클래식 가비지 컬렉터의 특성과 종류를 시작으로 ZGC나 쉐넌 도어같은 최신 가비지 컬렉션 기술까지 특성 위주로 설명을 해보려고 한다. 용어 - Stop..
개요자바가 제공하는 메모리 관리는 할당과 해제를 하여 관리해야하는 다른 언어들과는 달리 개발자의 편의성 측면에서 많은 이점을 가져온다. 하지만 그 이면으로 내가 직접 관리를 하지 않기 때문에 GC 과정에 이상이 생길시에 원인을 분석하여 해결해야된다는 점이 있는데 이는 자바가상머신의 메모리에 대해서 알아보면 원인 분석 및 이해가 빨라질수 있다.따라서 이를 구조를 설명하고 구조별로 일어날만한 오류들을 정리를 해보려한다.(고봉밥으로다가) 들어가기에 앞서서 JVM 을 크게 나눠보자면 위에도 언급했던 힙 메모리를 관리하는 가비지 컬렉터, 자바 클래스를 메모리 영역(어디인지는 아래에 나올것이다.) 에 로드해주는 클래스 로더 시스템, JVM의 바이트 코드를 실행하는 실행 엔진으로 기능적 요소가 존재하고 이번에 설명할..
개요이번 블로그 포스트에서는 Wireshark를 사용하여 pc 에서 www.naver.com으로의 네트워크 트래픽 캡처를 통해 TCP와 TLS 통신 시퀀스를 상세히 분석해보겠습니다. DNS 쿼리와 응답TCP 3way handshake (open)TLS client hello & handshake TCP 4way handshake (close) DNS 쿼리 프레임 541클라이언트 A가 DNS 서버 B에 www.naver.com의 A 레코드를 요청www.naver.com에 대한 IPv4 주소를 얻기 위함 프레임 542클라이언트 A가 DNS 서버 B에 www.naver.com의 HTTPS 레코드를 요청도메인 이름에 대한 HTTPS 서비스 정보를 얻기 위함 프레임 543DNS 서버 B가 HTTPS 레코드 요..
개요JVM의 메모리 영역 구성 요소중 하나인 자바가상머신 스택에 대한 이해를 위해 예제를 통해 각 구역에 데이터가 할당되고 해제되는것을 javap 명령어를 통해 알아본다. *해당 포스팅에서 나오는 상수풀은 런타임 상수풀이 아니라 클래스 상수풀이다. JVM이 클래스 로드시에 클래스 상수풀 내의 파일이 런타임 상수풀에 적재된다.실습 코드 준비 및 컴파일public class BytecodeExample { public static void main(String[] args) { int a = 5; int b = 10; int result = addAndMultiply(a, b); System.out.println(result); } publ..
목차 개요JVM의 메모리 구조 이해를 위한 글로 두 메서드의 실행 차이점을 알아본다.Java 9 이전보다 최근들어서는 자바로 쓰인 라이브러리의 종류도 많아져 잘 사용하지 않기에 사용이 적다. 이펙티브 자바에서도 최대한 네이티브 메서드의 실행을 지양하고 있다. 하지만 해당 내용이 JVM 의 구조를 이해하기에 도움이 되기에 간단히 적어본다. 자바 네이티브 인터페이스(Java Native Interface, JNI) -> 자바 프로그램이 네이티브 메서드를 호출하는 기술네이티브 메서드 -> C나 C++같은 네이티브 프로그래밍 언어로 작성한 메서드네이티브 메모리 -> 자바가 실행되고 있는 운영체제의 메모리, 운영체제에 의해 관리되기에 자바 힙보다 확장성이 좋다.*네이티브 메모리는 네이티브 메서드의 실행에만 국..