Skip to content

Conversation

@youngseo22
Copy link
Contributor

@youngseo22 youngseo22 commented May 23, 2025

이슈 번호

#17 #22

작업 내용

  • 게시글 작성 - 태그 입력 기능 추가
  • 게시글 본문에 모두 @ Lob 어노테이션 붙이기
  • 게시글 이미지 테이블 삭제 & 게시글 테이블에 대표이미지 칼럼 추가
  • 북마크 '태그 -> 폴더'로 기능 수정
    --
  • 회원 목업 데이터 생성 시 북마크 디폴트 파일도 생성하도록 설정
  • 태그 목업 데이터 생성 코드 추가
    --
  • 도메인 변수명과 컬럼명 일치하도록 수정
  • 참조하는 테이블도 변수명과 컬럼명 일치하도록 수정

기타

  • 컨트롤러, 서비스 폴더 내 폴더 없앰
  • 중복 ErrorCode 명 해결
  • 회원가입 로직 구현으로 인해 권한 에러 발생해서 관련 코드 주석처리 해놨습니다! 로그인까지 구현 완료 시 주석 풀어서 머지해주시면 좋을 것 같아요 :)
  • 게시글 작성 시 태그 개수 제한 필요

Summary by CodeRabbit

  • 신규 기능

    • 회원 가입, 이메일/닉네임 중복 확인 등 멤버 관련 API가 추가되었습니다.
    • 게시글 생성 시 커버 이미지 및 태그 지정 기능이 추가되었습니다.
    • 태그 데이터 및 멤버/북마크 폴더 테스트 데이터 자동 초기화 기능이 도입되었습니다.
  • 버그 수정

    • 북마크, 팔로우, 좋아요 등에서 폴더 및 사용자 기준으로 동작하도록 개선되었습니다.
  • 리팩터링

    • 도메인 필드 및 엔티티 명칭이 일관성 있게 변경되었습니다(예: id → userId, postId 등).
    • 패키지 구조 및 일부 컨트롤러, 서비스 위치가 조정되었습니다.
    • 보안 설정 및 관련 의존성이 비활성화되었습니다.
  • 기타

    • 데이터베이스 스키마 자동 생성 정책이 변경되었습니다.
    • 불필요한 엔티티 및 코드가 삭제되었습니다.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented May 23, 2025

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Walkthrough

이 변경 사항은 도메인 엔티티의 필드명, 관계, 패키지 구조를 대대적으로 리팩토링하고, 북마크 폴더, 태그, 포스트 태그 등 새로운 저장소 및 초기화 로직을 추가합니다. 또한 멤버 관련 API와 서비스가 통합·이동되었으며, 보안 설정이 비활성화되고, JPA 스키마 전략이 create-drop으로 변경되었습니다.

Changes

