[Spring] 회원가입, 로그인 기능이 추가된 나만의 블로그 백엔드 서버 만들기

조성현·2022년 12월 14일
0

Spring 숙련주차 개인 과제

Goal: "회원가입, 로그인 기능이 추가된 나만의 항해 블로그 백엔드 서버 만들기"

  • 지난 입문주차 과제에 회원가입, 로그인 기능 및 JWT를 통한 인증이 추가된 과제
  • 입문주차 과제 상태의 레파지토리 링크(회원가입, 로그인 등 구현 안된 상태)

과제 요구사항

1. 새롭게 구현할 요구사항

1) 회원 가입 API

  • username, password를 Client에서 전달받기
  • username은 최소 4자 이상, 10자 이하이며 알파벳 소문자(a~z), 숫자(0~9)로 구성되어야 한다.
  • password는 최소 8자 이상, 15자 이하이며 알파벳 대소문자(a~z, A~Z), 숫자(0~9)로 구성되어야 한다.
  • DB에 중복된 username이 없다면 회원을 저장하고 Client 로 성공했다는 메시지, 상태코드 반환하기

참고자료
1. https://mangkyu.tistory.com/174
2. https://ko.wikipedia.org/wiki/정규_표현식
3. https://bamdule.tistory.com/35

2) 로그인 API

  • username, password를 Client에서 전달받기
  • DB에서 username을 사용하여 저장된 회원의 유무를 확인하고 있다면 password 비교하기
  • 로그인 성공 시, 로그인에 성공한 유저의 정보와 JWT를 활용하여 토큰을 발급하고,
    발급한 토큰을 Header에 추가하고 성공했다는 메시지, 상태코드 와 함께 Client에 반환하기

2. 입문주차에 구현한 과제를 요구사항에 맞게 삭제 및 수정

취소선으로 표시된 부분은 삭제 / 배경으로 감싸진 부분은 수정

1) 전체 게시글 목록 조회 API

  • 제목, 작성자명(username), 작성 내용, 작성 날짜를 조회하기
  • 작성 날짜 기준 내림차순으로 정렬하기

2) 게시글 작성 API

  • 토큰을 검사하여, 유효한 토큰일 경우에만 게시글 작성 가능
  • 제목, 작성자명(username), 작성 내용을 저장하고
  • 저장된 게시글을 Client 로 반환하기

3) 선택한 게시글 조회 API

  • 선택한 게시글의 제목, 작성자명(username), 작성 날짜, 작성 내용을 조회하기
    (검색 기능이 아닙니다. 간단한 게시글 조회만 구현해주세요.)

4) 선택한 게시글 수정 API

  • 수정을 요청할 때 수정할 데이터와 비밀번호를 같이 보내서 서버에서 비밀번호 일치 여부를 확인 한 후
  • 토큰을 검사한 후, 유효한 토큰이면서 해당 사용자가 작성한 게시글만 수정 가능
  • 제목, 작성 내용을 수정하고 수정된 게시글을 Client 로 반환하기

5) 선택한 게시글 삭제 API

  • 삭제를 요청할 때 비밀번호를 같이 보내서 서버에서 비밀번호 일치 여부를 확인 한 후
  • 토큰을 검사한 후, 유효한 토큰이면서 해당 사용자가 작성한 게시글만 삭제 가능
  • 선택한 게시글을 삭제하고 Client 로 성공했다는 메시지, 상태코드 반환하기

과제 풀이 1단계: API 명세서를 작성하고 ERD를 설계하자

1. API 명세서 작성

오늘도 어김없이 등장하는 '보안 글씨체'

  • Request에 username을 넣어야 한다고 생각하고 Post api/posts를 작성하다가 곰곰히 생각해보니, 이미 로그인 된 시점에 username을 가지고 있다는 사실을 깨달았다.
  • 나중에 username을 키 값으로 활용해 수정, 삭제를 구현할 것이기에 더더욱 username을 맘대로 설정하도록 해서는 안된다..!

2. ERD(Entity Relationship Diagram) 설계

처음으로 ERD 설계라는 것을 해보았다.

  • 시작 전 '데이터 모델링 개념 및 ERD 다이어그램 그리는 법'을 정독하며 데이터 모델링과 ERD 다이어그램에 대해 이해하는 시간을 가졌다.
  • 이후 ERD Cloud를 활용하여 위와 같이 ERD 다이어그램을 그려보았다.
  • 간단히 설명하자면 User_Postusername을 FK(Foreign Key)로 잡은 비식별자 관계이고, 1[필수]:N[선택] 관계이다.

과제 구현을 위해 해야 할 것들

  • 과제 풀이 2단계: 회원가입 API 구현하기

  • 과제 풀이 3단계: 로그인 API 구현하기(로그인 성공시 JWT 토큰 반환)

  • 과제 풀이 4단계: 기존 구현사항 수정하기(토큰 유효성 검사 등)

  • 무한 테스트&에러잡기 / 리팩토링 등

profile
맛있는 음식과 여행을 좋아하는 당당한 뚱땡이

0개의 댓글