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: ..
JPA의 표준 스펙은 Entity에 Serializable을 구현하도록 되어있다.@Data@Entity@Table(name = "catalog")public class Catalog implements Serializable{ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; ...} Serializable 객체의 직렬화를 지원하기 위한 인터페이스이다.직렬화는 객체를 바이트 스트림으로 변환하여 저장하거나 네트워크상에서 전송할 수 있는 형태로 변환하는 과정이다.이 인터페이스를 구현함으로써 자바의 직렬화 기능을 사용할 수 있다. 이러한 직렬화는 객체의 상태를 보존하고 다른 시스템 간에 객체를 공유/전송하기 위해 ..
레이어 간 의존성 관리를 위해 ui와 service, repository마다 모두 다른 dto를 사용한다고 가정해보자.이 경우 dto와 dto간 변환할 때마다 귀찮은 과정을 거쳐야 한다. User를 예시로 들어보자.repository 레이어의 User Entity와 service 레이어의 UserDto를 서로 변환하는 방법은 다음과 같다.1. Dto 내에서 객체 변환 메소드 만들기User entity@Entity@Builder@AllArgsConstructorpublic class User { @Id @GeneratedValue(Strategy = GenetrationType.IDENTITY) private Long id; private String userId; pr..
@Getter@NoArgsConstructor@AllArgsConstructor@JsonInclude(JsonInclude.Include.NON_NULL)public class UserResponseDto { private String name; private String address; List orders;}@JsonInclude는 자바 객체 -> JSON 데이터로 직렬화 할 때, 어떤 속성을 가진 객체를 직렬화하거나 하지 않을 지 지정한다. 클라이언트에게 null값을 전달해주지 않고, null인 데이터는 아예 JSON 데이터로 직렬화 하지 않고 전달하지 않을 때 @JsonInclude 어노테이션을 사용할 수 있다. ✅orders처럼 컬렉션을 가져오거나, 빈값이 있는 데이터가 많을 ..
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- 외부 마이크로 ..