이 문서는 Kotlin과 Java 백엔드 개발자가 Cursor IDE의 YOLO 모드를 효과적으로 활용할 수 있는 다양한 사례를 제공합니다. 실제 개발 시나리오에 기반한 예제와 함께 YOLO 모드의 잠재력을 최대한 활용하는 방법을 알아보기.
YOLO 모드 프롬프트:
Spring Boot 프로젝트를 초기화해주세요. Kotlin을 사용하고, Gradle(Kotlin DSL)로 빌드 설정을 구성해주세요.
다음 의존성을 포함해야 합니다:
- Spring Web
- Spring Data JPA
- Spring Validation
- H2 Database
- Kotlin Reflect
- Kotlin Coroutines
프로젝트 구조는 다음과 같이 설정해주세요:
- com.example.demo.controller: 컨트롤러 클래스
- com.example.demo.service: 서비스 클래스
- com.example.demo.repository: 리포지토리 인터페이스
- com.example.demo.model: 엔티티 및 DTO 클래스
- com.example.demo.config: 설정 클래스
application.yml 파일도 생성하고 기본 설정을 추가해주세요.
YOLO 모드 프롬프트:
다음 요구사항에 맞는 JPA 엔티티를 생성해주세요:
1. User 엔티티:
- id: Long (PK)
- username: String (유니크, 널 불가)
- email: String (유니크, 널 불가)
- password: String (널 불가)
- createdAt: LocalDateTime
- updatedAt: LocalDateTime
- orders: Order와 일대다 관계
2. Product 엔티티:
- id: Long (PK)
- name: String (널 불가)
- description: String
- price: BigDecimal (널 불가)
- stockQuantity: Integer (널 불가)
- category: Category와 다대일 관계
- orderItems: OrderItem과 일대다 관계
3. Category 엔티티:
- id: Long (PK)
- name: String (널 불가)
- products: Product와 일대다 관계
4. Order 엔티티:
- id: Long (PK)
- user: User와 다대일 관계
- orderDate: LocalDateTime
- status: OrderStatus (ENUM: PENDING, PROCESSING, SHIPPED, DELIVERED, CANCELLED)
- totalPrice: BigDecimal
- orderItems: OrderItem과 일대다 관계
5. OrderItem 엔티티:
- id: Long (PK)
- order: Order와 다대일 관계
- product: Product와 다대일 관계
- quantity: Integer
- price: BigDecimal
모든 엔티티에 적절한 JPA 어노테이션을 추가하고, 양방향 관계에서는 무한 재귀 참조를 방지하기 위한 설정도 추가해주세요.
YOLO 모드 프롬프트:
앞서 생성한 엔티티들에 대한 Spring Data JPA 리포지토리 인터페이스를 생성해주세요.
각 리포지토리에는 기본 CRUD 기능 외에도 다음과 같은 커스텀 쿼리 메서드를 추가해주세요:
1. UserRepository:
- findByEmail(email: String): Optional<User>
- findByUsername(username: String): Optional<User>
- existsByEmail(email: String): Boolean
- existsByUsername(username: String): Boolean
2. ProductRepository:
- findByNameContaining(name: String): List<Product>
- findByCategoryId(categoryId: Long): List<Product>
- findByPriceBetween(minPrice: BigDecimal, maxPrice: BigDecimal): List<Product>
- findByStockQuantityGreaterThan(minStock: Integer): List<Product>
3. OrderRepository:
- findByUserId(userId: Long): List<Order>
- findByStatus(status: OrderStatus): List<Order>
- findByOrderDateBetween(startDate: LocalDateTime, endDate: LocalDateTime): List<Order>
- countByStatus(status: OrderStatus): Long
4. CategoryRepository:
- findByName(name: String): Optional<Category>
5. OrderItemRepository:
- findByOrderId(orderId: Long): List<OrderItem>
- findByProductId(productId: Long): List<OrderItem>
- sumQuantityByProductId(productId: Long): Integer (JPQL 쿼리 사용)
YOLO 모드 프롬프트:
UserService 클래스를 구현해주세요. 다음 기능을 포함해야 합니다:
1. 사용자 등록 (회원가입):
- 이메일과 사용자명 중복 검사
- 비밀번호 암호화 (BCrypt 사용)
- 사용자 정보 저장
2. 사용자 인증 (로그인):
- 이메일로 사용자 조회
- 비밀번호 검증
- 인증 성공 시 사용자 정보 반환
3. 사용자 정보 조회:
- ID로 사용자 조회
- 모든 사용자 목록 조회
4. 사용자 정보 수정:
- 이메일, 사용자명 수정 시 중복 검사
- 비밀번호 변경 시 암호화 처리
5. 사용자 삭제:
- 소프트 삭제 구현 (isDeleted 플래그 사용)
적절한 예외 처리와 트랜잭션 관리를 포함해주세요.
YOLO 모드 프롬프트:
ProductController 클래스를 구현해주세요. RESTful API 엔드포인트를 제공해야 합니다:
1. 제품 생성 (POST /api/products):
- RequestBody로 ProductCreateDTO 받기
- 유효성 검사
- 제품 생성 후 ProductResponseDTO 반환
2. 제품 조회 (GET /api/products/{id}):
- 경로 변수로 제품 ID 받기
- 제품 조회 후 ProductResponseDTO 반환
- 제품이 없을 경우 적절한 예외 처리
3. 모든 제품 조회 (GET /api/products):
- 페이지네이션 지원 (페이지 번호, 페이지 크기)
- 정렬 지원 (정렬 필드, 정렬 방향)
- 필터링 지원 (카테고리 ID, 가격 범위, 이름 검색)
4. 제품 수정 (PUT /api/products/{id}):
- 경로 변수로 제품 ID 받기
- RequestBody로 ProductUpdateDTO 받기
- 유효성 검사
- 제품 수정 후 ProductResponseDTO 반환
5. 제품 삭제 (DELETE /api/products/{id}):
- 경로 변수로 제품 ID 받기
- 제품 삭제 후 성공 메시지 반환
모든 엔드포인트에 적절한 HTTP 상태 코드와 응답 형식을 사용하고, 예외 처리를 구현해주세요.
YOLO 모드 프롬프트:
Flyway를 사용하여 데이터베이스 마이그레이션을 설정해주세요:
1. build.gradle.kts에 Flyway 의존성 추가
2. application.yml에 Flyway 설정 추가
3. 다음 마이그레이션 스크립트 생성:
- V1__create_tables.sql: 모든 테이블 생성 스크립트
- V2__add_constraints.sql: 외래 키 제약 조건 추가
- V3__insert_initial_data.sql: 초기 데이터 삽입 (카테고리, 관리자 계정 등)
각 스크립트는 src/main/resources/db/migration 디렉토리에 위치해야 합니다.
YOLO 모드 프롬프트:
QueryDSL을 프로젝트에 설정하고 사용 예제를 작성해주세요:
1. build.gradle.kts에 QueryDSL 의존성 및 플러그인 설정 추가
2. ProductRepositoryCustom 인터페이스와 ProductRepositoryCustomImpl 클래스 생성
3. 다음 복잡한 쿼리를 QueryDSL로 구현:
- 특정 카테고리에 속하면서 가격이 특정 범위 내에 있고, 재고가 있는 제품 검색
- 특정 기간 내에 가장 많이 주문된 제품 목록 조회
- 특정 사용자가 구매한 모든 제품의 카테고리별 지출 금액 계산
각 쿼리에 대한 테스트 코드도 작성해주세요.
YOLO 모드 프롬프트:
현재 엔티티에 적절한 데이터베이스 인덱스를 추가해주세요:
1. 각 엔티티를 분석하여 자주 조회되는 필드 식별
2. 복합 인덱스가 필요한 경우 식별
3. 다음 형식으로 인덱스 추가:
- JPA @Index 어노테이션 사용
- Flyway 마이그레이션 스크립트에 CREATE INDEX 문 추가
인덱스 추가 시 고려해야 할 사항과 각 인덱스의 목적을 주석으로 설명해주세요.
YOLO 모드 프롬프트:
OrderService 클래스에 대한 단위 테스트를 작성해주세요:
1. JUnit 5와 Mockito 사용
2. 다음 메서드에 대한 테스트 케이스 작성:
- createOrder(): 주문 생성 기능
- getOrderById(): 주문 조회 기능
- updateOrderStatus(): 주문 상태 업데이트 기능
- cancelOrder(): 주문 취소 기능
각 테스트 케이스는 다음을 포함해야 합니다:
- 성공 케이스
- 실패 케이스 (예외 발생 상황)
- 경계값 테스트
- Mockito를 사용한 의존성 모킹
- 적절한 검증(assertions)
YOLO 모드 프롬프트:
ProductController에 대한 통합 테스트를 작성해주세요:
1. @SpringBootTest와 TestRestTemplate 사용
2. 다음 엔드포인트에 대한 테스트 케이스 작성:
- POST /api/products: 제품 생성
- GET /api/products/{id}: 제품 조회
- GET /api/products: 제품 목록 조회
- PUT /api/products/{id}: 제품 수정
- DELETE /api/products/{id}: 제품 삭제
각 테스트 케이스는 다음을 포함해야 합니다:
- HTTP 상태 코드 검증
- 응답 본문 검증
- 데이터베이스 상태 변경 검증
- 다양한 입력 케이스 (유효한 입력, 유효하지 않은 입력)
YOLO 모드 프롬프트:
JMeter를 사용하여 API 성능 테스트를 설정해주세요:
1. 다음 시나리오에 대한 JMeter 테스트 계획 작성:
- 사용자 등록 및 로그인
- 제품 목록 조회
- 제품 상세 조회
- 주문 생성
각 시나리오에 대해 다음을 설정:
- 동시 사용자 수: 100
- 램프업 기간: 30초
- 반복 횟수: 10
- 결과 수집 및 분석 방법
테스트 실행 및 결과 분석을 위한 스크립트도 작성해주세요.
YOLO 모드 프롬프트:
Springdoc OpenAPI를 사용하여 API 문서화를 구현해주세요:
1. build.gradle.kts에 Springdoc OpenAPI 의존성 추가
2. application.yml에 Springdoc 설정 추가
3. 모든 컨트롤러 클래스에 다음 어노테이션 추가:
- @Tag: API 그룹 정의
- @Operation: 각 엔드포인트 설명
- @Parameter: 파라미터 설명
- @ApiResponse: 응답 설명
- @Schema: DTO 클래스 설명
4. 커스텀 OpenAPI 설정 클래스 생성:
- API 기본 정보 설정
- 보안 스키마 설정
- 전역 응답 코드 설정
YOLO 모드 프롬프트:
API 버전 관리 전략을 구현해주세요:
1. URL 경로 기반 버전 관리 구현:
- /api/v1/products
- /api/v2/products
2. 각 버전에 대한 컨트롤러 클래스 생성:
- ProductControllerV1
- ProductControllerV2
3. 버전 간 차이점 구현:
- V1: 기본 제품 정보만 반환
- V2: 확장된 제품 정보 (재고 상태, 리뷰 요약 등) 반환
4. 버전 관리를 위한 공통 인터페이스 및 추상 클래스 설계
YOLO 모드 프롬프트:
Spring Boot에서 GraphQL API를 구현해주세요:
1. build.gradle.kts에 Spring GraphQL 의존성 추가
2. 스키마 정의 (src/main/resources/graphql/schema.graphqls):
- User 타입
- Product 타입
- Order 타입
- 쿼리 타입 (사용자 조회, 제품 조회, 주문 조회)
- 뮤테이션 타입 (사용자 생성, 제품 생성, 주문 생성)
3. 리졸버 클래스 구현:
- QueryResolver
- MutationResolver
- UserResolver (중첩 필드 해결)
- ProductResolver (중첩 필드 해결)
- OrderResolver (중첩 필드 해결)
4. DataLoader 구현 (N+1 문제 해결)
5. 예외 처리 및 오류 응답 형식 정의
YOLO 모드 프롬프트:
다음 컨트롤러 클래스들에서 중복 코드를 식별하고 리팩토링해주세요:
- UserController
- ProductController
- OrderController
공통 기능을 추출하여 다음을 구현해주세요:
1. 기본 CRUD 작업을 위한 추상 기본 컨트롤러 클래스
2. 응답 형식을 표준화하기 위한 ResponseDTO 클래스
3. 페이지네이션 처리를 위한 유틸리티 클래스
4. 예외 처리를 위한 공통 메커니즘
리팩토링 후 각 컨트롤러 클래스는 도메인별 특화 기능만 포함해야 합니다.
YOLO 모드 프롬프트:
현재 서비스 레이어에 다음 디자인 패턴을 적용해주세요:
1. 전략 패턴:
- 주문 처리 전략 인터페이스 생성
- 다양한 주문 처리 전략 구현 (일반 배송, 빠른 배송, 픽업 등)
- 전략을 동적으로 선택하는 컨텍스트 클래스 구현
2. 팩토리 패턴:
- 결제 처리기 인터페이스 생성
- 다양한 결제 방법 구현 (신용카드, 계좌이체, 페이팔 등)
- 결제 방법에 따라 적절한 처리기를 생성하는 팩토리 클래스 구현
3. 옵저버 패턴:
- 주문 상태 변경 이벤트 정의
- 이벤트 리스너 인터페이스 생성
- 다양한 리스너 구현 (이메일 알림, 푸시 알림, 재고 업데이트 등)
- 이벤트 발행 및 구독 메커니즘 구현
YOLO 모드 프롬프트:
현재 명령형 스타일로 작성된 ProductService 클래스를 함수형 프로그래밍 스타일로 리팩토링해주세요:
1. 불변성 원칙 적용:
- 모든 DTO 클래스를 불변으로 만들기
- 상태 변경 대신 새 객체 생성 방식 사용
2. 스트림 API 활용:
- 컬렉션 처리에 for 루프 대신 스트림 사용
- map, filter, reduce 등의 연산 활용
3. Optional 활용:
- null 체크 대신 Optional 사용
- orElse, orElseThrow 등의 메서드 활용
4. 함수형 인터페이스 활용:
- Function, Predicate, Consumer 등 활용
- 메서드 참조 사용
5. 부수 효과 최소화:
- 순수 함수 작성
- 예외 대신 Either 또는 Result 타입 사용 (Vavr 라이브러리 활용)
YOLO 모드 프롬프트:
Spring Security를 설정하여 API 보안을 구현해주세요:
1. build.gradle.kts에 Spring Security 의존성 추가
2. SecurityConfig 클래스 생성:
- JWT 기반 인증 설정
- CORS 설정
- CSRF 보호 설정
- 권한 기반 접근 제어 설정
- 공개 엔드포인트 설정 (/api/auth/**, /swagger-ui/**)
3. JwtTokenProvider 클래스 구현:
- 토큰 생성 기능
- 토큰 검증 기능
- 토큰에서 사용자 정보 추출 기능
4. JwtAuthenticationFilter 구현:
- 요청 헤더에서 토큰 추출
- 토큰 검증 및 인증 처리
- SecurityContext 설정
5. UserDetailsService 구현:
- 데이터베이스에서 사용자 정보 로드
- UserDetails 객체 생성
YOLO 모드 프롬프트:
인증 및 권한 부여 시스템을 구현해주세요:
1. AuthController 구현:
- 회원가입 엔드포인트 (/api/auth/register)
- 로그인 엔드포인트 (/api/auth/login)
- 토큰 갱신 엔드포인트 (/api/auth/refresh)
2. Role 엔티티 및 권한 모델 구현:
- Role 엔티티 (id, name)
- User-Role 다대다 관계 설정
- 기본 역할 정의 (USER, ADMIN)
3. 메서드 수준 보안 구현:
- @PreAuthorize 어노테이션 사용
- SpEL 표현식으로 권한 검사 정의
- 커스텀 보안 표현식 정의
4. 사용자 컨텍스트 유틸리티 구현:
- 현재 인증된 사용자 정보 조회
- 현재 사용자의 권한 확인
YOLO 모드 프롬프트:
입력 유효성 검사 및 보안 처리를 구현해주세요:
1. Bean Validation 구현:
- DTO 클래스에 유효성 검사 어노테이션 추가
- 컨트롤러에서 @Valid 어노테이션 사용
- 커스텀 유효성 검사 어노테이션 생성
2. XSS 방지:
- HTML 이스케이프 유틸리티 구현
- 입력 필터링 구현
- Content-Security-Policy 헤더 설정
3. SQL 인젝션 방지:
- PreparedStatement 사용 확인
- JPA 쿼리 파라미터 바인딩 확인
- 입력 값 검증 및 필터링
4. CSRF 보호:
- CSRF 토큰 생성 및 검증
- 쿠키 보안 설정 (HttpOnly, Secure, SameSite)
YOLO 모드 프롬프트:
현재 모놀리식 애플리케이션을 마이크로서비스로 분리해주세요:
1. 다음 서비스로 분리:
- user-service: 사용자 관리
- product-service: 제품 관리
- order-service: 주문 관리
- payment-service: 결제 처리
2. 각 서비스에 대한 프로젝트 구조 설정:
- 독립적인 Spring Boot 애플리케이션
- 서비스별 데이터베이스 설정
- 서비스별 API 엔드포인트 정의
3. 서비스 간 통신 방식 정의:
- 동기식 통신: RestTemplate 또는 WebClient 사용
- 비동기식 통신: 메시지 큐 사용 (Kafka 또는 RabbitMQ)
YOLO 모드 프롬프트:
Spring Cloud Gateway를 사용하여 API 게이트웨이를 구현해주세요:
1. build.gradle.kts에 Spring Cloud Gateway 의존성 추가
2. application.yml에 라우팅 설정:
- /api/users/** -> user-service
- /api/products/** -> product-service
- /api/orders/** -> order-service
- /api/payments/** -> payment-service
3. 다음 기능 구현:
- 인증 필터
- 속도 제한 필터
- 로깅 필터
- 헤더 변환 필터
- 응답 캐싱
4. 서비스 디스커버리 통합 (Eureka 또는 Consul)
5. 회로 차단기 패턴 구현 (Resilience4j)
YOLO 모드 프롬프트:
Kafka를 사용하여 마이크로서비스 간 이벤트 기반 통신을 구현해주세요:
1. build.gradle.kts에 Spring Kafka 의존성 추가
2. Kafka 설정:
- 프로듀서 설정
- 컨슈머 설정
- 토픽 설정
3. 다음 이벤트 구현:
- OrderCreatedEvent
- PaymentProcessedEvent
- StockUpdatedEvent
- OrderShippedEvent
4. 각 서비스에 이벤트 핸들러 구현:
- 이벤트 리스너 어노테이션 사용
- 멱등성 보장
- 오류 처리 및 재시도 로직
5. 이벤트 스키마 관리 (Avro 또는 Protobuf 사용)
YOLO 모드 프롬프트:
Spring Cache와 Redis를 사용하여 캐싱을 구현해주세요:
1. build.gradle.kts에 Spring Cache와 Redis 의존성 추가
2. Redis 설정:
- 연결 설정
- 직렬화 설정
- TTL 설정
3. 다음 메서드에 캐싱 적용:
- ProductService.getProductById()
- ProductService.getAllProducts()
- CategoryService.getAllCategories()
4. 캐시 무효화 전략 구현:
- 제품 업데이트 시 캐시 삭제
- 카테고리 업데이트 시 캐시 삭제
5. 캐시 통계 및 모니터링 설정
YOLO 모드 프롬프트:
Kotlin 코루틴과 Spring WebFlux를 사용하여 비동기 처리를 구현해주세요:
1. build.gradle.kts에 필요한 의존성 추가:
- kotlinx-coroutines-core
- kotlinx-coroutines-reactor
- spring-boot-starter-webflux
2. 다음 기능을 비동기로 구현:
- 주문 처리 프로세스
- 이메일 알림 전송
- 대용량 데이터 내보내기
3. 코루틴 컨텍스트 및 디스패처 설정:
- IO 작업을 위한 Dispatchers.IO
- CPU 집약적 작업을 위한 Dispatchers.Default
4. 비동기 오류 처리:
- 예외 처리 전략
- 재시도 메커니즘
- 폴백 메커니즘
YOLO 모드 프롬프트:
데이터베이스 성능을 최적화해주세요:
1. JPA 최적화:
- N+1 문제 해결 (EntityGraph, fetch join 사용)
- 지연 로딩 vs 즉시 로딩 전략 최적화
- 배치 처리 구현 (@BatchSize, 청크 처리)
2. 쿼리 최적화:
- 실행 계획 분석
- 인덱스 활용
- 페이지네이션 최적화
3. 연결 풀 설정:
- HikariCP 설정 최적화
- 최대 연결 수 설정
- 연결 타임아웃 설정
4. 읽기/쓰기 분리:
- 읽기 전용 트랜잭션 사용
- 읽기 전용 레플리카 설정
- CQRS 패턴 구현
이 문서에 제시된 활용 사례는 Kotlin과 Java 백엔드 개발자가 Cursor IDE의 YOLO 모드를 효과적으로 활용할 수 있는 다양한 방법을 보여줍니다. 각 사례는 실제 개발 시나리오에 기반하여 작성되었으며, YOLO 모드의 프롬프트 예제를 포함하고 있습니다. 이러한 사례를 참고하여 자신의 프로젝트에 맞게 YOLO 모드를 활용해보세요.