SpringBoot 17

GraalVM 으로 SpringBoot 시작 시간 줄이기 (맛보기)

TL;DRGraalVM(지랄VM)은 Java 어플리케이션을 미리 컴파일하여 바로 시작될 수 있게 합니다. 시작 시 워밍업이 필요하지 않으며, 더 적은 리소스를 사용합니다. 대신 빌드가 느립니다. 자세한 정보는 https://www.graalvm.org/latest/docs/getting-started/ 시작시간 비교하기Spring Batch를 사용하였습니다. (아주 간단한 Job을 실행하였습니다.) 2.474s -> 0.114s 예시 코드 https://github.com/GHGHGHKO/migration-v3-with-graal migration-v3-with-graal/src/main at main · GHGHGHKO/migration-v3-with-graalMigrating from Spring B..

SpringBoot 2024.03.27

Kotlin Springboot Rest API 만들기 5 - jwt token, Spring Security로 인증 인가, 로그인 만들기

이전 포스팅에서는 Entity를 토대로 회원가입을 만들어보았습니다. 동시에 i18n을 포함한 Common Response body를 만들었습니다. 이번 포스팅에서는 jwt token, SpringSecurity로 로그인 만들기를 할겁니다. 전체 코드는 여기에 있습니다. API를 만들고 인터넷에 열어두면 위험 소지가 있습니다. 로그인, 회원가입 이외에 다른 API를 그냥 호출하면 401 오류가 나오게 설정하고 headers에 jwt 기반의 token 을 넣어야만 호출이 되도록 설정할 예정입니다. 여기서 사용될 Filters는 아래와 같습니다. A Review of Filters Spring Security는 공격에 대한 인증, 권한 부여 및 보호 기능을 제공하는 프레임워크입니다. SpringSecurity..

Kotlin 2023.01.23

Kotlin Springboot Rest API 만들기 4 - 회원가입, common response body 만들기

이전 포스팅에서는 앞으로 만들 Entity 구조를 간략하게 설명하고 예시로 우아하게 Entity를 구성하는 방법에 대해 작성하였습니다. 불필요한 쿼리는 사용하지 않는게 좋으니까요! 이번 포스팅에서는 위 Entity를 토대로 회원가입을 만들어보겠습니다! 동시에 i18n을 포함한 Common Response body를 만들어보겠습니다! + 약간의 SpringSecurity가 추가되어 있습니다. 다음 포스팅에서 다루겠습니다. 전체 코드는 여기에 있습니다. BaseEntity 생성하기 common.domain package안에 user_master에 들어갈 BaseEntity를 생성합니다. HTML 삽입 미리보기할 수 없는 소스 BaseEntity는 @MappedSuperclass annotation을 활용해서..

Kotlin 2023.01.17

Kotlin Springboot Rest API 만들기 3 - Entity 만들기

전체 코드 https://github.com/GHGHGHKO/pepega-blog-kotlin 이전 포스팅에서는 HelloWorld API를 개발 후 Postman을 활용하여 API를 호출하였습니다. 이번 포스팅에서는 앞으로 만들 Entity 구조를 간략하게 설명하고 예시로 우아하게 Entity를 구성하는 방법에 대해 작성하였습니다. 불필요한 쿼리는 사용하지 않는게 좋으니까요! 다음 포스팅에서 로그인과 회원가입을 만들어보겠습니다! 1. domain(entity) 생성 JPA에서 가장 중요하다고 생각되는 것이 entity입니다. https://spoqa.github.io/2022/08/16/kotlin-jpa-entity.html 스포카에서 Kotlin으로 JPA Entity를 정의하는 방법 도도카트 서비..

Kotlin 2023.01.03

Kotlin Springboot Rest API 만들기 2 - HelloWorld, REST API TEST CLIENT 사용하기

전체 코드 https://github.com/GHGHGHKO/pepega-blog-kotlin 이전 포스팅에서는 localhost:8080에 Username, Password를 입력하여 Whitelabel Error page를 확인했습니다. 이번 포스팅에서는 HelloWorld API를 개발 후 Postman을 활용하여 API를 호출합니다. 1. HelloWorldController 생성 package 이름 밑에 (본 글에서는 com.example.pepega) helloworld package를 생성하고 그 안에 HelloWorldController.kt를 생성합니다. HTML 삽입 미리보기할 수 없는 소스 @Controller, @RestController의 차이 https://dncjf64.tist..

