[MSA] 서비스 운영을 편리하게 하기 #spring-cloud-config #spring-cloud-vault #spring-boot-actuator
·
BEYOND SW [3] 백엔드
각각의 서비스들을 운영하기 편하게 해주는, 서버를 올리고 운영할 때에 관련된 주제를 다루었다.spring-cloud-config : application.yml 파일을 하나의 github에서 관리하고, 올라가 있는 것중 원하는 것만 받아서 실행할 수 있음spring-boot-actuator : 스프링 서버의 상태를 모니터링할 수 있는 각종 기능. Application.yml 불러올 때 어떻게 불러와졌는지, openfeign에서 열림반열림 상태 등, 서버를 재시작하지 않고 yaml 파일 설정을 바꿀 수도 있음.spring-cloud-vault : 각 서버에 필요한 민감정보를 관리한다. (예. 환경변수) 클라이언트상품 마이크로 서비스:3개의 서비스를 각각 관리하는 것이 힘들다.주문 마이크로 서비스회원 마이크..
[MSA] SAGA 패턴: 동시성 제어 - (1)
·
BEYOND SW [3] 백엔드
0. 들어가기 전에0-1. MSA에 기본적으로 적용해야할 것들: MSA를 구현하기 위한 필수 패턴들 !성능☑️Database per service, ☑️CQRS장애 격리☑️Circuit Breaker // 예외처리를 어떻게 할 것인가데이터 동기화☑️Saga, ☑️Event sourcing // 동시성 제어 0-2. Saga 디자인 패턴Saga 디자인 패턴각 마이크로 서비스에 걸친 비즈니스 트랜잭션을 사가(Saga)로 구현합니다. 사가는 일련의 로컬 트랜잭션입니다. 각 로컬 트랜잭션은 데이터베이스를 업데이트하고 다음 로컬 트랜잭션을 트리거(trigger)하는 메시지 또는 이벤트를 발행합니다. 비즈니스 규칙 위반으로 로컬 트랜잭션이 실패하면 사가는 선행 로컬 트랜잭션에서 수행한 변경 사항을 취소하는 일련의 ..
[MSA] Circuit Breaker: 예외 처리를 어떻게 할 것인가? (w. Open Feign Client)
·
BEYOND SW [3] 백엔드
0. 들어가기 전에0-1. MSA에 기본적으로 적용해야할 것들: MSA를 구현하기 위한 필수 패턴들 !성능☑️Database per service, ☑️CQRS장애 격리☑️Circuit Breaker // 예외처리를 어떻게 할 것인가데이터 동기화☑️Saga, ☑️Event sourcing // 동시성 제어Circuit Breaker 디자인 패턴회로 차단기(Circuit Breaker)는 소프트웨어 개발에서 시스템의 복원력과 장애 허용성을 향상시키기 위해 일반적으로 사용되는 디자인 패턴입니다. circuit breaker 패턴은 특히 분산 시스템에서 연쇄 장애를 방지할 수 있습니다. 분산 시스템에서 circuit breaker 패턴은 서비스 상태를 모니터링하고 동적으로 장애를 감지하는 데 사용될 수 있습니..
[Spring Boot] @Builder 그리고 @NoArgsConstructor(access = AccessLevel.PROTECTED)
·
BEYOND SW [3] 백엔드
🗯️🗯️🗯️Builder를 JPA Entity에서 사용할 때 @NoArgsConstructor(access = AccessLevel.PROTECTED)를 함께 사용하는 것이 권장된다고 한다. 이유:JPA에서 프록시 객체 생성JPA는 엔티티 객체를 프록시로 생성할 때 기본 생성자가 필요하다. 기본 생성자가 private이면 JPA가 객체를 생성할 수 없다. 따라서 protected로 설정하는 것이 좋다.@Builder 사용 시 불필요한 기본 생성자 호출 방지@Builder를 사용하면 필드 기반으로 객체를 생성하는데, 이때 기본 생성자가 직접 호출될 일이 없다. 그렇지만 기본 생성자가 public이면 개발자가 실수로 직접 호출할 수 있는 가능성이 있다. protected로 설정하면 외부에서 직접 호출하..
[Spring Boot] 요청&응답을 위한 DTO 만들기 (+ JpaRepository @Entity, @Builder)
·
BEYOND SW [3] 백엔드
0. 복습💬 DTO의 필요성✔️ DTO = 레이어를 넘나들며 데이터를 주고받기 위한 객체✔️실습에서는 Inner Class 이너 클래스 형태로 DTO를 만들어 줄 것이다. JpaRepository 를 사용하면서 데이터베이스와 매핑되는 @Entity 클래스를 작성하게 된다. 그러나 프론트에서 post 요청을 하거나, 백엔드에서 get,post 요청에 대한 응답을 할 때엔티티의 모든 속성(데이터)이 다 필요하지 않다!  그러므로, JPA 매핑되는 엔티티 클래스에 추가로 DTO 클래스를 만들어준다!   [model 패키지]  서비스,  ⬇️복습@RestController 데이터 전달  #DTO_사용하기 [SpringBoot] "데이터 전달!!" @RestController 요청 처리 메서드의 파라미터 처리하..
2/27 [MSA] 서비스끼리 통신하기 (1) kafka - [실습] 모듈에서 적용해보기
·
BEYOND SW [3] 백엔드
🖥️[실습] MSA 서비스간 kafka 로 통신하기스프링부트 멀티모듈 프로젝트로 MSA 서비스 통신 구현하기https://khr2033.tistory.com/225 2/27 Spring Boot 멀티 모듈 프로젝트 구축 (IntelliJ IDEA ultimate)Spring Boot 멀티 모듈 프로젝트 구축💬💬Spring Boot 기반 멀티 모듈 프로젝트 구성하기회원가입 기능을 담당하는 api-user 모듈,;이메일을 처리하는 api-email 모듈 구성📝 실습환경설정Gradle/GroovySprkhr2033.tistory.com👆🏻 여기서 만든 프로젝트에 kafka 설정을 할 것이다 !! ⬆️⬆️ 단계kafka 서버 마련하기kafka 의존성 추가하기application.yml 설정하기kafk..
2/27 [MSA] 서비스끼리 통신하기 (1) kafka - [실습] 스프링부트 멀티 모듈 프로젝트
·
BEYOND SW [3] 백엔드
🖥️[실습] MSA 서비스간 kafka 로 통신하기스프링부트 멀티모듈 프로젝트로 MSA 서비스 통신 구현하기https://khr2033.tistory.com/225 2/27 Spring Boot 멀티 모듈 프로젝트 구축 (IntelliJ IDEA ultimate)Spring Boot 멀티 모듈 프로젝트 구축💬💬Spring Boot 기반 멀티 모듈 프로젝트 구성하기회원가입 기능을 담당하는 api-user 모듈,;이메일을 처리하는 api-email 모듈 구성📝 실습환경설정Gradle/GroovySprkhr2033.tistory.com👆🏻 여기서 만든 프로젝트에 kafka 설정을 할 것이다 !! ⬆️⬆️ 단계kafka 서버 마련하기 ✔️kafka 의존성 추가하기 ✔️ application.yml 설..
2/27 Spring Boot 멀티 모듈 프로젝트 구축 (IntelliJ IDEA ultimate)
·
BEYOND SW [3] 백엔드
Spring Boot 멀티 모듈 프로젝트 구축💬💬Spring Boot 기반 멀티 모듈 프로젝트 구성하기회원가입 기능을 담당하는 api-user 모듈,;이메일을 처리하는 api-email 모듈 구성📝 실습환경설정Gradle/GroovySpring Boot 3.xJPA & MariaDBLombok멀티 모듈 구조 (api-user, api-email)레이어드 아키텍처 적용 (Controller - Service - JpaRepository &  Entyty+DTO)추후 Kafka 연동 예정 1. 프로젝트 기본 구조 설정Spring Boot 프로젝트 생성(1) IntelliJ IDEA ultimate에서 새로운 Gradle 프로젝트 생성✅ IDE에서 생성할 때 설정할 것프로젝트 이름: eventstormi..
[Spring Boot] 파일을 다루는 객체 MultipartFile & File
·
BEYOND SW [3] 백엔드
2/13 배운 내용 정리0. 복습배경지식🔗 서버와 클라이언트 사이의 HTTP 요청-응답 메세지의 구성배경지식 🔗HTTP 헤더 필드 Content-Type: multipart/form-data #파일업로드1. MultipartFile, File | 파일을 다루는 객체# 두 객체 비교✏️MultipartFile과 File은 파일을 다룰 때 쓰이는 객체이며, 사용되는 시점과 방식이 다르다. MultipartFileFile주요 목적👤클라이언트가 업로드한 파일을 처리🖥️ 서버 내부에서 파일을 다룰 때 사용데이터 출처HTTP 요청 @RequestPart로컬 파일 시스템사용 시점이미지 업로드 API서버 내 파일 저장 및 관리변환 가능.transferTo(File file)을 사용하여 저장 가능N/A   ✏️M..
[Spring Boot] 팀 프로젝트에 페이징 적용하려면 어떻게 할까?
·
BEYOND SW [3] 백엔드
우리 팀 프로젝트의 Product 모델은 여러개의 @ManyToOne 관계와 하나의 @OneToMany 관계를 맺어야 한다. (@OneToMany) Category 및 (@ManyToOne) ProductImage와 연관 관계를 맺는 Product 모델에 Spring Data JPA의 Pageable을 사용하여 페이징 처리하는 방법을 살펴보기로 하자!  0. Pageable 의존성추가?Pageable은 Spring Data JPA에서 제공하는 기능이라서 JPA 의존성만 추가돼 있으면 사용 가능하다.dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' }  1. Pageable 기본 사용법(1) Pageab..