make it simple
article thumbnail
[Kotlin/Spring Boot] Swagger 에서 JWT 사용해보자
Kotlin 2024. 5. 1. 15:55

개발 환경spring boot 3.2java 21 스웨거 세팅하기build.gradle.kts에 밑 디펜던시 추가implementation("org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0")implementation("org.springdoc:springdoc-openapi-starter-webmvc-api:2.2.0")application.yml 스웨거 관련 옵션 추가springdoc: swagger-ui: path: /webtoon-api // 스웨거 접근 경로 disable-swagger-default-url: true // 스웨거 기본 url 비활성화스웨거 관련 config 파일 추가package rlc.webtoon.api.co..

article thumbnail
[JPA] 예상치 못한 N+1 문제 해결하기
Kotlin 2024. 2. 27. 18:57

문제 JPA를 사용하면 흔히 발생하는 문제 중 하나가 N+1 이다. N+1을 알기전 JPA의 특성을 먼저 알아야한다. JPA는 두 도메인이 @OneToMany, @ManyToOne, @OneToOne, @ManyToMany와 같이 연관관계를 맺어 손쉽게 별도의 쿼리 없이 연관관계 객체를 불러 올 수 있다. 하지만 이렇게 편리한 기능에도 잘못 쓰면 사용자의 의도와 다르게 N+1과 같은 문제가 발생한다. N+1 문제는 사용자가 하나의 객체를 조회하기 위해 1번의 쿼리를 실행했지만, JPA 내부에서는 해당 객체와 연관된 N개의 객체를 조회하기 위해 추가로 N번의 쿼리를 실행하는 상황을 말한다. 사실 작은 서비스에서는 성능상 크게 문제가 되지 않지만 언제든 서비스는 확장될 수 있음을 염두해두고 개발하는것이 좋다..

article thumbnail
[Spring Boot 3.0 / Spring Security 6.0] Controller에서 시큐리티 인증 mocking 후 테스트 하기(401 피하기)
Kotlin 2024. 1. 11. 16:57

문제 스프링 부트 3.2 / Spring Security 6.0 적용을 한 후 유저가 모임을 생성하는 API를 테스트 해야된다. 하지만 애석하게도 인증 실패로 401이 반환된다. 주어진 상황 설정된 스프링 시큐리티 밑과 같이 http.authorizedHttpRequests 안에 permitAll()된 엔드포인트들만 인증을 안해도 접근이 가능한다. 이 외에 모든 엔드포인트에는 인증이 필요하다. @Bean fun securityFilterChain( http: HttpSecurity, jwtAuthenticationFilter: JwtAuthenticationFilter, ): DefaultSecurityFilterChain { http .csrf { it.disable() } .headers { it.f..

article thumbnail
중복 데이터로 인한 Single{}의 IllegalArgumentException
Kotlin 2023. 8. 23. 21:08

문제 운영하는 프로젝트 기능 중에 익명 게시판이 있다. 한 게시글에 익명인 사람이 여러개의 댓글을 올려도 같은 익명 닉네임으로 표시해야한다. 익명 댓글을 입력하는 비즈니스 로직은 밑과 동일하다. 한 게시글에 같은 유저가 두개의 익명 닉네임을 가지고 있으면 안된다. 익명 여부를 포함한 게시글을 저장한다. 익명 닉네임(Community_Nickname) 테이블에서 댓글 작성자가 해당 게시글을가진 닉네임이 존재하는지 확인한다. 존재하지 않을 경우 익명 닉네임(Community_Nickname) 테이블에 작성자의 ID와 게시글의 ID를 저장한다. 문제가 된 케이스는 조회할 떄 getNickname()을 사용한다. 익명의 게시글이 두개일 경우 single{ } 함수에 의해 IllegalArgumentExcepti..

article thumbnail
[Kotlin] @PreAuthorize를 사용한 인가(Authorization)처리
Kotlin 2023. 4. 29. 11:28

Authorization이란? 인증(Authentication)받은 사용자가 가지고 있는 인가를 뜻한다. 인가는 유저가 가지고있는 권한(Role)을 확인해서 권한이 가지고있는 액션들만 행할 수 있다. 밑과 같이 예제를 들면 ADMIN/USER 권한이 있고 각 권한마다 할 수 있는 행동들이 정해져 있다. 인증된 유저가 권한이 해당되는 액션들만 할 수 있게 처리하는게 인가(Authorization)이다. Spring Security를 사용해 간단하게 구현해보자. ADMIN 권한: 회원 승인/ 회원차단 USER 권한: 회원가입 data class SimpleAuthentication( val user: User ) : Authentication { override fun getAuthorities(): Col..

article thumbnail
[Kotlin/Spring Boot] Swagger 3.0 적용하기
Kotlin 2023. 2. 24. 01:25

Swagger란? Swagger는 개발자가 REST API 서비스를 설계, 빌드, 문서화할 수 있도록 도와준다. Spring Boot에서 특정 어노테이션을 달아주면 REST API 문서를 자동으로 구성해준다. 또한, 수정시 즉시 반영된다. 간단하게 Resultful API를 요청을 보내고 응답을 수신하는 테스트를 할 수 있다. Swagger 세팅하기 해당 링크에서 Gradle(Kotlin) 에 있는 코드 복사 // https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui implementation("io.springfox:springfox-swagger-ui:3.0.0") build.gradle 안에 위 라이브러리 추가 & reload g..

article thumbnail
[Kotlin, Spring, JPA] Boilerplate 프로젝트 만들기
Kotlin 2023. 2. 20. 04:30

Boilerplate란? 단순한 반복작업을 없애주고 생산성을 향상시켜주는 작업을 Boilerplate라 한다. 우리가 흔히 아는 보일러가 맞다. 보일러의 통은 보일러를 만드는데 무조건 필요하다. 기능만 업그레이드할 뿐 플레이트는 계속 찍어낸다. 개발에서 이런 보일러 통 생산같이 단순한 반복작업은 없앨수 있으면 무조건 없애는게 좋다.라이브러리의 버전은 달라질 수 도 있으나 구조는 비슷하므로 Koltin,Spring,JPA로boilerplate 프로젝트를 만들어보자! 1. https://start.spring.io/ 에서 밑과 같이 의존성 설정 후 생성 (DB는 취향껏, java 11버전이라 스프링 부트 버전 2.7.8로 선택했다. - 스프링 부트 3.0 버전 이상은 자바 17버전으로만 사용 가능) 2. b..