파일/경로 요약 변경 요약
build.gradle, src/main/java/com/example/fixlog/config/SecurityConfig.java Spring Security 의존성 및 보안 설정 전체 비활성화(주석 처리)
src/main/resources/application.properties JPA Hibernate DDL 전략 update → create-drop 변경
src/main/java/com/example/FixLog/controller/FollowController.java,
src/main/java/com/example/FixLog/controller/PostController.java,
src/main/java/com/example/FixLog/service/FollowService.java
패키지 이동 및 import 경로, 내부 필드명, 예외 코드, self-follow 로직 등 리팩토링
src/main/java/com/example/fixlog/domain/member/Member.java,
src/main/java/com/example/FixLog/domain/bookmark/BookmarkFolder.java,
src/main/java/com/example/fixlog/domain/bookmark/Bookmark.java,
src/main/java/com/example/fixlog/domain/fork/Fork.java,
src/main/java/com/example/fixlog/domain/like/PostLike.java,
src/main/java/com/example/fixlog/domain/post/Post.java,
src/main/java/com/example/fixlog/domain/post/PostTag.java,
src/main/java/com/example/fixlog/domain/tag/Tag.java,
src/main/java/com/example/fixlog/domain/tag/TagCategory.java,
src/main/java/com/example/fixlog/exception/ErrorCode.java
엔티티 필드명, 컬럼명, 관계(OneToOne, JoinColumn 등), 생성자, enum 상수, 에러코드 등 대규모 리팩토링 및 일관성 확보, 도메인 모델 구조 변경
src/main/java/com/example/FixLog/controller/MemberController.java,
src/main/java/com/example/FixLog/service/MemberService.java
멤버 API 및 서비스 신규 구현(이전 member 패키지에서 통합), 회원가입 및 중복체크 API 제공
src/main/java/com/example/fixlog/controller/member/MemberController.java,
src/main/java/com/example/fixlog/service/member/MemberService.java
기존 멤버 컨트롤러/서비스 삭제(위로 통합)
src/main/java/com/example/fixlog/domain/post/PostImage.java PostImage 엔티티 및 관련 컬렉션 완전 삭제
src/main/java/com/example/fixlog/mock/MemberTestDataInitializer.java,
src/main/java/com/example/FixLog/mock/TagTestDataInitializer.java
테스트 데이터 초기화기: 멤버와 북마크 폴더, 태그 생성 로직 추가
src/main/java/com/example/fixlog/dto/post/PostRequestDto.java 커버 이미지 URL, 태그 ID 목록 필드 추가
src/main/java/com/example/fixlog/repository/bookmark/BookmarkRepository.java,
src/main/java/com/example/FixLog/repository/bookmark/BookmarkFolderRepository.java,
src/main/java/com/example/fixlog/repository/follow/FollowRepository.java,
src/main/java/com/example/fixlog/repository/like/PostLikeRepository.java,
src/main/java/com/example/FixLog/repository/post/PostTagRepository.java,
src/main/java/com/example/FixLog/repository/tag/TagRepository.java
북마크, 팔로우, 포스트 태그, 태그 등 저장소 신규 추가 및 메소드 시그니처/쿼리 파라미터 변경
src/main/java/com/example/fixlog/service/PostService.java 게시글 생성 시 커버 이미지, 태그 연결, 북마크 폴더 기반 북마크 관리 등 로직 확장 및 리팩토링

Sequence Diagram(s)

sequenceDiagram
actor User
participant MemberController
participant MemberService
participant MemberRepository
participant BookmarkFolderRepository

User->>MemberController: POST /api/members/signup
MemberController->>MemberService: signup(request)
MemberService->>MemberRepository: existsByEmail / existsByNickname
alt 중복 존재
    MemberService-->>MemberController: Exception 발생
else 중복 없음
    MemberService->>MemberRepository: save(new Member)
    MemberService->>BookmarkFolderRepository: save(new BookmarkFolder)
    MemberService-->>MemberController: 회원가입 성공
end
MemberController-->>User: 회원가입 결과 반환
Loading
sequenceDiagram
actor User
participant PostService
participant TagRepository
participant PostTagRepository
participant BookmarkFolderRepository
participant BookmarkRepository

User->>PostService: createPost(PostRequestDto)
PostService->>TagRepository: findAllById(tags)
PostService->>PostTagRepository: save(PostTag)
PostService->>BookmarkFolderRepository: findByUserId
Note over PostService: 커버 이미지, 태그, 북마크 폴더 연동 후 게시글 저장
Loading

Possibly related PRs

  • FixLog/FixLog_Server#10: FollowController 및 FollowService의 패키지 이동, 필드명/에러코드 리팩토링 등 팔로우 관련 API와 서비스의 구조 개편과 직접적으로 연관됨.

Poem

🐇
새 이름, 새 폴더, 태그도 가득
북마크는 폴더 품에 쏙—
보안은 잠시 쉬어가고
회원가입, 태그, 포스트 모두
깔끔하게 정돈된 새 봄밭!
데이터도 새로 심고
토끼는 오늘도 행복해요.
🥕✨


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@youngseo22 youngseo22 changed the title [FIX] 게시글 작성 및 메인페이지 수정 [FIX] 게시글 작성 및 메인페이지 수정, 도메인 변수명 수정 May 24, 2025
@youngseo22
Copy link
Contributor Author

@coderabbitai review

@coderabbitai
Copy link
Contributor

coderabbitai bot commented May 24, 2025

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 27

🔭 Outside diff range comments (4)
src/main/java/com/example/fixlog/config/SecurityConfig.java (1)

1-32: 🛠️ Refactor suggestion

⚠️ Potential issue

보안 설정이 비활성화되어 있습니다. 주의가 필요합니다.

