- 게시글 공개 여부 기능 추가2025년 05월 08일 09시 27분 08초에 업로드 된 글입니다.작성자: do_hyuk728x90반응형
수정될 부분
- [BE] code post Entity 필드에 isPublic 멤버변수 추가
- [BE] flyway.sql 스크립트에 code_post table에 is_public 컬럼 추가하는 명령어 작성
- 기존에 존재하던 게시글들에는 is_public 컬럼의 기본값을 true로 설정
- 기존에 존재하던 게시글들에는 is_public 컬럼의 기본값을 true로 설정
- [BE] 관련된 DTO 필드에 isPublic 멤버변수 추가
- [BE] service Layer에서 조회 로직 변경
- 게시물 작성자일 경우 - public
- 다른 회원일 경우 - private
CodePostEntity
@Entity public class CodePost { ... @Column(nullable = false) @ColumnDefault("true") private boolean isPublic; ... }
Flyway Script
ALTER TABLE code_post ADD COLUMN is_public TINYINT(1) NOT NULL DEFAULT 1;
MySQL은 boolean 타입을 TinyInt 로 저장한다.
UPDATE code_post SET is_public = 1 WHERE is_public IS NULL;
기본값 1이 저장안될 수 있는 예외 상황을 처리하기 위한 명령어이다.
RequesetDto
public record CodePostSaveRequestDto( ... @Schema(description = "공개여부", example = "true") boolean isPublic, ... )
Service Layer
@Query("SELECT c FROM CodePost c WHERE ... c.writerId = :memberId OR c.isPublic IS TRUE")
조회하는 모든 쿼리 조건문에 isPublic이 true이거나 작성자일 경우 조회되도록 변경
@Query(value = "SELECT * FROM code_post c WHERE c.is_public = TRUE AND MATCH(c.title) AGAINST(:keyword IN BOOLEAN MODE)", countQuery = "SELECT COUNT(*) FROM code_post c WHERE MATCH(c.title) AGAINST(:keyword IN BOOLEAN MODE)", nativeQuery = true)
search 메서드에 쓰이는 쿼리문으로 nativeQuery를 쓰기 때문에 c.isPublic으로 작성할 경우 해당 컬럼이 없다는 에러가 발생한다.
MySQL에 저장된 컬럼 이름인 is_public으로 작성해야된다.
전체 조회같은 경우 다른 사용자의 게시물과 함께 조회되기 때문에 작성자여도 비공개일 경우 조회되지 않도록 구현했다.
작성자는 자신의 비공개 게시물을 자신의 post만을 조회하는 로직에서 볼 수 있다.
728x90반응형'포트폴리오 > AutoReview' 카테고리의 다른 글
🛠 GitHub 연동 기능 구현기 (0) 2025.05.15 Code Post에 북마크 기능 추가 (0) 2025.05.10 [트러블 슈팅] Nginx 502 Bad Gateway 에러 발생 (0) 2025.04.29 검색 쿼리 개선 (LIKE -> Full Text Search) (0) 2025.04.23 [트러블 슈팅] 개발 서버와 배포 서버 사이에 DB 불일치 해결 (0) 2025.03.31 댓글 - [BE] code post Entity 필드에 isPublic 멤버변수 추가