[Util] Jackson의 특징과 POJO의 직/역직렬화 과정
·
개발일지/CS
What is Jackson? Jackson은 자바 객체와 JSON 사이를 통역해주는 JSON 라이브러리입니다. (JSON Java class) Jackson은 단순히 JSON을 직렬화, 역직렬화 등의 변환을 위한 것 뿐만 아니라 어떤 데이터 포맷이든 자바 객체로 유연하게 다룰 수 있는 엔진으로, 모듈만 갈아 끼우면 XML, YAML, CSV 등 다양한 포맷을 코드 변경 없이 같은 방식으로 처리할 수 있습니다. Jackson을 이용하는 곳은 다양하게 있을 수 있습니다.Redis에 자바 객체를 저장할 때 (GenericJackson2JsonRedisSerializer)자바 객체를 Redis가 이해할 수 있는 JSON 문자열로 바꿔서 저장합니다.반대로 Redis에서 꺼낼 때 자바 객체로 다시 복구합..
[Test] 점진적 부하테스트: 1,000,000명 유저의 알림 전송 요청 - 스레드
·
Test
이전 포스트에 이어서 알림 전송 요청 시나리오를 계속해서 진행합니다.https://soberyl.tistory.com/38 [Test] 점진적 부하테스트: 10,000명 유저의 알림 전송 요청 - JPA현재 진행 중인 프로젝트 알림 로직의 특징 지금 구현되어 있는 알림은 한 메인 기능의 주도적인 로직이 포함된 상태가 아니라, 상품 주문이 끝나면 상품 주문 완료 알림을 보내는 등의 보조적soberyl.tistory.com이전까지는 만명의 SSE 유저의 알림 전송 요청을 완료했었고, 이제는 100만명으로 늘려서 커버해보려고 합니다.시나리오 1: 100,000명 유저 알림 전송 요청테스트 결과 상정했던 threshold를 넘기는 했으나 그렇게 까지 큰 차이는 아니었습니다. 개선을 통해서 얻는 효과를 좀 ..
[Test] JaCoCo의 원리와 Test coverage 검증
·
Test
Test가 어느 정도로 Production code를 커버하고 있는가 단지 테스트 코드를 구성하는 것만으로는 실제로 테스트 코드가 프로덕션 코드를 얼마나 커버하고 있는지 정량적으로 알기 어렵습니다. 따라서 JaCoCo 플러그인을 활용해서 실제로 테스트 커버리지를 측정하고 프로덕션 코드 관리에 대해서 관리하는 방법에 대해 공부했습니다. Jacoco는 test coverage를 어떻게 수치화 하는가 Runtime Profiling 코드를 수정하지 않고 외부에서 관찰하는 방식상세한 성능 프로파일링(메모리 누수 체크 등)에 주로 쓰임.Instrumentation계측형, 기록 장치(Probe)를 직접 삽입하는 방식JVMPI / JVMTIJava Virtual Machine Tool InterfaceByte ..
[Thread] 자바의 스레드 관리 전략
·
개발일지/CS
Java는 OS의 자원인 스레드를 어떻게 활용하고 있을까?Java의 스레드 관리 전략은 지속적으로 발전해왔습니다. 이때 스레드는 프로세스에 속하고, 이는 곧 OS의 메모리를 할당받아서 돌아가는 구조입니다. 따라서 유저 스레드는 커널 스레드와의 관계에서 분리할 수 없는 구조가 됩니다. Java는 이와 맞물려서 커널과 유저 스레드 간 매핑 방법에 따라서 N:1 -> 1:1 -> M:N 구조로 스레드 관리 전략을 구축했습니다.❗️스레드 매핑 방법 N:1 -> Java (1.1) 1:1 -> Java (1.2 ~ 19) M:N -> Java (21 ~ ) N:1 (Green Threads)전략초창기 자바는 OS에 의존하지 않거 어디서든 실행된다는 철학 아래에 스레드 관리도 JVM에서 관리했습니다.즉, JV..
[Memory] 자바의 메모리 관리 전략
·
개발일지/CS
Why, Java? 백엔드 개발에 참여하게 되면서 최근에 자바에 대해서 공부해보려고 하고 있습니다. Java + Spring을 사용하는 백엔드 팀이기 때문입니다. 최근에 kotlin으로도 Spring을 돌린다고 하던데, 일단 근본인 Java부터 명확하게 잡고 들어가고 싶습니다. 객체 지향이 만들어진 목적인 Java는 메모리를 어떻게 관리할까요? 기본적으로 자바는 "한 번 작성하면 어디서든 실행된다. (Write Once, Run Anywhere)"라는 철학을 가지고 있습니다. 이게 가능한 이유는 소스 코드를 특정 기계에 종속된 언어가 아니라 "자바 바이트코드"로 컴파일한 후, 각 OS에 맞는 자바 가상 머신(Java Virtual Machine, JVM)이 이를 해석하여 실행하기 때문입니다. JVM..