전체 보안 설정이 주석 처리되어 있어 모든 엔드포인트가 인증 없이 접근 가능합니다. PR 설명에 따르면 로그인 기능 구현 후 주석 해제 예정이라고 하지만, 이를 명확히 표시해야 합니다.

파일 상단에 TODO 주석을 추가하여 의도를 명확히 하세요:

+// TODO: 로그인 기능 구현 완료 후 주석 해제 필요
 //package com.example.fixlog.config;

또한 이슈 트래커에 이 작업을 추적할 수 있는 티켓을 생성하는 것을 권장합니다.

src/main/java/com/example/FixLog/service/MemberService.java (1)

1-57: 💡 Verification agent

🧩 Analysis chain

전체 파일이 주석 처리되어 있고 패키지명이 일관되지 않습니다.

  1. 패키지명이 com.example.fixlog가 아닌 com.example.FixLog로 되어 있어 다른 파일들과 일관성이 없습니다.
  2. 전체 코드가 주석 처리되어 있는데, 이는 코드베이스를 혼란스럽게 만들 수 있습니다.

다음 스크립트로 패키지명 일관성을 확인하세요:

만약 이 서비스가 더 이상 필요하지 않다면 파일을 삭제하는 것이 좋습니다. 임시로 유지해야 한다면 명확한 TODO 주석을 추가하세요.


🏁 Script executed:

#!/bin/bash
# 패키지명 패턴 확인
echo "=== FixLog (대문자) 패키지 사용 파일 ==="
fd -e java | xargs grep -l "package com.example.FixLog"

echo -e "\n=== fixlog (소문자) 패키지 사용 파일 ==="
fd -e java | xargs grep -l "package com.example.fixlog"

Length of output: 3136


디렉터리명과 주석 처리된 코드 정리 필요

패키지 선언은 모두 com.example.fixlog(소문자)로 일관되어 있으나, 실제 디렉터리 구조가 com/example/FixLog(대문자)로 되어 있어 패키지 경로와 불일치합니다. 또한 MemberService.java 전체가 주석 처리되어 있어 혼란을 초래합니다.

