Skip to content

[refactor] Category, Room 도메인 로직 수정#61

Merged
seongjunnoh merged 7 commits intodevelopfrom
refactor/#53-room-category-structure
Jul 10, 2025
Merged

[refactor] Category, Room 도메인 로직 수정#61
seongjunnoh merged 7 commits intodevelopfrom
refactor/#53-room-category-structure

Conversation

@seongjunnoh
Copy link
Collaborator

@seongjunnoh seongjunnoh commented Jul 9, 2025

#️⃣ 연관된 이슈

closes #53

📝 작업 내용

Category를 더이상 도메인 엔티티가 아니라, Room 도메인의 밸류 타입으로 수정하였습니다

Room 영속성 관련된 코드 또한 수정하였습니다

📸 스크린샷

💬 리뷰 요구사항

리뷰어가 특별히 봐주었으면 하는 부분이 있다면 작성해주세요

📌 PR 진행 시 이러한 점들을 참고해 주세요

* P1 : 꼭 반영해 주세요 (Request Changes) - 이슈가 발생하거나 취약점이 발견되는 케이스 등
* P2 : 반영을 적극적으로 고려해 주시면 좋을 것 같아요 (Comment)
* P3 : 이런 방법도 있을 것 같아요~ 등의 사소한 의견입니다 (Chore)

Summary by CodeRabbit

  • 버그 수정

    • 카테고리명 "사회과확"의 오타를 "사회과학"으로 수정했습니다.
    • 일치하지 않는 카테고리명을 사용할 경우, 보다 명확한 에러 메시지가 제공됩니다.
    • 일치하는 카테고리명이 없을 때 발생하는 오류 메시지가 추가되었습니다.
  • 리팩터

    • Room 생성 및 관련 기능에서 카테고리 식별 방식을 ID 기반에서 카테고리명 기반 객체로 변경하여 도메인 모델이 개선되었습니다.
    • 카테고리 관련 클래스가 일반 클래스에서 enum으로 변경되어 고정된 카테고리 값으로 관리됩니다.
    • 카테고리 조회 및 저장 로직이 카테고리명 기반으로 변경되어 코드가 단순화되었습니다.
    • 기존 카테고리 매퍼 및 관련 퍼시스턴스 어댑터가 제거되었습니다.
  • 테스트

    • 테스트 데이터의 카테고리명을 "과학/IT" 등 실제 존재하는 값으로 변경하여 테스트 신뢰성을 높였습니다.
    • 테스트에서 카테고리 ID 대신 카테고리 객체를 사용하도록 수정되었습니다.
    • 테스트용 날짜 값이 동적으로 변경되도록 개선되었습니다.

@coderabbitai
Copy link

coderabbitai bot commented Jul 9, 2025

