πŸ“ ν”„λ‘¬ν”„νŠΈ; λ‚˜μ˜ AI λ₯Ό λ°œμ „μ‹œν‚¬ μ§€μΉ¨μ„œ

Eunbi LeeΒ·2026λ…„ 2μ›” 1일

SeaVantage

λͺ©λ‘ 보기
14/15
post-thumbnail

Background

ν•˜λ£¨κ°€ λ‹€λ₯΄κ²Œ AI λŠ” λ°œμ „ν•˜κ³  μžˆμ§€λ§Œ, μ •μž‘ λ‚΄κ°€ κ²½ν—˜ν•œ AI λŠ” μ™œ κ·Έλ‹₯ λ˜‘λ˜‘ν•˜μ§€ μ•Šλ‹€κ³  느껴질까?

λ°”λ‘œ κ·Έ μ΄μœ λŠ” AIλŠ” λ‚΄ λ¨Έλ¦Ώμ†μ˜ λ§₯락(context) πŸ’­ 을 κ³΅μœ ν•˜κ³  μžˆμ§€ λͺ»ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.

μš°λ¦¬λŠ” λŒ€ν™”λ₯Ό ν•  λ•Œ, λ‚΄μš© μ†μ˜ λ§₯락을 기반으둜 μœ μΆ”ν•˜λ©΄μ„œ 이야기λ₯Ό μ΄μ–΄λ‚˜κ°„λ‹€.

ν•˜μ§€λ§Œ μš°λ¦¬μ™€ λŒ€ν™”ν•˜λŠ” AI λŠ” 그럴 수 μ—†κ³ , μš°λ¦¬λŠ” 곧잘 닡닡함을 λŠλ‚€λ‹€.

ex. "μ΅œλŒ€ν•œ κ°„λ‹¨ν•˜κ²Œ μž‘μ„±ν•΄μ€˜." - "μ΅œλŒ€ν•œ κ°„λ‹¨ν•˜κ²Œκ°€ λͺ‡ κΈ€μžμΈλ°μš”?"

λ”°λΌμ„œ, AI λ₯Ό μ΅œλŒ€ν•œ 잘 ν™œμš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” 우리의 λ§₯락을 κ³΅μœ ν•΄μ•Ό ν•œλ‹€.

이것이 λͺ…μ‹œμ μ΄κ³  κ΅¬μ‘°ν™”λœ μ§€μ‹œκ°€ ν•„μš”ν•œ 이유이고, prompt λŠ” 이것을 AI μ—κ²Œ 전달할 수 μžˆλŠ” 도ꡬ이닀.

ver. Programming

Programming μ—μ„œλ„ μ‚¬λžŒκ³Ό AI κ°€ μƒκ°ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€λŠ” λ‹€μŒκ³Ό 같은 차이가 μžˆλ‹€.

πŸ§‘β€πŸŽ¨ μ‚¬λžŒ

"CRUD API λ§Œλ“€μ–΄μ•Όμ§€"
β†’ (머릿속) λ ˆμ΄μ–΄ 뢄리, λ³΄μ•ˆ, ν…ŒμŠ€νŠΈ...
β†’ βœ… μ™„μ „ν•œ μ½”λ“œ μž‘μ„±

πŸ€– AI

"CRUD API"
β†’ ν•™μŠ΅ λ°μ΄ν„°μ—μ„œ κ°€μž₯ μœ μ‚¬ν•œ νŒ¨ν„΄ μ°ΎκΈ°
β†’ νŒ¨ν„΄ 볡제
β†’ ❌ μ»¨ν…μŠ€νŠΈ λΆ€μ‘±μœΌλ‘œ λ‹¨μˆœν™”λœ μ½”λ“œ 생성

λ”°λΌμ„œ, AI μ—κ²Œ λ‚΄ λ¨Έλ¦Ώμ†μ˜ 생각을 동기화 μ‹œν‚€λ €λ©΄ λ§₯락(context)을 κ³΅μœ μ‹œμΌœμ•Ό ν•œλ‹€.

이λ₯Ό μ„€λͺ…ν•  수 μžˆλŠ” μˆ˜λ‹¨μ€ prompt 인 것이닀.

Prompt

1. ꡬ쑰적 λͺ…ν™•μ„±: μ—­ν• , μ»¨ν…μŠ€νŠΈ, μ œμ•½μ‚¬ν•­ 뢄리

