오늘 공부한 것
* Lv4 과제 제출
* Spring 심화주차 강의 듣기
* Lv3 과제 페어 리뷰
어제에 이어서 Lv4 과제를 계속 진행했다
☝ 새로운 요구사항을 구현해 보세요!
- Lv.3 프로젝트에 Spring Security 적용하기
✌️ 요구사항에 맞게 수정해 보세요!
- 회원 가입 API
- username, password를 Client에서 전달받기
- username은 최소 4자 이상, 10자 이하이며 알파벳 소문자(a~z), 숫자(0~9)로 구성되어야 한다.
- password는 최소 8자 이상, 15자 이하이며 알파벳 대소문자(a~z, A~Z), 숫자(0~9)로 구성되어야 한다.
- DB에 중복된 username이 없다면 회원을 저장하고 Client 로 성공했다는 메시지, 상태코드 반환하기
- 회원 권한 부여하기 (ADMIN, USER) - ADMIN 회원은 모든 게시글 수정 / 삭제 가능
- 참고자료
- 로그인 API
- username, password를 Client에서 전달받기
- DB에서 username을 사용하여 저장된 회원의 유무를 확인하고 있다면 password 비교하기
- 로그인 성공 시, 로그인에 성공한 유저의 정보와 JWT를 활용하여 토큰을 발급하고, 발급한 토큰을 Header에 추가하고 성공했다는 메시지, 상태코드 와 함께 Client에 반환하기
- 전체 게시글 목록 조회 API
- 제목, 작성자명(username), 작성 내용, 작성 날짜를 조회하기
- 작성 날짜 기준 내림차순으로 정렬하기
- 게시글 작성 API
토큰을 검사하여, 유효한 토큰일 경우에만 게시글 작성 가능⇒ Spring Security를 사용하여 토큰 검사 및 인증하기!- 제목, 작성자명(username), 작성 내용을 저장하고
- 저장된 게시글을 Client 로 반환하기
- 선택한 게시글 조회 API
- 선택한 게시글의 제목, 작성자명(username), 작성 날짜, 작성 내용을 조회하기 (검색 기능이 아닙니다. 간단한 게시글 조회만 구현해주세요.)
- 선택한 게시글 수정 API
토큰을 검사한 후, 유효한 토큰이면서 해당 사용자가 작성한 게시글만 수정 가능⇒ Spring Security를 사용하여 토큰 검사 및 인증하기!- 제목, 작성 내용을 수정하고 수정된 게시글을 Client 로 반환하기
- 선택한 게시글 삭제 API
토큰을 검사한 후, 유효한 토큰이면서 해당 사용자가 작성한 게시글만 삭제 가능⇒ Spring Security를 사용하여 토큰 검사 및 인증하기!- 선택한 게시글을 삭제하고 Client 로 성공했다는 메시지, 상태코드 반환하기
기존에 구현했던 것에서 Spring Security를 적용하는 것이었는데
이전 강의 내용을 참고하면서 하니 그렇게 어렵지 않았다
1. API 명세
기능 | URL | Method | Requst Header | Request | Response | Response Header |
회원가입 | /api/auth/signup | post | username, password |
"msg" :" 회원가입 성공" "statusCode":200 |
||
로그인 | /api/auth/login | post | username, password |
"msg" :" 로그인 성공" "statusCode":200 |
토큰 | |
게시글 작성 | /api/post | post | 토큰 | title, contents | id, title, username, contents, createAt, modifiedAt |
|
게시글 조회 | /api/post | post | id, title, username, contents, createAt, modifiedAt |
|||
선택한 게시글 조회 |
/api/post/{id} | get | id, title, username, contents, createAt, modifiedAt |
|||
선택한 게시글 수정 |
/api/post/{id} | put | 토큰 | title, contents | id, title, username, contents, createAt, modifiedAt |
|
선택한 게시글 삭제 |
/api/post/{id} | delet | 토큰 | "msg" :" 삭제 성공" "statusCode":200 |
이후에는 심화주차 강의를 들었다
통합테스트 두 개 이상의 모듈이 연결된 상태를 테스트 할수 있고 모듈 간의 연결에서 발생하는 에러 검증이 가능
@SpringBootTest 스프링이 동작되도록 해주는 애너테이션 IOC / DI 기능을 사용하고 Repository를 사용해
DB CRUD가 가능
부가기능 모듈화 AOP를 통해 만듬 핵심기능과 분리해서 부가기능 중심으로 설계 및 구현
1) 핵심기능 각 API 별 수행해야 할 비즈니스 로직, 검색, 등록, 회원가입 등
2) 부가기능 핵심기능을 보조하는 기능, 로그기록, API 수행시간 저장등
심화주차 강의를 듣는 중 Lv3 페어리뷰팀이 정해져서 페어리뷰를 했다
1. 우리 페어가 남긴 ISSUES
1) Entity 및 객체 생성 클래스
(1) @Setter의 경우 private로 설정한 field를 public 처럼 사용하게 되는데 특히 모두가 필요한 상황이 아니기에 IntelliJ의
control+N 단축키를 사용하여 특정 필드만 setMethod를 구현하는게 좋다
2) 게시글을 생성날짜부터 정렬하는 것은 @OderBy 애너테이션을 이용하여 @OderBy("createAt desc")하여 내림차순
정렬 했습니다
3) 특수문자의 경우 SQL Injection과 같이 다양한 이유로 사용하는 것이 제한적입니다
2. 우리 페어가 받은 ISSUES
1) Post Entity에 Setter 를 쓰지 않고 필요한 곳에 set 메서드를 활용한 것이 효율적이다.
2) OrderBy("createdAt" = desc)로 생성날짜를 내림 차 순으로 정렬한 것이 굉장히 효율적인 솔수션이었다.
3) 우리와는 다르게 StringResponseDto를 생성하여, PostResponseDto, PostDeleteResponseDto로 분리하지 않고
직관적으로 DTO의 이름을 정의한 것이 인상적이었다.
4) public ResponseEntity<BoardResponseDto> boardCreate(@RequestBody BoardRequestDto requestDto,
HttpServletRequest req){ }
이렇게 길다보면 파라미터 마다 엔터해서 가독성을 올릴수 있어요.
......
public ResponseEntity<?> handleNotFoundEntity(Exception e){}
전역 예외 처리 구현 부분이에요.
테이블 연관 관계 와 JPA 활용 잘하셨어요.
'항해99' 카테고리의 다른 글
23.09.15 항해 99 16기 주특기 프로젝트 1일차 (0) | 2023.09.15 |
---|---|
23.09.14 항해 99 16기 주특기 Spring 19일차 (0) | 2023.09.14 |
23.09.12 항해 99 16기 주특기 Spring 17일차 (0) | 2023.09.12 |
23.09.11 항해 99 16기 주특기 Spring 16일차 (1) | 2023.09.11 |
23.09.04~09.10 항해 99 16기 4주차 회고록 (0) | 2023.09.10 |