"""

Walkthrough

도메인 엔티티 구조가 변경되어, 카테고리 관련 매핑이 ID 기반에서 값 기반 도메인 객체(Category)로 전환되었습니다. 관련 매퍼, 어댑터, 서비스, 테스트 코드가 이에 맞게 리팩터링되었으며, 예외 처리 및 카테고리 값 검증 로직 또한 보완되었습니다.

Changes

파일/그룹 변경 요약
.../exception/code/ErrorCode.java CATEGORY_NOT_MATCH 오류 코드 추가
.../room/adapter/out/mapper/CategoryMapper.java
.../room/adapter/out/persistence/CategoryCommandPersistenceAdapter.java
.../room/application/port/out/CategoryCommandPort.java
.../room/adapter/out/persistence/CategoryName.java
Category 매퍼, 어댑터, 포트, CategoryName enum 삭제 및 관련 매핑 제거
.../room/adapter/out/mapper/RoomMapper.java 카테고리 매핑을 ID에서 도메인 객체로 변경
.../room/adapter/out/persistence/RoomCommandPersistenceAdapter.java 카테고리 조회 로직을 ID 기반에서 값 기반으로 변경
.../room/application/service/RoomCreateService.java 카테고리 조회 의존성 제거, 도메인 객체 직접 생성
.../room/domain/Category.java 엔티티 구조를 enum 값 객체로 변경, 필드 및 상속 구조 변경, 팩토리 메서드 추가
.../room/domain/Room.java 카테고리 필드를 ID에서 도메인 객체로 변경, 팩토리 메서드 시그니처 변경
.../room/domain/RoomTest.java 테스트에서 카테고리 ID 대신 도메인 객체 사용으로 변경
.../common/util/TestEntityFactory.java
.../room/adapter/in/web/RoomCreateAPITest.java
.../room/adapter/in/web/RoomVerifyPasswordAPITest.java
.../vote/adapter/in/web/VoteCreateControllerTest.java
테스트 데이터의 카테고리 값을 "과학/IT"로 통일

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant RoomCreateService
    participant Room
    participant Category

    User->>RoomCreateService: createRoom(command, userId)
    RoomCreateService->>Category: Category.from(command.getCategory())
    RoomCreateService->>Room: Room.withoutId(..., Category)
    RoomCreateService-->>User: Room 생성 결과 반환
Loading

Assessment against linked issues

Objective Addressed Explanation
도메인 엔티티 구조 변경: 매핑 테이블에 대응하는 도메인 엔티티 구조 반영 (#53)
구조 변경 이후 투표 생성, 방 생성 시 UserRoom 관련 validation 추가 (#53) UserRoom validation 관련 변경이 본 PR에서 확인되지 않음.

Assessment against linked issues: Out-of-scope changes

Code Change Explanation
org.springframework.context.annotation.Primary import 추가 (src/test/java/konkuk/thip/room/domain/RoomTest.java) 해당 import는 코드 내에서 사용되지 않으며, 목적과 무관함.

Poem

🐰
도메인 구조 바꾼 날,
카테고리 값이 춤을 춰요!
ID는 안녕, 이름이 주인공,
예외도 똑똑해져 실수는 안녕~
테스트 속 방과 투표,
과학/IT로 모두 하나 되어,
리팩터링의 봄바람 불어요!

"""

✨ Finishing Touches
  • 📝 Generate Docstrings

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.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

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.

Copy link

@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: 1

🧹 Nitpick comments (1)
src/test/java/konkuk/thip/room/domain/RoomTest.java (1)

8-8: 사용하지 않는 import를 제거해주세요.

org.springframework.context.annotation.Primary는 사용되지 않으므로 제거하는 것이 좋습니다.

-import org.springframework.context.annotation.Primary;
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between dc95f52 and efd040d.

📒 Files selected for processing (14)
  • src/main/java/konkuk/thip/common/exception/code/ErrorCode.java (1 hunks)
  • src/main/java/konkuk/thip/room/adapter/out/mapper/CategoryMapper.java (0 hunks)
  • src/main/java/konkuk/thip/room/adapter/out/mapper/RoomMapper.java (2 hunks)
  • src/main/java/konkuk/thip/room/adapter/out/persistence/CategoryCommandPersistenceAdapter.java (0 hunks)
  • src/main/java/konkuk/thip/room/adapter/out/persistence/CategoryName.java (3 hunks)
  • src/main/java/konkuk/thip/room/adapter/out/persistence/RoomCommandPersistenceAdapter.java (1 hunks)
  • src/main/java/konkuk/thip/room/application/service/RoomCreateService.java (2 hunks)
  • src/main/java/konkuk/thip/room/domain/Category.java (1 hunks)
  • src/main/java/konkuk/thip/room/domain/Room.java (2 hunks)
  • src/test/java/konkuk/thip/common/util/TestEntityFactory.java (1 hunks)
  • src/test/java/konkuk/thip/room/adapter/in/web/RoomCreateAPITest.java (2 hunks)
  • src/test/java/konkuk/thip/room/adapter/in/web/RoomVerifyPasswordAPITest.java (1 hunks)
  • src/test/java/konkuk/thip/room/domain/RoomTest.java (17 hunks)
  • src/test/java/konkuk/thip/vote/adapter/in/web/VoteCreateControllerTest.java (1 hunks)
💤 Files with no reviewable changes (2)
  • src/main/java/konkuk/thip/room/adapter/out/mapper/CategoryMapper.java
  • src/main/java/konkuk/thip/room/adapter/out/persistence/CategoryCommandPersistenceAdapter.java