개발자 λ‹΅κ²Œ project 에 μ μš©μ‹œν‚¬ prompt λ₯Ό μ˜ˆμ‹œλ‘œ λ“€μ–΄λ³΄μž.

❌ λ‚˜μœ μ˜ˆμ‹œ - λͺ¨ν˜Έν•œ μš”μ²­

μ‚¬μš©μž 관리 APIλ₯Ό λ§Œλ“€μ–΄μ€˜.

βœ… 쒋은 μ˜ˆμ‹œ - κ΅¬μ‘°ν™”λœ ν”„λ‘¬ν”„νŠΈ

<role>
Spring Boot, JPA, RESTful API


<project_context>
- ν”„λ‘œμ νŠΈ: E-commerce ν”Œλž«νΌ
- 기술 μŠ€νƒ: Spring Boot 3.2, Java 17, PostgreSQL, Gradle
- μ•„ν‚€ν…μ²˜: Layered Architecture (Controller β†’ Service β†’ Repository)
- 인증: JWT 기반

<task>
User 도메인을 μœ„ν•œ CRUD APIλ₯Ό κ΅¬ν˜„

<requirements>
1. RESTful 섀계 원칙 μ€€μˆ˜
2. DTO νŒ¨ν„΄ μ‚¬μš© (Entity 직접 λ…ΈμΆœ κΈˆμ§€)
3. μž…λ ₯ 검증 (@Valid μ‚¬μš©)
4. κΈ€λ‘œλ²Œ μ˜ˆμ™Έ 처리
5. λΉ„λ°€λ²ˆν˜ΈλŠ” BCrypt둜 μ•”ν˜Έν™”

<constraints>
- ν•˜λ‚˜μ˜ νŒŒμΌμ— λͺ¨λ“  μ½”λ“œλ₯Ό λ„£μ§€ 말 것
- 각 λ ˆμ΄μ–΄λ³„λ‘œ 파일 뢄리 (Controller, Service, Repository, DTO, Entity)
- νŒ¨ν‚€μ§€ ꡬ쑰: com.ecommerce.user.*

<output_format>
νŒŒμΌλ³„λ‘œ μ½”λ“œλ₯Ό κ΅¬λΆ„ν•˜μ—¬ 제곡:
1. User.java (Entity)
2. UserDTO.java
3. UserRepository.java
4. UserService.java
5. UserController.java
6. GlobalExceptionHandler.java

πŸ’‘ .md νŒŒμΌμ— ν”„λ‘œμ νŠΈμ˜ μŠ€νŽ™μ„ λͺ…μ‹œν•˜λ©΄ μ’‹λ‹€.

2. λͺ…μ‹œμ  μ§€μ‹œ: "쒋은 μ½”λ“œ"κ°€ μ•„λ‹ˆλΌ ꡬ체적 κΈ°μ€€ μ œμ‹œ

❌ λ‚˜μœ μ˜ˆμ‹œ

이 μ½”λ“œλ₯Ό λ¦¬νŒ©ν† λ§ν•΄μ€˜. 더 μ’‹κ²Œ λ§Œλ“€μ–΄.

public class OrderService {
    public void processOrder(Order order) {
        // ... 100μ€„μ˜ λ³΅μž‘ν•œ μ½”λ“œ
    }
}

βœ… 쒋은 μ˜ˆμ‹œ

<task>
λ‹€μŒ OrderService μ½”λ“œλ₯Ό λ¦¬νŒ©ν† λ§

<current_problems>
1. processOrder λ©”μ„œλ“œκ°€ 100쀄 이상 (Single Responsibility μœ„λ°˜)
2. λΉ„μ¦ˆλ‹ˆμŠ€ 둜직, μ™ΈλΆ€ API 호좜, DB 접근이 λͺ¨λ‘ μ„žμ—¬μžˆμŒ
3. ν…ŒμŠ€νŠΈκ°€ 어렀움 (μ˜μ‘΄μ„±μ΄ ν•˜λ“œμ½”λ”©λ¨)
4. νŠΈλžœμž­μ…˜ 경계가 뢈λͺ…확함

