Skip to content

Conversation

@dolong2
Copy link
Owner

@dolong2 dolong2 commented Nov 6, 2025

๊ฐœ์š”

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒ์„ฑ๋ฐ ์ˆ˜์ •์‹œ ์ดˆ๊ธฐํ™” ์Šคํฌ๋ฆฝํŠธ ์ŠคํŽ™์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์ž‘์—…๋‚ด์šฉ

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ดˆ๊ธฐํ™” ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ ์„œ๋น„์Šค ์ถ”๊ฐ€
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒ์„ฑ๋ฐ ์ˆ˜์ • ์ŠคํŽ™์— ์ดˆ๊ธฐํ™” ์Šคํฌ๋ฆฝํŠธ ํ•„๋“œ ์ถ”๊ฐ€
  • ๋ณ€๊ฒฝ์‚ฌํ•ญ ๊ด€๋ จ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ถ”๊ฐ€

์ฒดํฌ๋ฆฌ์ŠคํŠธ

ํƒฌํ”Œ๋ฆฟ์™ธ์— ํ•„์š”ํ•œ ํ•ญ๋ชฉ์ด ์žˆ์œผ๋ฉด ์ถ”๊ฐ€ํ•ด์ฃผ์„ธ์š”.

  • ๋กœ์ปฌ์—์„œ ๋นŒ๋“œ๊ฐ€ ์„ฑ๊ณตํ•˜๋‚˜์š”?
  • ์ถ”๊ฐ€(์ˆ˜์ •)ํ•œ ์ฝ”๋“œ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜๋‚˜์š”?
  • pr ํƒ€์ผ“ ๋ธŒ๋žœ์น˜๊ฐ€ ๋งž๊ฒŒ ์„ค์ •๋˜์–ด ์žˆ๋‚˜์š”?
  • pr์—์„œ ์ž‘์—…ํ•  ๋‚ด์šฉ๋งŒ ์ž‘์—…๋๋‚˜์š”?
  • ๊ธฐ์กด API์™€ ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ์‚ฌํ•ญ์ด ์žˆ๋‚˜์š”?

Summary by CodeRabbit

๋ฆด๋ฆฌ์Šค ๋…ธํŠธ

  • New Features

    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒ์„ฑ ๋ฐ ์—…๋ฐ์ดํŠธ ์‹œ ์ดˆ๊ธฐ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ง€์ •ยท์ €์žฅ ๊ฐ€๋Šฅ
    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์—…๋ฐ์ดํŠธ ์š”์ฒญ์—์„œ ํฌํŠธ ์„ค์ • ์ง€์›
  • Bug Fixes / Data

    • ๊ด€๋ จ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์™ธ๋ž˜ํ‚ค ์ œ์•ฝ ๊ฐ•ํ™”
  • Tests

    • ์ดˆ๊ธฐ ์Šคํฌ๋ฆฝํŠธ ์ €์žฅ ๋ฐ ๊ฒ€์ฆ์„ ์œ„ํ•œ ํ…Œ์ŠคํŠธ ์‹œ๋‚˜๋ฆฌ์˜ค ์ถ”๊ฐ€

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Nov 6, 2025

Walkthrough

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒ์„ฑยท์—…๋ฐ์ดํŠธ ์š”์ฒญ์— initialScripts: List<String> ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , ์ด๋ฅผ ์ €์žฅยท๊ฐฑ์‹ ํ•˜๋Š” InitialScriptService์™€ ๊ตฌํ˜„์ฒด๋ฅผ ๋„์ž…ํ•˜์—ฌ ์œ ์Šค์ผ€์ด์Šค์—์„œ ์ดˆ๊ธฐ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ญ์ œ ํ›„ ์žฌ์ €์žฅํ•˜๋„๋ก ํ˜ธ์ถœํ•˜๋„๋ก ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ถ€ DTO์— port ํ•„๋“œ๊ฐ€ ์ถ”๊ฐ€ยท์žฌ์ •๋ ฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

Changes

