본문 바로가기

Spring Boot11

Spring Boot 애플리케이션 k8s 환경에서 WarmUp 적용하기 이 글을 작성하는 이유 현재 회사에서는 EKS 기반 k8s 환경에서 spring boot 를 포함 각종 프레임워크 애플리케이션을 운영 중이다. 기존 모노리스 Django Rest Framework 에서 점진적으로 도메인 분리를 Spring Boot 를 이용한 Micro Service Application 으로 진행 중인데, 내가 맡은 결제 도메인 관련 애플리케이션도 마찬가지이다. (Kotlin 기반 Spring Boot App) 문제는, 결제가 주문 및 유관 DB 와 너무 강하게 얽혀 있어서 바라보아야 하는 테이블이 많다는 점이고, 이것은 곧 배포 직후 속도에 커다란 영향을 끼쳤다. JVM 은 컴파일 된 .class 파일을 필요 시 클래스 로딩을 통해 사용하며, 기본적으로 인터프리터 방식을 사용하므로 J.. 2024. 3. 17.
WebFlux는 무엇이고, 왜 나왔고, 언제 쓰이는가? 어제 Cart API 코드 리팩터링을 마무리하고, 리뷰를 받기 위해 PR을 올렸다. 클린 한 코드로 작성하려고 노력하기 위해 리뷰어님이 주신 의견을 되뇌고, 클린 코드를 작성하기 위한 방법을 구글링을 통해 하루 종일 모니터를 노려보며 클래스 간 책임을 나누어 보았다. 빨리 성장하고 싶다!! 리뷰를 앞두고, 카카오페이를 이용한 도메인 코드들을 리팩터링 하기 앞서, 기존에 외부 API와 통신하기 위해 사용하던 템플릿인 RestTemplate의 대체 여부에 대해 떠올랐다. RestTemplate은 deprecated 되었으므로, WebClient의 사용을 고려해보라는 의견을 받았다. WebClient에 대해 알아보다가 동기/비동기, 블로킹/논블로킹이라는 개념의 정의에 대해 다시 공부하게 되었고, 나아가 Web.. 2022. 8. 31.
객체 간 매핑을 위한 MapStruct 사용 방법 기존 프로젝트에서 Dto Entity를 매핑할 때 model mapper 라이브러리를 사용했었다. 편하게 사용할 수 있었지만 내부적으로 리플렉션을 이용하기 때문에, 성능 상 문제가 있다. 이번에는 많이들 추천하는 Map Struct를 사용해봤다. 적용하면서 자잘한 문제들이 있었는데, 내가 겪은 문제점들에 대한 해결 방법들을 정리해보겠다. https://mapstruct.org/documentation/dev/reference/html/ MapStruct 1.5.2.Final Reference Guide If set to true, MapStruct in which MapStruct logs its major decisions. Note, at the moment of writing in Maven, al.. 2022. 8. 29.
Spring Security [2] - 예외 처리 AuthenticationEntryPoint & AccessDeniedHandler 서큐리티를 도입하며 인증, 인가의 과정을 마쳤다. 이제 인증 및 인가 작업에서 발생하는 예외에 대해서 처리를 해주어야 하는데, 한 가지 생각해봐야 하는 문제가 있다. 스프링 서큐리티는 필터에 기반한 체이닝 구조이므로, 스프링 컨테이너까지 요청이 도달하지 않는다. 따라서, @ExceptionHandler를 통한 편한 예외 처리가 불가하다. 직접 Try - catch로 잡아서 응답을 내려주는 방법 밖엔 없다. 하지만, 스프링 서큐리티가 그렇게 허술하진 않다. 서큐리티 필터 체인의 구조를 보면 마지막 즈음에 예외를 처리하는 필터가 있는 것을 확인할 수 있다. 여기서 주로 사용하는 AuthenticationEntryPoint와 AccessDeniedHandler를 구현해 인증 및 인가 과정에서 일어난 예외에 대.. 2022. 8. 21.
스프링 부트 소나큐브(SonarQube) 적용 + PostgreSql 갈수록 쉽지 않다. 프로젝트를 만들어 가는 과정에서 코드를 작성하는 부분은 극히 일부 과정임을 깨달았다. 오히려 코드를 작성하는 시간이 더 그립다. 리팩터링과 기술 적용 및 버전 맞춤 수정에 시간을 더 쏟는 요즘이다. 클린 한 코드를 위해 손수 리팩터링을 할 수 있지만, 정적 코드 분석 도구란 것이 있다고 한다. 대표적으로 SonarQube를 많이 사용한다고 하는데 이를 적용해 보는 시간을 가졌다. 정말 오래 걸렸고, 정확하진 않을 수 있지만 나름대로 적용했던 과정을 정리해보겠다. (틀린 부분이 있으면 무한한 댓글 감사히 받겠습니다!) 이것이 완료된 후 AWS lightsales, ec2 적용 여부를 판단해보아야겠다. 정적 분석 도구 코드의 품질에 대해 고려할 때 필수적으로 사용하는 도구이다. 지속적인 .. 2022. 7. 5.
「테스트 코드 & Spring REST Docs」 개인 프로젝트는 완성이 되었다. 이제는 세부적인 디테일에 신경을 쓰며 리팩터링과 그에 필요한 개념 정리를 하며 프로젝트에 적용시키고 있다. REST API를 처음 설계해 보았는데, 부족한 점이 많았지만 신선한 경험이고 짧은 기간 내에 배운 것이 많은 설계 과정이었다. API를 설계하면 그에 맞는 명세가 필요한데, 보통 Swagger나 Spring REST Docs 프레임워크를 이용한다고 한다. Swagger를 사용하면 애노테이션을 이용해 편하게 문서를 작성할 순 있지만, 프로젝트의 확실성과 정확성을 뒷받침하기 위해서는 테스트 코드 작성이 필수라고 생각하기 때문에 Spring REST Docs를 이용하기로 생각하며 적용해보았다. 테스트 코드 크게 단위 테스트와 통합 테스트가 있다. 통합 테스트 단위 테스트.. 2022. 6. 20.
2022.06.07 「프로젝트 중간 점검」 이번 4일 간 프로젝트를 집중 있게 하느라 블로그 글 작성도 못하고 코테 준비도 제대로 못했다 ㅜㅜ 프로젝트 초기에는 속도에 대한 반성을 많이 했었는데, 시간이 지나고 프로젝트의 틀이 잡힐수록 그 반성은 큰 오산이라는 것을 알게 되었다. 퀄리티 있고, 클린 한 코드를 작성하려면 꽤나 공들이며 시간을 투자해야 한다는 것을 깨달았다. 즉, 더 효율적인 시간 분배가 관건이다. 이제 프로젝트에서 계획한 기능은 거의 구성이 된 상황이다. 거진 1달이 걸렸다. 계획한 것에 비해 늦었다고 생각하지만 본격적인 리팩터링을 적용해볼 생각이다. 처음으로 혼자서 제대로 된 프로젝트를 하기 때문에 더 애착이 가기도 한다. 이제 반도 안 왔고, 갈 길이 험난할 테지만 이뤄보자~ 지난 4일 간 구현 목록 카카오 페이 REST AP.. 2022. 6. 7.
2022.05.21 「 Shopping Cart API 만들기 」 어제부로 인증, 인가 작업이 완료되었다. 진짜 오래 걸렸다. 속도를 좀 더 낼 필요가 있다. 오늘부터는 장바구니를 만들건대 이번에는 DB를 이용하지 않을 것이다. 쿠키를 이용해 볼 생각이다. 쿠키에 장바구니 관련 정보를 넣어서 클라이언트에게 응답하는 것이다. 한 때 장바구니에 들어가는 데이터도 중요하다고 생각을 했는데 보통 장바구니는 쿠키나 로컬 스토리지를 이용한다고 한다. 나는 온전한 API로만 구현을 하고 있기 때문에 쿠키를 통해 구현해볼 생각이다. 장바구니를 어떻게 구현할까? 일단 DB에 저장을 따로 하지 않고 쿠키로 구현을 하기로 결심했다. 주요 기능을 생각해보았다. 기능 1. 상품을 장바구니에 추가 2. 장바구니에 담긴 상품 목록 조회 => 수정과 삭제가 없는 이유는 프런트단에서 할 수 있지 않.. 2022. 5. 21.
2022.05.14 「JWT 인증」 인증을 구현하기 위해 기존에 사용하던 Session 로그인이 아닌 JWT를 이용하여 인증을 구현했다. 토큰을 처음 사용했다 보니 알아가는데 너무 오래 걸렸다. 무엇보다 나는 스프링 시큐리티를 사용하지 않고 서블릿 필터나 스프링 인터셉터를 이용해 토큰 유효성 검사를 하려고 했어서 더 쉽지 않았던 것 같다. 이번 프로젝트 인증에서 Session을 사용하지 않은 이유는 서버의 규모가 확장될 때의 인증 문제이기 때문인데 JWT를 이용한 인증도 여러 가지가 있기 때문에 나의 프로젝트에 맞는 단계가 어디인지에 상당히 헷갈렸던 한 주였다. 인증 작업을 하며 문제가 생겼던 부분이나 구현한 부분에 대해 정리를 해보겠다. Rest API를 설계할 때 인증은 session 기반이 아닌 토큰 기반으로 하는 것이 더 restf.. 2022. 5. 14.
2022.04.24의 기록 ▶ 해야할 일 1. Gradle test code 수정 2. mysql CH7. 데이터 암호화 정리, CH8. 인덱스 중간 3. Boot 프로젝트 구상 (점심 먹고 쏟아붇자) https://github.com/GroovyArea/Shop-with-SpringBoot/wiki 4. 알고리즘 1문제 ▷ 테스트 코드 문제 1 : gameCount()를 호출 할 때마다 예외가 발생됨 해결 : 제어문을 통해 해결 문제 2 : @ParameterizedTest 진행 시 파라미터를 메서드의 매개변수로 집어넣어주지 않아 테스트 코드 문제 발생 2022. 4. 24.
2022.04.22의 기록 ▶ 파트 1 (10시 ~ 7시) 1. Gradle Test 코드 수정 (PrintGameResult, ComputerNumber 부분) 2. 자소서 수정 3. Boot project 구상 4. Spring MVC 내부 개념 정리 5. 알고리즘 1문제 (2문제) 6. mysql Ch5. 트랜잭션, CH6. 데이터 압축 7. 이펙티브 자바 아이템 1 정리 ▷ 알고리즘 문제 : 정수의 내림차순 정렬 import java.util.Arrays; class Solution { public long solution(long n) { long answer = 0; String number = String.valueOf(n); String stringNum = ""; char[] numArr = new char[num.. 2022. 4. 22.
반응형