Server/Java 4

PCW(Post Compile Weaving) 적용법 및 테스트

서론메서드 실행 전 후로 로그를 찍는 기능을 개발하고 있다.모든 메서드에 대해서 로그 찍는 코드를 직접 작성하는 것은 매우 비효율적이므로 Aspect를 도입했다.처음에는 Spring AOP 방식을 적용하려고 했지만, Dynamic, CGLIB Proxy 방식 모두 메서드가 실행될 때 새로운 객체를 생성한다는 점에서 메모리 사용량과 성능 측면에서 다른 방식의 필요성을 느꼈다.그래서 컴파일 이후 바이트 코드를 추가하는 방식의 AOP 적용을 결정했다.그 중 PCW를 결정한 이유는 CTW는 소스코드 단계에서 위빙이 적용되기 때문에 Lombok과 충돌 가능성이 매우 높으며, LTW는 설정이 매우 복잡하기 때문이다. 세팅 과정1. LogAspect.java@Aspectpublic class LogAspect { ..

Server/Java 2025.08.15

2초의 인증 시간이 걸리는 로직의 동시 처리 성능 개선(1) - 프로파일링 툴 선정

시리즈 설명해시 알고리즘 은닉화를 위해 의도적으로 인증 과정을 2초로 고정 (실제 해싱 시간은 0.5초)딜레이를 주기 위해 Thread.sleep 메서드를 사용했는데, 초당 1000개의 요청을 보냈을 때 평균 응답시간이 35~40초가 나옴이는 보안과 사용성의 균형이 무너진 것이며 개선이 필요함현재 성능을 분석하고 앞으로 어떻게 최적화해나가야 할지에 대한 시리즈 서론처음에는 초당 1000개 요청에 대해 어떻게 성능을 개선할까만을 고민했었다.그래서 Thread.sleep에 대해 알아보고 논블로킹 방식으로 어떻게 개선하는지, 어떻게 스레드 풀을 튜닝해야 하는지 등을 알아봤다.하지만 이러한 노력은 "그래서 현재 어떻게 동작하는데?"로 귀결되었다.현재 어떤 상태로 동작을 하는지 파악을 할 수 있어야 어느 지점이..

Server/Java 2025.06.18

rt.jar, ee.jar

rt.jarrt = runtimeJava9 이전까지 java.lang, java.util, java.io 등 핵심 클래스를 담은 Java SE 제공 필수 라이브러리JRE에 포함되어 있었다. Java9부터 새로운 구조 도입으로 사라지고 별도의 모듈로 분리됨즉, rt.jar는 사라지고 jdk안의 lib/modules 안에 분리되어서 포함됨 modules Java 런타임만 이해할 수 있는 특수한 바이너리 구조 (JRT 포맷)내부에 .class 파일이 포함됨JAR/ZIP보다 더 빠르고 공간 효율적으로 클래스를 저장하고 로드할 수 있음오염을 방지하기 위해 임의 변경, 수정이 불가능함 ee.jar과거 EE API(Servlet, JSP, EJB, JPA 등)가 묶여있는 JAR 파일Jakarta EE 로 전환되면서..

Server/Java 2025.04.27

JAR (Java ARchive) - 개념, 구성 요소, 생성, 라이브러리 활용

JAR (Java ARchive)- 항아리, 병, 보관함- 컴파일된 .class 파일, 리소스(.png, .properties ...), jar metadata 등으로 구성됨- JDK에 포함된 프로그램이 ZIP 압축과 동일한 알고리즘을 사용해 압축 (압축 없이 생성도 가능) ➜ 생성된 JAR를 gzip, Pack200 등의 추가 압축 포맷을 적용해 더 작은 크기로 전송할 수 있음 (Pakc200은 Java 런타임 구조 변화 등으로 인해 JDK11부터 deprecated, JDK14에서 완전히 제거됨) ➜ 보통 3~4배, 최대 9배까지 압축 가능 사용어플리케이션을 묶어서 배포하거나 설치할 수 있도록 함라이브러리 패키징단순 압축(JAR 안에 메인 클래스를 지정하면 java -jar 파일명.jar 로 JA..

Server/Java 2025.04.25