Framework
[이커머스 프로젝트] 멀티 모듈 생성하기
| 멀티 모듈 생성하기 - 모르는게 많은 개발자 포스팅 을 많이 참조하였습니다. [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 공식 사이트를 주로 참고하여 정리하였습니다. 1. Docker란 무엇인가? (1) Docker가 등장한 배경 하나의 Application에 다수의 프로그램들이 늘어났고, 이에 따라 서버를 효과적으로 관리하기 위한 무언가가 필요해졌다. 1) 동일 서버에 각기 다른 프로그램을 관리하기 어려움 > 하나의 서버에는 여러 개의 프로그램이 존재할 수 있다. > 이 프로그램들이 각자 사용하는 라이브러리의 버전이 모두 다르고 같은 포트를 사용할 경우 사용이 어려웠고, 결국 서버를 분리하게 되는 일이 발생했다. (==> 자원의 낭비) 2) 서버 환경이 변화할 때마다 유연하게 대처하기 어려움 3) DevOps 및 마이크로서비스 아키텍처의 등장과 함께 프로그..
[스프링 시큐러티] JWT 토큰 + 스프링 시큐러티
| 인증 방식의 종류와 한계점 1. 인증 방식의 종류 데이터 저장 위치 방식 Cookie key-value 형태의 문자열 브라우저 (or 로컬 메모리) (1) 사용자가 로그인 요청을 보낸다. (2) 서버는 Cookie 정보를 header의 Set-Cookie에 담아 응답한다. (3) 사용자가 요청할 때마다 Cookie를 header에 담아 보낸다. (4) 서버는 쿠키에 담긴 정보로 클라이언트가 누군지 식별한다. Session session id와 value가 든 세션 객체 * value는 map 형태로, 세션 생성 기간, 마지막 접근 기간, User 속성 등을 담는다. 서버 (메모리, 로컬 파일, DB) (1) 사용자가 로그인 요청을 보내면 세션이 서버에 저장된다. 이때, 세션의 식별을 위한 Sessio..
[JPA] Lazy Loading 개념
| 관련 용어 용어 What? How? Lazy Loading 사용자가 보지 않는 리소스는 차후에 로딩하는 기술 - 프론트 : 무한 스크롤, placeholder 등 - 백엔드 : JPA의 지연 로딩 | JPA의 Lazy Loading - 개발자는 JPA를 통해 프록시를 만들 수 있다. - 프록시란, 가짜 객체를 말하는 것으로, 실제 엔터티에 대한 참조값을 가진다. - 하나의 엔터티가 다른 엔터티와 연관관계를 맺고 있을 때 (oneToMany) , 연관된 객체들을 처음부터 DB에서 조회하지 않고, 실제 사용하는 시점에 DB에서 조회하면 속도를 향상시킬 수 있다. - JPA에서는 프록시가 참조하는 객체들의 데이터 조회 시점을 정하는 타입을 Fetch Type이라 하는데, 즉시로딩 - 한 객체를 조회할 때,..
[Scheduler] 스케줄러 사용하기 (feat. 쓰레드, 쓰레드풀)
| Scheduler - 스프링에서 일정 주기마다 특정 작업을 수행할 수 있도록 하는 기능 - 주기 설정 fixedDelay 작업 완료시점을 기준으로 일정시간 지연 후 반복 fixedRate 작업 시작지점을 기준으로 일정시간 지연 후 방복 cron 정규식 표현 - Cron 표현식 (1) 사용법 // 초/분/시/일/월/요일/연도(생략가능) 0 0 0 * * * 테스트2 2022-11-11 13:28:05.641 DEBUG 23980 --- [ main] ySourcesPropertyResolver$DefaultResolver : Found key 'spring.liveBeansView.mbeanDomain' in PropertySource 'systemProperties' with value of type..
[Entity] 중복데이터 저장 방지 (Unique Key, Index)
| 관련 SQL 개념 (1) Unique Key : 중복 데이터 저장을 방지하기 위한 제약조건 - 단일 칼럼 뿐 아니라, 복합 칼럼을 지정할 수도 있다. - 아래와 같이 복합 키를 생성할 경우, DB 조회 속도를 향상시킬 수 있다. -- MySQL 기준 create table member( email varchar(50), name varchar(255), unique key member_uk_email (email, name) ) - 중복 데이터 저장을 막기 위한 방법으로 아래 두가지를 사용할 수 있다. * 단순 insert into 문의 경우 에러를 발생하지만, 아래 두 가지는 에러를 발생시키지 않는다. INSERT IGNORE unique key가 걸린 칼럼에 중복 데이터가 이미 있는 경우 삽입 X..
[스프링 시큐러티] 스프링 시큐러티 자료 모음 (수정중)
1. 개념 https://flyburi.com/584 [SpringSecurity] Authentication(인증) 관련 클래스와 처리 Spring Security에 대해 큰 흐름은 알지만, 처음부터 적용하는게 아니면 어떤 권한을 주고 권한 체크하는 로직만 추가하거나 수정하며 생각없이 쓰게 되는데, 어떤 흐름으로 되는지 전보다 좀 더 살 flyburi.com 2. 다수의 회원 타입(ex. 판매자, 구매자)에 대하여 시큐러티 분기 필요할 때 https://github.com/HomoEfficio/dev-tips/blob/master/Spring-Security-Multiple-UserDetailsService-Authentication.md GitHub - HomoEfficio/dev-tips: 개발하다..