์ฝ”ํ˜ธํŠธ / ํŒŒ์ผ(s) ๋ณ€๊ฒฝ ์š”์•ฝ
ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ์š”์ฒญ DTO
src/main/kotlin/com/dcd/server/presentation/domain/application/data/request/CreateApplicationRequest.kt, src/main/kotlin/com/dcd/server/presentation/domain/application/data/request/UpdateApplicationRequest.kt
initialScripts: List<String> ํ•„๋“œ ์ถ”๊ฐ€ (Create: ๊ธฐ๋ณธ๊ฐ’ ๋นˆ ๋ฆฌ์ŠคํŠธ). Update์—๋Š” port: Int ์ถ”๊ฐ€ ๋ฐ ์ผ๋ถ€ ํ•„๋“œ ์ˆœ์„œ ์กฐ์ •
๋„๋ฉ”์ธ ์š”์ฒญ DTO
src/main/kotlin/com/dcd/server/core/domain/application/dto/request/CreateApplicationReqDto.kt, src/main/kotlin/com/dcd/server/core/domain/application/dto/request/UpdateApplicationReqDto.kt
initialScripts: List<String> ํ•„๋“œ ์ถ”๊ฐ€; UpdateApplicationReqDto์— port: Int ์ถ”๊ฐ€ (์ƒ์„ฑ์ž ์‹œ๊ทธ๋‹ˆ์ฒ˜ ๋ณ€๊ฒฝ)
InitialScriptService (์ธํ„ฐํŽ˜์ด์Šค + ๊ตฌํ˜„)
src/main/kotlin/com/dcd/server/core/domain/application/service/InitialScriptService.kt, src/main/kotlin/com/dcd/server/core/domain/application/service/impl/InitialScriptServiceImpl.kt
์ƒˆ ์ธํ„ฐํŽ˜์ด์Šค ์ถ”๊ฐ€ (write(application, initialScripts)) ๋ฐ ๊ตฌํ˜„์ฒด ์ถ”๊ฐ€. ๊ตฌํ˜„์€ ๊ธฐ์กด ์Šคํฌ๋ฆฝํŠธ ์‚ญ์ œ ํ›„ ์š”์ฒญ๋œ ์Šคํฌ๋ฆฝํŠธ๋“ค์„ UUID๋กœ ๋งคํ•‘ํ•˜์—ฌ saveAll ํ˜ธ์ถœ
์œ ์Šค์ผ€์ด์Šค ํ†ตํ•ฉ
src/main/kotlin/com/dcd/server/core/domain/application/usecase/CreateApplicationUseCase.kt, src/main/kotlin/com/dcd/server/core/domain/application/usecase/UpdateApplicationUseCase.kt
์ƒ์„ฑ์ž์— InitialScriptService ์ฃผ์ž… ์ถ”๊ฐ€ ๋ฐ ์ƒ์„ฑ/์—…๋ฐ์ดํŠธ ํ๋ฆ„์—์„œ initialScriptService.write(application, req.initialScripts) ํ˜ธ์ถœ ์‚ฝ์ž…
์š”์ฒญ DTO ๋งคํ•‘ ํ™•์žฅ
src/main/kotlin/com/dcd/server/presentation/domain/application/data/exetension/ApplicationRequestDataExtension.kt
ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ์š”์ฒญ ๊ฐ์ฒด์—์„œ ๋„๋ฉ”์ธ DTO๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ initialScripts ํ•„๋“œ ๋งคํ•‘ ์ถ”๊ฐ€
ํ…Œ์ŠคํŠธ ๋ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
src/test/kotlin/.../usecase/CreateApplicationUseCaseTest.kt, src/test/kotlin/.../usecase/UpdateApplicationUseCaseTest.kt, src/test/kotlin/.../ApplicationWebAdapterTest.kt, src/test/resources/data.sql
ํ…Œ์ŠคํŠธ ์š”์ฒญ ๊ฐ์ฒด์— initialScripts ํฌํ•จ, ์ดˆ๊ธฐ ์Šคํฌ๋ฆฝํŠธ ์ €์žฅ/์กฐํšŒ ๊ฒ€์ฆ ์ถ”๊ฐ€, ํ…Œ์ŠคํŠธ์šฉ SQL์— ์™ธ๋ž˜ํ‚ค ์ œ์•ฝ ์ถ”๊ฐ€

Sequence Diagram(s)

sequenceDiagram
    autonumber
    participant Client
    participant UseCase as CreateApplicationUseCase
    participant Env as EnvAutoMatchService
    participant ScriptSvc as InitialScriptService
    participant CmdPort as CommandApplicationInitialScriptPort
    participant Repo as Persistence

    Client->>UseCase: execute(createRequest)
    UseCase->>Env: match(application)
    Env-->>UseCase: matched
    UseCase->>ScriptSvc: write(application, initialScripts)
    ScriptSvc->>CmdPort: deleteByApplication(application)
    CmdPort->>Repo: DELETE existing scripts
    Repo-->>CmdPort: deleted
    ScriptSvc->>ScriptSvc: map strings -> ApplicationInitialScript (UUID ์ƒ์„ฑ)
    ScriptSvc->>CmdPort: saveAll(newScripts)
    CmdPort->>Repo: INSERT scripts
    Repo-->>CmdPort: saved
    CmdPort-->>ScriptSvc: saved
    ScriptSvc-->>UseCase: done
    UseCase-->>Client: createdApplication
Loading

Estimated code review effort

๐ŸŽฏ 3 (Moderate) | โฑ๏ธ ~20 ๋ถ„

  • ์ฃผ์˜ํ•  ์ :
    • InitialScriptServiceImpl.write()์˜ ์‚ญ์ œ-์ €์žฅ ๋กœ์ง์ด ํŠธ๋žœ์žญ์…˜/๋™์‹œ์„ฑ ์ธก๋ฉด์—์„œ ์•ˆ์ „ํ•œ์ง€ ๊ฒ€ํ† 
    • DTO ์ƒ์„ฑ์ž/๋งคํ•‘ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•œ ํ˜ธ์ถœ๋ถ€(ํ…Œ์ŠคํŠธยท์ปจํŠธ๋กค๋Ÿฌ ๋“ฑ) ๋ˆ„๋ฝ ์—ฌ๋ถ€ ํ™•์ธ
    • UpdateApplicationUseCase์— ์ถ”๊ฐ€๋œ port ์ธ์ž ์ˆœ์„œ๊ฐ€ DI/์ƒ์„ฑ์ž ํ˜ธ์ถœ๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€ ๊ฒ€์ฆ
    • ํ…Œ์ŠคํŠธ๋“ค์ด ์ดˆ๊ธฐ ์Šคํฌ๋ฆฝํŠธ์˜ ๊ฒฝ๊ณ„์กฐ๊ฑด(๋นˆ ๋ฆฌ์ŠคํŠธ, ์ค‘๋ณต ๋“ฑ)์„ ์ถฉ๋ถ„ํžˆ ์ปค๋ฒ„ํ•˜๋Š”์ง€ ํ™•์ธ

Possibly related PRs

์‹œ