수정 사항:

  • src/main/java/com/example/FixLog/** → src/main/java/com/example/fixlog/**
    (파일 이동 및 디렉터리명 소문자화)
  • MemberService.java 파일
    • 불필요하다면 삭제
    • 당장 유지해야 한다면 명확한 TODO 주석(혹은 Javadoc) 추가 후 코드 활성화 여부를 설명
src/main/java/com/example/fixlog/service/PostService.java (1)

117-139: 💡 Verification agent

🧩 Analysis chain

북마크 폴더 로직이 제한적입니다.

현재 구현은 사용자당 하나의 북마크 폴더만 지원합니다. 향후 여러 폴더를 지원하려면 리팩토링이 필요합니다.

다음 사항들을 고려하세요:

  1. 125번 라인의 주석대로 현재는 폴더가 하나일 때만 작동합니다
  2. 향후 여러 폴더 지원 시 폴더 선택 로직이 필요합니다
  3. 138번 라인의 FIXME에 대해서는 비즈니스 요구사항 확인이 필요합니다

🌐 Web query:

일반적으로 소셜 미디어나 블로그 플랫폼에서 자신의 글을 북마크하는 것을 허용하나요?

💡 Result:

소셜 미디어 및 블로그 플랫폼에서 자신의 글 북마크 허용 여부

사용자가 자신이 쓴 글을 북마크(저장)하는 행위는 대부분의 주요 소셜 미디어 및 블로그 플랫폼에서 허용되어 있습니다.

블로그 플랫폼(네이버 블로그, 티스토리 등)

  • 네이버 블로그에서는 자신이 쓴 글을 포함해 관심 있는 글을 북마크(즐겨찾기) 기능으로 저장할 수 있습니다. 사용자는 포스트 하단의 ‘북마크’(별표) 아이콘을 클릭해 자신이 쓴 글도 자유롭게 북마크에 추가할 수 있으며, 이는 로그인한 자신의 계정 내 북마크함에서 언제든지 확인 가능합니다[1][2][3].
  • 이용 목적은 본인 글의 빠른 접근, 여러 개의 글 중 특정 글을 집중 관리, 필요시 다시 읽기 등 다양합니다. 타인이 쓴 글뿐 아니라 자신의 글도 북마크하는 것에 제약이 따르지 않습니다[3].

소셜 미디어 플랫폼(페이스북 등)

  • 페이스북 등 주요 소셜미디어는 ‘저장’ 또는 ‘북마크’ 기능(예: Save to Facebook)을 제공하며, 본인이 올린 게시물도 저장 목록에 추가할 수 있습니다. 이는 본인 글 관리나 나중에 내용을 다시 참고하고 싶을 때 자주 활용되는 방식입니다[4].
  • 북마크/저장 기능은 본인이 쓴 글이든, 타인이 쓴 글이든 사용자 계정 내에서만 활용되므로, 플랫폼 정책상 제약이 따로 없습니다.

브라우저, 기타 플랫폼

  • 일반 브라우저의 ‘북마크’ 기능이나 피큐레잇(Picureit) 등의 서드파티 북마크 서비스도 본인이 운영하는 블로그나 소셜 계정의 게시물을 자유롭게 북마크할 수 있습니다[6]. 이 기능은 해당 플랫폼의 별도 제한 없이 가능합니다.

결론

대부분의 소셜 미디어 및 블로그 플랫폼에서는 사용자가 자신의 글을 북마크하는 것을 명시적으로 허용하며, 특별한 제한이나 금지 규정이 존재하지 않습니다. 이는 개인의 콘텐츠 관리와 접근성을 높이기 위한 일반적이고 보편적인 서비스 기능입니다[1][2][3][4][6].

Citations:


한 개 폴더만 지원하는 북마크 로직 및 본인 글 북마크 허용 개선 제안

현재 toggleBookmark 메서드는 사용자당 단일 폴더만 지원하며, 본인 글 북마크 여부가 미정의 상태입니다. 아래 사항을 검토해주세요:

  • bookmarkFolderRepository.findByUserId(userId) 호출은 오직 하나의 폴더만 반환합니다.
    → 향후 다중 폴더 지원 시, 폴더 선택(UI/API 파라미터/디폴트 폴더 지정 등) 로직을 추가해야 합니다.
  • 125번 라인의 주석(// 이 코드는 폴더가 하나일 때만 적용됨)을 남기거나, 단일 폴더 제약에 대해 명시적인 예외를 던지는 방향으로 처리하세요.
  • 138번 라인의 FIXME(// Fixme : 본인 글은 북마크 못하려나?)는 제거하고, 본인 게시물도 북마크할 수 있도록 허용하도록 수정해주세요.
    – 웹 조사를 통해 대부분의 소셜/블로그 플랫폼은 본인 글 북마크를 허용하는 것으로 확인되었습니다. 별도 비즈니스 제약이 없다면, 본인 글도 일반 글과 동일한 흐름으로 처리하는 것이 사용자 경험상 자연스럽습니다.
src/main/java/com/example/FixLog/controller/MemberController.java (1)

1-39: 🛠️ Refactor suggestion

전체 파일을 주석 처리하는 것보다 더 나은 방법을 고려해보세요.

전체 컨트롤러를 주석 처리하는 것은 좋은 방법이 아닙니다. 대신 다음과 같은 방법을 고려해보세요:

  1. @Profile 또는 @ConditionalOnProperty를 사용하여 조건부로 빈을 로드
  2. 별도의 feature branch에서 개발
  3. 필요한 부분만 주석 처리

예시:

@RestController
@RequestMapping("/api/members")
@RequiredArgsConstructor
@ConditionalOnProperty(name = "feature.member.enabled", havingValue = "true")
public class MemberController {
    // ... 코드 내용
}

그리고 application.yml에서:

feature:
  member:
    enabled: false  # 로그인 기능 완성 후 true로 변경
🧹 Nitpick comments (8)
build.gradle (1)

28-28: 임시 보안 비활성화에 대한 추적 개선 제안

PR 목적에 따라 로그인 기능 완료까지 임시로 Spring Security를 비활성화한 것으로 이해됩니다. 하지만 build.gradle에서 의존성을 주석 처리하면 나중에 재활성화할 때 놓칠 수 있습니다.

다음과 같은 방법을 고려해보세요:

-	// implementation 'org.springframework.boot:spring-boot-starter-security'
+	implementation 'org.springframework.boot:spring-boot-starter-security' // TODO: 로그인 기능 완료 후 SecurityConfig와 함께 활성화

또는 이슈를 생성하여 추적하는 것을 권장합니다.

src/main/resources/application.properties (1)

14-14: 스키마 재생성 전략 변경에 대한 주의사항

도메인 모델 대대적 리팩토링에 맞춰 create-drop 전략으로 변경한 것이 적절합니다. 하지만 이 설정의 의미와 주의사항을 명확히 해야 합니다.

다음과 같이 주석을 추가하여 의도를 명확히 하는 것을 권장합니다:

 spring.jpa.show-sql=true
-spring.jpa.hibernate.ddl-auto=create-drop
+# 도메인 리팩토링 기간 중 개발용 설정 - 애플리케이션 재시작 시 데이터 초기화됨
+# TODO: 개발 완료 후 update 또는 validate로 변경 필요
+spring.jpa.hibernate.ddl-auto=create-drop

그리고 프로덕션 환경에서는 반드시 다른 값으로 설정되도록 프로파일별 설정을 고려해보세요.

src/main/java/com/example/fixlog/dto/post/PostRequestDto.java (1)

23-24: 주석 처리된 코드 정리를 고려해주세요.

주석 처리된 코드가 더 이상 필요하지 않다면 제거하는 것을 고려해보세요. 임시적으로 유지해야 한다면 TODO 주석을 추가하여 목적을 명확히 해주세요.

-//    private List<String> postImageUrl;
-//    private List<String> tags;
+    // TODO: 이미지 업로드 기능 구현 후 제거 예정
+//    private List<String> postImageUrl;
+//    private List<String> tags;
src/main/java/com/example/fixlog/service/PostService.java (1)

58-59: 태그 개수 제한을 구현해야 합니다.

TODO 주석에 따르면 태그 선택 제한이 필요합니다. PR 설명에서도 언급된 사항입니다.

다음과 같이 태그 개수 제한을 추가할 수 있습니다:

// 태그 저장
List<Long> tagIds = postRequestDto.getTags();
if (tagIds.size() > 5) { // 예: 최대 5개 제한
    throw new CustomException(ErrorCode.TAG_LIMIT_EXCEEDED);
}

이 기능 구현을 위한 이슈를 생성할까요?

Also applies to: 77-85

src/main/java/com/example/fixlog/domain/like/PostLike.java (1)

36-38: 메서드명이 Java 명명 규칙을 따르지 않습니다

Java 메서드는 camelCase를 사용해야 합니다. 첫 글자는 소문자로 시작해야 합니다.

-    public void ToggleLike(boolean state){
+    public void toggleLike(boolean state){
         this.isLiked = state;
     }
src/main/java/com/example/fixlog/domain/bookmark/Bookmark.java (1)

17-18: 필드명과 타입 불일치 문제

bookmarkId 필드명은 Long 타입의 ID를 나타내지만, 실제로는 primary key입니다. 일관성을 위해 id 또는 다른 명확한 이름 사용을 고려해보세요.

src/main/java/com/example/fixlog/domain/post/Post.java (2)

21-22: 필드명과 타입 불일치 문제

postId 필드명은 Long 타입의 ID를 나타내지만, 실제로는 primary key입니다. 일관성을 위해 id 사용을 고려해보세요.


61-61: @lob 필드의 일관성 부족

extraContent 필드에서 @Column(columnDefinition = "TEXT") 어노테이션이 제거되었지만, 다른 @Lob 필드들과의 일관성을 위해 다시 추가하는 것을 고려해보세요.

     @Lob
+    @Column(columnDefinition = "TEXT")
     private String extraContent;
📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 8207b96 and eae8501.

📒 Files selected for processing (32)
  • build.gradle (1 hunks)
  • src/main/java/com/example/FixLog/controller/FollowController.java (1 hunks)
  • src/main/java/com/example/FixLog/controller/MemberController.java (1 hunks)
  • src/main/java/com/example/FixLog/controller/PostController.java (1 hunks)
  • src/main/java/com/example/FixLog/domain/bookmark/BookmarkFolder.java (1 hunks)
  • src/main/java/com/example/FixLog/mock/TagTestDataInitializer.java (1 hunks)
  • src/main/java/com/example/FixLog/repository/bookmark/BookmarkFolderRepository.java (1 hunks)
  • src/main/java/com/example/FixLog/repository/post/PostTagRepository.java (1 hunks)
  • src/main/java/com/example/FixLog/repository/tag/TagRepository.java (1 hunks)
  • src/main/java/com/example/FixLog/service/FollowService.java (4 hunks)
  • src/main/java/com/example/FixLog/service/MemberService.java (1 hunks)
  • src/main/java/com/example/fixlog/config/SecurityConfig.java (1 hunks)
  • src/main/java/com/example/fixlog/controller/member/MemberController.java (0 hunks)
  • src/main/java/com/example/fixlog/domain/bookmark/Bookmark.java (1 hunks)
  • src/main/java/com/example/fixlog/domain/follow/Follow.java (1 hunks)
  • src/main/java/com/example/fixlog/domain/fork/Fork.java (1 hunks)
  • src/main/java/com/example/fixlog/domain/like/PostLike.java (1 hunks)
  • src/main/java/com/example/fixlog/domain/member/Member.java (2 hunks)
  • src/main/java/com/example/fixlog/domain/post/Post.java (2 hunks)
  • src/main/java/com/example/fixlog/domain/post/PostImage.java (0 hunks)
  • src/main/java/com/example/fixlog/domain/post/PostTag.java (1 hunks)
  • src/main/java/com/example/fixlog/domain/tag/Tag.java (2 hunks)
  • src/main/java/com/example/fixlog/domain/tag/TagCategory.java (1 hunks)
  • src/main/java/com/example/fixlog/dto/post/PostRequestDto.java (2 hunks)
  • src/main/java/com/example/fixlog/exception/ErrorCode.java (1 hunks)
  • src/main/java/com/example/fixlog/mock/MemberTestDataInitializer.java (2 hunks)
  • src/main/java/com/example/fixlog/repository/bookmark/BookmarkRepository.java (1 hunks)
  • src/main/java/com/example/fixlog/repository/follow/FollowRepository.java (1 hunks)
  • src/main/java/com/example/fixlog/repository/like/PostLikeRepository.java (1 hunks)
  • src/main/java/com/example/fixlog/service/PostService.java (5 hunks)
  • src/main/java/com/example/fixlog/service/member/MemberService.java (0 hunks)
  • src/main/resources/application.properties (1 hunks)
💤 Files with no reviewable changes (3)
  • src/main/java/com/example/fixlog/domain/post/PostImage.java
  • src/main/java/com/example/fixlog/service/member/MemberService.java
  • src/main/java/com/example/fixlog/controller/member/MemberController.java
🧰 Additional context used
🧬 Code Graph Analysis (1)
src/main/java/com/example/FixLog/mock/TagTestDataInitializer.java (1)
src/main/java/com/example/fixlog/mock/MemberTestDataInitializer.java (1)
  • Component (14-35)
🔇 Additional comments (19)
src/main/java/com/example/FixLog/controller/PostController.java (1)

1-1:

Details

✅ Verification successful

패키지 구조 단순화 승인

컨트롤러 폴더 구조 단순화에 따른 패키지 변경이 올바르게 적용되었습니다.

다른 컨트롤러들과의 일관성을 확인하기 위해 다음 스크립트를 실행해보세요:


🏁 Script executed:

#!/bin/bash
# 모든 컨트롤러의 패키지 선언 확인
echo "=== Controller 패키지 선언 확인 ==="
find src/main/java -name "*Controller.java" -exec grep -H "^package" {} \;

echo -e "\n=== 이전 subpackage 구조 잔재 확인 ==="
rg "com\.example\.fixlog\.controller\.(post|follow|member)" --type java

Length of output: 505


패키지 구조 단순화 검증 완료

  • FollowController.java, PostController.java 모두 package com.example.fixlog.controller;를 선언하고 있습니다.
  • com.example.fixlog.controller.post|follow|member 하위 패키지 관련 코드가 더 이상 존재하지 않습니다.

이제 변경된 패키지 구조가 일관되게 적용되었으므로 승인합니다.

src/main/java/com/example/FixLog/controller/FollowController.java (1)

1-1: 패키지 구조 리팩토링 일관성 확인됨

PostController와 일관되게 패키지 구조가 단순화되었고, 관련 import 문도 올바르게 업데이트되었습니다.

Also applies to: 9-9

src/main/java/com/example/FixLog/repository/post/PostTagRepository.java (1)

1-7: LGTM! 표준 JPA 레포지토리 구현이 올바릅니다.

PostTag 엔티티에 대한 기본적인 CRUD 작업을 위한 표준 Spring Data JPA 레포지토리 인터페이스가 올바르게 구현되었습니다.

src/main/java/com/example/FixLog/repository/tag/TagRepository.java (1)

1-7: LGTM! 태그 관리를 위한 표준 레포지토리 구현입니다.

Tag 엔티티를 위한 기본 JPA 레포지토리가 Spring Data JPA 규칙에 따라 올바르게 구현되었습니다.

src/main/java/com/example/fixlog/dto/post/PostRequestDto.java (2)

5-5: 새로운 import 추가가 적절합니다.

태그 목록을 위한 java.util.List import가 올바르게 추가되었습니다.


11-11: 새로운 필드 추가가 기능 요구사항과 일치합니다.

커버 이미지와 태그 기능을 위한 coverImageUrltags 필드가 올바르게 추가되었습니다. PR 목표와 일치하는 변경사항입니다.

Also applies to: 21-21

src/main/java/com/example/fixlog/mock/MemberTestDataInitializer.java (3)

3-5: LGTM! 필요한 import 추가

BookmarkFolder와 BookmarkFolderRepository import가 적절히 추가되었습니다.


19-19: LGTM! BookmarkFolderRepository 의존성 주입

BookmarkFolderRepository 의존성이 적절히 추가되었습니다.


27-31: LGTM! 멤버별 기본 북마크 폴더 생성 로직

각 멤버에 대해 BookmarkFolder를 생성하여 저장하는 로직이 잘 구현되었습니다. 이는 도메인 모델의 일관성을 유지하는 좋은 방법입니다.

src/main/java/com/example/FixLog/mock/TagTestDataInitializer.java (1)

12-16: LGTM! 표준 테스트 데이터 초기화 패턴 사용

Spring의 CommandLineRunner를 사용한 테스트 데이터 초기화 패턴이 프로젝트의 다른 초기화 클래스들과 일관성 있게 구현되었습니다.

src/main/java/com/example/fixlog/repository/bookmark/BookmarkRepository.java (1)

4-4: LGTM! import 변경

Member에서 BookmarkFolder로 import가 적절히 변경되었습니다.

src/main/java/com/example/fixlog/domain/tag/Tag.java (2)

17-18: 필드명 변경이 적절합니다.

도메인 전체의 일관성을 위한 네이밍 컨벤션 변경이 잘 적용되었습니다.

Also applies to: 24-24


26-31: 정적 팩토리 메서드 추가가 좋습니다.

간단하고 명확한 객체 생성 방법을 제공합니다.

src/main/java/com/example/fixlog/service/PostService.java (1)

95-114: 리포지토리 메서드명 변경이 적절합니다.

도메인 모델 변경에 맞춰 메서드명이 일관되게 변경되었습니다.

src/main/java/com/example/fixlog/domain/member/Member.java (1)

59-59:

Details

✅ Verification successful

Post 엔티티의 실제 필드명 확인 필요

mappedBy = "userId"는 Post 엔티티에 있는 Member 참조 필드명과 일치해야 합니다. Post 엔티티에서 Member를 참조하는 필드명이 정확히 userId인지 확인해주세요.


🏁 Script executed:

#!/bin/bash
# Post 엔티티에서 Member를 참조하는 필드 확인
ast-grep --pattern 'class Post {
  $$$
  private Member $FIELD;
  $$$
}'

Length of output: 74


Post 엔티티의 Member 참조 필드를 정확히 찾아야 합니다. Post.java 파일 경로를 탐색한 뒤, Member 타입 필드를 확인해보겠습니다.


🏁 Script executed:

#!/bin/bash
# 1. Post.java 파일 경로 찾기
file=$(fd 'Post.java' src/main/java)
echo "Post.java 경로: $file"

# 2. Post.java에서 Member 참조 필드와 매핑 어노테이션 확인
grep -nE "@ManyToOne|Member" "$file"

Length of output: 554


매핑 확인 완료: mappedBy = "userId"가 Post 엔티티의 userId 필드와 일치합니다. 변경이 필요 없습니다.

src/main/java/com/example/FixLog/domain/bookmark/BookmarkFolder.java (1)

25-25: 관계 변경이 비즈니스 요구사항과 일치하는지 확인해주세요.

@ManyToOne에서 @OneToOne으로 변경되어 이제 각 사용자는 하나의 북마크 폴더만 가질 수 있습니다. 이것이 의도된 변경인지 확인이 필요합니다.

만약 사용자가 여러 북마크 폴더를 가질 수 있어야 한다면, @ManyToOne 관계를 유지해야 합니다.

src/main/java/com/example/fixlog/domain/post/Post.java (3)

31-32: 새로운 coverImage 필드 추가

coverImage 필드가 추가되어 포스트에 대표 이미지 기능이 구현되었습니다. TEXT 컬럼 정의가 적절합니다.


70-70:

Details

✅ Verification successful

관계 매핑 업데이트 확인 필요

mappedBy = "postId"로 변경되었지만, Bookmark 엔티티의 필드명이 실제로 postId인지 확인이 필요합니다.

다음 스크립트로 Bookmark 엔티티의 필드명을 확인해보세요:


🏁 Script executed:

#!/bin/bash
# Description: Bookmark 엔티티의 Post 참조 필드명 확인
ast-grep --pattern 'class Bookmark {
  $$$
  private Post $FIELD;
  $$$
}'

Length of output: 76


아래 스크립트로 Bookmark 엔티티 파일을 찾고, Post 참조 필드명을 다시 확인해보겠습니다:


🏁 Script executed:

#!/bin/bash
# Bookmark 엔티티 파일 위치 출력
echo "🔍 Bookmark.java 파일 찾는 중..."
fd -e java Bookmark.java

# Bookmark.java 내 Post 타입 필드 확인
echo "🔍 Bookmark.java 내 Post 타입 필드 검색 중..."
fd -e java Bookmark.java --exec rg -n "private Post" {}

Length of output: 327


관계 매핑 확인 완료

  • Bookmark 엔티티(src/main/java/com/example/fixlog/domain/bookmark/Bookmark.java:22)의 private Post postId; 필드가 확인되어 mappedBy = "postId" 설정이 올바릅니다.

73-74:

Details

✅ Verification successful

PostTag 관계 매핑

새로운 PostTag 엔티티와의 관계가 추가되었습니다. mappedBy = "postId"가 올바른지 확인이 필요합니다.

PostTag 엔티티의 Post 참조 필드명을 확인해보세요:


🏁 Script executed:

#!/bin/bash
# Description: PostTag 엔티티의 Post 참조 필드명 확인
ast-grep --pattern 'class PostTag {
  $$$
  private Post $FIELD;
  $$$
}'

Length of output: 75


PostTag 엔티티의 클래스 정의와 Post 참조 필드를 직접 확인하기 위해 아래 스크립트를 실행해주세요:


🏁 Script executed:

#!/bin/bash
# PostTag.java 파일 위치 찾기
file=$(rg -l "class PostTag" -n src | head -n1)
echo "File: $file"
echo "=== 클래스 선언부 ==="
sed -n '1,50p' "$file"
echo "=== Post 참조 필드 ==="
rg "private Post" -n "$file"

Length of output: 1287


검증 완료: mappedBy="postId"가 올바릅니다
PostTag 엔티티 내에 Post를 참조하는 필드명이 private Post postId; 이므로, mappedBy = "postId" 설정이 정확합니다.

Copy link
Member

@sungchaewon sungchaewon left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

확인했습니다! 고생하셨습니다~

@youngseo22 youngseo22 added the ⚡ hotfix issue나 QA에서 문의된 급한 버그 및 오류 해결 label May 24, 2025
@semsemin
Copy link
Collaborator

확인했습니다! 수고하셨습니다~

@youngseo22 youngseo22 merged commit b9eacda into develop May 24, 2025
1 check passed
This was referenced May 26, 2025
@coderabbitai coderabbitai bot mentioned this pull request Jun 23, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

⚡ hotfix issue나 QA에서 문의된 급한 버그 및 오류 해결

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants