-
Notifications
You must be signed in to change notification settings - Fork 3
Home
Minkyoung Shin edited this page Feb 25, 2026
·
28 revisions
"복잡한 비자 신청의 모든 과정을 스마트하게" 외국인과 전문 행정사를 잇는 신뢰 기반의 맞춤형 매칭 플랫폼
🌐 Navisa 공식 사이트 • 🖥️ FE/BE Repository • 🗃️ 개발 산출물 아카이빙
| 기능 | 설명 |
|---|---|
| 지능형 맞춤 추천 | LLM 임베딩 기반 직무 유사도 + 활동성/평점을 종합한 매칭 엔진 |
| 필터 기반 탐색 | 직군, 지역, 국적, 언어 등 다양한 조건으로 행정사 및 외국인 탐색 |
| 실시간 1:1 채팅 | 웹소켓 기반 메시징 및 수임 제안/수락 상태 워크플로우 관리 |
| 비자 신청서 엔진 | 자동 저장, PDF 양식 매핑, 권한별 편집 기능을 갖춘 전용 폼 엔진 |
| 다국어 지원 | 한국어, 영어, 중국어, 일본어 대응 (i18next 기반) |
-
Core:
-
Library:
TanStack Query(서버 상태),Tailwind CSS(스타일링),React Hook Form(폼 관리),pdf-lib(PDF 엔진),StompJS(실시간 통신)
-
Core:
-
Data:
-
DevOps:
- [연결 안정성] 효율적인 채팅 구현을 위한 웹소켓 Redis 연결 유지 구현 과정 기록
- [웹소켓 성능 검증] 채팅 부하테스트와 WebSocket 연결에서의 병목 현상 해결 기록
- [분산 환경] ShedLock을 사용한 스케줄러 중복 실행 문제 해결
- [장애 대응] 외부 의존성(Gemini API) 장애 상황 대응 전략
- [테스트 최적화] 통합 테스트 구조 개선: 컨테이너 재사용을 통한 최적화
- [데이터 정합성] 매칭 엔진 데이터 정합성 결함 해결 및 저장소 격리 전략
- [성능 최적화] Hibernate IN 절 병목 및 Redis KEYS 차단 현상 분석과 성능 개선
- [폼 엔진] 대규모 Form 엔진 개발: JSON UI → 상태관리(RHF) → UX → PDF 자동화
- [표준화] FE API 표준화: useApiClient, TanStack Query 도입기
- [실시간] WebSocket & STOMP 실시간 통신 모듈 및 상태 관리 설계
- [UI 패턴] Scroll-driven UI 패턴 정리
-
보안 전송 최적화:
CloudFront+S3+Presigned URL을 통한 파일 접근 보안 강화 -
실시간 통신 구조:
Redis Pub/Sub을 활용한 수평 확장 가능한 채팅 시스템 -
서버리스 이미지 처리:
AWS Lambda트리거를 통한 독립적 리사이징 수행 -
격리된 네트워크 환경:
Private Subnet및NAT Gateway구성을 통한 보안 환경 구축
-
main: 최종 배포 브랜치 -
develop: 개발 통합 브랜치 -
태그/#이슈번호-기능명: 개별 기능 개발 (ex.feat/#1-kakao-oauth)
태그(변경대상) : 메시지 (예: feat(BE) : 매칭 결과 API 추가)
-
feat,refactor,fix,docs,style,test,chore등 사용
| 🏗️ 시스템 설계 | 📝 명세서 및 가이드 | 🤩 개발 컨벤션 | 📅 기록 및 관리 |
|---|---|---|---|
| 시스템 아키텍처 | API 명세서 | 전체 코드 컨벤션 | 일별노트 |
| ERD 및 스키마 | 에러 코드 정의 | BE 기술 표준 및 개발 가이드라인 | 회고 (KPT) |
| 📐 기획 (Figma) | ✨ 디자인 (Figma) | 📊 ERD Cloud | 📋 Notion 백로그 |
| 정인호 | 연승환 | 박인성 | 신민경 | 장익환 |
|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
|
| FE (Lead) | FE | BE | BE | BE |
- 🍱 미식 당번제: 요일별 당번이 메뉴 결정 (시간 효율 및 메뉴 고민 타파)
- 🤸 식후 하체 챌린지: 합동 스쿼트로 건강한 개발 수명 연장
- 🍰 달콤한 평화 협정: 언성이 높아지면 즉시 당 충전으로 평화 유지
- 🏁 ALL-IN: 모든 기능을 스마트하게 마침표 찍기
- 📈 GROW-UP: "성장은 기록으로부터", 기술 포스팅 생활화
- 🤿 DEEP-DIVE: 코드와 기술의 본질 파헤치기
- 🤝 NO-LEAVE: 뒤처지는 사람 없이 지식 상향 평준화
최종 업데이트: 2026-02-23 | 협업 프로세스 상세
- 🤩 Convention
- 통합 테스트 구조 개선: 컨테이너 재사용을 통한 테스트 최적화
- 커스텀 JWT 인증 시스템 및 OAuth 2.0 연동
- 행정사 통계 관리 테이블 분리 및 성능 최적화 과정
- 데이터 기반 행정사 추천 로직 정리
- 연산 로직을 애플리케이션 계층에 집약시킨 이유
- 행정사 추천 로직 통합 설계 구현 과정 (Step 2 & Step 4)
- 비자 발급 사후 관리 및 프로세스 자동화 시스템 구현 과정
- 테스트 인프라: Redis Alpine 이미지 채택 이유
- 비자 신청서 데이터의 JSON 포맷 채택 이유
- 매칭 엔진 데이터 정합성 결함 해결 및 저장소 격리 전략
- 매칭 연산 데이터 신뢰성 확보 및 정합성 결함 추적
- Hibernate IN 절 병목 및 Redis KEYS 차단 현상 분석과 성능 개선
- DB로 PostgreSQL를 선택한 이유
- 외부 의존성(Gemini API) 장애 및 Quota 초과 대응 전략 수립
- 외부 의존성(Gemini API) 장애 대응 전략 수립
- BE 리팩토링 과정에서 패키지 구조 재정의에 대한 고민
- 직접 마주한 JPA 관련 예외 상황별 해결방안 정리
- 개발 중 에러 대응을 위한 HTTP 요청과 응답 로깅 기능 구현
- 이미지 업로드와 접근을 presigned URL로 선택한 이유
- 통합테스트 격리를 위한 DB 테이블 정리 기능 구현
- 웹서버 선정 과정 (Tomcat vs Netty)
- HTTPS를 Tomcat이 아닌 Nginx로 구현한 이유
- Text Embedding 구현에 있어서 gemini-embedding-001을 선택한 이유
- 무중단 배포 방법인 블루/그린 배포 적용기
- QueryDSL 도입 합의 과정과 최종 적용 범위
- 이미지 파일 전송 최적화: CloudFront + S3 + Lambda 조합
- 개발 DB와 배포 DB 분리 과정에서 flyway 적용 과정 기록
- 효율적인 채팅 구현을 위한 웹소켓/Redis 연결 유지 구현 과정 기록
- 분산 환경의 스케줄러 중복 실행 해결 전략 수립
- ShedLock을 사용한 스케쥴러 중복 실행 문제 해결 과정 기록
- 채팅 부하테스트와 WebSocket 연결에서의 병목 현상 해결 기록
-
Form
-
프론트엔드 아키텍처 & UX 인프라