๐Ÿฐ ์ƒˆ ์ฝ”๋“œ์— ๊นก์ถฉ, ์Šคํฌ๋ฆฝํŠธ ํ•œ ์ค„,
์‚ญ์ œํ•˜๊ณ  ๋‹ค์‹œ ์ ์–ด๋‘๋‹ˆ ๋ฐ˜์ง์ด๋„ค.
์ƒ์„ฑ๊ณผ ๊ฐฑ์‹ ์— ํ•จ๊ป˜ ๋›ฐ์–ด,
๋นˆ ๋ฆฌ์ŠคํŠธ๋„ ์•ˆ์‹ฌํ•˜๊ณ  ๋งก๊ฒจ๋‘ฌ์š”. โœจ

Pre-merge checks and finishing touches

โŒ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage โš ๏ธ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
โœ… Passed checks (2 passed)
Check name Status Explanation
Description Check โœ… Passed Check skipped - CodeRabbitโ€™s high-level summary is enabled.
Title check โœ… Passed PR ์ œ๋ชฉ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒ์„ฑ ๋ฐ ์ˆ˜์ • ์‹œ ์ดˆ๊ธฐํ™” ์Šคํฌ๋ฆฝํŠธ ์ŠคํŽ™ ์ถ”๊ฐ€๋ผ๋Š” ์ฃผ์š” ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋ช…ํ™•ํ•˜๊ฒŒ ์š”์•ฝํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ๋ณ€๊ฒฝ ์‚ฌํ•ญ์˜ ํ•ต์‹ฌ ๋ชฉ์ ๊ณผ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.
โœจ Finishing touches
  • ๐Ÿ“ Generate docstrings
๐Ÿงช Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feature/initial-script-to-application-spec

๐Ÿ“œ Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

๐Ÿ“ฅ Commits

Reviewing files that changed from the base of the PR and between 922e42d and f44b815.

๐Ÿ“’ Files selected for processing (2)
  • src/main/kotlin/com/dcd/server/presentation/domain/application/data/request/CreateApplicationRequest.kt (1 hunks)
  • src/main/kotlin/com/dcd/server/presentation/domain/application/data/request/UpdateApplicationRequest.kt (1 hunks)
๐Ÿšง Files skipped from review as they are similar to previous changes (1)
  • src/main/kotlin/com/dcd/server/presentation/domain/application/data/request/UpdateApplicationRequest.kt
๐Ÿงฐ Additional context used
๐Ÿง  Learnings (1)
๐Ÿ““ Common learnings
Learnt from: dolong2
Repo: dolong2/dcd PR: 703
File: src/main/kotlin/com/dcd/server/core/domain/volume/model/Volume.kt:1-12
Timestamp: 2025-09-01T14:52:42.625Z
Learning: dolong2 prefers to implement validation logic (such as path validation for Volume.physicalPath) in the business logic layer rather than in domain model init blocks, keeping domain models as simple data containers.
Learnt from: dolong2
Repo: dolong2/dcd PR: 703
File: src/test/resources/data.sql:28-30
Timestamp: 2025-09-01T14:57:07.656Z
Learning: dolong2 prefers to implement deletion validation in business logic rather than using database CASCADE constraints. For volume deletion, they want to validate if any mounts exist before allowing deletion, preventing accidental data loss while maintaining explicit control over the deletion process.
Learnt from: dolong2
Repo: dolong2/dcd PR: 655
File: src/main/kotlin/com/dcd/server/persistence/workspace/entity/WorkspaceJpaEntity.kt:12-14
Timestamp: 2025-07-12T14:05:23.333Z
Learning: dolong2๋Š” JPA์˜ GeneratedValue(strategy = GenerationType.UUID) ๋Œ€์‹  ์ƒ์„ฑ์ž์—์„œ UUID.randomUUID()๋กœ ์ง์ ‘ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๋ฐฉ์‹์„ ์„ ํ˜ธํ•œ๋‹ค. ๋” ๊ฐ„๋‹จํ•˜๊ณ  ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ๋™์ž‘์„ ์œ„ํ•ด์„œ๋‹ค.
Learnt from: dolong2
Repo: dolong2/dcd PR: 659
File: src/main/kotlin/com/dcd/server/core/domain/domain/usecase/ConnectDomainUseCase.kt:40-41
Timestamp: 2025-07-14T15:01:47.531Z
Learning: dolong2๋Š” ๊ธฐ๋Šฅ์ ์œผ๋กœ ๋ฌธ์ œ๊ฐ€ ์—†๋Š” ์ฝ”๋“œ ๊ฐœ์„ ์‚ฌํ•ญ์˜ ๊ฒฝ์šฐ, ์‹ค์ œ๋กœ ํ•„์š”ํ•  ๋•Œ๊นŒ์ง€ ์ˆ˜์ •์„ ๋ฏธ๋ฃจ๋Š” ์‹ค์šฉ์ ์ธ ์ ‘๊ทผ๋ฒ•์„ ์„ ํ˜ธํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์˜๋ฏธ๋ก ์  ์ •ํ™•์„ฑ์„ ์œ„ํ•œ ๋ณ€๊ฒฝ์€ ํ•ด๋‹น ๊ธฐ๋Šฅ์ด ์‹ค์ œ๋กœ ํ•„์š”ํ•  ๋•Œ ์ˆ˜์ •ํ•˜๋Š” ๋ฐฉ์‹์„ ํƒํ•œ๋‹ค.
โฐ 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 and Test
๐Ÿ”‡ Additional comments (1)
src/main/kotlin/com/dcd/server/presentation/domain/application/data/request/CreateApplicationRequest.kt (1)

16-16: ์ด์ „ ๋ฆฌ๋ทฐ ํ”ผ๋“œ๋ฐฑ์ด ๋ฐ˜์˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

