🧠 AI 브레인스토밍 플랫폼 개발 일지 - Day 1
날짜: 2024년 (프로젝트 시작)
진행자: AI 코칭 + 개발자
목표: Spring Boot + Python LLM 기반 브레인스토밍 웹 플랫폼
📝 오늘의 진행 사항
1️⃣ 프로젝트 초기 설정
- ✅ Spring Boot 3.5.7 프로젝트 생성 (start.spring.io)
- ✅ Gradle 빌드 설정
- ✅ Java 17 설정
- ✅ YAML 설정 파일 선택 (가독성 우선)
선택한 Dependencies:
- Spring Web (REST API)
- Spring Data JPA (ORM)
- MySQL Driver (운영용)
- H2 Database (개발용) ← 추가
- Lombok (보일러플레이트 제거)
- Spring Security (OAuth2 준비)
- OAuth2 Client (구글/카카오/네이버 로그인)
- Validation (입력 검증)
- Spring Boot Actuator (모니터링)
2️⃣ 개발 환경 구축
- ✅ H2 인메모리 DB 설정 (빠른 개발/테스트)
- ✅ Spring Security 임시 비활성화 (개발 편의성)
- ✅ JPA 설정 (자동 DDL, SQL 로깅)
- ✅ 서버 정상 실행 확인 (http://localhost:8080)
3️⃣ 아키텍처 설계
┌─────────────────┐
│ 사용자 브라우저 │
└────────┬────────┘
│
┌────────▼────────────────────┐
│ Spring Boot (Java) │
│ - OAuth 로그인 │
│ - 아이디어 CRUD │
│ - Python API 연동 │
└────────┬────────────────────┘
│
┌────────▼────────────────────┐
│ Python FastAPI │
│ - LLM 브레인스토밍 엔진 │
│ - Ephemeral RAG │
└─────────────────────────────┘
4️⃣ ERD 설계 (v1.0)
User (사용자)
├─ 1:N → Idea (아이디어)
└─ 1:N → Inquiry (문의/게시판)
테이블 구조:
- User: OAuth2 로그인 정보, 프로필
- Idea: 브레인스토밍 결과물 (JSON 저장)
- Inquiry: 관리자 문의 (CRUD 연습용)
💡 주요 학습 내용
1. Spring Security 6.x 람다 DSL
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) {
http
.authorizeHttpRequests(auth -> auth
.anyRequest().permitAll() // 개발 단계
)
.csrf(csrf -> csrf.disable()); // REST API용
return http.build();
}
포인트: Spring Security 6.0부터 람다 체이닝 방식이 표준
2. CSRF (Cross-Site Request Forgery)
- 공격 원리: 로그인된 사용자 권한을 악용한 위조 요청
- 방어: CSRF 토큰 검증
- REST API: JWT/Bearer Token 사용 시 불필요 → disable
3. H2 vs MySQL 전략
# 개발: H2 (빠름, 설치 불필요)
spring:
datasource:
url: jdbc:h2:mem:brainstorm
# 운영: MySQL (Docker/AWS)
spring:
datasource:
url: jdbc:mysql://localhost:3306/brainstorm
4. BaseEntity 패턴 (상속)
@MappedSuperclass // 테이블 생성 안 함
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseEntity {
@CreatedDate
private LocalDateTime createdAt;
@LastModifiedDate
private LocalDateTime updatedAt;
}
장점:
- 모든 엔티티에서 재사용
- 자동 시간 관리
- 코드 중복 제거
5. DDD 기반 패키지 구조
domain/
├─ user/
│ ├─ entity/
│ ├─ repository/
│ ├─ service/
│ └─ controller/
├─ idea/
└─ inquiry/
global/
├─ entity/ (BaseEntity)
├─ config/ (Security)
└─ exception/
특징: 도메인별 응집도 높음, 기능 추가/삭제 용이
🤔 의사결정 과정
Q1. Maven vs Gradle?
선택: Gradle ✅
이유: 개발자가 익숙함, 빌드 속도 빠름
Q2. Properties vs YAML?
선택: YAML ✅
이유:
- 계층 구조 명확
- OAuth2 설정 시 가독성 좋음
- 환경별 설정 분리 쉬움
Q3. MySQL 바로 vs H2 먼저?
선택: H2 먼저 ✅
이유:
- 설치 불필요
- 빠른 개발/테스트
- 나중에 MySQL로 전환 쉬움 (설정만 변경)
Q4. Session 테이블 필요?
선택: 불필요 ✅
이유: Python의 Ephemeral RAG가 세션 관리, Spring은 최종 결과물만 저장
Q5. Inquiry 테이블 추가?
선택: 추가 ✅
이유: CRUD 패턴 연습, 실전 기능
🐛 트러블슈팅
Issue 1: MySQL 없어서 실행 안 됨
문제: spring-boot-starter-data-jpa + mysql-connector가 MySQL 연결 시도
해결: H2 의존성 추가 + application.yaml 설정
교훈: 개발 단계에서는 H2가 편함
Issue 2: Spring Security 기본 로그인 화면
문제: 모든 요청이 로그인 페이지로 리다이렉트
해결: SecurityConfig에서 .anyRequest().permitAll()
교훈: 개발 단계에서는 Security 최소화
📊 현재 상태
프로젝트 진행률: ████░░░░░░ 10%
완료:
✅ 프로젝트 생성
✅ 개발 환경 설정
✅ 아키텍처 설계
✅ ERD 설계
진행 중:
⏳ 없음 (내일 시작)
예정:
📋 ERD 다이어그램 작성
📋 엔티티 클래스 생성
📋 Repository 생성
🎯 내일 할 일 (Day 2)
필수
- ERD 다이어그램 작성 (draw.io / ERDCloud)
- 폴더 구조 생성 (domain, global)
- BaseEntity 구현
- Enum 클래스 작성 (Role, OAuth2Provider, IdeaStatus, InquiryStatus)
- User 엔티티 작성
- Idea 엔티티 작성
- Inquiry 엔티티 작성
- Repository 인터페이스 작성
선택 (시간 되면)
- 간단한 컨트롤러로 CRUD 테스트
- H2 콘솔에서 테이블 확인
🔗 참고 자료
💬 회고
😊 잘한 점
- H2로 빠르게 개발 환경 구축
- DDD 구조로 확장성 확보
- Inquiry 테이블 추가로 CRUD 연습 기회 마련
😅 아쉬운 점
- 아직 코드를 직접 작성하지 않음 (내일부터!)
- ERD를 다이어그램으로 그리지 못함
🎓 배운 점
- Spring Security 6.x 람다 DSL 표준화
- CSRF 개념과 REST API에서의 불필요성
- BaseEntity 상속 패턴의 효율성
- H2 개발 → MySQL 운영 전환 전략
🚀 Day 2에서 만나요!
'그래서 일단 프로젝트 > 개인프로젝트-IdeaMaker(클로드 작성본 md 모음)' 카테고리의 다른 글
| 기록 6 . 파이썬 모듈 JAVA 백엔드에 연결하기 .. (1) | 2025.12.01 |
|---|---|
| 기록 5 . 컨트롤러 계층 완성 및 테스트완료 (0) | 2025.11.27 |
| 기록 4 . DTO 작성 및 Test 코드 작성 단계 (0) | 2025.11.26 |
| 기록 3 . Java Service 계층과 Repository 계층 작성 (0) | 2025.11.25 |
| 기록 2 . 엔티티 만들기 ERD까지. (0) | 2025.11.21 |