반응형

Kotlin 11

[Kotlin] Refresh Token을 Redis에 저장하는 코드 작성 및 고찰

인증 방법에는 토큰을 이용하는 방식, 세션을 이용하는 방식이 존재한다. 나는 주로 토큰을 이용하는 방식을 선호하는데 그 이유는 아래와 같다. 세션 기반 인증은 쿠키를 사용해야 한다. 그러나 쿠키는 네이티브 앱에서 지원하지 않고 브라우저에서만 사용할 수 있다. 다중 WAS 환경에서 세션은 동기화 이슈가 존재한다. 따라서 확장성이 낮다. sticky session, session clustering 등 다양한 방법이 존재하지만, 토큰 방식은 이러한 점을 고려할 필요가 없다. 물론 토큰 방식은 별도의 구현이 좀 더 필요하지만, 한 번 구현해놓으면 어렵지 않고 편리하게 이용가능하기 때문에 큰 거부감이 없는 편이다. 토큰 방식의 인증은 또 두 가지 방법으로 나뉜다. Access Token만을 이용하는 방식과 Re..

[Kotlin] Swagger 문서에 DTO 필드 required 표시해주기

프론트 측에서 swagger 문서의 request Body에 required 옵션을 추가해달라는 요청이 들어왔다. 현재는 request에 required 표시인 레드닷(red dot)이 하나도 적용되지 않는 상황이다. 심지어 swagger는 Java와 Kotlin에서 서로 약간 다르게 동작하기도 한다. 어떻게 해야 할까? @ApiParam? @Parameter? Swagger 3.0 버전 이후부터는 @ApiParam이 @Parameter로 변경됐다. import io.swagger.v3.oas.annotations.Parameter 실제로 Java에서는 해당 어노테이션을 적용하면 잘 뜰것이다. 하지만 코틀린은? @Parameter(required=true)로 해봤자 전혀 변함이 없다. 심지어 @field..

[Kotlin] kotlin은 왜 Java와 달리 Checked Exception을 제공하지 않을까?

Java, Kotlin은 둘 다 JVM 생태계 언어로써 상당히 비슷한 면이 많다. 하지만 둘은 다른 언어다보니, 당연히 다른 점들도 꽤 많이 존재한다. kotlin의 null-safe operator로 편리하고 안전하게 null 관련 처리를 할 수도 있고, 확장함수를 통해 자유롭게 커스터마이징이 가능하며, 다양한 lambda functions를 제공해줌으로써 Java의 stream 기능 못지 않게 간단한 코드를 작성할 수 있다. 그럼 반대로 Java에선 제공해주지만 Kotlin에서는 제공하지 않는 기능이 뭐가 있을까? Java에서는 checked exception을 제공하지만, Kotlin에서는 이를 제공하지 않는다! 이번 포스팅에선 이 내용에 대해 적어보도록 하겠다. Checked Exception? ..

[Kotest] Nested Test spec에서의 context 생명주기 및 트랜잭션

코틀린 프로젝트에서 kotest로 테스트 코드를 짜다가 통과해야 할 테스트가 통과하지 않는 현상을 마주치게 됐다. 우리는 StringSpec과 유사한, 중첩되지 않은 구조에서 Given - When - Then 구조의 BehaviorSpec 스타일로 테스트를 마이그레이션하고 있었다. 위 두 테스트 코드는 아예 동일하다. 그저 계층만 나뉘게 바뀌었을 뿐. 구조에 따라 계층을 나누기만 하고, 순서 변경이라든지 코드의 변경이 없었으니 테스트는 당연히 문제 없이 통과할 줄 알았다. 그런데 결과는? Tests Failed... 당연히 WAITING에서 PASS로 변경될 줄 알았는데 Given에서 진행해준 update가 진행되지 않고 WAITING인 상태로 테스트가 진행됐다. 심지어 코드 변경은 전혀 없고 구조에 ..

[Kotest] Kotest Spec으로 다양한 테스트 코드 스타일을 작성해보자

스프링에서 코틀린을 사용할 때, 테스트 도구로 JUnit뿐만 아니라 kotest를 사용할 수 있다. kotest는 다양한 테스트 스타일을 제공한다. JUnit과 유사한 Annotation Spec, String Spec, 그리고 우리가 흔히 사용하는 given when then 스타일을 사용할 수 있도록 Behaivor Spec을 제공해주기도 한다. DCI 패턴을 활용할 수 있도록 Describe Spec도 제공해준다. 이번 시간에는 kotest에서 제공해주는 spec을 살펴볼 것이다. kotest의 장점 JUnit, Mockito를 사용할 경우 Kotlin DSL을 사용하지 못한다는 단점이 존재한다. kotest를 활용하면 kotlin DSL을 사용해 더 코틀린스러운 테스트를 작성할 수 있게 된다. 위..