initialScripts ํ•„๋“œ์— ๊ธฐ๋ณธ๊ฐ’ = listOf()๊ฐ€ ์ถ”๊ฐ€๋˜์–ด ์ด์ „ ๋ฆฌ๋ทฐ์—์„œ ์ง€์ ๋œ API ํ•˜์œ„ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ๊ธฐ์กด ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ด ํ•„๋“œ๋ฅผ ์ƒ๋žตํ•ด๋„ ์š”์ฒญ์ด ์ •์ƒ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.


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

Comment @coderabbitai help to get the list of available commands and usage tips.

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: 2

๐Ÿงน Nitpick comments (2)
src/main/kotlin/com/dcd/server/presentation/domain/application/data/request/UpdateApplicationRequest.kt (1)

14-14: port ํ•„๋“œ ๊ฒ€์ฆ ํ™•์ธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

port ํ•„๋“œ์— ์œ ํšจ ๋ฒ”์œ„ ๊ฒ€์ฆ(1-65535)์ด ์žˆ๋Š”์ง€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์—์„œ ํ™•์ธํ•˜์„ธ์š”.

src/main/kotlin/com/dcd/server/core/domain/application/usecase/CreateApplicationUseCase.kt (1)

48-48: ์ดˆ๊ธฐํ™” ์Šคํฌ๋ฆฝํŠธ ์ €์žฅ ์œ„์น˜๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

initialScriptService.write๊ฐ€ ์ฝ”๋ฃจํ‹ด ์™ธ๋ถ€์—์„œ ๋™๊ธฐ์ ์œผ๋กœ ํ˜ธ์ถœ๋˜์–ด ์š”์ฒญ ์Šค๋ ˆ๋“œ๋ฅผ ๋ธ”๋กœํ‚นํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ž‘์—…์ด I/O ์ž‘์—…(๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ €์žฅ ๋“ฑ)์„ ํฌํ•จํ•˜๋Š” ๊ฒฝ์šฐ, ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž‘์—…์ด ๋น ๋ฅด๊ฒŒ ์™„๋ฃŒ๋˜๊ฑฐ๋‚˜ ํŠธ๋žœ์žญ์…˜ ์ปจํ…์ŠคํŠธ ๋‚ด์—์„œ ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ์ด์œ ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”. ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด, ์ฝ”๋ฃจํ‹ด ๋‚ด๋ถ€๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•˜์„ธ์š”.

Based on learnings

๐Ÿ“œ Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

๐Ÿ“ฅ Commits

Reviewing files that changed from the base of the PR and between 1642ed6 and 922e42d.

๐Ÿ“’ Files selected for processing (13)
  • src/main/kotlin/com/dcd/server/core/domain/application/dto/request/CreateApplicationReqDto.kt (1 hunks)
  • src/main/kotlin/com/dcd/server/core/domain/application/dto/request/UpdateApplicationReqDto.kt (1 hunks)
  • src/main/kotlin/com/dcd/server/core/domain/application/service/InitialScriptService.kt (1 hunks)
  • src/main/kotlin/com/dcd/server/core/domain/application/service/impl/InitialScriptServiceImpl.kt (1 hunks)
  • src/main/kotlin/com/dcd/server/core/domain/application/usecase/CreateApplicationUseCase.kt (2 hunks)
  • src/main/kotlin/com/dcd/server/core/domain/application/usecase/UpdateApplicationUseCase.kt (3 hunks)
  • src/main/kotlin/com/dcd/server/presentation/domain/application/data/exetension/ApplicationRequestDataExtension.kt (2 hunks)
  • src/main/kotlin/com/dcd/server/presentation/domain/application/data/request/CreateApplicationRequest.kt (1 hunks)
  • src/main/kotlin/com/dcd/server/presentation/domain/application/data/request/UpdateApplicationRequest.kt (1 hunks)
  • src/test/kotlin/com/dcd/server/core/domain/application/usecase/CreateApplicationUseCaseTest.kt (8 hunks)
  • src/test/kotlin/com/dcd/server/core/domain/application/usecase/UpdateApplicationUseCaseTest.kt (3 hunks)
  • src/test/kotlin/com/dcd/server/presentation/domain/application/ApplicationWebAdapterTest.kt (2 hunks)
  • src/test/resources/data.sql (1 hunks)