🧰 Additional context used
🧠 Learnings (2)
src/main/java/konkuk/thip/room/application/service/RoomCreateService.java (1)
Learnt from: seongjunnoh
PR: THIP-TextHip/THIP-Server#43
File: src/main/java/konkuk/thip/book/application/port/out/BookCommandPort.java:0-0
Timestamp: 2025-07-03T03:05:05.031Z
Learning: THIP 프로젝트에서는 CQRS Port 분리 시 다음 컨벤션을 따름: CommandPort에는 findByXXX를 통해 도메인 엔티티를 찾아오는 메서드를 추가하고, QueryPort에는 조회 API의 response에 해당하는 데이터들을 DB로부터 조회하는 메서드를 추가함.
src/test/java/konkuk/thip/room/domain/RoomTest.java (1)
Learnt from: hd0rable
PR: THIP-TextHip/THIP-Server#57
File: src/test/java/konkuk/thip/room/domain/RoomTest.java:0-0
Timestamp: 2025-07-08T16:30:33.756Z
Learning: Room 도메인에서 startDate는 현재 날짜 이후여야 하는 도메인 규칙이 있어서, 테스트에서 만료된 상태를 시뮬레이션하려면 reflection을 사용해야 한다.
🧬 Code Graph Analysis (1)
src/main/java/konkuk/thip/room/adapter/out/persistence/CategoryName.java (1)
src/main/java/konkuk/thip/room/domain/Category.java (1)
  • Getter (7-16)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: build
🔇 Additional comments (20)
src/test/java/konkuk/thip/room/adapter/in/web/RoomVerifyPasswordAPITest.java (1)

99-99: 테스트 데이터 카테고리 값 변경 승인

도메인 리팩터링에 따라 카테고리 값이 실제 존재하는 값으로 변경되었습니다. 다른 테스트 파일들과 일관성을 유지하고 있어 좋습니다.

src/test/java/konkuk/thip/vote/adapter/in/web/VoteCreateControllerTest.java (1)

116-116: 테스트 데이터 카테고리 값 변경 승인

다른 테스트 파일들과 일관성을 유지하여 카테고리 값이 "과학/IT"로 변경되었습니다.

src/test/java/konkuk/thip/common/util/TestEntityFactory.java (1)

51-51: 공통 테스트 팩토리 카테고리 값 변경 승인

공통 테스트 팩토리에서 카테고리 값이 실제 존재하는 값으로 변경되어 테스트 데이터의 일관성과 현실성이 향상되었습니다.

src/test/java/konkuk/thip/room/adapter/in/web/RoomCreateAPITest.java (2)

90-90: 테스트 데이터 카테고리 값 변경 승인

테스트 데이터베이스 설정에서 카테고리 값이 실제 존재하는 값으로 변경되어 테스트의 현실성이 향상되었습니다.


124-124: 요청 데이터 카테고리 값 변경 승인

요청 데이터의 카테고리 값도 일관성있게 변경되어 테스트 데이터와 일치합니다.

src/main/java/konkuk/thip/common/exception/code/ErrorCode.java (1)

105-105: 새로운 에러 코드 추가 승인

카테고리 매칭 실패 시 사용할 구체적인 에러 코드가 적절하게 추가되었습니다. 기존 카테고리 관련 에러 코드들과 함께 논리적으로 그룹화되어 있고, 메시지도 명확합니다.

src/main/java/konkuk/thip/room/adapter/out/persistence/RoomCommandPersistenceAdapter.java (1)

41-43: 도메인 모델 리팩터링에 맞게 올바르게 수정되었습니다.

Category가 값 객체로 변경되면서 Room이 categoryId 대신 Category 객체를 보관하게 되었고, 이에 따라 persistence 계층에서도 ID 기반 조회에서 값 기반 조회로 변경하는 것이 올바른 접근입니다.

src/main/java/konkuk/thip/room/application/service/RoomCreateService.java (2)

27-28: Category 값 객체 생성이 올바르게 구현되었습니다.

Category가 값 객체로 변경되면서 별도의 persistence 조회 없이 문자열 값으로부터 직접 생성할 수 있게 되었습니다. 이는 성능상으로도 유리하고 도메인 설계상으로도 올바른 접근입니다.


43-43: Room 생성 시 Category 객체 전달이 올바르게 수정되었습니다.

도메인 모델 리팩터링에 맞게 categoryId 대신 Category 객체를 전달하도록 변경되었습니다.

