반응형
Enum Converter와 Enumerated 어노테이션
Spring 2022. 8. 19. 15:53

타입이나 상태를 구분하기 위해 Enum class를 사용한다. 그리고 enum값을 저장하기 위해 Enum Converter 혹은 Enumerated 어노테이션을 이용하게 된다. 이 둘의 차이는 무엇이며 어떤게 더 선호되는지 확인해보려고 한다. Enumerated 어노테이션 Enumerated 어노테이션은 원하는 필드에 추가하는 것만으로도 (DB와 같은)소스에 String값을 입력해준다. 물론 순서값을 입력해주는 Option인 ORDINAL로 입력이 가능하지만 의도치않게 enum값의 순서가 바뀌는 경우가 생기면 데이터가 꼬이기 때문에 권장하지 않는다. enum class UserType { NORMAL, ADMIN; } @Column(name = "user_type", length = 70) @Enume..

Event 처리는 비동기가 아니다?
Spring 2022. 8. 17. 13:25

비동기 처리를 위해서 이벤트를 발행하는 방식을 선택하는 경우가 있다. 나 역시도 그랬는데 사용하다가 궁금증이 생겼다. 그냥 Async 어노테이션을 달아 놓은 것과 EventListener를 적용한 것은 어떤 차이가 있을까? 결과부터 얘기하자면 모든 Event 처리 방식은 비동기가 아니다. 그것을 확인할 수 있는 테스트를 해보았다. 해당 테스트는 정아마추어님 블로그를 상당히 많이 참고했다. 테스트 전 준비 먼저 Event 모델을 만들었다. EventListener를 그냥 사용했을 때와 Asnyc 어노테이션과 함께 사용했을 때를 구분하기 위한 모델을 각각 만들었다. data class SampleEvent( val name: String, val email: String ) // 비동기용 data class..

스프링부트에서 쿠키(Cookie)를 구워보자
Spring 2022. 7. 28. 19:19

쿠키? 먹는거 그거? 크롬 브라우저를 열고 네이버에 접속해서 로그인을 한다. 그리고 새로운 탭을 열어서 네이버에 접속하면 로그인된 화면을 볼 수 있다. 이 상태에서 엣지나 웨일같이 다른 브라우저를 통해 네이버에 접속하면 해당 화면에서는 로그인이 되어 있지 않은 모습을 볼 수 있다. 당연하다고 생각했던 모습. 그런데 생각해보면 신기하다. 새로운 탭 화면과 새로운 브라우저 화면, 이 두가지 경우에 어떤 차이가 있길리 다르게 나타나는 것일까? 답은 쿠키(Cookie)에 있다. 쿠키는 일종의 파일이다. 유저가 통신 중에 본인을 인증하기 위해 클라이언트에 보관하는 파일이다. 저장된 쿠키를 서버에 전달해서 이 사용자임을 확인한다. 앞 예시를 떠올려보자. 크롬 브라우저에 쿠키가 저장을 할 수 있어서 새 탭으로 네이버..

Mockito가서 몰디브 한 잔, 긔? (with Kotlin)
Spring 2022. 7. 20. 16:09

Mockito는 mocking framework 중 하나이다. Java 진영에서 가장 많이 쓰이는 목 프레임워크로 스프링이나 안드로이드 개발하는 분들이라면 들어봤을 수 있다. 간단하게 Mock이 무엇인지 Mockito가 무엇인지 조금만 다뤄보자. (참고로 여기서는 JUnit과 관련해서는 자세히 다루지 않는다.) Mock? Mockito? 목(Mock)이라는 단어는 개발 분야가 아니더라도 사용하는 곳이 많다. 실제 구현보다 가상 혹은 모의의 형태가 필요할 때가 있다. 간단한 테스트나 프로토타입을 공유할 때인데 이럴 때 Mock을 사용한다. 개발에서는 실제 객체를 만드는데 부담이 될 때 사용하는 모의 객체를 Mock이라고 한다. 테스트를 할 때 주로 사용되며 비용과 시간, 의존성 이슈에서 많은 이점을 가진다..

data.sql이 동작하지 않을 때, 의심해봐야 할 것
Spring 2022. 7. 13. 10:39

스프링에서 test 패키지 내부에 data.sql을 넣은 것만으로도 data.sql 내부의 쿼리를 실행시킬 수 있다. 이런 방법으로 테스트용 더미 데이터를 생성하고 테스트를 동작시킬 수 있다. 비슷한 방법으로 DDL 동작이 필요한 경우에는 schema.sql을 만들어 내부에 create 등을 넣어두기만 하면 된다. 그런데 만약 schema.sql은 잘 동작하는데, data.sql이 제대로 동작하지 않는다면? 테스트에서 테이블이 생성되었지만 원하는 데이터가 나오지 않아 에러를 출력하는 경우가 있다. data.sql은 파일을 추가만 하면 되는 것이어서 별도의 세팅이 없기에 더욱 원인을 찾기 힘들다. 스프링 버전 및 sql.init.mode 이슈 내 경우에는 크게 두가지 원인이 있었다. 하나는 스프링 버전. ..

Google Oauth - Token 획득하기 (Signup/Signin용)
Spring 2022. 3. 30. 16:30