๐Ÿงฐ Additional context used
๐Ÿง  Learnings (10)
๐Ÿ““ Common learnings
Learnt from: dolong2
Repo: dolong2/dcd PR: 703
File: src/main/kotlin/com/dcd/server/core/domain/volume/model/Volume.kt:1-12
Timestamp: 2025-09-01T14:52:42.625Z
Learning: dolong2 prefers to implement validation logic (such as path validation for Volume.physicalPath) in the business logic layer rather than in domain model init blocks, keeping domain models as simple data containers.
Learnt from: dolong2
Repo: dolong2/dcd PR: 703
File: src/test/resources/data.sql:28-30
Timestamp: 2025-09-01T14:57:07.656Z
Learning: dolong2 prefers to implement deletion validation in business logic rather than using database CASCADE constraints. For volume deletion, they want to validate if any mounts exist before allowing deletion, preventing accidental data loss while maintaining explicit control over the deletion process.
Learnt from: dolong2
Repo: dolong2/dcd PR: 655
File: src/main/kotlin/com/dcd/server/persistence/workspace/entity/WorkspaceJpaEntity.kt:12-14
Timestamp: 2025-07-12T14:05:23.333Z
Learning: dolong2๋Š” JPA์˜ GeneratedValue(strategy = GenerationType.UUID) ๋Œ€์‹  ์ƒ์„ฑ์ž์—์„œ UUID.randomUUID()๋กœ ์ง์ ‘ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๋ฐฉ์‹์„ ์„ ํ˜ธํ•œ๋‹ค. ๋” ๊ฐ„๋‹จํ•˜๊ณ  ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ๋™์ž‘์„ ์œ„ํ•ด์„œ๋‹ค.
Learnt from: dolong2
Repo: dolong2/dcd PR: 659
File: src/main/kotlin/com/dcd/server/core/domain/domain/usecase/ConnectDomainUseCase.kt:40-41
Timestamp: 2025-07-14T15:01:47.531Z
Learning: dolong2๋Š” ๊ธฐ๋Šฅ์ ์œผ๋กœ ๋ฌธ์ œ๊ฐ€ ์—†๋Š” ์ฝ”๋“œ ๊ฐœ์„ ์‚ฌํ•ญ์˜ ๊ฒฝ์šฐ, ์‹ค์ œ๋กœ ํ•„์š”ํ•  ๋•Œ๊นŒ์ง€ ์ˆ˜์ •์„ ๋ฏธ๋ฃจ๋Š” ์‹ค์šฉ์ ์ธ ์ ‘๊ทผ๋ฒ•์„ ์„ ํ˜ธํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์˜๋ฏธ๋ก ์  ์ •ํ™•์„ฑ์„ ์œ„ํ•œ ๋ณ€๊ฒฝ์€ ํ•ด๋‹น ๊ธฐ๋Šฅ์ด ์‹ค์ œ๋กœ ํ•„์š”ํ•  ๋•Œ ์ˆ˜์ •ํ•˜๋Š” ๋ฐฉ์‹์„ ํƒํ•œ๋‹ค.
๐Ÿ“š Learning: 2024-11-01T15:14:45.123Z
Learnt from: dolong2
Repo: dolong2/dcd PR: 363
File: src/main/kotlin/com/dcd/server/core/domain/application/usecase/UpdateApplicationEnvUseCase.kt:35-52
Timestamp: 2024-11-01T15:14:45.123Z
Learning: ๊ฐœ๋ฐœ์ž๋Š” `UpdateApplicationEnvUseCase.kt` ํŒŒ์ผ์˜ `execute` ํ•จ์ˆ˜์—์„œ `updatedApplicationList`๊ฐ€ ๋น„์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ฑฐ๋‚˜, `envKey`๊ฐ€ ์—†๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•œ ๋กœ๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์„ ์›์น˜ ์•Š์Šต๋‹ˆ๋‹ค.

Applied to files:

  • src/test/kotlin/com/dcd/server/presentation/domain/application/ApplicationWebAdapterTest.kt
  • src/test/kotlin/com/dcd/server/core/domain/application/usecase/CreateApplicationUseCaseTest.kt
  • src/test/kotlin/com/dcd/server/core/domain/application/usecase/UpdateApplicationUseCaseTest.kt
๐Ÿ“š Learning: 2025-08-10T14:46:38.244Z
Learnt from: dolong2
Repo: dolong2/dcd PR: 688
File: src/main/kotlin/com/dcd/server/core/domain/env/usecase/PutApplicationEnvUseCase.kt:60-71
Timestamp: 2025-08-10T14:46:38.244Z
Learning: DCD ํ”„๋กœ์ ํŠธ์˜ PutApplicationEnvUseCase.execute(id, putApplicationEnvReqDto) ๋ฉ”์„œ๋“œ์—์„œ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์—…๋ฐ์ดํŠธ ์‹œ details๋Š” ๊ธฐ์กด ๊ฐ’๊ณผ ๋ณ‘ํ•ฉํ•˜์ง€ ์•Š๊ณ  ์š”์ฒญ ๋ฐ์ดํ„ฐ๋กœ ์™„์ „ํžˆ ๋ฎ์–ด์”Œ์šฐ๋Š” ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•ด์•ผ ํ•œ๋‹ค.

Applied to files:

  • src/test/kotlin/com/dcd/server/presentation/domain/application/ApplicationWebAdapterTest.kt
๐Ÿ“š Learning: 2025-08-08T15:07:46.340Z
Learnt from: dolong2
Repo: dolong2/dcd PR: 683
File: src/main/kotlin/com/dcd/server/presentation/domain/env/ApplicationEnvWebAdapter.kt:30-0
Timestamp: 2025-08-08T15:07:46.340Z
Learning: DCD ํ”„๋กœ์ ํŠธ: ApplicationEnvWebAdapter(ํŒŒ์ผ: src/main/kotlin/com/dcd/server/presentation/domain/env/ApplicationEnvWebAdapter.kt)์˜ DELETE /{workspaceId}/env/{envId} ์„ฑ๊ณต ์‘๋‹ต์€ ํŒ€ ์ปจ๋ฒค์…˜์ƒ 204๊ฐ€ ์•„๋‹Œ 200 OK๋ฅผ ์œ ์ง€ํ•œ๋‹ค.

Applied to files:

  • src/test/kotlin/com/dcd/server/presentation/domain/application/ApplicationWebAdapterTest.kt
๐Ÿ“š Learning: 2025-08-08T15:09:11.874Z
Learnt from: dolong2
Repo: dolong2/dcd PR: 683
File: src/main/kotlin/com/dcd/server/core/domain/env/usecase/DeleteApplicationEnvUseCase.kt:14-18
Timestamp: 2025-08-08T15:09:11.874Z
Learning: DCD ํ”„๋กœ์ ํŠธ: DeleteApplicationEnvUseCase๋Š” workspaceId๋ฅผ ๋ฐ›์ง€ ์•Š์œผ๋ฉฐ, ์›Œํฌ์ŠคํŽ˜์ด์Šค ๊ฒฝ๊ณ„ ๊ฒ€์ฆ์€ ApplicationEnvWebAdapter์˜ WorkspaceOwnerVerification(AOP)์—์„œ ์ฒ˜๋ฆฌํ•œ๋‹ค. ๋ถˆ์ผ์น˜ ์‹œ NotFound๋กœ ์‘๋‹ตํ•˜๋Š” ๊ฒƒ์€ ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ๋ ˆ์ด์–ด์—์„œ ๋ณด์žฅํ•˜๋Š” ๊ฒƒ์ด ์„ ํ˜ธ๋œ๋‹ค.

