Fullstack 110

heo4·2026년 9월 21일

Fullstack

목록 보기
65/71

풀스택

능력 단위 평가

  1. 프로젝트 소개

CareMatch는 요양보호사·간병인·가사도우미와 요양시설을 연결하는 구인구직
매칭 웹 서비스다. 프론트엔드는 React(Vite) + TypeScript, 백엔드는 Spring
Boot 3 기반 REST API로 구성된 모노레포 프로젝트이며, DB는 PostgreSQL
(Neon), 파일 스토리지는 Cloudflare R2, 결제는 포트원(PortOne) V2, 배포는
백엔드 Render / 프론트엔드 Vercel을 사용한다. 주요 기능은 구인공고 등록·
검색·매칭점수 정렬, 온라인 지원, 인재/시설 프로필 관리, 알림, 포인트
결제, 카카오 소셜 로그인 등이다.

팀은 백엔드 2인(허혁, 경수), 프론트엔드 2인(신영, 동한)으로 구성되었고,
2026-09-07 프로젝트 시작부터 2026-09-18까지 150개 이상의 PR을 병합하며
개발했다.

  1. 본인의 담당 역할

팀장 겸 백엔드 개발자로 참여했다. 백엔드에서는 회원/인증, 알림, 결제/
포인트, 구인공고 정렬 등 서비스 핵심 도메인의 API와 DB 스키마를 설계·
구현했고, 프론트엔드 API 연동을 위한 CORS·에러코드 규격도 함께 맞췄다.

팀장으로서는 기술 구현 외에 프로젝트 초기 협업 규칙(브랜치 전략, 커밋
컨벤션, PR 절차)을 문서(CLAUDE.md)로 수립하고, 저장소를 backend/frontend/
docs 모노레포 구조로 설계했으며, GitHub Actions 기반 CI(빌드 체크,
리뷰어 자동 지정)를 구축했다. 매일 팀원들의 작업 내용을 README에 반영해
프로젝트 전체 진행 상황을 관리하는 역할도 겸했다.

  1. 본인이 직접 구현한 기능과 구현 방식

  • 회원가입·로그인 및 아이디/비밀번호 기반 JWT 인증 구현
    : Spring Security + JWT로 인증 필터를 구성하고, MemberService/
    AuthController에서 가입·로그인 로직과 토큰 발급을 처리했다.

  • 카카오 소셜 로그인 연동
    : Spring Security OAuth2 클라이언트로 카카오·네이버·구글 3사를 공용
    지원하는 구조(CustomOAuth2UserService, OAuth2SuccessHandler 등)로
    설계하되, 프론트에는 카카오만 노출하도록 단일화했고, 동의항목에서
    account_email을 제외해 별도 심사 없이 바로 적용되게 처리했다.

  • 비밀번호 찾기(재설정) 및 회원 탈퇴 기능 구현
    : 이메일/휴대폰 인증코드 기반 검증 로직(VerificationService)을 API와
    화면 양쪽에 구현하고, 탈퇴 API와 마이페이지 탈퇴 버튼을 추가했다.

  • 알림 도메인 신규 설계 및 구현
    : 지원 결과(합격/반려), 시설 승인/반려, 문의 답변 시점에 서버가 알림을
    생성하도록 Notification 엔티티/서비스/API를 새로 만들고, 프론트
    헤더 배지 폴링(30초 주기)과 연동했다.

  • 구인공고 매칭점수순(MATCH_SCORE) 정렬 기능 추가
    : JobPostingService의 정렬 옵션에 노출등급 우선 정렬과 별도로 순수
    매칭 점수 기준 정렬을 신설했다.

  • 포인트/결제(PortOne V2) 서버 검증 로직 구현
    : 클라이언트가 보낸 결제 금액·상태를 그대로 신뢰하지 않고 서버가
    포트원 서버 API로 재조회해 검증하도록 PointChargeService를
    구현해 위변조를 방지했고, 동시요청으로 인한 포인트 이중 차감/이중
    지급 레이스 컨디션 버그를 찾아 수정했다.

  • 데이터베이스 마이그레이션 체계 구축
    : Flyway를 도입해 운영 DB(PostgreSQL/Neon) 스키마 변경을 V1~V12
    마이그레이션 파일로 관리하도록 구성했고, @Lob String 필드를
    @Column(TEXT)로 교체해 대용량 텍스트가 OID로 저장되던 문제를
    해결했다.

  • 배포 환경 구성 및 트러블슈팅
    : Render 배포 시 server.port가 PORT 환경변수를 참조하도록 수정해
    포트 바인딩 문제를 해결했고, Cloudflare R2(S3 호환) 기반 파일
    스토리지(자격증·사업자등록증·프로필사진·공고이미지)를 presigned
    URL 방식으로 구현했으며, 로컬↔Render 간 CORS 403 이슈를 해결했다.

  • 관리자 운영 기능 구현
    : 관리자 회원관리 화면에서 인증구직자 마크를 수동 부여/해제하는
    기능과, 인재 연락처 마스킹이 관리자 계정에서 해제되지 않던 버그를
    수정했다.

  1. 팀원과의 협업 내용

