Spring Boot기반으로 기본적인 설정을 자동화하고 JPA를 통해 Domain Model의 영속화(Persistence)에 대한 코딩 및 오류를 줄입니다.
사용 기술 : JPA H2 security JWT Redis Swagger
- 점진적인 확장형으로 config, core, domain.user 패키지 분리
- DDD 에서 회원에 용도를 구조적으로 분리하기 위한 바운디드 컨텍스트 활용 (https://github.com/lswteen/til-1/tree/master/book/DDD)
- Springboot security, JWT 활용
- MSA 는 레파지스토리 파편화가 이루어지며 이를 멀티모듈로 최소화 할수 있음.
단독으로 구성하는 레파지스토리 구조를 개선하고 협업시 코드 복잡도와 파편화를 줄이고 구조적으로 안정된 패키지로 하나의 branch 로 협업 가능
- IntelliJ에 Lombok Plugin을 설치한다.
Preferences > Plugins > Browse repositories.. > Lombok 검색 > Install > restart
- Gradle 창에서 Refresh를 클릭힌다. 인고의 시간이 지나면 모든 라이브러리가 download되고 Run 가능한 상태가 된다.
- 그래도 안되면 File > Invalidate Caches.. > 클릭후 클리어 하면 잘못된 소스다운로드를 초기화할수있다.
- JDK 11 버전으로 부탁드립니다.
- https://github.com/lswteen/user.git 소스레벨 master 브렌치로 내려받기 하시면됩니다.
- Local환경이다보니 redis, h2 설정이 필요합니다.
- 아래 정보기준으로 진행하시면됩니다.
- redis install
$ brew install redis
- redis start
$ brew services start redis
- redis stop
$ brew services stop redis
- redis restart $ brew services restart redis
$ redis-cli 위의 명령어를 통해 CLI를 사용할 수 있습니다.
- 아래 이미지처럼 H2 설정을 변경하시면됩니다.
build 하위에서 clean -> build -> bootRun 하시면됩니다.
http://localhost:9030/swagger-ui.html
회원 API 확인 가능합니다.
-
SMS 인증번호 발송: /api/sms/certification/sends
-
SMS 인증번호 확인: /api/sms/certification/confirms
- phone : {발송번호}, certificationNumber {redis value}
- 인증되면 Redis 삭제 되며 redis 에 등록된 만료시간이 value값을 nil로 변경하여 재발송을 요구함.
-
회워가입: /api/user/singup
- email, firstname, lastname, nickname, password, phonenumber, roles
- email, nickname, phonenumber 3가지는 로그인시 유일식별자로 사용됩니다.
- password 는 BCryptPasswordEncoder 사용합니다.
- 성공시 정상적으로 200 확인되며 동일한 조건으로 3가지 파라메타 중복시 실패됩니다.
- email, firstname, lastname, nickname, password, phonenumber, roles
-
로그인: /api/user/login
-
회원정보보기: /api/user/me
- Client 로그인하면 JWT 가 Headerd에 등록되어 Request 해더에 값을 담으면 된다고하는데..
- 회원 서비스 구현을 안하다보니 호출하는 방법 검증을 못했습니다.
- 죄송합니다. 기능구현은 정상인것으로 확인되는데 시간이 부족해 클라이언트 에서 어떻게 호출하는지에 대한 러닝커브가 부족하였습니다.
-
비밀번호 찾기(재설정) 기능: /api/user/password
- Spring Boot: springboot 기본 생성
- [아키텍처]: DDD 구조 설계 및 Core 작업 추후 점진적인 MSA 멀티모듈 가능성을위한 분리
- JPA: H2 Repository, Entity
- **Spring Security JWT **: 회원쪽 서비스에서 중요한 Security 그리고 JWT 도입을 위한2일간에 삽질 끝에 작업됨.
- Lombok: 코드자동화 라이브러리,@Builder @Getter, @Slf4j...
- Gradle: 빌드 관리 툴, 가독성, 빌드 속도 좋음 Maven vs Gradle
- Rest Doc: API문서 자동화. Swagger (시간이 있다면 Restdoc 변경예정)
- 패스워드 변경은 되는데 변경된 로그인으로 로그인이 안되는 현상발견
- 로그인후 JWT토큰을 정보보기 호출시 어떻게 사용하는지를 아직 파악이 되지 않았습니다.