Spring 8

Spring
[MSA 구축해보기_1] SpringBoot + Spring Cloud Gateway

사전 지식 - Spring Cloud Gateway 는 WebFlux와 Reactor 프로젝트를 기반으로 비동기적으로 만들어졌다. - Servlet 대신 netty 서버를 이용한다. - 마이크로 서비스를 위한 API Gateway는 늘어난 http 통신을 빨리빨리 처리하기 위해 nonblocking & asynchronus 하게 돌아가야한다. 인증서버 역할 로그인/회원가입 페이지 MVC Refresh Token과 Access Token 발행 로그아웃 블랙리스트 관리 Refresh Token db 관리 Gateway 첫 토큰 발행 요청(로그인 요청)을 받으면 인증 서버로 전달해서 Access token과 Refresh Token 받아와서 Client에 전달 Client로부터 Refresh Token을 받으..

Spring/Kotlin
[Kotlin + Springboot + JPA] Entity 연관관계 (지연로딩, OrphanRemoval 확인) by Kotlin

Kotlin으로 Springboot 를 해보면서 정상적으로 JPA가 연관관계를 정상적으로 매핑하고 동작하는지 궁금하였다! 그래서 간단한 게시글에 댓글을 구현하여서, Post 엔티티와 Comment 엔티티를 일대다 관계로 매핑을 해보자! 1. Post Entity @Entity @Table(name = "post") class Post( @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "post_id") var id: Long = 0, var title: String, var contents: String, @ColumnDefault("0") var view: Long = 0, @Enumerated(EnumType.STRING)..

Spring/Kotlin
[Kotlin+Springboot+JPA] Exception Handling by Kotlin

사용할 클래스 1. ErrorCode : 모든 예외 케이스를 관리 하는 클래스. 2. ErrorResponse: JSON 형식으로 에러 응답 형식 작성. 3. Exception: 기본적으로 제공되는 Exception 이외에 추가할 Exception (예시로 EntityNotFound 그냥 구현). 4. GlobalExceptionHandler - @ControllerAdvice: 프로젝트 전역에서 발생하는 Exception을 잡아주는 클래스 - @ExceptionHandler: 특정 Exception 을 지정해서 별도로 처리함. 1. ErrorCode를 Enum 클래스로 정의 해준다. enum class ErrorCode( private val status: Int, private val errorCod..

Spring/Kotlin
[SpringBoot + Kotlin + JPA] 간단한 게시글 CRUD REST Api 구현.

코틀린으로 server-side 를 공부하기 위해서, 일단 한번 무작정 게시글 작성, 삭제, 수정, 조회 기능을 갖춘 REST Api 를 구현해 보았다. 주요기능 - 게시글 생성 - 게시글 삭제( 실제 DB에서는 보존, 사용자는 조회 불가) - 게시글 수정 - 게시글 조회 ( 조회수 증가) 프로젝트 위 과정의 모든 소스코드는 아래에서 확인하실 수 있습니다.

Spring/Kotlin
[Springboot + Kotlin] Slack 채널 메세지 전송 연동.

동기 새로운 게시글이 작성될 때, 알림을 받고 싶어서 slack 을 이용하기로 정하였고 가벼운 실습을 진행하기로 하였다. 1. Slack -> 앱 -> " Incoming WebHooks"를 추가해준다! 추가를 하고나서, 원하는 채널을 생성 또는 선택 하면 생성되는 WebHook URL 을 복사해줍니다. 예시 : https://hooks.slack.com/services/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 !! 다음과 같은 설정을 할 수 있습니다! !! 2. 프로젝트의 applicatiion.yml 파일에 아래 내용을 추가합니다! (저는 게시글을 생성하면 Slack 에 메세지를 전송해주기 위한 목적으로 생성하겠습니다.) slack: webhook-ur..

Spring/Kotlin
[Kotlin + Springboot + Kotest] Kotest 알아보자.

코틀린으로 서버사이드로 개발을 하던 도중, kotest 라는 테스트 툴에 대해서 알게되었다. 한번 사용해보자! Kotest 준비 Maven dependency 추가해주기. io.kotest kotest-runner-junit5-jvm 4.6.1 test io.kotest kotest-assertions-core-jvm 4.6.1 runtime gradle dependency 추가해주기. //kotest 추가. runtimeOnly("io.kotest:kotest-assertions-core-jvm:4.6.1") testImplementation("io.kotest:kotest-runner-junit5-jvm:4.6.1") Intellij 에서도 플러그인 설치를 해줘야 함! Kotest 사용해보기! 우선 ..

Spring/Kotlin
[Kotlin + Springboot + JPA] Entity 생성에 관하여.

무작정 코틀린에 대해서 접하였고 기본적인 문법을 공부하고, 간단한 게시판CRUD를 만들면서 참고할만한 글들을 찾아보는데 어떠한 글은 Entity 생성시 data class 를 사용하는 글과, 일반 class를 사용하는 경우가 다양하여서 한번 무슨차이가 있을지 정리해보고 싶었다. 우선 data class 가 뭔지 살펴보자!! 간단한 정보만 정리해보면, https://kotlinlang.org/docs/data-classes.html data 를 저장하기 위한 클래스라고 한다. 컴파일러가 자동으로 primary constructor 의 properties 로 부터 아래의 멤버들을 생성한다. equals() / hashCode() toString(); 선언 순서대로 각 property 에 해당하는 compon..

Spring/Kotlin
[Kotlin + SpringBoot + JPA] Swagger 설정 및 동작

Swagger 사용 설정 저는 본격적인 개발을 시작하기 전에, Swagger를 사용 설정을 해주었습니다. 1. 우선 필요한 해당 의존성을 추가해주었습니다. //swagger 추가. implementation("io.springfox:springfox-swagger2:2.9.2") implementation("io.springfox:springfox-swagger-ui:2.9.2") 2. @Configuration을 추가해주었습니다. @Configuration @EnableSwagger2 class SwaggerConfig { @Bean fun api(): Docket { return Docket(DocumentationType.SWAGGER_2) .select() .apis(RequestHandlerSe..