개발/Spring20 [Spring] Spring Rest Docs로 API 문서 자동화하기 SWM에서 프로젝트를 진행하는 과정에서 API 문서 자동화를 위해 Spring Rest Docs를 적용하기로 했다. 이전에는 Swagger나 노션에 API 문서를 작성했지만, 아래와 같은 단점이 있었고 여러 단점을 해결하기 위해 Spring Rest Docs를 적용하기로 결정하였다. Swagger는 프로덕션 코드(컨트롤러 레이어, 요청/응답 객체)에 Swagger 애노테이션이 추가되어 가독성이 떨어졌다. 테스트 기반 아니기 때문에, API 문서대로 기능이 동작한다는 보장이 없었다. 노션에 API 문서를 작성 시, 새로운 코드를 개발하거나 기존 코드를 변경하였을 때 코드와 문서를 동기화하는 과정이 번거로웠다. 따라서 이번 포스트에서는 Spring Rest Docs를 적용하는 과정을 기록하고자 한다. 1) .. 2023. 7. 3. [Spring] Spring Boot 3 사용해보자! 소프트웨어 마에스트로 14기 과정을 참여하면서, 무사히 기획심의를 통과하고 프로젝트 설계 단계에 있다. 서버 개발은 스프링 프레임워크를 사용하기 때문에, Spring Boot 2를 사용할지 Spring Boot 3을 사용할지에 대해 고민하는 중이다. 따라서 Spring Boot 3이 등장하면서 변화한 점과 새로운 개념을 정리하고 이번 프로젝트에 왜 Spring 3을 사용하기로 결정했는지 포스팅하고자 한다. Spring Framework와 Spring Boot Spring Framework 자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크로서 엔터프라이즈급 애플리케이션을 개발하기 위한 모든 기능을 종합적으로 제공하는 경량화된 솔루션 핵심 기능 DI (의존성 주입) AOP (관점 지향 프로그래밍) IOC .. 2023. 6. 10. JWT (2) 스프링에서 JWT 사용하기 Gradle 의존성 추가 implementation 'com.auth0:java-jwt:4.2.1' https://mvnrepository.com/artifact/com.auth0/java-jwt/4.2.1 JWT 관련 설정 파일 생성 application-jwt.yml jwt: secretKey: access: expiration: 3600000 # 1시간 header: Authorization refresh: expiration: 1209600000 # 2주 header: Authorization-refresh jwt.secretKey 서버가 가지고 있는 개인키 암호화 알고리즘으로 HS512를 사용할 것이기 때문에, 64 bytes 이상의 영숫자 조합으로 아무렇게 작성 jwt.access.expira.. 2023. 5. 31. [Spring] 벌크 연산 벌크 연산이란 여려 데이터를 한 번에 수정하거나 삭제하는 방법이다. 실제 벌크 연산을 하지 않을 경우, 어떤 성능적 이슈가 생기는지 예시를 통해서 알아보자. @Entity @AllArgsConstructor @NoArgsConstructor class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private int age; public void getOlder() { this.age += 1; } } Member member1 = new Member("john", 15); Member member2 = new Member("tom", 19); Member membe.. 2023. 5. 15. [Spring] RestTemplate 싱글톤 등록 및 Connection Pool 설정 지난 프로젝트인 "QR 코드 기반 간편 주문 서비스"를 리팩토링하는 과정에서 배운 점에 대해서 기록하려고 한다. 간편 결제를 위해 KakaoPay 단건 결제 API를 사용하는 KakaoPayService 코드를 리팩토링 하는 과정에서 RestTemplate 객체를 생성하는 부분에 경고줄이 있다는 것을 확인하였다. 경고를 읽어보면 단순 중복된 코드라 쓰여있어 대수롭게 넘길려 했다. public String kakaoPayReady(Long orderId) { RestTemplate restTemplate = new RestTemplate(); Order order = orderService.findOrderById(orderId); ... } @Transactional public KakaoPayAppro.. 2023. 5. 14. [Spring] 간편 결제 기능 팩토리 클래스 적용하기 간편 결제 기능이 있는 프로젝트를 진행하다가, 기존에는 현금결제와 카카오페이결제 기능이 있었다. 이번에 네이버페이결제 기능을 추가하기 위해서, 코드를 작성하면 새로운 기능 추가로 인해서 기존의 코드들이 대폭 수정하는 일이 발생하였다. OCP 법칙에 맞지 않게 코드를 설계했었다. 코드를 설계할 때부터, 기능이 추가될 것을 예상하고 설계를 했으면 좋았을 텐데.. 아무튼 새로운 결제 기능을 추가함에 있어서, 기존의 코드가 수정되지 않도록 팩토리 패턴을 적용하였다. 팩토리 패턴을 적용하기 위해서 아래와 같이 PayService 인터페이스와 각각 구현체를 구현하였다. public interface PayService { String pay(Long orderId); } @Service public class Ka.. 2023. 5. 2. 이전 1 2 3 4 다음