IT 현직자와 취준생 간의 정보 불균형을 해소하고, 심리적 장벽 없이 성장의 기회를 얻을 수 있도록 돕는 1:1 멘토링 매칭 플랫폼입니다.
- 프로젝트 소개 (About)
- 주요 기능 (Key Features)
- 기술 스택 (Tech Stack)
- 기술적 고도화 및 트러블 슈팅 (Technical Deep Dive)
- 협업 전략 및 프로세스 (Collaboration)
- 시스템 아키텍처 및 ERD (Architecture)
- 시작 가이드 (Getting Started)
'두들(Dodeul)'은 IT 취준생들이 겪는 "어떻게 질문해야 할지 모르는 막막함"과 현직자와의 "정보 비대칭"을 해결하기 위해 시작되었습니다.
단순한 매칭을 넘어, 생성형 AI(LLM)를 활용해 멘티의 질문 작성을 돕고, 실시간 채팅을 통해 밀도 높은 멘토링 경험을 제공합니다. 상담 후에는 질의응답이 커뮤니티 데이터로 순환되어 지속 가능한 성장을 돕는 플랫폼을 지향합니다.
- 개발 기간: 2026.01.05 ~ 2026.01.16 (2주)
- 개발 인원: 5명 (Backend)
- 소셜 로그인: GitHub, Google 연동 (OAuth 2.0)
- 인증/인가: 세션 기반(JSESSIONID) 인증 및 Role 기반 권한 제어 (RBAC)
- 온보딩: 멘토/멘티별 맞춤형 프로필 설정 (기술 스택 태그, 활동 가능 시간 등)
- 알고리즘 추천: 멘티의 관심사(기술 스택, 직무 등) 기반 최적의 멘토 추천
- 직접 제안: 원하는 멘토에게 1:1 상담 제안 및 수락 프로세스
- AI 작문 보조: 키워드만 입력하면 AI가 "멘토가 답변하기 좋은 질문"으로 신청서 초안 자동 생성
- 신청서 관리: 이력서/포트폴리오 첨부 및 상담 희망 시간 선택
- 웹소켓 통신: STOMP 기반의 저지연 실시간 1:1 대화
- 컨텍스트 연동: 채팅방 입장 시 상담 신청서 내용 자동 로드 (문맥 유지)
- 미디어 전송: 이미지 및 파일 전송 지원, 상담 종료 시 채팅방 동결(Read-Only)
- Q&A 게시판: 개발 지식 공유 및 멀티미디어(파일) 첨부 지원
- 리뷰 시스템: 상담 종료 후 멘토 평가 및 신뢰도 지표 반영
| Category | Tech Stack | Description |
|---|---|---|
| Language | Java 17 | LTS 버전 사용 |
| Framework | Spring Boot 3.x | 웹 애플리케이션 프레임워크 |
| Security | Spring Security, OAuth2 | 세션 기반 인증 및 권한 관리 |
| Database | MySQL, Spring Data JPA | 관계형 데이터베이스 및 ORM |
| Query | QueryDSL | 동적 쿼리 처리 및 Type-Safe 쿼리 작성 |
| Communication | WebSocket (STOMP) | 실시간 양방향 통신 |
| AI | OpenAI API | 상담 신청서 자동 생성 (LLM) |
| Infra | AWS S3 | 대용량 파일 스토리지 |
| Tool | Spotless, EditorConfig | 코드 품질 관리 |
프로젝트 진행 중 마주한 핵심 기술적 과제와 해결 과정입니다.
문제: 기존 폼 로그인과 OAuth2 로그인이 공존하며, 역할(Role)에 따른 엄격한 접근 제어가 필요함.
- 해결:
DefaultOAuth2UserService를 커스텀하여 소셜 제공자(GitHub, Google)별 속성을 표준화하고 DB와 매핑했습니다. 또한 Spring Security의FilterChain을 세분화하고 커스텀AuthenticationEntryPoint를 구현하여 비인가 접근을 체계적으로 핸들링했습니다.
문제: 멘토 검색 시 복합 조건(기술 스택, 분야 등) 처리가 복잡하고, 연관 엔티티 조회 시 N+1 문제 발생.
- 해결:
BooleanExpression을 활용한 동적 쿼리(BooleanBuilder) 패턴을 적용하여 유연성을 확보했습니다. 조회 시에는 DTO Projection을 적용해 불필요한 데이터 조회를 방지하고 API 응답 속도를 개선했습니다. 커뮤니티 게시글 조회 시에는Fetch Join을 적용해 쿼리 수를 획기적으로 줄였습니다.
문제: 웹소켓 패킷 변조(ID 사칭) 위험 및 대용량 파일 전송 시 브로커 부하 발생.
- 해결 (보안): 클라이언트 헤더의 ID를 신뢰하지 않고, Spring Security
Principal객체에서 서버가 인증한 사용자 ID를 강제 주입하여 위조를 원천 차단했습니다. - 해결 (성능): Hybrid Architecture를 도입하여 파일은 HTTP(POST)로 S3에 업로드하고, 웹소켓으로는 URL만 전송하여 브로커 부하를 최소화했습니다.
문제: 외부 AI API 호출 시 응답 지연과 일반적인 텍스트 생성으로 인한 퀄리티 저하.
- 해결: 페르소나 프롬프트 엔지니어링을 적용해 AI에게 "IT 멘토링 코디네이터" 역할을 부여하고, STAR 기법 등 명확한 출력 형식을 지정하여 답변 품질을 상향 평준화했습니다.
짧은 기간(2주) 동안 최고의 효율을 내기 위해 체계적인 프로세스를 구축했습니다.
- 하이브리드 코드 컨벤션:
- EditorConfig: IDE에 구애받지 않는 기본 포맷(들여쓰기, 인코딩) 통일.
- Spotless: 빌드 타임에 불필요한 공백 제거 및 Import 정리를 자동화하여 비즈니스 로직에 집중.
- Jira & Agile: 기능을 티켓 단위로 세분화하고,
Due Date를 설정하여 마감 기한을 철저히 준수했습니다. - Meeting Asset: 데일리 스크럼 외 기술적 논의가 필요한 사항은 별도 회의를 진행하고, 의사결정 과정을 상세한 **회의록(Meeting Minutes)**으로 남겨 커뮤니케이션 비용을 절감했습니다.
- Java 17+
- MySQL 8.0+
- OAuth2 Google (application.yml 설정 필요)
- OAuth GitHub (application.yml 설정 필요)
- GROQ API Key (application.yml 설정 필요)
- Supabase S3 (application.yml 설정 필요)
# 1. Repository Clone
$ git clone [https://github.com/prgrms-aibe-devcourse/AIBE4_Project2_Team4_Dodeul.git](https://github.com/prgrms-aibe-devcourse/AIBE4_Project2_Team4_Dodeul.git)
# 2. Project Directory
$ cd AIBE4_Project2_Team4_Dodeul
# 3. Build (Spotless Apply included)
$ ./gradlew build
# 4. Run
$ ./gradlew bootRun
