본문 바로가기

분류 전체보기154

JUnit5 - @TestInstance에 대해 알아보자 다음과 같은 JUnit 테스트 코드가 있다고 해보자. import org.junit.jupiter.api.Test class TestForTestInstance { var number = 0 @Test fun add1() { number++ println("[add1] number is $number") } @Test fun add2() { number+=2 println("[add2] number is $number") } } 테스트를 진행하면 콘솔에 출력되는 number 값은 어떻게 될까? 테스트 순서를 정하지 않아 순서는 몰라도 결과적으로는 둘 중 하나는 number가 3으로 출력되어야 할 것 같다. 테스트를 실행시켜보면 다음과 같이 콘솔에 출력되는 것을 확인할 수 있다. number 값이 테스트 .. 2021. 7. 25.
UUID for Primary Key 왜 UUID를 Primary Key로 쓸까? DB에서 Primary Key를 사용할 때 단순하게 Sequence(Auto Increment)를 사용할 수 있다. 하지만 소셜 서비스에서 주로 사용되는 username과 같이 PK와 별개로 특정 유저를 특정하는 값이 존재하지 않고 외부에 Table의 PK(ID) 값을 노출한다고 하였을 때, Sequence(Auto Increment) 값을 사용하는 것은 단순 증가 값이기 때문에 본인 것이 아닌 데이터에 접근할 수 있는 ID 값을 외부에 노출하는 것과 같다고 볼 수 있다. 그래서 DB에서 Primary Key를 사용할 때 다른 데이터에 쉽게 접근할 수 있는 ID 값을 쉽게 유추할 수 없도록 UUID를 사용할 수 있다. UUID v4 같은 경우 랜덤하게 생성되고.. 2021. 7. 23.
Spring Security 인증 기본 구조 Spring Security의 인증에 사용되는 기본 구조와 component에 대해서 알아보도록 하자. (Spring Security는 인증 및 보안과 관련하여 관련하여 많은 기능들을 담고 있으나 여기서는 인증 관련하여 기본 구조만 알아보도록 하겠다) AuthenticationFilter 인증(authentication) 요청을 Spring Security에서 처리할 수 있도록 Authentication 객체로 변환시킨 뒤 이를 AuthenticationManager로 처리를 위임한다. AuthenticationManager에서 처리 후 Filter에서 성공/실패에 대한 응답을 핸들링을 한다. AuthenticationManager (implementation: ProviderManager) Authen.. 2021. 7. 18.
Spring Kafka 간단하게 맛보기 SpringBoot application에서 간단하게 Kafka Topic을 consume하고 message를 produce하는 방법에 대해 알아보자. 해당 코드는 여기 에서 확인 가능하다. Kafka Topic 생성 간단하게 테스트하고 시각적으로 쉽게 확인할 수 있는 환경을 위해 GUI를 사용한다. Client로 Conduktor를 사용한다. my_topic 으로 Topic을 생성한다. my_topic Topic은 방금 생성되었기 때문에 아직 Consumer가 붙어있지 않다. 이제 Spring Kafka를 통해서 Kafka Topic을 consume하고 message를 produce하는 법에 대해 알아보자. Spring Kafka를 사용하여 Consumer 설정 SpringBoot application.. 2021. 7. 11.
서로의 Context를 파악하자 같은 프로덕트를 다루는 조직이라도 내부적으로는 서로 다른 성격의 이해관계자 그룹이 생기기 마련이다. 예를 들어 사업 부서에서는 많은 사용자가 사용할 수 있는 서비스를 만들고자 할 것이고, 개발 부서에서는 확장성 있는 설계 및 코드, 안정적인 서비스를 구축하는 것이 그들이 주로 원하는 바일 수 있다. 마케팅 부서라던가 보안 부서와 같이 부서가 여러 갈래로 더 나뉘어져 있다면 각 부서의 요구나 목표도 그 만큼 더 다양할 것이다. (Cross Functional 한 소규모의 팀이어도 결국 여러 직군의 사람이 모이다보면 각자 원하는 바가 다를 수 있다고 생각한다) 또한 이해관계자는 내부에만 있는 것은 아니다. 서비스를 이용하고 이를 위해 금액을 지불하는 고객 또한 중요한 이해관계자 중 하나다. 하나의 프로덕트라.. 2021. 7. 10.
Spring JPA Querydsl 세팅 (with Kotlin) Spring Data JPA를 사용한 Spring Boot 프로젝트 기반으로 코드를 작성할 때 Command 작업은 큰 문제는 없지만 집계와 같은 Query 성 작업은 JPA 로는 어느정도 한계가 있다. JPQL을 사용할 순 있겠지만 String base로 코드가 작성되기 때문에 작업을 하면서 실수가 날 여지가 있고 직접 실행하지 않는 이상 이 실수를 알기 힘든 경우가 있다. Querydsl 를 사용하면 이러한 JPQL의 단점을 보완할 수 있다. Querydsl 에서 생성해준 컴파일 된 코드 기반으로 쿼리를 작성하기 때문에 일단 쿼리 작성 자체가 매우 쉬워지고 컴파일 시점에서 오류 또한 찾을 수 있다. 이번 포스팅은 Kotlin 기반의 Spring Boot 프로젝트에 JPA 기반 Querydsl 을 세팅.. 2021. 6. 7.