티스토리 뷰
반응형
이번 프로젝트는 Cursor AI의 코드 생성 능력을 검증해보고, 실제 실무 수준의 게시판 시스템을 얼마나 빠르게 구현할 수 있는지를 확인하기 위한 실험이었습니다.
백엔드는 제가 익숙한 Spring Boot 기반으로, 프론트는 유지보수만 경험해봤던 Vue 3 기반으로 구성했습니다.
프로젝트 개요
- 목적: Cursor AI를 통해 바이브 코딩 실험 - 얼마나 빠르게 정확한 기능을 구현할 수 있는가?
- 백엔드: Spring Boot + Spring Security + JPA + MySQL
- 프론트엔드: Vue 3 + TypeScript + Vite + Tailwind CSS + Pinia + Axios
- Repository: https://github.com/devHjlee/cursorboard
사용한 Cursor 프롬프트
백엔드 프롬프트
Spring Boot 기반의 백엔드 게시판 API를 JPA + MySQL 환경으로 구현해주세요...
Spring Boot 기반의 백엔드 게시판 API를 JPA + MySQL 환경으로 구현해주세요.
패키지 구조:
- 루트 도메인은 user, post, config, security이며,
- user, post 패키지에는 각각 다음과 같은 하위 계층이 존재합니다:
- api: Controller
- application: Service
- domain: Entity
- infrastructure: Repository
공통 개발 요구:
- 모든 컨트롤러는 @RestController로 작성해주세요.
- 요청/응답은 반드시 DTO로 구성해주세요.
- 공통 예외 처리를 위한 GlobalExceptionHandler를 구현해주세요.
- 모든 엔티티에는 createdAt, updatedAt 필드를 포함해주세요. (JPA Auditing 기반)
기능 요구 사항:
1. 사용자 인증/인가:
- Spring Security 기반의 JWT 인증/인가 처리 적용
- 로그인, 회원가입 API는 인증 없이 접근 가능해야 함
- 회원가입 시 이메일 중복 체크 API 제공
- 회원가입은 이메일, 비밀번호만 입력
- 사용자 권한은 USER / ADMIN 두 가지
2. 게시글 관련 기능:
- 게시글 작성, 수정, 삭제 기능
- 로그인 사용자만 가능하며, 삭제는 작성자 또는 ADMIN 권한만 가능
- 게시글 목록 조회: 인증 없이 접근 가능
- 게시글 상세 조회:
- 제목, 내용, 댓글 목록까지 포함된 단일 API 제공
- 댓글에는 작성자 이메일, 댓글 내용 포함
3. 댓글 기능:
- 게시글 상세 하단에 댓글 목록 출력
- 로그인 사용자는 댓글 등록 가능
- 삭제는 본인 또는 ADMIN만 가능
기술 스택:
- Spring Boot 3.x
- Spring Security + JWT
- JPA + MySQL
- DTO 분리 설계
- 단일 API 호출로 게시글 + 댓글 동시 반환 (상세 조회)
프론트엔드 프롬프트
Vue 3 + Vite 기반의 TypeScript SPA 프론트엔드 프로젝트를 생성해주세요...
기본 조건:
- 전체 SPA 구조이며, Vue Router를 사용해 각 화면을 라우팅 처리해주세요.
- 상태 관리는 Pinia를 사용하고, 로그인 상태 및 JWT 토큰을 Pinia로 관리해주세요.
- Axios를 통해 백엔드와 통신하며, JWT 토큰은 Authorization 헤더에 자동 포함되도록 설정해주세요.
- Axios 설정은 별도 파일로 분리해주세요.
- 프로젝트 구조는 views/, components/, store/, router/ 디렉토리로 구성해주세요.
- 기본적인 Tailwind CSS 또는 기타 UI 스타일을 적용해주세요. 화면이 너무 밋밋하지 않게 구성해주세요.
화면 구성:
1. 로그인 페이지 (/login)
- Email, Password 입력 필드
- 로그인 요청 후 JWT 토큰을 localStorage에 저장
- 로그인 성공 시 게시글 목록 페이지(/posts)로 이동
2. 게시글 목록 페이지 (/posts)
- 전체 게시글 조회
- 게시글 클릭 시 상세 페이지(/posts/:id)로 이동
- 각 게시글에는 수정(/posts/:id/edit) 및 삭제 버튼 표시
- 상단에는 게시글 등록 버튼(/posts/write) 표시
3. 게시글 상세 페이지 (/posts/:id)
- 게시글 제목, 내용, 작성자 출력
- 하단에 댓글 목록 출력
- 댓글 작성 기능 포함
4. 게시글 등록 페이지 (/posts/write)
- 제목, 내용 입력 필드
- 저장 시 목록 페이지로 이동
5. 게시글 수정 페이지 (/posts/:id/edit)
- 기존 게시글 내용 로드 후 수정 가능
- 수정 완료 시 상세 페이지로 이동
6. Not Found 페이지 (/404)
- 존재하지 않는 경로로 접근 시 표시
공통 요구사항:
- 로그인하지 않은 사용자가 보호된 라우트에 접근하면 /login으로 리디렉션 처리
- 모든 인증이 필요한 버튼(글쓰기, 수정, 삭제 등)은 로그인 상태에서만 노출
- 댓글 작성 시 로그인 상태가 아니라면 로그인 페이지로 안내
- API 요청 실패 시 사용자에게 알림 메시지를 띄우는 기본 에러 핸들링 처리
기타:
- 작동이 가능한 실제 코드로 구성해주세요.
- 컴포넌트와 페이지는 명확하게 분리하고, 파일명과 폴더명은 일관성 있게 작성해주세요.
작업 및 검증 시간
- 백엔드: Cursor가 생성한 구조를 제가 직접 검토하고, 빠진 예외 처리, 실무에서 필요한 보완 작업 및 오류 해결에 약 2시간 소요
- 프론트엔드: Vue 구조나 문법은 깊게 검증하지 못했지만, 주요 기능 (로그인, 글 CRUD, 댓글 등) 테스트 기준 1시간 이내로 완료
프로젝트 구조 요약 (Backend + Frontend)
Backend 주요 구조
com.cursorboard
├── config # CORS, Security 설정 등
├── security # JWT 토큰 발급 및 필터 처리
├── user # 회원가입, 로그인 API (api/application/domain/infrastructure)
├── post # 게시글, 댓글 API (api/application/domain/infrastructure)
Frontend 주요 구조
src/
├── views/ # login, posts, postDetail, write 등 페이지
├── components/ # Header, PostItem 등 UI 컴포넌트
├── store/ # auth 상태 관리 (JWT 저장)
├── router/ # Vue Router 설정
├── api/axios.ts # Axios + JWT 헤더 처리
결과 요약
Cursor AI는 실무적으로 사용하기에 충분한 기반 코드를 빠르게 생성해주며, 특히 백엔드에서는 제가 사전에 구성해왔던 도메인 기반 설계와 잘 맞았습니다.
Vue는 단순 유지보수만 진행해 왔었고 프로젝트 초기 구축을 진행해 본적이 없었기에 구조나 스타일에 대한 세부 제어는 어려웠지만, CRUD 단위 기능 동작은 빠르게 확인할 수 있어 충분히 프로토타이핑 도구로 활용 가능합니다.
반응형
'Spring' 카테고리의 다른 글
Kafka Outbox Pattern with Spring Event (0) | 2025.05.05 |
---|---|
Kafka와 Redis로 만든 선착순 이벤트 시스템 구조 분석 (1) | 2025.05.05 |
Spring Boot 모니터링 구축 (0) | 2024.04.09 |
SpringBoot Gradle (0) | 2024.03.26 |
Spring Batch (0) | 2024.03.24 |
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- SpringBatch 5.1.1
- Spring boot Actuator
- redis cache
- JdbcBatchItem
- tomcat gzip
- spring security
- spring redis cache
- Spring Actuator
- kafka srping event
- spring boot jpa crud
- cursor ai 프로젝트
- custom Item writer
- spring boot redis cache
- spring boot gzip
- spring boot jpa
- sse vs websocket
- kafka oubox
- cursor ai 프롬프트
- kafka redis
- cursor ai crud
- nginx gzip
- AWS 클라우드 환경
- Enum Equals ==
- cursorAI
- actuator prometheus grafana
- Enum ==
- no `meta.properties` found in
- CompositeItemWriter
- Enum equals
- oubox pattern
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
글 보관함