Kotlin 2023.01.03

Kotlin Springboot Rest API 만들기 1 - 프로젝트 생성

전체 코드 https://github.com/GHGHGHKO/pepega-blog-kotlin 모든 IDE를 사용해도 좋습니다. 글에서는 Intellij를 활용합니다. IDE : Intellij IDEA OS : Windows 10 1. 프로젝트 생성 https://start.spring.io/ 위 링크에서 프로젝트를 생성합니다. JPA를 활용하기 위한 Spring Data JPA 무분별한 API 호출을 방지하기 위한 Spring Security 요청(Request body) 유효성 체크를 위한 Validation RESTful API를 생성하기 위한 Spring Web 로컬 테스트를 위한 H2 Database 개발 환경 구축을 위한 PostgreSQL(다른 DB도 상관 없습니다.) 코드를 Github에..

Kotlin 2023.01.02

RequestParam(required = true) null exception 하는 법

전체 코드 https://github.com/GHGHGHKO/goose-auth-api-server GitHub - GHGHGHKO/goose-auth-api-server Contribute to GHGHGHKO/goose-auth-api-server development by creating an account on GitHub. github.com @Operation(summary = "GooseAuth delete item uris", description = "id로 접속 정보의 uri들을 삭제한다.") @DeleteMapping(value = "/items/{itemIdentity}") public ResponseEntity gooseAuthDeleteItemUris( @Parameter(nam..

SpringBoot 2022.10.05

jib 배포, 코드 배포, 코드 컨테이너, 앱 컨테이너 만들기

https://alden-kang.tistory.com/1 jib를 이용한 자바 앱 컨테이너화 오늘은 구글 클라우드 도구 중 하나인 jib를 이용한 자바 애플리케이션 컨테이너화 과정에 대해 살펴보려고 합니다. jib가 무엇인지 궁금하신 분들을 위해 간단한 설명과 예제 애플리케이션을 alden-kang.tistory.com 해당 출처를 기반으로 만들었습니다. 본 블로그에서는 java 11을 활용했습니다. jib은 해당 명령어를 실행하면 설정되어 있는 컨테이너 장소에 이미지를 push 하는 명령어이다. 자세한 내용은 출처에 있다. 바로 시작 build.gradle에 아래와 같이 설정한다. plugins { id 'org.springframework.boot' version '2.7.1' id 'io.spri..

SpringBoot 2022.07.15

Docker로 프로젝트(Springboot), DB(Postgres), 캐시(Redis) 연동하기

취미생활로 프로젝트를 하나 시작했다. 아직 github에 push 하진 않았지만 시작 중 방법을 올려보려고 한다. # Use postgres/example user/password credentials version: '3' services: goose-auth-api: image: gudrb963/goose-auth-api:latest container_name: goose-auth-api build: context: . ports: - 8080:8080 depends_on: - postgres environment: - SPRING_DATASOURCE_URL=jdbc:postgresql://postgres:5432/gooseauth - SPRING_DATASOURCE_USERNAME=gooseauth..

Docker 2022.07.15

통신 중 실패했을 때 재시도하기 (@Retryable, @Recover)

@retryable, @recover, retryTemplate, execute method를 활용했다. 위 내용의 예시로 Redis 통신이 실패했을 때(끊어졌을 때) @Retryable, @Recover를 활용 혹은 method가 실패했을 때 retryTemplate.execute 메서드 활용 일정 횟수 재시도 하여 결과를 반환하는 방식을 사용할 것이다. Amazon ElastiCache for Redis면 Redis 통신이 실패할 일이 없겠지만 직접 구축한 Redis라면 언제나 통신이 실패할 일을 염두해 두어야 한다. 그래서 위 같은 로직을 만들었다. 흐름은 아래와 같다. @SpringBootApplication @EnableRetry public class SampleTokenApplication ..

SpringBoot 2021.12.22