Kotlin DSL로 테스트 코드와 함께 API 문서화하기
·
spring/테스트
Spring 진영에서 API 문서화에 관심이 있다면 Swagger와 RestDocs를 한번쯤은 사용해봤거나 들어는 봤을 것이다.이번 문서에서는 Swagger, RestDocs 이 두가지의 장점만을 모아 Kotlin DSL로 리팩토링한 과정에 대해서 소개합니다. 커스텀 DSL 미리보기Swagger 라이브러리 문제점Swagger 사용법에 대해 검색해 보면, 컨트롤러나 사용하는 요청DTO, 응답DTO에 애너테이션을 선언하는 방식을 주로 설명하는 것을 확인할 수 있었다.이 방법은 간단하지만, 경험상 몇가지 문제가 있다는 것을 느낄 수 있었다.컨트롤러나 DTO를 봤을 때, 수 많은 애너테이션으로 인해 가독성 저하가 발생한다.수기 작성이다 보니 문서화에 필요한 타입이나 값들이 검증되지 않은 상태로 등록될 수 있다...
Querydsl 대신 Kotlin JDSL을 채택한 이유
·
kotlin
나는 현재 실무에서 코프링에 JPA를 사용하고 있다. CUD 처리는 JpaRepository를 사용해서 처리하고 있고, 간단한 조회 로직은 JpaRepository를 사용하고있다.조회 로직에서 조금이라도 복잡한 쿼리나 동적 쿼리가 필요하다면 널리 알려진 Querydsl을 사용하여 처리하고 있었다.초기 Querydsl을 선택한 이유라면은 JPA Entity를 기반으로 읽기 쉬운 쿼리를 작성할 수 있고, 김영한 선생님 강의에서도 소개할 정도로 풍부한 레퍼런스가 있다는 것이 전부라고해도 무방하다. 그러다 어느순간 유튜브 알고리즘에 의해 Kotlin JDSL 소개 영상을 시청하게 되었다. 시청 이후 엄청난 라이브러리임을 감지하고 PoC를 진행하게 되었다. 내가 봤던 영상들 https://youtu.be/-Kdr..
SpringBoot S3 Presigned URL 적용
·
spring
일반적인 파일 업로드/다운로드 방식우리 서비스는 파일을 업로드할 때 API 서버를 거쳐 S3에 저장된다.파일 다운로드도 마찬가지로 다운로드 요청을 받으면 S3로 부터 파일을 가져오고 서버에서 파일을 스트림으로 응답한다.이렇게 API 서버를 거치는 방식은 파일을 API 서버가 직접 처리할 수 있다는 것이다. 직접 처리할 수 있다는 의미는 특정 저장소에 직접 접근하여 저장할 수 있고, 바이너리 파일 검사(파일 포맷, 사이즈 등등), 인코딩 같은 전처리 작업을 수행할 수 있다는 것을 뜻한다.장점이 있듯이 단점도 존재하는데, 파일 처리를 직접 하므로 API 서버 자원을 그만큼 사용한다.문제 상황 Pinpoint APM 모니터링 중 CPU가 한번씩 튀는 현상을 발견했다.CPU가 튀는 시점을 종합했을 때 거의 대부..
복잡한 읽기 정책을 쉽게 풀어보자
·
spring
개요특정 사용자가 어떤 데이터를 읽을 때 이 사용자가 데이터 읽을 수 있는지 판별하는 비즈니스 요구사항이 있을 수 있다.대표적으로 사용자의 권한, 데이터 값에 따라 읽기 정책이 정해지는 두가지 방식이 있는데, 차이가 존재한다.사용자의 권한은 데이터 값에 상관없는 정책이다.만약 사용자의 권한이 부족하다면, 데이터를 읽을 필요도 없이 필터 단에서 요청을 거절하면되기 때문에 단순하다고 볼 수 있다.반면 데이터 값에 따라 읽기 정책이 정해진다면 데이터를 읽어봐야만 이 사용자가 읽을 수 있는 데이터인지 알 수 있다.이러면 읽기 비즈니스가 복잡할 때 여러 테이블과 조인하거나 외부 상태를 체크하는 등 로직이 복잡해질 수 있고,정책이 추가될 때 기존 로직을 분석하거나 기능 구현 중 실수로 이전 정책 로직들이 변경될 수..
Spring Security DSL 권한 계층 설정하기
·
spring
권한 계층이 필요한 이유쉽게 생각해 볼 수 있는 권한 체계는 계층이 있는 권한이다.간단하게 게시판 서비스에 권한이 3개 존재한다고 가정해 보자.일반 사용자: 게시글 조회만 가능VIP: 글 작성 가능관리자: 삭제/수정 관리 가능이때 VIP 권한에 일반 사용자 권한이 가지고 있는 게시글 조회 권한이 없다는 것은 상식상 이해할 수 없다.마찬가지 관리자가 게시글 조회 및 작성 권한을 가지는 것이 당연해 보인다. 스프링 시큐리티에서는 기본적으로 권한마다 허용 가능한 API를 별도로 설정해야 하는데,이러면 공통 허용 API가 추가될 때 마다 공통 권한을 만들고 공통 권한을 부여해야한다. 이런 문제를 해결하고자 스프링 시큐리티에서는 RoleHierarchy를 제공한다.스프링부트 3.2.3 기준으로 작성되어 있습니다...
noose
'kotlin' 태그의 글 목록