<refactoring_goals>
1. λ©”μ„œλ“œλ₯Ό 5개 μ΄ν•˜μ˜ μž‘μ€ λ©”μ„œλ“œλ‘œ λΆ„ν•΄
2. 각 λ©”μ„œλ“œλŠ” ν•˜λ‚˜μ˜ μ±…μž„λ§Œ κ°€μ Έμ•Ό 함
3. μ™ΈλΆ€ API ν˜ΈμΆœμ€ 별도 클래슀둜 뢄리 (PaymentClient, InventoryClient)
4. @Transactional 적절히 적용
5. μ˜μ‘΄μ„± μ£Όμž…μœΌλ‘œ ν…ŒμŠ€νŠΈ κ°€λŠ₯ν•˜κ²Œ κ°œμ„ 

<coding_standards>
- λ©”μ„œλ“œλͺ…: λ™μ‚¬λ‘œ μ‹œμž‘ (validateStock, deductInventory)
- λ³€μˆ˜λͺ…: camelCase, μ˜λ―ΈμžˆλŠ” 이름 μ‚¬μš©
- 주석: λ³΅μž‘ν•œ λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ—λ§Œ μΆ”κ°€
- 맀직 λ„˜λ²„ μ‚¬μš© κΈˆμ§€ (μƒμˆ˜λ‘œ μ •μ˜)

πŸ’‘ .md νŒŒμΌμ— 본인의 개발 철학을 λͺ…μ‹œν•˜λ©΄ μ’‹λ‹€.

3. 단계별 μΆ”λ‘  μœ λ„: Think Step-by-Step

✏️ μ‹€μ „ μ˜ˆμ‹œ - λΆ„μ‚° νŠΈλžœμž­μ…˜ 섀계

<task>
λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ ν™˜κ²½μ—μ„œ μ£Όλ¬Έ 생성 λ‘œμ§μ„ κ΅¬ν˜„

<scenario>
μ£Όλ¬Έ 생성 μ‹œ λ‹€μŒ μž‘μ—…μ΄ μ›μžμ μœΌλ‘œ μˆ˜ν–‰λ˜μ–΄μ•Ό 함:
1. Order Service: μ£Όλ¬Έ 생성
2. Inventory Service: 재고 차감
3. Payment Service: 결제 처리
4. Notification Service: μ•Œλ¦Ό λ°œμ†‘

<thinking_process>
λ‹€μŒ μˆœμ„œλŒ€λ‘œ μƒκ°ν•˜κ³  λ‹΅λ³€
<step1>
문제 뢄석:
- μ–΄λ–€ λΆ„μ‚° νŠΈλžœμž­μ…˜ νŒ¨ν„΄μ΄ μ ν•©ν•œκ°€? (2PC, Saga, Event Sourcing)
- 각 νŒ¨ν„΄μ˜ μž₯단점은?
- 이 μ‹œλ‚˜λ¦¬μ˜€μ— κ°€μž₯ μ ν•©ν•œ νŒ¨ν„΄μ€?
<step2>
νŒ¨ν„΄ 선택 이유:
- μ„ νƒν•œ νŒ¨ν„΄μ΄ 이 μ‹œλ‚˜λ¦¬μ˜€μ— μ ν•©ν•œ 이유
- λ‹€λ₯Έ νŒ¨ν„΄μ„ λ°°μ œν•œ 이유
<step3>
κ΅¬ν˜„ 섀계:
- μ–΄λ–€ μ»΄ν¬λ„ŒνŠΈκ°€ ν•„μš”ν•œκ°€?
- 각 μ»΄ν¬λ„ŒνŠΈμ˜ μ±…μž„μ€?
- μ‹€νŒ¨ μ‹œλ‚˜λ¦¬μ˜€λ³„ 보상 νŠΈλžœμž­μ…˜μ€?
<step4>
μ½”λ“œ κ΅¬ν˜„:
- Java μ½”λ“œλ‘œ κ΅¬ν˜„
- 각 단계별 주석 μΆ”κ°€

<constraints>
- Spring Boot μ‚¬μš©
- λ©”μ‹œμ§•: Kafka
- μ΅œμ’… 일관성(Eventual Consistency) ν—ˆμš©

πŸ’‘ .md νŒŒμΌμ— AI μ—κ²Œ 슀슀둜 μ „λž΅ n κ°€μ§€λ₯Ό μ§€μ •ν•˜κ³ , μ „λž΅μ— λ”°λ₯Έ 점수λ₯Ό λΆ„λ°°ν•˜μ—¬ μ μˆ˜κ°€ 높은 μ „λž΅μ„ μˆ˜ν–‰ν•˜λ„λ‘ ν•  수 μžˆλ‹€.

