본문 바로가기

전체 글44

Java - K8S를 활용한 JVM WarmUp 문제점 K8S 환경에서 운영 중인 스프링 어플리케이션을 자주 배포 하다 보니, 배포 직후 속도가 느려진다는 문제점을 찾았다. 자바 어플리케이션은 최초 실행됐을 때 속도가 느리다는 특징이 있다. JVM은 컴파일된 바이트코드(클래스파일)를 필요할 때마다 클래스로더를 통해 JVM에 로딩해서 사용하고, 인터프리터 방식을 사용하기 때문에 인터프리터가 최적화(JIT 컴파일러) 될 시간이 필요하다. 배포 후 사용하다 보면 웬만한 클래스들은 로드가 완료되고, JIT 컴파일러도 동작하면서 속도가 점차 개선이 된다. 하지만 서비스 업데이트, 패치 등의 이유로 배포할 때마다 다시 속도가 느려지게 된다. 어떻게 이 문제를 해결할 수 있을까? JVM WarmUp JVM 웜업은 위에서 말한 JVM의 특징이자 단점을 최소화시키기.. 2023. 6. 19.
Mysql - Spring으로 SSL 연결하는 방법(K8S 환경, Mac OS 기준) 간혹 Mysql에 접근하기 위해서 SSL이 강제되는 경우가 있다. 이 경우 스프링에서 주어진 .crt 파일, .key파일 혹은 .pem 파일을 사용해서 접근을 해야한다. 이 문제를 어떻게 해결할 수 있는지 간단하게 정리해보겠다. (K8S를 사용하고 있다고 가정) 1. 클라이언트 인증서 확인 접근하려는 Mysql 서버에서 주어진 .crt, .key, .pem 같은 파일이 있어야 한다. Java Spring에서는 .p12 확장자를 표준으로 사용하고 있어서, .crt나 .key 확장자 키를 Workbench나 Datagrip 같은 프로그램처럼 사용할 수 없기 때문에 변환을 해줘야한다. 2. ca.p12 인증서 생성 2-1. keytool을 이용한 keystore 생성 keytool -importcert -f.. 2023. 6. 19.
Spring - 전략패턴을 활용한 Excel Export 문제점 클라우드 어드민 포탈을 담당하다 보니, 종종 VM 리스트를 Excel 파일로 요청해오는 경우가 있다. VM에 여러가지 정보가 엮여 있기 때문에 요청할 때 마다 요구하는 정보가 다르다. 예를 들면, 오늘은 VM의 Flavor 정보와 Volume 정보를, 어제는 VM의 Image와 Security Group 정보 요청이 왔다. 요청이 올 때 마다 요구사항이 달라서 코드를 많이 수정해야하는 불편함이 있었다. 이를 전략 패턴을 활용해서 코드를 수정하지 않고 필요한 리소스 타입만 변수로 넘겨주면 되도록 개선해보았다. 해결 방법 방법은 각 리소스 별로 Excel을 입력하는 기능을 가진 클래스를 FlavorColumnComposer, VolumeColumnComposer, 등으로 만들고, 필요에 따라 리소스.. 2023. 3. 31.
Spring - Spring Redis Session 적용기 문제점 담당하고 있는 프로젝트는 세션을 이용하여 인증을 처리하고 있다. 어드민 툴이라서 배포가 잦은 편인데, 배포로 인해 Pod가 재시작되면 세션 정보가 초기화 돼서 모든 사용자의 로그인이 모두 풀린다는 문제가 있었다. 그래서 배포를 할 때 사용자가 최대한 없는 시간을 활용하거나, 업무 시간 이후에 하는 등, 배포 시간에 많은 신경을 써야 했다. 이 문제를 해결하기 위해 Redis 세션을 적용하게 되었다. 세션이 스프링 Pod이 아닌 Redis에 저장되기 때문에, Pod가 재시작되어도 세션이 휘발되지 않게 된다. Redis Pod 배포 먼저 사용할 Redis를 K8S에 배포했다. 어드민 툴의 로그인 용도로만 사용되기 때문에, PVC를 활용해서 단일 Pod로 배포하기로 결정하였다. Redis 이미지 버전은.. 2023. 3. 31.