src/main/java/konkuk/thip/room/adapter/out/persistence/CategoryName.java (2)

23-23: 오타가 올바르게 수정되었습니다.

"사회과확"에서 "사회과학"으로 수정되어 올바른 카테고리명이 되었습니다.


33-33: 도메인 예외 처리 패턴에 맞게 개선되었습니다.

IllegalArgumentException에서 InvalidStateException으로 변경하고 적절한 에러코드(CATEGORY_NOT_MATCH)를 사용하여 도메인 예외 처리 패턴과 일치하도록 개선되었습니다.

src/test/java/konkuk/thip/room/domain/RoomTest.java (2)

25-25: 테스트 코드 일관성을 위한 좋은 개선사항입니다.

validCategory 필드를 추가하여 모든 테스트에서 동일한 Category 객체를 사용할 수 있도록 한 것은 테스트 코드의 일관성과 유지보수성을 높이는 좋은 개선사항입니다.


33-240: 도메인 모델 리팩터링에 맞게 모든 테스트가 올바르게 수정되었습니다.

모든 테스트 메서드에서 hardcoded categoryId(456L) 대신 Category 객체를 사용하도록 변경되어 새로운 도메인 모델과 일치합니다. 테스트 로직이나 검증 내용에는 변경이 없어 기존 테스트의 의도가 그대로 유지되었습니다.

src/main/java/konkuk/thip/room/adapter/out/mapper/RoomMapper.java (1)

40-40: 도메인 모델 리팩터링에 맞게 매핑 로직이 올바르게 수정되었습니다.

Room 도메인이 categoryId 대신 Category 객체를 보관하게 되었으므로, JPA 엔티티의 값을 이용해 Category 객체를 생성하여 매핑하는 것이 올바른 접근입니다.

src/main/java/konkuk/thip/room/domain/Category.java (3)

5-8: 어노테이션 변경 적절함

@SuperBuilder에서 @RequiredArgsConstructor로 변경된 것은 도메인 엔티티에서 값 객체로의 전환에 적합합니다. 불변성을 보장하는 좋은 설계입니다.


9-11: 값 객체 설계 개선

BaseDomainEntity 상속 제거와 final 필드 사용은 값 객체 설계에 적합합니다. 불변성이 보장되어 안전합니다.


13-15: CategoryName.from()에 이미 유효성 검증이 구현되어 있습니다.

CategoryName.from(String) 메서드는 내부적으로 모든 enum 값을 순회해 매칭되는 값이 없으면 InvalidStateException을 발생시킵니다. 따라서 Category.from(String) 호출 시 잘못된 value가 들어올 경우 예외가 발생하며, 별도의 추가 검증 로직이 불필요합니다.

– CategoryName.from 구현 위치:
src/main/java/konkuk/thip/room/adapter/out/persistence/CategoryName.java:28

src/main/java/konkuk/thip/room/domain/Room.java (3)

43-43: 도메인 객체 사용으로 타입 안전성 향상

Long categoryId에서 Category category로 변경하여 타입 안전성이 향상되었습니다. 도메인 주도 설계 원칙에 부합하는 좋은 개선입니다.


63-63: 빌더 패턴 사용 일관성 유지

빌더에서 category 필드를 올바르게 설정하고 있어 일관성이 유지되었습니다.


45-45: 호출부 모두 Category 인자로 업데이트됨
Room.withoutId(...)의 시그니처 변경(Long categoryIdCategory category)이 테스트(RoomTest.java)와 서비스 레이어(RoomCreateService.java)의 모든 호출부에 올바르게 반영되었습니다.

@sonarqubecloud
Copy link

sonarqubecloud bot commented Jul 9, 2025

Copy link

@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: 1

🧹 Nitpick comments (2)
src/main/java/konkuk/thip/room/domain/Category.java (2)

17-17: TODO 댓글의 성능 최적화 고려사항을 검토해주세요.

DB 조회 성능 최적화에 대한 TODO가 있습니다. 현재 구조에서는 문자열 기반 조회가 불가피하지만, 향후 ID 기반 조회 방식으로 개선을 고려해볼 수 있습니다.

성능 최적화를 위한 구조 개선이 필요하다면 ID 필드를 포함한 enum 구조로 리팩터링할 수 있습니다. 구현 도움이 필요하시면 말씀해주세요.