구글 ID를 통해 회원가입 및 로그인을 하는 서비스를 많이 보았을 것이다. 이를 개발하는 방법을 여기서 다루어본다. 또한 필자가 당황했던 포인트도 같이 다룬다. 여기서 각자의 서비스에서 사용되는 로그인과 가입과 관련한 로직은 나오지 않는다. 오직 Oauth 토큰 획득에 포커싱이 맞춰져 있으니 Signup/Signin 로직을 찾는 분들은 다른 곳에 문을 두드리길 권한다. 들어가기 앞서 아래 사항이 이미 준비되어 있음을 가정하고 시작한다. 만약 준비가 안되어 있다면 Google 개발자 문서 혹은 다른 개발자의 자료를 통해 준비하는 방법을 확인하길 바란다. 개발용 구글 계정 사용자 인증 정보 생성 아래의 클라이언트 ID를 획득하기 위함이다. 웹 애플리케이션의 클라이언트 ID 다음 URL로 시작하는 화면에서 클..

코틀린 환경에서 Async 어노테이션 테스트하기
Spring 2022. 2. 8. 16:19

비즈니스 로직을 처리하다보면 비동기처리를 하고 싶을 때가 있다. 여러가지 방법이 있지만 스프링에서는 Async 어노테이션을 사용하여 비동기 처리가 가능하다. 하지만 Async를 바로 적용하기 보다 테스트를 먼저 해보고 싶다는 생각이 들 수 있다. 동작 방식 등을 이해하고 싶다거나 비즈니스 로직이 비동기 처리에 적합한지 확인하기 위해서 테스트에서 Async를 사용하고 싶을 수 있다. 그래서 테스트에서 Async를 어떻게 적용할 수 있는지 설명해보겠다. 아래에 공개되는 모든 코드는 필자의 깃헙에도 있으니 참고하시면 되겠다. ⚠️ 경고 ⚠️ 여기서는 다음과 같은 내용은 자세히 다루지 않습니다. 별도로 찾아보시길 권합니다. > 동기/비동기, 쓰레드, 멀티쓰레드 등 🍿 @Async란 스프링 프레임워크에서 제공하는..

Kotlin에서 RestTemplateClient를 만들어보자
Spring 2021. 12. 23. 19:37

시작하기 앞서 난 코틀린도 RestTemplate도 제대로 이해하지 못한다. 물론 사용은 하고 있었으나 제대로 알고 사용하는 것과는 거리가 있었다. 그래서 기본적인 내용부터 포스팅에 담을 것이다. 누군가에게는 매우 기본적인 내용이 될 수 있으니 필요에 따라 내용을 필터링하여 읽으시길 권한다. ✅ 필요한 사전 지식 - 코틀린 기초 지식 - Spring framework 다음의 3단계로 개발을 진행한다. 1. RestTemplateClient : RestTemplate을 가지고 있는 추상 클래스 2. RestTemplateConfig : RestTemplate을 주입하는 설정파일 3. 실제 API를 호출하는 Service 혹은 Client 개발 RestTemplateClient API를 호출하는 곳에서 쉽게..

미해결사건. @Valid가 작동하지 않는다??
Spring 2021. 12. 15. 11:37

서두 본 글은 코틀린 + 스프링부트 환경에서 @Valid가 동작하지 않는 케이스를 다루었고 해당 이슈를 완전히 해결하지 못했음. 해결을 하기는 했는데 해결이 된 이유를 알 수 없음. 완벽한 해결책을 찾고자 했다면 "뒤로가기" 버튼을 누르기 바람 설명에 앞서 개발환경을 간단히 소개하고자 한다. 혹시나 나와 비슷한 상황을 겪고 이를 해결한 분이 계시다면 댓글로 안내를 부탁드...립니다. (제발) 아래는 gradle 스크립트 중 일부이다. plugins { id("org.springframework.boot") version "2.5.0" id("io.spring.dependency-management") version "1.0.11.RELEASE" kotlin("jvm") version "1.5.10" ko..

스프링 게이트웨이에서 dev, prod 등 여러 환경 적용하기
Spring 2021. 10. 7. 18:12

많은 곳에서 API 게이트웨이를 사용하고 있다. 그런데 이 용어의 뜻을 찾아보면 난해한 설명만 나와 있다. 그래서 나름대로 설명을 좀 쉽게 풀어보았다. 게이트웨이는 무엇인가. 위키피디아에서는 다른 네트워크로 들어가는 입구 역할을 하는 네트워크 포인트라고 나와 있다. 매우 적절한 설명이 아닐 수 없다. 그렇다면 이걸 바탕으로 API 게이트웨이를 설명할 수 있지 않을까. 이를 NHN 토스트 블로그에서 설명을 잘 하고 있다. 해당 설명을 좀 더 쉽게 풀어보면... 사용자(백엔드 개발자 혹은 인프라 담당자)가 설정한 라우팅 설정에 따르며, 여러개의 서비스에 향하는 클라이언트로부터의 요청을 받아서 각 엔드포인트(실제 API)로 (클라이언트를 대리하여) 요청하고 응답을 받으면 다시 클라이언트에게 전달하는 프록시 역..

728x90
반응형