
노개북 13일 차에 7장의 내용을 다 읽고 정리했습니다.
그래서 해당 내용을 바탕으로 제 코드를 리팩터링 하는 걸 정리해봤습니다.
😅 리팩터링(53번째 줄)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//region 게시글 작성 | |
@Transactional | |
public BoardUploadResponseDto uploadBoard(UserDetailsImpl userDetails, | |
BoardUploadRequestDto boardUploadRequestDto, | |
String categoryName, | |
MultipartFile multipartFile) { | |
// 글 작성할려는 유저 로그인 여부 확인 | |
ValidChecker.loginCheck(userDetails); | |
// 1. Request 로 넘어온 데이터 유효성 검사(게시글 제목, 게시글 내용) | |
String boardTitle = boardUploadRequestDto.getTitle(); | |
String boardContent = boardUploadRequestDto.getContent(); | |
if (boardTitle.isEmpty()) { | |
throw new IllegalArgumentException(TITLE_IS_EMPTY); | |
} | |
if (boardContent.isEmpty()) { | |
throw new IllegalArgumentException(CONTENT_IS_EMPTY); | |
} | |
// 2. Request 로 넘어온 카테고리 네임 DB 에서 조회 | |
BoardCategory boardCategory = getSafeBoardCategory(categoryName); | |
// 3. multipartFile 로 넘어온 이미지 데이터 null 체크 => null 이 아니면 S3 버킷에 저장 | |
String imageUrl = ""; | |
if (!multipartFile.isEmpty()) { | |
imageUrl = s3Uploader.upload(multipartFile, S3dirName); | |
} | |
// 4. 게시글 데이터 DB에 저장 | |
Board board = Board.builder() | |
.title(boardTitle) // 제목 | |
.content(boardContent) // 내용 | |
.boardCategory(boardCategory) // 카테고리 | |
.user(jwtAuthenticateProcessor.getUser(userDetails)) // 유저 | |
.thumbNail(imageUrl) // 이미지 URL | |
.enabled(true) // 게시글 삭제 여부 | |
.build(); | |
boardRepository.save(board); | |
// 5. 작성한 게시글에 맞는 이미지 저장 | |
BoardImage boardImage = BoardImage.builder() | |
.board(board) | |
.imageUrl(imageUrl) | |
.build(); | |
boardImageRepository.save(boardImage); | |
// 6. 저장한 데이터 기반으로 Response(게시글번호, 제목, 내용, 카테고리, 이미지 URL, 생성날짜) | |
return BoardUploadResponseDto.builder() | |
.boardId(board.getBoardId()) // 게시글아이디 | |
.title(board.getTitle()) // 제목 | |
.content(board.getContent()) // 내용 | |
.category(board.getBoardCategory().getCategoryName()) // 카테고리 | |
.thumbNail(board.getThumbNail()) // 이미지 URL | |
.createdAt(board.getCreatedAt() == null ? null : board.getCreatedAt()) // 게시글 생성 날짜 | |
.build(); | |
} | |
//endregion |
문제점
- 53번째 줄을 보면 게시글의 생성날짜가 null이면 그냥 클라이언트 단으로 null을 전달하는 문제가 있습니다.
- null이 전달되면 프론트엔드 개발자가 한번 더 게시글의 작성 날짜 처리를 해야 하는 문제 발생
*근데 여기서 궁금한거 TimeStamp
😀 리팩터링 후(8번째 줄)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 6. 저장한 데이터 기반으로 Response(게시글번호, 제목, 내용, 카테고리, 이미지 URL, 생성날짜) | |
return BoardUploadResponseDto.builder() | |
.boardId(board.getBoardId()) // 게시글아이디 | |
.title(board.getTitle()) // 제목 | |
.content(board.getContent()) // 내용 | |
.category(board.getBoardCategory().getCategoryName()) // 카테고리 | |
.thumbNail(board.getThumbNail()) // 이미지 URL | |
.createdAt(board.getCreatedAt() == null ? LocalDateTime.now() : board.getCreatedAt()) // 게시글 생성 날짜 | |
.build(); |
- 8번째 줄
- 우선 LocalDateTime.Now 를 통해 게시글 작성 시간을 리턴해주는 방법 적용
- 하지만 여기서 또 문제점은 DB에 게시글 작성 날짜가 저장되지 않는 문제 발생
=> 게시글을 다시 조회(새로고침)했을 때 게시글 작성 날짜가 안나오는 문제 발생
🤔 리팩터링 후 문제점
- DB에 해당 게시글의 데이터가 저장 되면서 저절로 생성 날짜(CreatedAt)가 저장되도록 Entity를 구성했습니다.
=> 여기서 진짜 만약에 CreateAt이 작동 되지 않을 경우를 대비하기 위해 null을 클라이언트단에 리턴하는 방식 - 이 만약을 위해 게시글의 생성날짜를 해당 Entity에 다시 넣어주고 DB에 저장하는 단계를 거쳐야 하나?
=> Entity 부분에 생성날짜(CreatedAt)을 다시 넣어주고 저장하는 수요 발생
=> 생성날짜를 다시 넣어주고 저장하는 단계에서 SQL문이 추가로 발생하는 번거로움 발생
반응형