application.yml 등의 설정 파일에는 DB의 아이디나 비밀번호 등 민감한 정보가 포함된다. spring: rabbitmq: host: 127.0.0.1 port: 5672 #web접속은 15672 username: guest password: guest이 때, 위와 같이 password와 같은 정보를 평문 그대로 설정파일에 노출하게 되면 해킹이나 도난 발생 시 심각한 보안 문제가 될 수 있다. 이를 방지하기 위해 설정 정보를 암호화하여 서버에 저장하는 것이 중요하다.일반적으로는 대칭키 방식과 비대칭키 방식 두 가지 방법을 사용하여 설정 정보를 암호화할 수 있다.관리가 까다롭긴 하지만, 보안성을 고려하면 비대칭키 방식이 더 안전하다. ..
🔹 Acturator 문제점이전 글에서는 Acturator를 사용하여 config 파일들을 수정하였다.하지만 이 방법은 Spring Cloud Config에서 설정 파일(yml)이 변경되면, 각각의 마이크로서비스에서 직접 /actuator/refresh를 호출해야 변경된 데이터를 가져올 수 있다.따라서, 모든 마이크로서비스에서 개별적으로 refresh를 호출해야 하는 불편함이 있을 수 있다.이를 해결하기 위해 Spring Cloud Config + Spring Cloud Bus를 활용할 수 있다. 1️⃣ Spring Cloud Config + Spring Cloud Bus 사용Spring Cloud Bus는 경량 메시지 브로커(RabbitMQ, Kafka)를 통해 변경 사항을 모든 마이크로서비스에 자..
🔹 기존 문제Spring Cloud Config에서 설정 파일(yml)이 변경될 때마다 마이크로서비스를 재기동해야 적용되는 문제가 발생한다.이러한 비효율적인 과정을 줄이기 위해 다음과 같은 방법을 사용할 수 있다. Spring ActuatorSpring Boot의 Actuator를 사용하여 마이크로서비스를 재시작하지 않고 설정을 동적으로 갱신하는 방법이다. 1️⃣ Actuator 및 Bootstrap 의존성 추가 org.springframework.boot spring-boot-starter-actuator org.springframework.cloud spring-cloud-starter-bootstrapSpring Cloud 최신 버전에서는 bootstrap.yml이 자동 ..
MSA(Microservices Architecture)와 같은 분산 시스템에서는 서버 클라이언트 구성에 필요한 설정 정보(application.yml 등)를 외부 시스템에서 관리할 수 있다.이를 통해 서비스를 다시 빌드하지 않고 바로 적용할 수 있으며, 배포 파이프라인을 통해 DEV, UAT, PROD 환경에 맞는 구성 정보를 사용할 수 있다. 1️⃣ 관리해야 할 YML 파일 생성설정 파일을 Git Repository로 관리하는 방법이다. 예를 들어, ecommerce.yml 파일을 생성하여 아래와 같이 관리한다.token: expiration_time: 86400000 secret: usertokenforjwtsforlongnumberwherecanitbegothroughgateway: ..
Eureka는 디스커버리 서비스,Spring Cloud Gateway는 API 게이트웨이 서비스로 LoadBalancer 기능을 한다. 즉, 클라이언트가 8000포트의 API Gateway로 요청을 보내면, API Gateway는 유레카로부터 마이크로서비스가 어디에 위치해있는지 정보를 가져온다. 그 뒤에 해당하는 정보로 직접 포워딩시켜준다. 따라서 클라이언트 요청 -> API Gateway -> Eureka -> API Gateway -> MicroService의 순서가 된다. 1.API Gateway 서비스 설정하기유레카 설정이 필요하다. application.ymleureka: client: register-with-eureka: true fetch-registry: true ..
기존의 Netfilx Zuul의 단점 : 비동기/Functional 지원 X 또는 스프링 라이브러리와 호환성 문제 Spring Cloud Gateway- 비동기 서비스 지원- 서블릿 X -> 기존에 사용하던 ServletRequest/Response 쓰지 않고 ServerRequest/Response 사용 1. Spring Cloud Gateway 서버 구성하기application.ymlserver: port: 8080eureka: client: register-with-eureka: false fetch-registry: false service-url: defaultZone: http:localhost:8761/eurekaspring: application: na..
1. API 게이트웨이 서비스사용자의 라우팅 설정에 따라서 클라이언트를 대신해 요청하고 응답을 받으면 클라이언트에게 전달해주는 proxy 역할 시스템 내부구조 숨기고 외부의 요청에 대해 적절한 형태로 가공해 응답 가능 모바일/웹 앱에서 요청한 것(프론트 형태에 상관없이)을 API게이트웨이가 각각의 마이크로 서비스로 요청되는 모든 정보에 대해 일괄처리클라이언트는 마이크로서비스를 직접 호출하지 않고, API 게이트웨이만 상대. 스프링 클라우드에서 MSA간의 통신 방법1. RestTemplate 2. Feign Client 로드밸런서 위치?1) Netflix Ribbon : 현재는 비동기처리가 잘 되지 않아 사용하지 않음 -> 현재는 Spring cloud loadbalancer- 외부 마이크로 ..
0️⃣ 들어가기 전Git + Jenkins + Docker로 서버와 CI/CD구축하기 에서는 만들어진 Spring boot Docker 이미지를 바탕으로 CI/CD 할 수 있도록 Jenkins 서버를 구축해보았습니다.이번에는 이 CI/CD를 적용할 Spring boot 프로젝트를 Docker 이미지로 빌드하는 과정을 기록해보겠습니다. ✔️ 서버 구성 1️⃣ EC2 서버 설정1. 필요 패키지 설치$ sudo apt update$ sudo apt upgrade$ sudo apt install build-essential$ sudo apt install apt-transport-https ca-certificates curl software-properties-common 2. docker 설치$ sudo w..
0️⃣들어가기 전 이 글은 프로젝트를 완성한 뒤, 프로젝트를 직접 배포하는 과정을 기록하는 글입니다.위와 같이 Ec2로 서버를 구성하고 Github, Jenkins, Docker를 사용해 CI/CD를 구축해보겠습니다.현재 Spring boot 서버로 통합하여 구현하긴 했지만, mysql과 swagger 서버도 각자 분리하는 것이 더 바람직합니다. ✔️ 플로우Jenkins 서버Git clone → Gradle 빌드 → Dockerfile로 도커 이미지를 빌드 → Docker Hub에 Image PushSpring boot 서버Docker Image pull → docker compose up 1️⃣ 인스턴스 생성jenkins 서버와 개발서버(spring boot 서버)를 위해 총 2가지 인스턴스를 생성해야..