Server 6

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

Argon2id 파라미터 조정을 통한 해싱 지연

해싱 지연을 통해 해커가 브루트포스 공격을 하는 데에 더 많은 비용(시간, 메모리, 하드웨어 등)이 들도록 할 수 있다.해킹을 통해 얻는 이득보다 이 비용이 더 크다고 판단되면 해커는 해킹을 중단할 가능성이 높으므로 해싱 지연은 보안을 높이는 데에 중요하다.예를 들어, MD5의 경우 RTX4090 기준 초당 1500억 회의 연산이 가능하므로 브루트포스 공격에 용이하며 보안에 취약하다. 목표사용자는 2~5초 정도의 응답 시간은 기다릴 수 있다고 인식하므로, 응답 시간은 약 3~4초를 목표로 하며 해싱하는 데에 드는 시간은 0.5~1초로 조정하는 것이 목표이다. 초기 파라미터 테스트 코드@Test@RepeatedTest(10)@DisplayName("Argon2 해시 테스트")public void test..

Server/Security 2025.05.26

Salt Hash를 활용한 패스워드 암호화

유저 패스워드 저장 방식@PostMapping("/join")public String join(User user) { userService.join(user); return "redirect:/";} 패스워드 암호화를 하지 않고 데이터베이스에 그대로 저장했다. 패스워드를 암호화하지 않고 저장하는 것의 문제점1. 해커가 DB서버에 접근해 데이터를 탈취했을 때 사용자 이메일과 패스워드 모두를 알게 된다.➤ 보통의 사용자는 여러 서비스에 동일한 이메일과 패스워드를 사용한다.➤ 즉, DB 서버를 운영하는 서비스뿐만 아니라, 다양한 서비스에 탈취한 계정으로 접속해 악의적인 행위를 할 수 있다. 2. 관리자에 의한 유출DB 서버 접근 권한을 가진 관리자가 계정을 유출시킬 수 있다. 이러한 이유로 ..

Server/Security 2025.05.07

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