Java, Spring/프로젝트로 스프링 이해하기

    [이커머스 프로젝트] 장바구니 구현하기 (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를 사용할 때 자주 나타나는 오..

    [이커머스 프로젝트] 이메일 전송 기능 구현 (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..

    [이커머스 프로젝트] 멀티 모듈 생성하기

    [이커머스 프로젝트] 멀티 모듈 생성하기

    | 멀티 모듈 생성하기 - 모르는게 많은 개발자 포스팅 을 많이 참조하였습니다. [1] Root 의 build.gradle을 아래와 같이 작성한다. buildscript{ ext { springBootVersion = '2.7.5' } repositories { mavenCentral() } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") classpath "io.spring.gradle:dependency-management-plugin:1.0.11.RELEASE" } } allprojects { } subprojects { apply plugin: 'java' apply ..

    [이커머스 프로젝트] API Gateway를 활용한 MSA (Micro Service Architecture)

    | MSA (Micro Service Architecture) Monolithic : 독립적으로 배포 가느안 서비스들을 모아서 하나의 application으로 만드는 설계 방식 장점 단점 - 각 어플리케이션의 독립적인 배포 가능 - 서비스의 일부를 독립적으로 수정, 개발 가능 - 특정 서비스의 scale up/out 이 가능 - 장애가 전체로 번지지 않는다. - 각 서비스의 독립적인 구성이 가능해진다. - 트랜잭션 관리가 어려움 - 배포 서비스가 늘어나고, 관련 관리 비용이 증가 - 운영의 복잡성이 증가 (너무 과하게 서비스를 쪼개는 건 피하자) DDD (Domain Driven Design) : 도메인 중심 개발 : ex. 배달 서비스의 Customer엔 DeliveryOrder API가 존재할 것. ..

    [이커머스 프로젝트] 환경 변수를 외부에서 주입하는 법

    [이커머스 프로젝트] 환경 변수를 외부에서 주입하는 법

    | 환경 변수를 외부에서 주입하는 방법 - @Value 어노테이션과 SpEL을 사용해서 application의 환경 변수 값을 가져올 수 있다. @Value("${email.key}") public String key; - 그러면 환경 변수의 값은 어디에 입력해두어야 하나? [1] application.yml 에 저장한다. --> github에 올리면 공개됨 [2] Run/Debug configuration의 VM options를 통해 "-D환경변수=값" 형식의 옵션을 건다. --> 여러 개는 관리 힘듬 [3] Run/Debug configuration의 Environment variables를 통해 name과 value를 각각 입력해준다.

    [이커머스 프로젝트] Docker란 무엇인가? (자료 정리)

    [이커머스 프로젝트] Docker란 무엇인가? (자료 정리)

    | Docker 정리 - 초보를 위한 도커 안내서 와 Docker 공식 사이트를 주로 참고하여 정리하였습니다. 1. Docker란 무엇인가? (1) Docker가 등장한 배경 하나의 Application에 다수의 프로그램들이 늘어났고, 이에 따라 서버를 효과적으로 관리하기 위한 무언가가 필요해졌다. 1) 동일 서버에 각기 다른 프로그램을 관리하기 어려움 > 하나의 서버에는 여러 개의 프로그램이 존재할 수 있다. > 이 프로그램들이 각자 사용하는 라이브러리의 버전이 모두 다르고 같은 포트를 사용할 경우 사용이 어려웠고, 결국 서버를 분리하게 되는 일이 발생했다. (==> 자원의 낭비) 2) 서버 환경이 변화할 때마다 유연하게 대처하기 어려움 3) DevOps 및 마이크로서비스 아키텍처의 등장과 함께 프로그..

    [LMS 만들기] 회원 탈퇴, 강좌 관리, 파일 업로드

    [LMS 만들기] 회원 탈퇴, 강좌 관리, 파일 업로드

    | Today I Leanred 1. 회원 탈퇴 - 정책에 따라 탈퇴회원의 정보를 특정 기간 동안 가지고 있을 수 있다. - 오늘 수업에서는 아래와 같이 회원을 초기화하되, 아이디 정보만 가지고 있는 식으로 만들었다. - 회원 정책으로는, 보통 아래처럼 아이디를 쌩으로 다 보여주지 않고 마스킹 처리를 하는 게 일반적이고, 약관에 따라 데이터를 저장하는 기간도 기억상 아마도 1년 정도였던 것 같은데, 개인정보보호법에 따라 정해진 기간 이상은 탈퇴 회원 정보를 가지고 있을 수 없다. 비밀번호 갱신에 대한 안내도 정기적으로 이루어지는데, 오늘 배운 내용보다 실제 서비스 로직은 훨씬 복잡할 것 같다. 2. BindingResult - 모델을 통한 데이터 바인딩 시 타입 미스매치와 같은 오류를 감지하는 역할 - ..