본문 바로가기

Spring19

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.
Spring - 비동기 api CompeletableFuture를 활용한 성능 개선 문제점 담당하고 있는 프로젝트에 오픈스택 API를 활용해서 VM 리스트를 보여주는 화면이 있다. VM 리스트를 조회하면 사진의 왼쪽 리스트처럼 볼륨 정보, 이미지 정보 등의 VM에 엮여 있는 다른 리소스들의 정보는 ID 값만 내려오기 때문에, 상세 정보 조회를 위해서는 ID 값을 사용해서 추가적으로 API를 호출해야 한다. 만약에 페이지 size는 20이고, 볼륨, 이미지, 플레이버 상세 정보까지 리스트에 보여주려면 약 20 * 3 = 60번의 외부 API를 호출하게 된다. API 당 응답 속도를 100ms로 가정하면 100ms * 60으로 페이지가 로딩되는데 6초가 걸리게 된다. 실제로 현재 진행하고 있는 프로젝트에서는 5초 ~ 10초 정도의 응답시간이 걸렸고 비동기 API를 적용해서 약 1 ~ 2.. 2023. 3. 29.