Spring

    스프링부트 공유라이브러리 만들고 jitpack으로 배포하기 - 2편

    스프링부트 공유라이브러리 만들고 jitpack으로 배포하기 - 2편

    스프링부트 공유라이브러리 만들고 jitpack으로 배포하기 - 1편 스프링부트 공유라이브러리 만들고 jitpack으로 배포하기 - 2편 깃허브 주소 : https://github.com/Sangyong-Jeon/practice_core-service 3. 모든 서비스에 공유할 클래스 만들기 저는 Filter를 만들겠습니다. 이 필터는 요청이 들어오면 콘솔창에 log를 남깁니다. 공유할 클래스를 만드시면 됩니다. 4. 라이브러리 jar 파일로 만들기 위한 준비작업 실행가능한 jar 파일로 빌드하지 않도록 빌드 시스템을 비활성화시키는 작업. 이 작업에서 SpringBootPlugin 비활성화하여 bootJar도 비활성화하고, 실행가능한 jar로 빌드할 수 없게 설정함. 스프링부트 의존성 관리를 위해 bom을..

    스프링부트 공유라이브러리 만들고 jitpack으로 배포하기 - 1편

    스프링부트 공유라이브러리 만들고 jitpack으로 배포하기 - 1편

    스프링부트 공유라이브러리 만들고 jitpack으로 배포하기 - 1편 스프링부트 공유라이브러리 만들고 jitpack으로 배포하기 - 2편 깃허브 주소 : https://github.com/Sangyong-Jeon/practice_core-service 작성 이유 SpringBoot(스프링부트)와 Gradle, Java로 라이브러리 만드는 자료가 많이 없었음 Maven은 꽤 있었으나 Gradle은 많이 안보였음 JitPack 으로 배포하는 방법도 있기는 했으나 나에겐 잘 안되던 것들이었음 시행착오를 많이 겪었던 부분이라 기록으로 남겨서 추후에도 사용하기 위함 기술 사양 Java 17.0.2 - Zulu SpringBoot 3.2 IntelliJ Github 간단한 동작 설명 공유 라이브러리(core-ser..

    Spring Cloud 마이크로서비스들은 어떻게 서로 통신 할 수 있을까? - Discovery Client

    어떻게 마이크로서비스(MS)들은 서로 위치를 알고 호출하는 걸까? Eureka(유레카)를 이용하여 서로 물리적 위치를 검색하여 찾기 때문이다. 서비스 디스커버리를 위해 MS들이 Spring Cloud Load Balancer(로드밸런서)와 상호 작용할 수 있는 3가지 방법을 찾아보자. 스프링 Discovery Client REST 템플릿을 사용한 스프링 Discovery Client 넷플릭스 Feign Client 🚀 스프링 Discovery Client Discovery Client와 표준 스프링 RestTemplate 클래스를 사용하여 호출 로드 밸런서와 그 안에 등록된 서비스에 대해 가장 낮은 수준 접근 가능 즉, Discovery Client를 사용하면 로드밸런서에 등록된 모든 서비스와 URL을 ..

    Spring Cloud 마이크로서비스들이 직접 Vault에서 값을 읽도록 만들어야 할까? - 보안과 유연성의 고민

    Spring Cloud 마이크로서비스들이 직접 Vault에서 값을 읽도록 만들어야 할까? - 보안과 유연성의 고민

    🚀 현재 상황 Spring Cloud Config Server (구성서버)는 가장 중요한 정보를 Vault에서 가져옴 (id, pw ...) 덜 중요한 정보는 Github를 통해 가져옴 (application.yml ...) application.yml에는 `${vault.gitId}`로 vault값을 사용하고 있음 application.yml 또는 application.properties에 굳이 ${vault.gitId}를 사용하지 않고, Vault에서 "spring.cloud.config.server.git.username" 키에 값을 넣으면 자동으로 적용되게 된다. 따라서 소스코드에서 Vault를 통해 값을 주입받는다는 기록을 남기지 않을 수 있다. 나는 왜 Vault에서 값을 가져온다고 명시했냐면..

    Spring Cloud Config Server - Vault 적용

    Spring Cloud Config Server - Vault 적용

    🚀 Spring Cloud Config 란? 분산 시스템에서 애플리케이션 구성 데이터를 하나의 중앙화 된 저장소에서 관리 가능 각 서비스를 다시 build(빌드)하지 않고 최신 구성 정보 적용 가능 스프링 및 스프링이 아닌 서비스와 긴밀한 통합 애플리케이션 환경에 맞는 구성 정보 사용 가능(dev, local. prod ...) 속성 값 암호화 및 해독(대칭 or 비대칭) MSA 인스턴스를 많이 실행하더라도 항상 동일한 구성 보장 가능 자체 프로퍼티(property) 관리 저장소가 있지만, 오픈 소스 프로젝트와도 통합 가능 Git(깃) Eureka(유레카) Vault(볼트) .... 그림처럼 Config Server는 외부 저장소에서 최신 구성 정보를 가져오고, 그것을 애플리케이션에게 줄 수 있습니다...

    Spring Cloud Config Client에서 actuator refresh 장애

    Spring Cloud Config Client 에서는 Config Server의 변경된 설정정보를 받기위해서는 actuator refresh 방법으로 설정정보를 갱신할 수 있다. 그런데 아무리 refresh를 해도 변경된 설정정보가 갱신이 안되는 장애를 겪었다. 아무리 살펴봐도 application.yml에 잘못적은 것이 아닌데 무엇이 문제인가 생각하다가 bootstrap 라이브러리때문인 것을 알게되었다. 🚀 상황 Spring Cloud Config Server에서 변경된 설정정보를 받으려고 Actuator refresh API 호출함 refresh API 호출하였지만 설정정보가 갱신되지 않음 🚀 문제해결 Spring Cloud Config 공식홈페이지에서 Spring Cloud Config Clien..

    로컬에서 동일한 SpringBoot 서버를 여러개 실행하는 방법

    로컬에서 동일한 SpringBoot 서버를 여러개 실행하는 방법

    스프링부트 1개의 서버를 로컬에서 여러개 띄워야하는 경우에는 여러 방법을 통해 실행할 수 있다. 🚀 IDE(통합개발환경) 사용하기 IntelliJ(인텔리제이)에서는 서버 옵션을 편하게 설정할 수 있다. 나는 인텔리제이 2022.2.3(Ultimate edition) 버전을 사용하고 있음. 1. 수동으로 포트번호 설정하기 인텔리제이 버전마다 다르지만 내가 사용하는 버전에서는 [옵션 수정] 버튼을 눌려서 VM 옵션을 추가해야 보인다. -Dserver.port=포트번호 VM 옵션에서 [포트번호적기]에 원하는 포트번호를 적으면 해당 포트번호로 서버가 실행되게 된다. 만약 "-Dserver.port=1234" 를 적었으면 1234 포트번호로 서버를 실행시킨다는 의미이다. 참고로 복제한 것에 이름은 바꿔주고 [적용..

    SpringBoot 랜덤포트로 실행하기

    🚀 상황 1개의 SpringBoot 서버를 여러개로 실행해야 함 따라서 포트번호를 서버마다 다르게 지정해야 함 수동으로 지정하는 것은 매번 관리하는 것이 어려움 🚀 해결 방법 server: port: 0 application.yml 또는 application.properties 에서 SpringBoot 서버 포트를 랜덤으로 사용하겠다고 설정 위 예시코드는 yml 이러면 포트가 중복되어도 해당 포트를 우회하여 다른 값을 설정하게 됨