Applied to files:

  • src/test/kotlin/com/dcd/server/presentation/domain/application/ApplicationWebAdapterTest.kt
๐Ÿ“š Learning: 2024-11-09T09:51:02.007Z
Learnt from: dolong2
Repo: dolong2/dcd PR: 373
File: src/main/kotlin/com/dcd/server/core/domain/application/usecase/CreateApplicationUseCase.kt:55-56
Timestamp: 2024-11-09T09:51:02.007Z
Learning: `CreateApplicationUseCase`์˜ ์ฝ”๋ฃจํ‹ด ๋‚ด์—์„œ ํ˜ธ์ถœ๋˜๋Š” ์„œ๋น„์Šค๋“ค์€ ์‹คํŒจ ์‹œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ๋ฅผ ์ž๋™์œผ๋กœ FAILURE๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

Applied to files:

  • src/main/kotlin/com/dcd/server/core/domain/application/usecase/CreateApplicationUseCase.kt
  • src/test/kotlin/com/dcd/server/core/domain/application/usecase/CreateApplicationUseCaseTest.kt
๐Ÿ“š Learning: 2025-01-30T10:42:29.969Z
Learnt from: dolong2
Repo: dolong2/dcd PR: 483
File: src/main/kotlin/com/dcd/server/core/domain/workspace/usecase/DeleteWorkspaceUseCase.kt:23-24
Timestamp: 2025-01-30T10:42:29.969Z
Learning: In this Spring application, service objects are called within transaction context, so adding explicit transaction handling in UseCase classes is not necessary as it's already managed at a higher level.

Applied to files:

  • src/main/kotlin/com/dcd/server/core/domain/application/usecase/CreateApplicationUseCase.kt
๐Ÿ“š Learning: 2024-10-26T02:32:19.442Z
Learnt from: dolong2
Repo: dolong2/dcd PR: 359
File: src/main/kotlin/com/dcd/server/core/domain/application/usecase/StopApplicationUseCase.kt:44-45
Timestamp: 2024-10-26T02:32:19.442Z
Learning: `StopApplicationUseCase.kt`์—์„œ `this`๊ฐ€ ์ด๋ฏธ `CoroutineScope(Dispatchers.IO)`๋ฅผ ์ƒ์†ํ•˜๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ, ์ƒˆ๋กœ์šด `CoroutineScope`๋ฅผ ์ƒ์„ฑํ•  ๋•Œ `this + job`์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ฝ”๋“œ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

Applied to files:

  • src/main/kotlin/com/dcd/server/core/domain/application/usecase/CreateApplicationUseCase.kt
๐Ÿ“š Learning: 2025-08-12T14:59:22.963Z
Learnt from: dolong2
Repo: dolong2/dcd PR: 692
File: src/main/kotlin/com/dcd/server/core/domain/env/spi/QueryApplicationEnvPort.kt:0-0
Timestamp: 2025-08-12T14:59:22.963Z
Learning: In the dcd codebase, when updating port interface method signatures to include workspace parameters for tenant isolation, all layers must be updated together: the port interface, service interface, service implementation, persistence adapter, repository layer, and use case callers. The user dolong2 demonstrated proper multi-layer refactoring by updating QueryApplicationEnvPort.findAllByLabelsIn to include workspace parameter and systematically updating all dependent code in a single commit, including updating repository method name to findAllByWorkspaceAndLabelsIn.

Applied to files:

  • src/test/kotlin/com/dcd/server/core/domain/application/usecase/CreateApplicationUseCaseTest.kt
  • src/test/kotlin/com/dcd/server/core/domain/application/usecase/UpdateApplicationUseCaseTest.kt
๐Ÿ“š Learning: 2024-10-23T14:48:00.144Z
Learnt from: dolong2
Repo: dolong2/dcd PR: 357
File: src/main/kotlin/com/dcd/server/core/domain/application/usecase/RunApplicationUseCase.kt:37-68
Timestamp: 2024-10-23T14:48:00.144Z
Learning: RunApplicationUseCase.kt์˜ `execute` ํ•จ์ˆ˜์—์„œ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋น„๋™๊ธฐ๋กœ ์‹คํ–‰ํ•˜๊ณ  ์ƒํƒœ๋ฅผ `PENDING`์œผ๋กœ ๋ณ€๊ฒฝํ•œ ํ›„ ์ฆ‰์‹œ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ๋ชฉ์ ์ด๋‹ค.

Applied to files:

  • src/test/kotlin/com/dcd/server/core/domain/application/usecase/CreateApplicationUseCaseTest.kt
  • src/test/kotlin/com/dcd/server/core/domain/application/usecase/UpdateApplicationUseCaseTest.kt
โฐ 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 and Test
๐Ÿ”‡ Additional comments (19)
src/test/resources/data.sql (1)

39-44: ์™ธ๋ž˜ ํ‚ค ์ œ์•ฝ์กฐ๊ฑด ์ถ”๊ฐ€๊ฐ€ ์ ์ ˆํ•ฉ๋‹ˆ๋‹ค.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ด€๋ จ ์—”ํ‹ฐํ‹ฐ๋“ค์— ๋Œ€ํ•œ ์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ ์ œ์•ฝ์กฐ๊ฑด์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ๋กœ ์ถ”๊ฐ€๋œ application_initial_script_entity์— ๋Œ€ํ•œ FK ์ œ์•ฝ์กฐ๊ฑด๋„ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