4. μ œμ•½μ‚¬ν•­ λͺ…μ‹œ: κΈˆμ§€ 사항 리슀트

✏️ μ‹€μ „ μ˜ˆμ‹œ

<task>
결제 처리 λ‘œμ§μ„ κ΅¬ν˜„

<must_do>
βœ“ λ©±λ“±μ„±(Idempotency) 보μž₯ (동일 μš”μ²­ 쀑볡 처리 λ°©μ§€)
βœ“ PCI-DSS μ€€μˆ˜ (μΉ΄λ“œ μ •λ³΄λŠ” μ ˆλŒ€ λ‘œκ·Έμ— 남기지 μ•ŠμŒ)
βœ“ νŠΈλžœμž­μ…˜ μ›μžμ„± 보μž₯
βœ“ μž¬μ‹œλ„ 둜직 포함 (μ™ΈλΆ€ API μ‹€νŒ¨ μ‹œ)
βœ“ 결제 μƒνƒœλŠ” Enum으둜 관리

<must_not_do>
βœ— μΉ΄λ“œ 번호λ₯Ό DB에 평문 μ €μž₯ κΈˆμ§€
βœ— 결제 κΈˆμ•‘μ„ float/double둜 처리 κΈˆμ§€ (BigDecimal μ‚¬μš©)
βœ— 동기 처리둜 νƒ€μž„μ•„μ›ƒ λ°œμƒν•˜λ©΄ μ•ˆλ¨ (비동기 ꢌμž₯)
βœ— μ˜ˆμ™Έλ₯Ό catch만 ν•˜κ³  λ¬΄μ‹œν•˜μ§€ 말 것
βœ— ν•˜λ“œμ½”λ”©λœ API ν‚€ μ‚¬μš© κΈˆμ§€

<implementation_requirements>
- μ™ΈλΆ€ 결제 κ²Œμ΄νŠΈμ›¨μ΄: Stripe API
- 결제 이λ ₯ μ €μž₯ ν•„μˆ˜
- μ‹€νŒ¨ μ‹œ μ•Œλ¦Ό λ°œμ†‘
- ν…ŒμŠ€νŠΈ μ½”λ“œ 포함 (λͺ¨ν‚Ή μ‚¬μš©)

πŸ’‘ .md νŒŒμΌμ— ν•˜μ§€ 말아야 ν•  것을 μ„œμˆ ν•˜λŠ” 것은 ν•„μˆ˜μ΄λ‹€.

효율적인 Promt μž‘μ„±λ²•

ν…œν”Œλ¦Ώ 기반 ν”„λ‘¬ν”„νŠΈ

반볡적인 μž‘μ—…μ—λŠ” μž¬μ‚¬μš© κ°€λŠ₯ν•œ ν…œν”Œλ¦Ώ(.md)을 λ§Œλ“ λ‹€.

이것이 λ°”λ‘œ AGENTS.md νŒŒμΌμ΄λ‹€.

Example

<task>
μƒν’ˆ 재고 관리 κΈ°λŠ₯을 κ΅¬ν˜„ν•˜μ„Έμš”.
</task>

<business_requirements>
AS-IS: μž¬κ³ λŠ” μˆ˜λ™μœΌλ‘œ κ΄€λ¦¬λ˜λ©°, μ‹€μ‹œκ°„ 좔적이 λΆˆκ°€λŠ₯
TO-BE: 
- μ‹€μ‹œκ°„ 재고 좔적
- 재고 λΆ€μ‘± μ‹œ μžλ™ μ•Œλ¦Ό
- 재고 νžˆμŠ€ν† λ¦¬ 관리
- λ™μ‹œμ„± μ œμ–΄ (λ™μ‹œ μ£Όλ¬Έ μ‹œ 재고 차감 μ •ν™•μ„± 보μž₯)
</business_requirements>

<technical_requirements>
<tech_stack>
- Framework: Spring Boot 3.2
- Database: PostgreSQL 15
- Build Tool: Gradle 8
- Java Version: 17
</tech_stack>

<architecture>
- Pattern: Layered Architecture
- Communication: REST API
- Concurrency: Pessimistic Locking (재고 차감)
</architecture>