[Kotlin] Kotlin DSL + Spring REST Docs + MockMvc 적용기 (2)

kotlin DSL과 Spring REST Docs 세팅을 MockMvc 방법으로 설정하는 포스팅이다. 환경세팅 및 adoc 형식 설정은 지난 포스팅에서 확인할 수 있다. https://kth990303.tistory.com/347 [Kotlin] Kotlin DSL + Spring REST Docs + MockMvc 적용기 (1) 현재(22.07.17.) 는 아직 Spring REST Docs에서 kotlin DSL 공식지원을 하지 않고 있는 상황이다. https://github.com/spring-projects/spring-restdocs/issues/677 Document how to use Spring REST Docs with th.. kth990303.tistory.com 이번 포스팅에선 k..

[Kotlin] Kotlin DSL + Spring REST Docs + MockMvc 적용기 (1)

현재(22.07.17.) 는 아직 Spring REST Docs에서 kotlin DSL 공식지원을 하지 않고 있는 상황이다. https://github.com/spring-projects/spring-restdocs/issues/677 Document how to use Spring REST Docs with the MockMVC Kotlin DSL · Issue #677 · spring-projects/spring-restdocs Was trying to implement RestDocs MockMvc in our Kotlin project However noticed that when using the MockMvc Kotlin DSL snippets were not generated e.g. fun..

[Kotlin] 코틀린에서의 상속을 위한 키워드 open, override, super

Java에서는 extends로 상속 기능을 지원했었다. 하지만 kotlin에는 extends 키워드가 존재하지 않는다. 그렇다면 kotlin에서는 상속을 어떻게 사용할까? 코틀린에서의 상속을 구현하자! 코틀린에서는 부모 클래스 앞에 open 키워드를 붙여줌으로써 상속 기능을 사용할 수 있다. Fruit 부모 클래스와 이를 상속받는 Apple 자식 클래스 예제를 보자. class 앞에 open 키워드를 붙여줌으로써 다른 클래스에서 상속받을 수 있도록 열어주었다. 이렇게 해야 Apple 자식 클래스에서 Fruit 부모 클래스를 상속받을 수 있다. 또한, 부모 클래스의 함수를 자식 클래스에서 사용하기 위해서는 함수 앞에 open 키워드를 붙여주어야 한다. kotlin에는 extends 키워드로 상속하지 않고 ..

[Kotlin] mutableList로 List에서 수정과 삭제를 해보자

코틀린에서는 기본적으로 val, var 두 가지 변수를 제공해준다. 이 둘은 읽기 전용이냐, 수정이 가능하냐로 차이가 존재한다. 코틀린의 리스트도 마찬가지이다. 기본적으로 코틀린에서의 List는 add, remove와 같은 수정, 추가, 삭제 작업이 불가능하다. 코틀린에서 add, remove를 하기 위해선 List가 아닌 mutableList로 선언해주어야 한다. 참고로 mutableList는 List의 자식 클래스로써 상속 관계이다. 그렇기 때문에 List = mutableListOf()와 같이 선언하는 것도 가능하다. 하지만, 부모 클래스 타입의 변수는 자식 클래스의 메서드에 접근할 수 없으므로 아래와 같아 같이 코드를 작성해도 add, remove 등은 불가능하다. java에서의 List는 add..

[Kotlin] Java와 비슷하면서 다른 코틀린 문법 정리하기 (2)

1편은 아래 글을 참고하자. https://kth990303.tistory.com/312 [Kotlin] Java와 비슷하면서 다른 코틀린 문법 정리하기 (1) 코틀린은 제트브레인에서 개발한 자바와의 상호 운용이 100% 지원되는 언어이다. 네이버, 카카오, 우아한형제들 등 많은 기업들이 백엔드 언어로 코틀린을 선택한 만큼 인기있는 언어이기도 하 kth990303.tistory.com 이번 포스팅에선 1편에 이어서 java stream api와 유사한 코틀린의 Collections 함수들과 random, 물음표(null able operator)와 느낌표(not null operator), 코틀린 테스트 문법, 그리고 그 외 팁들에 대해 적어보려 한다. 아직 배우는 단계이므로 더 좋은 팁들이나 틀린 점들..

반응형