GitHub Flow(main + feature/)를 기반으로 팀원과 소스 코드를 공유·관리
했다. 프론트(신영, 동한)와 백엔드(경수) 담당자별로 브랜치 접두사(fe-
/
be-*)를 나누고, 기능 단위로 브랜치를 생성해 작업한 뒤 PR을 통해서만
main에 병합하도록 규칙을 세웠다. CODEOWNERS와 GitHub Actions로 PR 생성
시 담당 파트 팀원이 자동으로 리뷰어로 지정되도록 구성해 리뷰가 누락되지
않게 했다.

프론트엔드·백엔드 담당자 간에는 API 주소, 요청/응답 데이터 형식(DTO),
에러코드를 사전에 협의해 연동했고, API 변경 시점마다
FRONTEND_INTEGRATION_TODO.md 문서를 갱신해 프론트 담당자가 변경 사항을
바로 확인할 수 있도록 했다. 다른 팀원 브랜치의 병합 충돌 잔여물로 main
빌드가 깨졌던 상황(JobApply 페이지, labels.ts)을 발견해 직접 수정하고
원인을 문서로 남겼으며, 매일 팀원 작업 내역을 README에 반영해 팀 전체
진행 상황을 공유했다.

  1. 본인이 담당한 파일

[백엔드 - 회원/인증]

  • backend/src/main/java/com/carematch/member/service/MemberService.java
    • 회원가입, 회원정보 조회/수정, 탈퇴 처리
  • backend/src/main/java/com/carematch/member/controller/MemberController.java
    • 회원 관련 API 엔드포인트
  • backend/src/main/java/com/carematch/member/domain/Member.java
    • 회원 엔티티
  • backend/src/main/java/com/carematch/auth/controller/AuthController.java
    • 로그인/토큰 발급 API
  • backend/src/main/java/com/carematch/auth/dto/AuthDtos.java
    • 인증 요청/응답 DTO
  • backend/src/main/java/com/carematch/security/oauth2/CustomOAuth2UserService.java
    • 카카오/네이버/구글 OAuth2 사용자 정보 처리
  • backend/src/main/java/com/carematch/security/oauth2/OAuth2SuccessHandler.java
    • 소셜 로그인 성공 후 JWT 발급 처리
  • backend/src/main/java/com/carematch/security/CustomUserDetails.java
    • Spring Security 인증 주체 구현

[백엔드 - 알림]

  • backend/src/main/java/com/carematch/notification/service/NotificationService.java
    • 지원결과/승인/문의답변 알림 생성 로직
  • backend/src/main/java/com/carematch/notification/controller/NotificationController.java
    • 알림 조회/읽음처리 API
  • backend/src/main/java/com/carematch/notification/domain/Notification.java
    • 알림 엔티티

[백엔드 - 포인트/결제]

  • backend/src/main/java/com/carematch/point/PointChargeService.java
    • 포트원 결제 서버 검증, 포인트 충전 처리
  • backend/src/main/java/com/carematch/point/PointService.java
    • 포인트 차감/지급, 동시성 처리

[백엔드 - 구인공고]

  • backend/src/main/java/com/carematch/jobposting/service/JobPostingService.java
    • 구인공고 조회/검색/정렬(매칭점수순 포함)
  • backend/src/main/java/com/carematch/jobposting/controller/JobPostingController.java
    • 구인공고 API 엔드포인트

[백엔드 - 공통/설정]

  • backend/src/main/java/com/carematch/common/exception/ErrorCode.java
    • 공통 에러코드 정의
  • backend/src/main/resources/application.yml / application-prod.yml
    • 서버 포트, DB, CORS 등 환경 설정
  • backend/src/main/resources/db/migration/V11notification.sql,
    V12
    point_charge.sql
    • Flyway 마이그레이션 스크립트

[프론트엔드 연동]

  • frontend/src/api/notifications.ts, frontend/src/api/auth.ts
    • 알림/인증 API 요청 처리
  • frontend/src/pages/OAuthCallback/index.tsx
    • 소셜 로그인 콜백 처리 화면
  • frontend/src/pages/Notifications/index.tsx
    • 알림 목록 화면

[문서/협업]

  • CLAUDE.md - 팀 협업 규칙(브랜치 전략, 커밋 컨벤션, PR 절차) 문서화
  • README.md - 팀원별 작업 내역 및 프로젝트 진행 상황 문서화
  • docs/FRONTEND_INTEGRATION_TODO.md - 프론트-백엔드 연동 체크리스트
  • docs/RENDER_ACCESS_RECOVERY.md - 배포 장애 트러블슈팅 문서

0개의 댓글