SpringBoot 15

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

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

String, StringBuilder, StringBuffer 사용법 및 차이

String 불변(Immutable) String text = "Hello World" text += "!!!!" // Hello World!!!! "Hello World" + "!!!!" 내용이 합쳐져서 "Hello World!!!!" 처럼 보일 수 있지만 text가 가지고 있는 "Hello World!!!!" 값은 새로운 메모리 영역을 가르키게 된다. 처음 선언했던 "Hello World" 로 할당 되어있는 메모리 영역은 Garbage로 남아있다가 GC(Garbage Collection)에 의해 사라지게 된다. String은 불변하기 때문에 문자열을 다시 선언하는 시점에서 새로운 String 인스턴스가 생성된 것이다. 변하지 않는 문자열을 자주 호출할 경우 String 클래스가 적절할 수 있으나 문자..

SpringBoot 2021.12.23

통신 중 실패했을 때 재시도하기 (@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

DB 통신 속도 증가 Cacheable CacheEvict redis 활용

무작정 Cache를 사용하게 되면 오히려 성능 저하가 올 수 있다. 따라서 자신이 가지고 있는 비즈니스로직에 정말 필요하다면 활용하길 바란다. @Cacheable, redis, @CacheEvict, redisConfig(lettuce) IDE : Intellij DB : Redis 글에서는 토큰 관리를 위해Redis, Cacheable, CacheEvict를 활용하였다. 하루 한 번 토큰을 갱신하는데계속 DB에 접근하기에는 성능이 저하가 우려되어 Cache 용도로 Redis를 활용하게 되었다. 흐름은 아래와 같다. RedisConfig 설정 @Configuration @EnableCaching public class RedisConfig { @Value("${spring.redis.host}") pri..

SpringBoot 2021.12.21

Junit에서 assertThat(.isEqualTo) 활용하기

assertThat의 isEqualTo method를 사용하였다. 원하는 메소드에 대한 return 값이 내가 원하는 값과 같으면 패스가 된다. 가독성도 좋고 이해하기도 편한 것 같다. assertThat(methodCall("35-48jf3-y46").getResultDetail()) .isEqualTo("Success"); assertThat(methodCall("35-48jf3-y46").getData().get(0).getStatus()) .isEqualTo("11"); assertThat(methodCall("35-48jf3-y46").getData().get(1).getNameCode()) .isEqualTo("91"); assertThat(methodCall("invalid").getData..

SpringBoot 2021.10.22

springboot로 Rest api 만들기(8) SpringSecurity를 이용한 인증 및 권한부여

전체 소스코드 https://github.com/GHGHGHKO/Springboot/tree/main/pepega_chapter_8 GitHub - GHGHGHKO/Springboot: 블로그에 업로드 된 소스코드 블로그에 업로드 된 소스코드. Contribute to GHGHGHKO/Springboot development by creating an account on GitHub. github.com 이전 포스팅에서는 Spring에서 메시지를 처리하는 방법에 대해서 알아봤고 MessageSource를 이용하여 Exception Message를 고도화하였다. swagger에서 response body의 내용을 한글, 영어로 바꾸며 도출하는 내용을 포스팅 했었다. ​ 이번 포스팅에서는 SpringSecu..

SpringBoot 2021.10.22

springboot로 Rest api 만들기(7) MessageSource를 이용한 Exception 처리

시작 전 변경 사항이 있다! (2022.07.18 수정) https://github.com/akkinoc/yaml-resource-bundle/issues/103 bug: No libraries found for 'dev.akkinoc.util.YamlResourceBundle' · Issue #103 · akkinoc/yaml-resource-bundle Describe the bug use Gradle Groovy DSL I found No libraries found for 'dev.akkinoc.util.YamlResourceBundle' To Reproduce implementation 'dev.akkinoc.util:yaml-resource-bundle:2.4.1'... github.com 해..

SpringBoot 2021.10.22

springboot로 Rest api 만들기(6) ControllerAdvice를 이용한 Exception 처리

전체 소스코드 https://github.com/GHGHGHKO/Springboot/tree/main/pepega_chapter_6 GitHub - GHGHGHKO/Springboot: 블로그에 업로드 된 소스코드 블로그에 업로드 된 소스코드. Contribute to GHGHGHKO/Springboot development by creating an account on GitHub. github.com ​ 이전 포스팅에서는 본격적으로 API 서버 개발을 하기 전 API 인터페이스 및 결과 데이터 구조를 살펴보고 확장 가능한 형태로 설계해보았다. ​ API 성공에 대한 내용만 포스팅했지만 이번 포스팅에는 실패 시 ExceptionHandling과 결과 Message 처리에 대한 내용을 살펴보도록 하겠다...

SpringBoot 2021.10.22