<quality_requirements>
- Test Coverage: μ΅œμ†Œ 85%
- Performance: 재고 쑰회 < 50ms, 차감 < 100ms
- Security: JWT 기반 인증, ROLE_ADMIN만 재고 μΆ”κ°€/μˆ˜μ • κ°€λŠ₯
</quality_requirements>
</technical_requirements>

<specific_requirements>
1. λ™μ‹œμ„± μ œμ–΄ μ „λž΅
   - 비관적 락 (Pessimistic Lock) μ‚¬μš©
   - λ°λ“œλ½ λ°©μ§€ 둜직 포함
   
2. 재고 λΆ€μ‘± μ•Œλ¦Ό
   - μž¬κ³ κ°€ μ•ˆμ „ μž¬κ³ λŸ‰(safety stock) μ΄ν•˜λ‘œ λ–¨μ–΄μ§€λ©΄ 이메일 λ°œμ†‘
   - μ•Œλ¦Ό 쀑볡 λ°œμ†‘ λ°©μ§€ (1일 1회)
   
3. νžˆμŠ€ν† λ¦¬ 관리
   - λͺ¨λ“  재고 변동 이λ ₯ μ €μž₯
   - 변동 μ‚¬μœ (μ£Όλ¬Έ, λ°˜ν’ˆ, μ‘°μ • λ“±) 기둝
</specific_requirements>

<deliverables>
1. [βœ“] Inventory Entity (재고)
2. [βœ“] InventoryHistory Entity (재고 이λ ₯)
3. [βœ“] InventoryRepository (with Locking)
4. [βœ“] InventoryService (λΉ„μ¦ˆλ‹ˆμŠ€ 둜직)
5. [βœ“] InventoryController (API)
6. [βœ“] InventoryDTO
7. [βœ“] Custom Exception (InsufficientStockException)
8. [βœ“] Unit Tests (Mockito)
9. [βœ“] Integration Tests (Testcontainers)
10. [βœ“] Concurrency Test (λ©€ν‹°μŠ€λ ˆλ“œ ν™˜κ²½)
</deliverables>

best-practice

그리고, 이미 곳곳에 best-practice .md νŒŒμΌλ“€μ΄ μ¦λΉ„ν•΄μžˆλ‹€.

λŒ€ν‘œμ μœΌλ‘œ, Open AI νŒ€μ—μ„œ κ³΅μœ ν•œ 아티클 이 μžˆλ‹€.

Summary

κ²°κ΅­, AI κ°€ μ½λŠ” 글인 ν”„λ‘¬ν”„νŠΈλŠ” κ°„λ‹¨ν•˜λ‹€.

βœ… ν•΄μ•Όν•  것(ν”„λ‘œμ νŠΈμ˜ μŠ€νŽ™, μš”κ΅¬μ‚¬ν•­, ..)κ³Ό ❌ ν•˜μ§€ 말아야 ν•  것(유의 사항)이 λ‚˜λ‰˜μ–΄μ Έμ„œ μž‘μ„±λ˜λ©΄ λœλ‹€.

μ‚¬λžŒμ΄ 읽을 글은 이해λ₯Ό 돕기 μœ„ν•΄ μ—¬λŸ¬ λ―Έμ‚¬μ–΄κ΅¬λ‚˜ 보좩 μžλ£Œκ°€ νƒœκ·Έλ  수 μžˆλ‹€.

ν•˜μ§€λ§Œ AI 의 κ²½μš°λŠ” 그럴 ν•„μš”λ„ 없을 λΏλ”λŸ¬ κ·Έλž˜μ„œλŠ” μ•ˆλœλ‹€.

직관적이지 μ•Šμ€ λ§Žμ€ content λŠ” 였히렀 AI λ₯Ό ν˜Όλž€μŠ€λŸ½κ²Œ ν•  수 있고, AI μ—κ²Œ λ³΄λ‚΄λŠ” request ν•˜λ‚˜ν•˜λ‚˜κ°€ 돈으둜 직결되기 λ•Œλ¬Έμ΄λ‹€.

λ”°λΌμ„œ, AI λ₯Ό 보닀 잘 ν™œμš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” μ² μ €νžˆ AI λ₯Ό κ³ λ €ν•œ prompt λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.

profile
μ•ˆλ…•ν•˜μ„Έμš”, 개발자 λΉ„λΉ„μž…λ‹ˆλ‹€.

0개의 λŒ“κΈ€