분류 전체보기

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: ..
Spring boot 3 기준 Spring Security를 다시 사용해보는 과정에서 새롭게 알게된 사실을 정리해보겠다.  1. Authentication Filter(=Jwt Filter) 적용 시 passwordencoder 자동 적용기존 프로젝트에서는 Filter에서 사용자 입력값인 password를 일일이 encoder를 적용해 db값과 비교해주는 로직을 추가했었다. 기존 코드/* 로그인 */@Transactionalpublic TokenDto login(LoginDto loginDto){ Member member = memberRepository.findByEmail(loginDto.getEmail()) .orElseThrow(() -> new EmailNotFoundE..
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처럼 컬렉션을 가져오거나, 빈값이 있는 데이터가 많을 ..
서버 구성 서버 구성요소Git : 소스/프로파일 관리Config Server : 프로파일/설정 정보Eureka Server: 마이크로서비스 등록/검색API Gateway Server: 마이크로서비스 부하 분산/서비스 라우팅Microservices: 회원, 주문, 상품Queuing System: 마이크로서비스 간 메시지 발행/구독마이크로서비스 (API) 구성요소회원 user-service:  사용자 정보 등록, 조회, 사용자정보/주문내역 조회주문 order-service: 주문 등록, 주문 확인상품 catalog-service: 상품 목록 프로젝트 환경spring boot 3.4.1java 17h2 database, jpaEureka + Spring Cloud Gateway이 둘은 클라우드 네이티브 시스템..
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 ..
달래dallae
'분류 전체보기' 카테고리의 글 목록