게시판
- 글 작성
- 글 수정
- 글 삭제
- 글 조회
-> 조회수
- 글 목록 (페이징)
-> 제목, 생성일, 글 번호(boardId), 조회수
- 좋아요 기능
댓글
- 작성
- 수정
- 삭제
- 조회
로그인 / 로그아웃
-> (세션 or 쿠키) + jwt
회원 가입
———————————
사용기술
-필수
spring boot 3.x
spring data jpa
spring security
session or cookie
rest api
jwt
h2
vaildator -> request dto에서 유효성 검사하기
git / github
-선택
query dsl, junit5(테스트 코드), spring rest docs
——————————————
조건
1. http 상태 코드 정확하게 사용하기
2. session or cookie의 차이 이해하고 왜 썻는지 문서
3. api 문서화 -> 스웨거
4. api restful 조건 지키기
5. 자바(클래스, 메소드, 변수) 네이밍 규칙 정확히 지키기
6. 예외처리 정확한 익셉션 사용
-> 자바 기본 익셉션이 애매하면 커스텀 익셉션 사용
7. 구글 무지성 복붙 금지 -> 왜 이렇게 되는지 이해하기
8. jpa 양방향 연관관계 금지 -> 왜 양방향 안 하는지 조사하기
9. 한 메소드는 하나의 행위만 실행
10. 무분별한 setter, getter 지양
-> setter는 금지
11. 지피티 복붙 금지
12. 자신이 복붙 or 작성한 코드에 대해 이해가 없다면 사용 금지
13. 트렌젝션 스크립트 금지
*같은 일을 3번이상 반복하면 이건 뭔가 잘 못 되었다. 같은 일
3번이상 반복하지 않기* => 코드의 중복 최소화
라는 과제를 최대한 해결할 예정이다.
해당 github 주소는https://github.com/myeongjaeking/Board/tree/main 이다.
@OneToMany와 @ManyToOne을 사용하면서 @ManyTOMany를 사용하지 않으면 양방향이 아닌줄 알았는데, @ManyToOne 또는 @OnetoMany로 한 번만 연결해줘야 단방향인 걸 처음 알았다. 평상시 하드코딩만 하기 때문에, 객체지향적으로 짜는 것도 연습하고 실전에서 급할 때도 객체지향적으로 짤 수 있게 연습하는 것이다.
글 목록 페이징할 때, 어차피 글 조회하면 해당 글의 정보가 다 들어가야돼서 이 정보들을 다 Page로 넘기고 프론트에서 처리하면 되지않나? 라고 생각했지만,
@Builder
public record BoardGetResponse(
String title,
String content,
LocalDate createBoard,
int viewCount,
int likeCount
) {
}
@Builder
public record BoardPageResponse (
String title,
Long id,
LocalDate createBoard,
int viewCount
){
}
언제 어디서 값이 변할지 모르는 상황이기 때문에 항상 따로따로 만들어주고, 나중에 수정사항이 있으면 최대한 기존코드는 건들지 않게 하기위해 나누어서 사용했다.
Response는 @Builder와 record를 사용하였고, Request는 @Builder를 사용할 필요가 없었다. 왜냐하면 정보를 받는 것이기 때문이다. Paging도 처음해봤는데, jpa pagable이 있어서 어려운 것 없었다.
public Page<BoardPageResponse> getList(int page){
List<Sort.Order> sorts = new ArrayList<>();
sorts.add(Sort.Order.desc("createBoard"));
Pageable pageable = PageRequest.of(page,5,Sort.by(sorts));
Page<Board> boards = boardRepository.findAll(pageable);
Page<BoardPageResponse> boardPageResponses = boards.map(board ->
new BoardPageResponse(
board.getTitle(),
board.getId(),
board.getCreateBoard(),
board.getViewCount()
));
return boardPageResponses;
}
처음에 boards를 boardPageResponse에 for문을 사용해서 담았었는데, map으로 하면 더 직관적이고 유지보수가 쉽다고 배웠다.(함수형 프로그래밍) postman에서 확인하고 싶은데, PathVariable을 안 쓰고 int page를 어떻게 사용하나 고민이 있었는데, 찾아보니
@GetMapping("/boarList")
public ResponseEntity<Page<BoardPageResponse>> pasing(@RequestParam(value="page", defaultValue="0") int page){
return ResponseEntity.ok(this.boardService.getList(page));
}
쿼리 파라미터를 사용하여 잘 작동하는 것을 확인할 수 있었다.
AddStringPOJO(2) - Refactor (1) | 2025.01.03 |
---|---|
Java - POJO 형식으로 객체지향 공부하기 (0) | 2025.01.02 |
웹서버 - Calendar (0) | 2024.11.19 |
웹서버 - 투표 기능 (0) | 2024.11.12 |
게시판 진행상황(7) - 회원별 게시판 JOIN 완료 (1) | 2024.02.27 |