src/main/kotlin/com/dcd/server/core/domain/application/dto/request/UpdateApplicationReqDto.kt (1)

9-12: DTO ํ•„๋“œ ์ถ”๊ฐ€๊ฐ€ ์ ์ ˆํ•ฉ๋‹ˆ๋‹ค.

port์™€ initialScripts ํ•„๋“œ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๋ ˆ์ด์–ด์—์„œ port ๋ฒ”์œ„ ๊ฒ€์ฆ(1-65535) ๋ฐ initialScripts ๋‚ด์šฉ ๊ฒ€์ฆ(๋นˆ ๋ฌธ์ž์—ด, ๊ธธ์ด ์ œํ•œ ๋“ฑ)์ด ์ˆ˜ํ–‰๋˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.

src/main/kotlin/com/dcd/server/core/domain/application/service/InitialScriptService.kt (1)

5-7: ์ธํ„ฐํŽ˜์ด์Šค ์„ค๊ณ„๊ฐ€ ๋ช…ํ™•ํ•˜๊ณ  ๊ฐ„๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

InitialScriptService ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋‹จ์ผ ์ฑ…์ž„ ์›์น™์„ ์ž˜ ๋”ฐ๋ฅด๊ณ  ์žˆ์œผ๋ฉฐ, ์‹œ๊ทธ๋‹ˆ์ฒ˜๊ฐ€ ๋ช…ํ™•ํ•ฉ๋‹ˆ๋‹ค.

src/main/kotlin/com/dcd/server/core/domain/application/dto/request/CreateApplicationReqDto.kt (1)

12-12: DTO ํ•„๋“œ ์ถ”๊ฐ€๊ฐ€ ์ ์ ˆํ•ฉ๋‹ˆ๋‹ค.

initialScripts ํ•„๋“œ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ๋ ˆ์ด์–ด์—์„œ ์ด ํ•„๋“œ๋กœ์˜ ๋งคํ•‘์ด ์ ์ ˆํžˆ ์ฒ˜๋ฆฌ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

src/main/kotlin/com/dcd/server/core/domain/application/usecase/CreateApplicationUseCase.kt (1)

31-31: ์˜์กด์„ฑ ์ถ”๊ฐ€๊ฐ€ ์ ์ ˆํ•ฉ๋‹ˆ๋‹ค.

InitialScriptService ์˜์กด์„ฑ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

src/test/kotlin/com/dcd/server/presentation/domain/application/ApplicationWebAdapterTest.kt (2)

42-42: ํ…Œ์ŠคํŠธ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ƒˆ๋กœ์šด initialScripts ํ•„๋“œ๊ฐ€ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ์— ์ ์ ˆํžˆ ํฌํ•จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.


161-161: ํ…Œ์ŠคํŠธ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

port์™€ initialScripts ํ•„๋“œ๊ฐ€ ์—…๋ฐ์ดํŠธ ์š”์ฒญ ํ…Œ์ŠคํŠธ์— ์ ์ ˆํžˆ ํฌํ•จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

src/main/kotlin/com/dcd/server/core/domain/application/usecase/UpdateApplicationUseCase.kt (2)

12-12: ์˜์กด์„ฑ ์ฃผ์ž… ๋ฐฉ์‹์ด ์ ์ ˆํ•ฉ๋‹ˆ๋‹ค.

InitialScriptService๋ฅผ ์ƒ์„ฑ์ž ์ฃผ์ž… ๋ฐฉ์‹์œผ๋กœ ์ถ”๊ฐ€ํ•œ ๊ฒƒ์€ ๊ธฐ์กด ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ํŒจํ„ด๊ณผ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.

Also applies to: 27-27


56-56: ๋ฆฌ๋ทฐ ์ฝ”๋ฉ˜ํŠธ๋Š” ๋ถ€์ •ํ™•ํ•ฉ๋‹ˆ๋‹ค.

@UseCase ์–ด๋…ธํ…Œ์ด์…˜์ด @Transactional์„ ๋ฉ”ํƒ€-์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ํฌํ•จํ•˜๊ณ  ์žˆ์–ด์„œ, UpdateApplicationUseCase.execute() ๋ฉ”์„œ๋“œ๋Š” ์ด๋ฏธ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ๊ฐ์‹ธ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. commandApplicationPort.save()์™€ initialScriptService.write() ํ˜ธ์ถœ์€ ๋ชจ๋‘ ๋™์ผํ•œ ํŠธ๋žœ์žญ์…˜ ๋ฒ”์œ„ ๋‚ด์—์„œ ์‹คํ–‰๋˜๋ฉฐ, write() ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€์˜ deleteByApplication()๊ณผ saveAll()๋„ ๊ฐ™์€ ํŠธ๋žœ์žญ์…˜์— ์ฐธ์—ฌํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ write() ํ˜ธ์ถœ์ด ์‹คํŒจํ•˜๋ฉด ์ „์ฒด ํŠธ๋žœ์žญ์…˜์ด ๋กค๋ฐฑ๋˜์–ด ๋ฐ์ดํ„ฐ ๋ถˆ์ผ์น˜ ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์›๋ณธ ์ฝ”๋“œ๋Š” ์˜ฌ๋ฐ”๋ฅธ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ๋ฅผ ์ด๋ฏธ ๊ฐ–์ถ”๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Likely an incorrect or invalid review comment.