25-25: value 필드에 null 검증을 추가하는 것을 고려해보세요.

현재 구조에서는 enum 상수 초기화 시 null 값이 들어갈 가능성은 낮지만, 안전성을 위해 검증을 추가할 수 있습니다.

더 안전한 구현을 위해 생성자에서 null 검증을 추가할 수 있습니다:

 @RequiredArgsConstructor
 public enum Category {
+    
+    private Category(String value) {
+        this.value = Objects.requireNonNull(value, "Category value cannot be null");
+    }

하지만 현재 enum 상수들이 모두 유효한 값으로 초기화되어 있으므로 이는 선택사항입니다.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between efd040d and 9eab0ef.

📒 Files selected for processing (6)
  • src/main/java/konkuk/thip/room/adapter/out/persistence/CategoryName.java (0 hunks)
  • src/main/java/konkuk/thip/room/adapter/out/persistence/RoomCommandPersistenceAdapter.java (1 hunks)
  • src/main/java/konkuk/thip/room/application/port/out/CategoryCommandPort.java (0 hunks)
  • src/main/java/konkuk/thip/room/application/service/RoomSearchService.java (2 hunks)
  • src/main/java/konkuk/thip/room/domain/Category.java (1 hunks)
  • src/test/java/konkuk/thip/room/adapter/in/web/RoomCreateAPITest.java (2 hunks)
💤 Files with no reviewable changes (2)
  • src/main/java/konkuk/thip/room/application/port/out/CategoryCommandPort.java
  • src/main/java/konkuk/thip/room/adapter/out/persistence/CategoryName.java
✅ Files skipped from review due to trivial changes (1)
  • src/main/java/konkuk/thip/room/application/service/RoomSearchService.java
🚧 Files skipped from review as they are similar to previous changes (2)
  • src/main/java/konkuk/thip/room/adapter/out/persistence/RoomCommandPersistenceAdapter.java
  • src/test/java/konkuk/thip/room/adapter/in/web/RoomCreateAPITest.java
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: build
🔇 Additional comments (3)
src/main/java/konkuk/thip/room/domain/Category.java (3)

3-9: 필요한 import 문들이 적절히 추가되었습니다.

enum 리팩터링에 필요한 모든 import 문들이 올바르게 추가되었습니다.


12-13: 클래스에서 enum으로의 리팩터링이 적절합니다.

도메인 엔티티에서 값 타입으로의 변경이 도메인 모델을 더 명확하게 만들어줍니다.


27-34: from() 메서드의 구현이 적절합니다.

문자열을 enum 상수로 변환하는 로직이 올바르게 구현되었고, 예외 처리도 적절합니다.

Comment on lines +19 to +23
SCIENCE_IT("과학/IT"),
Literature("문학"),
ART("예술"),
SOCIAL_SCIENCE("사회과학"),
HUMANITY("인문학");
Copy link

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

enum 상수명의 일관성을 개선해주세요.

enum 상수명이 일관되지 않습니다. Literature만 PascalCase이고 나머지는 UPPER_SNAKE_CASE입니다.

일관성을 위해 다음과 같이 수정하는 것을 권장합니다:

-    Literature("문학"),
+    LITERATURE("문학"),
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
SCIENCE_IT("과학/IT"),
Literature("문학"),
ART("예술"),
SOCIAL_SCIENCE("사회과학"),
HUMANITY("인문학");
SCIENCE_IT("과학/IT"),
LITERATURE("문학"),
ART("예술"),
SOCIAL_SCIENCE("사회과학"),
HUMANITY("인문학");
🤖 Prompt for AI Agents
In src/main/java/konkuk/thip/room/domain/Category.java around lines 19 to 23,
the enum constant 'Literature' uses PascalCase while others use
UPPER_SNAKE_CASE, causing inconsistency. Rename 'Literature' to 'LITERATURE' to
match the UPPER_SNAKE_CASE style of the other enum constants for consistency.

@seongjunnoh seongjunnoh merged commit 0e4842b into develop Jul 10, 2025
3 checks passed
@seongjunnoh seongjunnoh deleted the refactor/#53-room-category-structure branch July 10, 2025 02:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[refactor] 도메인 엔티티 구조 수정

3 participants