라벨이 Spring Boot인 게시물 표시

Spring Boot Admin Server, Client config 설정하기

이미지
 Spring Boot로 많은 프로젝트를 진행하게 됩니다. 많은 모니터링 도구가 있지만, Spring Boot 어플리케이션을 쉽게 모니터링 할 수 있는 방법을 소개하려고 합니다.   코드 중심으로 살펴보겠습니다. 1. 어드민 서버 구축 1-1. 디펜던시 추가 dependencies { // https://mvnrepository.com/artifact/de.codecentric/spring-boot-admin-starter-server implementation 'de.codecentric:spring-boot-admin-starter-server:2.5.4' } 1-2. 어드민 서버 설정 활성화 @SpringBootApplication @EnableAdminServer public class ServerApplication { public static void main (String[] args) { SpringApplication. run (ServerApplication. class, args) ; } } EnableAdminServer를 하면 됩니다. 2. 클라이언트 서버 설정  예제는 book-client, member-client 2가지 클라이언트, member-client가 2개의 인스턴스 실행으로 작성했습니다.  2-1 디펜던시 추가 dependencies { // https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web implementation 'org.springframework.boot:spring-boot-starter-web:2.5.4' // https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-actuator implementation 'org.spring...

Spring Boot Admin Server, Client config 설정하기

이미지
 Spring Boot로 많은 프로젝트를 진행하게 됩니다. 많은 모니터링 도구가 있지만, Spring Boot 어플리케이션을 쉽게 모니터링 할 수 있는 방법을 소개하려고 합니다.   코드 중심으로 살펴보겠습니다. 1. 어드민 서버 구축 1-1. 디펜던시 추가 dependencies { // https://mvnrepository.com/artifact/de.codecentric/spring-boot-admin-starter-server implementation 'de.codecentric:spring-boot-admin-starter-server:2.5.4' } 1-2. 어드민 서버 설정 활성화 @SpringBootApplication @EnableAdminServer public class ServerApplication { public static void main (String[] args) { SpringApplication. run (ServerApplication. class, args) ; } } EnableAdminServer를 하면 됩니다. 2. 클라이언트 서버 설정  예제는 book-client, member-client 2가지 클라이언트, member-client가 2개의 인스턴스 실행으로 작성했습니다.  2-1 디펜던시 추가 dependencies { // https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web implementation 'org.springframework.boot:spring-boot-starter-web:2.5.4' // https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-actuator implementation 'org.spring...

RestTemplate Config 설정 responseType Map 으로 응답 받기

  http 요청을 사용하여 외부의 자원을 호출하여 사용할 때가 많이 있습니다. 이와 관련된 기본 예제를 살펴 보겠습니다. Spring boot 프로젝트라고 가정하겠습니다. 라이브러리 추가 implementation 'org.apache.httpcomponents:httpclient:4.5.13' 기본 설정 추가 import org.springframework.context.annotation. Bean ; import org.springframework.context.annotation. Configuration ; import org.springframework.http.client. HttpComponentsClientHttpRequestFactory ; import org.springframework.web.client.RestTemplate ; @Configuration public class RestTemplateConfig { @Bean public RestTemplate restTemplate () { HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory() ; requestFactory.setConnectTimeout( 1000 ) ; // 소켓 연결 타임아웃 requestFactory.setReadTimeout( 3000 ) ; // 소켓 연결 이후 응답 타임아웃 RestTemplate restTemplate = new RestTemplate(requestFactory) ; return restTemplate ; } } 클래스 객체 응답 받기 import lombok.extern.slf4j. Slf4j ; import org.springframework.b...

Spring boot redis cache config

이미지
   안녕하세요. RedisTemplate 에 이어 redis cache를 알아보겠습니다.   전편 : Spring boot redis RedisTemplate에 대하여   전편에서 한 Redis 설정이 되어 있다고 가정하겠습니다. 1. 의존성 추가 implementation 'org.springframework.boot:spring-boot-starter-data-redis' 앞에서 의존성 추가를 이미 했으면 추가할 필요가 없습니다. 2. 캐시키 정의하기 import lombok. Getter ; import lombok. RequiredArgsConstructor ; import java.time.Duration ; @RequiredArgsConstructor @Getter public enum RedisCacheKey { BOOK (CacheNames. BOOK , Duration. ofMinutes ( 2 )) , STORE (CacheNames. STORE , Duration. ofHours ( 1 )) , ; private final String cacheName ; private final Duration expired ; public static class CacheNames { public static final String BOOK = "book" ; public static final String STORE = "store" ; } } Book과 Store 2가지 종류를 정의했습니다. 캐시키를 생성할 때 prefix로 사용될 cacheName과 만료시간(expired)를 선언했어요. 3. 캐시키 생성기 정의하기 import org.springframework.cache.interceptor.KeyGenerator ; import org.springframework.util.StringUtils ; import j...

Spring boot redis RedisTemplate

이미지
 안녕하세요. 스프링부트 프로젝트의 RedisTemplate 에 대해 알아 보겠습니다. Redis는 구동 되고 있다는 가정하에 작성하였습니다. 1. 의존성 추가 implementation 'org.springframework.boot:spring-boot-starter-data-redis' 2. RedisTemplate 설정 추가 2-1 yaml 파일에 설정 정의만 추가 스프링 부트에 yaml 파일에 정의만 해주면 자동으로 생성됩니다. spring : redis : host : localhost port : 6379 이외에도 옵션이 많은데 참고 사이트 링크로  대체하겠습니다. 위와 같이 설정이 추가된 상태이면 RedisTemplate 빈을 주입받을 수 있습니다, @Autowired private RedisTemplate redisTemplate ; 이 상태에서 레디스에 저장된 내용을 살펴보겠습니다. 제가 redisTemplate을 사용하여 key가 3으로 저장하였는데, 3으로 값을 조회하면 값이 나오지 않습니다. key를 조회해보면 이상한 문자값으로 저장된 것을 볼 수 있습니다.  해당 키로 조회하는경우 결과도 마찬가지 입니다. 이것은 redis에 저장할때 직렬화(serialize)/역직렬화시 JDK 방식으로 진행되기 때문입니다. 2-2 RedisConfig 설정 추가하기 앞의 문제를 해결하기 위해서 직접 설정 커스텀하여 추가할 수 있습니다. import lombok.extern.slf4j. Slf4j ; import org.springframework.beans.factory.annotation. Autowired ; import org.springframework.boot.autoconfigure.data.redis.RedisProperties ; import org.springframework.context.annotation. Bean ; import org.springframework.context....

Oauth jwt example

이미지
Oauth jwt API WEB 예제 샘플 코드 https://github.com/withccm/oauth-jwt-example API 서버와 WEB 클라이언트 oauth 로그인 인증 예제로 구성

Spring boot webflux + mysql

스프링 부트의 webflux의 rest api 예제 입니다. 샘플 코드 https://github.com/withccm/spring-webflux-study/tree/feature/webflux-mysql-sample 북 테이블 CREATE TABLE `book` ( `id` int ( 11 ) NOT NULL AUTO_INCREMENT , `bookname` varchar ( 200 ) DEFAULT NULL , PRIMARY KEY (`id`) ) ; 1. 의존성 추가 implementation 'org.springframework.boot:spring-boot-starter-data-r2dbc' runtimeOnly 'mysql:mysql-connector-java' implementation 'dev.miku:r2dbc-mysql' 2. spring data r2dbc bean 등록 @Configuration @EnableTransactionManagement @EnableR2dbcRepositories public class DataSourceR2DBCConfig extends AbstractR2dbcConfiguration { @Bean @Primary public ConnectionFactory connectionFactory () { ConnectionFactoryOptions options = ConnectionFactoryOptions. builder () .option(ConnectionFactoryOptions. DRIVER , "pool" ) .option(ConnectionFactoryOptions. PROTOCOL , "mysql" ) .option(ConnectionFactoryOptions. HOST , "localhost" ...