src/main/kotlin/com/dcd/server/presentation/domain/application/data/exetension/ApplicationRequestDataExtension.kt (2)

22-22: LGTM!

CreateApplicationRequest์—์„œ initialScripts ํ•„๋“œ๋ฅผ DTO๋กœ ์ •ํ™•ํ•˜๊ฒŒ ๋งคํ•‘ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.


33-34: LGTM!

UpdateApplicationRequest์—์„œ port์™€ initialScripts ํ•„๋“œ๋ฅผ DTO๋กœ ์ •ํ™•ํ•˜๊ฒŒ ๋งคํ•‘ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

src/test/kotlin/com/dcd/server/core/domain/application/usecase/UpdateApplicationUseCaseTest.kt (3)

10-10: LGTM!

QueryApplicationInitialScriptPort ์˜์กด์„ฑ์„ ์ ์ ˆํ•˜๊ฒŒ ์ถ”๊ฐ€ํ•˜์—ฌ ์ดˆ๊ธฐํ™” ์Šคํฌ๋ฆฝํŠธ ๊ฒ€์ฆ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

Also applies to: 34-34


41-41: LGTM!

ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ์— port์™€ initialScripts ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์‹ค์ œ ์‚ฌ์šฉ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๋ฐ˜์˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.


66-71: LGTM!

์ดˆ๊ธฐํ™” ์Šคํฌ๋ฆฝํŠธ์˜ ๊ฐœ์ˆ˜์™€ ๋‚ด์šฉ์„ ๋ชจ๋‘ ๊ฒ€์ฆํ•˜๋Š” ๋ช…ํ™•ํ•œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์ž…๋‹ˆ๋‹ค. ๊ฒ€์ฆ ๋กœ์ง์ด ์ ์ ˆํ•ฉ๋‹ˆ๋‹ค.

src/main/kotlin/com/dcd/server/core/domain/application/service/impl/InitialScriptServiceImpl.kt (2)

22-22: LGTM!

UUID.randomUUID()๋ฅผ ์‚ฌ์šฉํ•œ ID ์ƒ์„ฑ ๋ฐฉ์‹์€ ํ”„๋กœ์ ํŠธ์˜ ๊ธฐ์กด ํŒจํ„ด๊ณผ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค. Based on learnings


14-28: ๊ฒ€์ฆ ์™„๋ฃŒ: ์˜๋„๋œ ๋™์ž‘์ž…๋‹ˆ๋‹ค

initialScripts๊ฐ€ ๋นˆ ๋ฆฌ์ŠคํŠธ์ธ ๊ฒฝ์šฐ์˜ ๋™์ž‘์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค:

  1. ๊ตฌํ˜„ ๋ถ„์„: ApplicationInitialScriptPersistenceAdapter.saveAll()์€ Spring Data JPA์— ์œ„์ž„ํ•˜๋ฉฐ, ๋นˆ ๋ฆฌ์ŠคํŠธ๋Š” ์ €์žฅ ์ž‘์—… ์—†์Œ (no-op)

  2. ์‹ค์ œ ๋™์ž‘: deleteByApplication() ์‹คํ–‰ โ†’ saveAll([]) ์‹คํ–‰ โ†’ ๋ชจ๋“  ๊ธฐ์กด ์Šคํฌ๋ฆฝํŠธ ์‚ญ์ œ, ์ƒˆ ์Šคํฌ๋ฆฝํŠธ ์—†์Œ

  3. ํ…Œ์ŠคํŠธ ์ฆ๊ฑฐ:

    • CreateApplicationUseCaseTest (lines 62, 89, 112, 151)
    • UpdateApplicationUseCaseTest (line 41+)
    • ApplicationWebAdapterTest (lines 42, 161)

    ์œ„ ํ…Œ์ŠคํŠธ๋“ค์—์„œ emptyList()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ •์ƒ ๋™์ž‘ ๊ฒ€์ฆ๋จ

  4. ์„ค๊ณ„ ํŒจํ„ด: "์‚ญ์ œ ํ›„ ์ €์žฅ" ํŒจํ„ด์œผ๋กœ ๊ธฐ์กด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์™„์ „ํžˆ ๊ต์ฒดํ•˜๋Š” ์˜๋„๋œ ์„ค๊ณ„์ž…๋‹ˆ๋‹ค.

src/test/kotlin/com/dcd/server/core/domain/application/usecase/CreateApplicationUseCaseTest.kt (3)

8-8: LGTM!

QueryApplicationInitialScriptPort ์˜์กด์„ฑ์„ ์ ์ ˆํ•˜๊ฒŒ ์ถ”๊ฐ€ํ•˜์—ฌ ์ดˆ๊ธฐํ™” ์Šคํฌ๋ฆฝํŠธ ๊ฒ€์ฆ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

Also applies to: 38-38


62-62: LGTM!

๊ธฐ์กด ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋“ค์— ๋นˆ initialScripts ๋ฆฌ์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ํ•˜์œ„ ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Also applies to: 89-89, 112-112, 151-151


175-197: LGTM!

์ดˆ๊ธฐํ™” ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ํ…Œ์ŠคํŠธํ•˜๋Š” ์ผ€์ด์Šค๊ฐ€ ์ž˜ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ์˜ ๊ฐœ์ˆ˜์™€ ๋‚ด์šฉ์„ ๋ชจ๋‘ ๊ฒ€์ฆํ•˜๊ณ  ์žˆ์–ด ํ…Œ์ŠคํŠธ ์ปค๋ฒ„๋ฆฌ์ง€๊ฐ€ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

1๏ธโƒฃ Priority: ์ƒ ์šฐ์„ ์ˆœ์œ„ ์ƒ โœจ Feature ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ

Projects

None yet

2 participants