프리랜서의 재능(서비스)을 등록하고, 클라이언트가 검색·구매하며, 실시간 협업을 돕는 기능을 제공합니다.
IT 직종에 특화된 클라이언트–프리랜서 매칭·협업 플랫폼입니다. IT 키워드 중심의 카테고리/태그로 검색 정확도를 높이고, **모의 결제(샌드박스)**를 포함한 end-to-end 협업 흐름을 한 화면에서 이해하고 실행할 수 있도록 설계했습니다.
- 사용자는 자신의 스택/도메인에 맞춘 결과만 빠르게 탐색하고, 프리랜서는 전문성을 명확히 노출할 수 있습니다.
컨택 → 채팅방 생성 → 실시간 협의 → 서비스 결제(모의 결제 지원) → 작업 진행 → 작업 완료
- 모의 결제(샌드박스): 실제 결제 이전에 흐름을 체험하며, 결제/주문/승인 단계를 모두 시뮬레이션합니다.
- 실시간 협의: STOMP/WebSocket 기반 채팅으로 요구사항을 조율하고, 필요시 파일/링크를 공유합니다.
- 가시성: 각 단계가 타임라인으로 기록되어, 신규 사용자도 전체 프로세스를 쉽게 이해할 수 있습니다.
- 서비스에 등록된 기본 가격과 별개로, **클라이언트–프리랜서가 합의한 금액(협의가)**으로 결제할 수 있습니다.
- 협의가 제안 → 상호 승인 → 결제 단계에서 협의가 고정(Price Lock) → 결제/영수증/이력에 반영.
- 메모란: 일정, 산출물 범위, 변경사항 등 중요 합의 사항을 남길 수 있습니다.
- 사이드 캔버스: 스케치·와이어프레임·코드 스니펫·체크리스트 등 비주얼/텍스트 보조 공간으로 사용합니다.
- 프리랜서 프로필을 세밀하게 작성할 수 있도록 지원해 프리랜서는 스스로를 어필하고, 클라이언트에게는 서비스를 선택할 수 있는 기준을 추가 부여
- 프로필 등록 & 수정 : 프로필 이미지, 경력, 자기 소개, 자격증 목록, 포트폴리오 목록 등록 및 수정 가능
- 프로필 조회 : 비회원에게도 열려있는 프로필 조회 페이지를 통해 프리랜서 및 클라이언트에 대한 정보 사전 인지 가능
- 프리랜서 중 가장 리뷰 평점이 좋은 4명을 선정하여 게시하는 랭킹 페이지 운영
- 카카오 로그인 연동 : Kakao Auth를 연동하여 쉽고 간편한 로그인 지원 → 서비스 접근성 UP
- 이메일 기반 가입&비밀번호 찾기 : 이메일 인증을 사용해 다른 목적의 가입 계정 방지, 이메일 전송을 활용한 비밀번호 재설정 기능
- 회원/인증: JWT(Access/Refresh), OAuth 2.0(카카오), Spring Security
- 프로필 & 파일 업로드: S3 업로드(서버 업로드 / Presigned URL)
- 서비스: 서비스 등록/검색/상세/구매
- 결제: 토스 페이먼츠 연동(승인/실패 처리)
- 실시간 채팅: Spring WebSocket + STOMP, 인증/인가 인터셉터
- 마이페이지: 개인 정보 및 이미지 최적화 조회
- Backend: Java 21, Spring Boot, Spring Validation, Spring Security, Spring WebSocket, Spring Boot Mail
- Data: JPA, MySQL, H2, Redis
- Auth: JWT, OAuth 2.0(Kakao)
- Infra: AWS S3
- Payment: 토스 페이먼츠 API
- Frontend: TypeScript, Tailwind CSS
- Docs: Swagger(OpenAPI)
forward.javaqna
├─ JavaQnaApplication
├─ AppConfig
├─ global
│ ├─ init/ # ApplicationRunner 등 초기화
│ ├─ app/
│ ├─ security/
│ ├─ springdoc/
│ ├─ exception/
│ └─ jpa/
│ └─ entity/
│ └─ BaseEntity
├─ Standard
│ └─ util/
└─ domain
└─ question
├─ controller
├─ service
├─ repository
├─ entity
├─ dto
└─ exception
- 브랜치:
main(배포),feat/*,hotfix/*
| 이름 | 담당 |
|---|---|
| 정다솔 | FE, 마이페이지 |
| 홍석환 | 서비스 |
| 장근영 | 결제, GET 위주 API |
| 김도하 | 회원 |
| 이승원 | 프로필, 프리랜서, S3 |
| 김찬종 | 채팅 |
- 연관관계/조회: 비연관 엔티티 속성 조회 방법 선택의 난점(정다솔), 복잡한 연관관계 모델링(홍석환)
- JPA 상속 전략 선택:
SINGLE_TABLE/JOINED/TABLE_PER_CLASS트레이드오프(이승원) - 보안/실시간: WebSocket 인증/인가, STOMP 흐름, Principal 처리(김찬종)
- 리뷰/협업: 미숙한 상태에서의 PR 리뷰 난이도(이승원, 김도하, 홍석환)
- 우선순위/시간관리: 트러블슈팅·기술 로그 병행의 일정 관리(장근영)
- Security/JWT 플로우 심화 및 오류/상태코드 관리(정다솔, 김도하)
- JPA 매핑 확장:
@ElementCollection,@Embedded활용(이승원) - 파일 업로드 패턴: 서버 업로드 vs Presigned URL(이승원)
- WebSocket/STOMP: 핸들러/인터셉터, Principal 접근 방식(김찬종)
- 운영 관점: Refresh 쿠키 Path 최소화, Hikari autoCommit, 로깅 클래스, AuthenticationManager 주입(장근영)
- JPA 쿼리 이해: Pageable DB 페이징,
@Query옵션(nativeQuery 등)(홍석환)
- 일정 관리: 기능 명세 단위 관리로 협업 효율화(정다솔)
- 코드 품질: S3 디렉토리 분류 로직 enum 리팩토링(이승원), 정규화/도메인 연동(채팅/버튼)(김찬종)
- 운영 안정성: 외부 API 타임아웃 설정, 시큐리티 엔드포인트 최적화, 테스트 코드 보강(장근영)
- 리소스 보호: 메일 전송 제한 등 Rate Limiting(김도하)
- 성능: 레포지토리 과다 호출 감소(홍석환)
- CI/CD 파이프라인 구축, N+1 개선(정다솔)
- 캔버스 실시간 DB 연동으로 영속성 강화(김찬종)
- 코드 컨벤션 통일: DTO 표기, 트랜잭션 시작 계층,
ResponseEntity사용 기준(장근영) - JPA 연관/조회 최적화로 쿼리 성능 개선(김도하)
- Git 전략: PR 대상 브랜치를 develop로 일원화, main은 배포용(홍석환)