Skip to content
/ user Public

springboot jpa security restdoc restful API

Notifications You must be signed in to change notification settings

lswteen/user

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

31 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

User API : With SpringBoot framework

Spring Boot기반으로 기본적인 설정을 자동화하고 JPA를 통해 Domain Model의 영속화(Persistence)에 대한 코딩 및 오류를 줄입니다.

사용 기술 : JPA H2 security JWT Redis Swagger

Springboot MSA 및 DDD 구조 스켈레톤

  1. 점진적인 확장형으로 config, core, domain.user 패키지 분리
  2. DDD 에서 회원에 용도를 구조적으로 분리하기 위한 바운디드 컨텍스트 활용 (https://github.com/lswteen/til-1/tree/master/book/DDD)
  3. Springboot security, JWT 활용
  4. MSA 는 레파지스토리 파편화가 이루어지며 이를 멀티모듈로 최소화 할수 있음.

AS-IS (멀티모듈 전달계)

스크린샷 2021-10-28 오후 10 48 03

TO-BE (멀티모듈 후단계)

스크린샷 2021-10-28 오후 10 51 22

단독으로 구성하는 레파지스토리 구조를 개선하고 협업시 코드 복잡도와 파편화를 줄이고 구조적으로 안정된 패키지로 하나의 branch 로 협업 가능

Local Mac 기준 선행조건 순서 Intellij 기준 Setup

  1. IntelliJ에 Lombok Plugin을 설치한다.
    Preferences > Plugins > Browse repositories.. > Lombok 검색 > Install > restart
    
  2. Gradle 창에서 Refresh를 클릭힌다. 인고의 시간이 지나면 모든 라이브러리가 download되고 Run 가능한 상태가 된다.
  3. 그래도 안되면 File > Invalidate Caches.. > 클릭후 클리어 하면 잘못된 소스다운로드를 초기화할수있다.
  4. JDK 11 버전으로 부탁드립니다.
  5. https://github.com/lswteen/user.git 소스레벨 master 브렌치로 내려받기 하시면됩니다.
  6. Local환경이다보니 redis, h2 설정이 필요합니다.
  7. 아래 정보기준으로 진행하시면됩니다.

Redis 설치

  • 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 DB connections 환경 설정

  • 아래 이미지처럼 H2 설정을 변경하시면됩니다.

스크린샷 2021-10-28 오후 9 31 59

gradle 버전으로 해당 버전 다운로드 이후 실행했는데 정상동작 안하면 아래이미지대로 진행 해주시면됩니다.

build 하위에서 clean -> build -> bootRun 하시면됩니다.

스크린샷 2021-10-28 오후 9 34 51

해당 내용은 인텔리J에서 클린하는 기능입니다.

스크린샷 2021-10-28 오후 9 34 59

스크린샷 2021-10-28 오후 9 35 04

Swagger 회원 URI

http://localhost:9030/swagger-ui.html 회원 API 확인 가능합니다. 스크린샷 2021-10-28 오후 9 42 23

회원 검증순서

  • SMS 인증번호 발송: /api/sms/certification/sends

    • phone : 01033334444
    • 입력시 redis에서 발급된 keys 정보와 key등록된 발송 문자열 확인 스크린샷 2021-10-28 오후 10 34 13 스크린샷 2021-10-28 오후 10 34 58
  • SMS 인증번호 확인: /api/sms/certification/confirms

    • phone : {발송번호}, certificationNumber {redis value}
    • 인증되면 Redis 삭제 되며 redis 에 등록된 만료시간이 value값을 nil로 변경하여 재발송을 요구함. 스크린샷 2021-10-28 오후 10 35 41
    스크린샷 2021-10-28 오후 10 35 34
  • 회워가입: /api/user/singup

    • email, firstname, lastname, nickname, password, phonenumber, roles
    • email, nickname, phonenumber 3가지는 로그인시 유일식별자로 사용됩니다.
    • password 는 BCryptPasswordEncoder 사용합니다.
    • 성공시 정상적으로 200 확인되며 동일한 조건으로 3가지 파라메타 중복시 실패됩니다.

    스크린샷 2021-10-28 오후 9 46 21

  • 로그인: /api/user/login

    • type 3종류 : email, nickname, phone
    • argument : {email,nickname,phonenumber} 타입에 따라 넣어주시면됩니다.
    • password : 회원시 등록된 패스워드
    • 성공시 JWT 토큰값 확인가능합니다. 스크린샷 2021-10-28 오후 10 03 09
  • 회원정보보기: /api/user/me

    • Client 로그인하면 JWT 가 Headerd에 등록되어 Request 해더에 값을 담으면 된다고하는데..
    • 회원 서비스 구현을 안하다보니 호출하는 방법 검증을 못했습니다.
    • 죄송합니다. 기능구현은 정상인것으로 확인되는데 시간이 부족해 클라이언트 에서 어떻게 호출하는지에 대한 러닝커브가 부족하였습니다.
    스크린샷 2021-10-28 오후 10 06 46
  • 비밀번호 찾기(재설정) 기능: /api/user/password

    • 01038564215, qwer1234 로그인 정보로 성공 후 JWT 토큰생성 스크린샷 2021-10-28 오후 10 14 39 스크린샷 2021-10-28 오후 10 20 26
    • 동일 비밀번호 입력시 이전 암호라는 메시지 전달 스크린샷 2021-10-28 오후 10 21 42 스크린샷 2021-10-28 오후 10 21 49
    • 다른 비밀번호 입력 후 저장 변경 확인 스크린샷 2021-10-28 오후 10 23 38 스크린샷 2021-10-28 오후 10 23 50

Features

  • Spring Boot: springboot 기본 생성
  • [아키텍처]: DDD 구조 설계 및 Core 작업 추후 점진적인 MSA 멀티모듈 가능성을위한 분리
  • JPA: H2 Repository, Entity
  • **Spring Security JWT **: 회원쪽 서비스에서 중요한 Security 그리고 JWT 도입을 위한2일간에 삽질 끝에 작업됨. 스크린샷 2021-10-28 오후 10 28 19
  • Lombok: 코드자동화 라이브러리,@Builder @Getter, @Slf4j...
  • Gradle: 빌드 관리 툴, 가독성, 빌드 속도 좋음 Maven vs Gradle
  • Rest Doc: API문서 자동화. Swagger (시간이 있다면 Restdoc 변경예정)

더 고려해야할 사항

  • 패스워드 변경은 되는데 변경된 로그인으로 로그인이 안되는 현상발견
  • 로그인후 JWT토큰을 정보보기 호출시 어떻게 사용하는지를 아직 파악이 되지 않았습니다.

About

springboot jpa security restdoc restful API

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages