Framework

    Spring Cloud - Netflix Eureka, Spring Gateway

    Spring Cloud - Netflix Eureka, Spring Gateway

    MSA- 어플리케이션을 목적에 따라 여러 개의 독립적인 서비스로 분할하여 개발하고 배포하는 방식   MSA의 특징- 독립된 각 서비스 마다 고유의 ip와 port를 가진다.- 각각의 서비스가 분산되어 있기 때문에, 배포와 테스트가 어렵다 MSA를 왜 쓸까?느슨하게 결합된 서비스들의 모임으로 프로젝트를 구성함으로써, 전체 시스템 구조를 논리적으로 구분해 이해하고, 고가용성(부분 장애가 전체 장애로의 확장을 막음)을 높이며, 분산 처리를 가능하도록 하기 위함  MSA를 편리하게 하기 위한 아키텍처 컴포넌트  스프링 클라우드(Spring Cloud)분산 시스템의 몇가지 공통된 패턴들을 빠르게 빌드할 수 있도록 다양한 툴을 제공해 준다.예를 들어, Configuration management(설정 관리), Se..

    [Spring Cloud & MSA] Spring Cloud Netflix Eureka

    [Spring Cloud & MSA] Spring Cloud Netflix Eureka

    1. Spring Cloud Netflix Eureka - 유레카는 Service Discovery 중 하나이다. - Service Discovery는 말 그대로 서비스를 찾아주는 것으로써, 어느 위치에 어떤 서버가 있는지를 찾아준다. rf. key / value 형태로 서비스를 등록하고 검색할 수 있도록 해준다. - 넷플릭스 자사의 기술들을 Java Spring 재단에 기부를 하면서 만들어진 것이 Eureka이다. - Eureka를 쓰려면 먼저 서비스를 등록해야 한다. - Client에서 요청이 Load Banlancer로 들어오면 Service Discovery가 서비스의 위치를 찾아준다. 2. 프로젝트 환경 구성 [1] 프로젝트 생성 - 마인드챗이라고, 내 마음 속 이야기를 채팅창에 적을 수 있는 ..

    [Spring Cloud & MSA] MSA와 Spring Cloud

    [Spring Cloud & MSA] MSA와 Spring Cloud

    시간이 지날 수록 소프트웨어는 Antifragile한 아키텍처를 구성하고자 하였으며, Cloud Native한 아키텍처를 구성하고자 했다. 아래는 그러한 소프트웨어 아키텍처의 특징을 정리한 내용이다. 1. Antifragile 아키텍처 1) AutoScaling (자동확장성) : 상황에 따라 인스턴스의 갯수를 자동으로 늘리는 등 자동 확장이 가능한 것 2) Microservices : 세밀한 단위로 모듈과 기능을 세분화한 서비스. 넷플릭스와 아마존에서 가장 잘 구축했음 3) chaos engineering : chaos, 급격하고 예측 불가한 상황에서도 견딜 수 있을 만큼 안정적인 서비스 구축 4) continuous deployments : 지속적인 통합/배포를 의미 2. Cloud Native 아키텍..

    [이커머스 프로젝트] 장바구니 구현하기 (RedisTemplate)

    [이커머스 프로젝트] 장바구니 구현하기 (RedisTemplate)

    | 개요 - RedisTemplate을 사용하여 각 회원들에 대한 장바구니를 저장 - serialize과 deserialize를 String으로 쓰는 StringRedisTemplate을 사용 - Redis에 저장되는 형태 구분 데이터 형태 key cart:hash_id value 각 회원의 장바구니 객체를 Json 타입으로 저장 | 절차 1. Build.gradle에 Redis 추가 // redis implementation 'org.springframework.boot:spring-boot-starter-data-redis' testImplementation('it.ozimov:embedded-redis:0.7.3'){ exclude group: 'org.slf4j', module: 'slf4j-si..

    [이커머스 프로젝트] QueryDSL를 통해 상품 검색하기

    [이커머스 프로젝트] QueryDSL를 통해 상품 검색하기

    | 개요 1. Build.Gradle에 QueryDSL과 Jakarta를 함께 주입한다. 2. Config 클래스를 만들어 EntityManager를 생성하고 이를 JpaQueryFactory에 넣어준다. 3. ProductRepositoryCustom과 ProductRepositoryImpl을 만들고, ProductRepostory에서 Custom 인터페이스를 상속한다. | 상세 1. Build.Gradle에 QueryDSL를 추가한다. * Jakarta를 추가하는 이유는, NoClassDefFoundError를 방지하기 위해서이다. * NoClassDefFoundError는 컴파일 시에는 있었는데 실행 시에는 클래스를 찾을 수 없을 때 발생한다고 한다.. QueryDSL를 사용할 때 자주 나타나는 오..

    [JPA] 특정 상황에서 Lazy Fetch Type 변경하기 (@EntityGraph)

    | 스프링 부트 Test 중, 아래와 같이 오류가 나타났다. C:\sebinSample\cms\order-api\src\main\java\org\zerobase\cms\order\domain\model\Product.java:33: warning: @Builder will ignore the initializing expression entirely. If you want the initializing expression to serve as default, add @Builder.Default. If it is not supposed to be settable during building, make the field final. private List productItems = new ArrayList..

    [JPA] CascadeType : 상위 -> 하위 엔터티 전파 타입

    | CascadeType ALL - 상위 엔터티에서 하위 엔터티로 모든 작업을 전파 모두 전파 PERSIST - 상위 엔터티에서 저장을 하면 하위 엔터티도 저장 (영속성 전파) x.persist() 전파 MERGE - 하위 엔터티까지 병합 작업을 지속 ...(?) x.merge() 전파 REMOVE - 하위 엔터티까지 제거 작업을 지속 x.remove() 전파 REFRESH - 하위 엔터티까지 인스턴스 값 새로 고침 (다시 조회) x.refresh() 전파 DETACH - 하위 엔터티까지 엔터티 제거 x.detach() 전파 * persist() 는 리턴값이 없는 insert, merge() 는 리턴값이 없는 update @Transactional public S save(S entity) { if (t..

    [이커머스 프로젝트] 이메일 전송 기능 구현 (Mailgun, Feign)

    [이커머스 프로젝트] 이메일 전송 기능 구현 (Mailgun, Feign)

    | 절차 1. Mailgun 회원 가입 및 API 사용법 확인 2. Feign 라이브러리를 사용하여, Mailgun의 이메일 전송 Api 호출 3. Test 코드를 작성하여 전송 확인 1. Mailgun 회원가입 및 API 사용 방법 확인하기 [1] 회원가입 [2] 이메일 전송 API 사용 방법 확인 - Post API : 인증키를 헤더로 보내고, 쿼리 스트링으로 발신자/수신자/제목/내용을 보내는 POST API - API KEY를 인증키로 사용 - API base URL 정보에 따라서 이메일을 전송 [3] 테스트용으로 수신을 받을 수 있는 이메일을 추가해둔다. - Mailgun은 무료 계정인 경우에 이렇게 이메일을 추가해두어야만 한다고 한다. | Feign 을 사용하기 [1] 의존성 주입 ext{ se..

    [이커머스 프로젝트] Swagger2 적용

    [이커머스 프로젝트] Swagger2 적용

    | Swagger2 적용하기 [1] 의존성 주입 implementation group: 'io.springfox', name: 'springfox-swagger2', version: '2.9.2' implementation group: 'io.springfox', name: 'springfox-swagger-ui', version: '2.9.2' [2] Swagger2 UI 환경 파일 추가 package com.zerobase.cms.user.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import springfox.documentat..