가까운 이웃과 함께하는 지역 커뮤니티
Translation pending
CommerceJava · JavaScriptGitHub @likelion-backend-24thOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
팀 모코코 프로젝트입니다. - 동네수리
Translation pending
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
지역 기반으로 수리 요청자와 수리자를 연결하고, 제안 → 채택 → 채팅 → 거래 → 결제 → 후기까지 하나의 흐름으로 제공하는 P2P 수리 매칭 플랫폼 사용자는 자신의 활동 지역을 기반으로 수리 요청을 등록하거나 주변의 수리 요청을 확인할 수 있다. 수리자는 예상 가격과 작업 내용을 제안하고, 의뢰자가 제안을 채택하면 전용 채팅과 거래 절차가 시작된다. • 사용자의 활동 지역 설정 • 지역 코드 기반 수리 요청 조회 • 수리 요청 등록, 수정, 삭제 • 카테고리별 수리 요청 조회 • 게시글 이미지 첨부 • 수리자가 수리 요청에 예상 가격과 작업 내용을 제안 • 의뢰자가 원하는 제안을 채택 • 동일 수리 요청에서 하나의 제안만 최종 채택 • 채택 취소 및 재채택 지원 • 채택 결과에 따라 거래 상태 자동 변경 • 제안 채택 시 수리 거래 생성 • 상품 전달, 수리 진행, 수리 완료 요청 등 거래 단계 관리 • 거래 상태에 따른 허용 작업 제한 • 거래 완료 이후 잘못된 재진행 방지 • 중복 요청에도 동일한 거래 상태를 유지하도록 멱등성 처리Read the full README ↗
지역 기반으로 수리 요청자와 수리자를 연결하고, 제안 → 채택 → 채팅 → 거래 → 결제 → 후기까지 하나의 흐름으로 제공하는 P2P 수리 매칭 플랫폼
사용자는 자신의 활동 지역을 기반으로 수리 요청을 등록하거나 주변의 수리 요청을 확인할 수 있다. 수리자는 예상 가격과 작업 내용을 제안하고, 의뢰자가 제안을 채택하면 전용 채팅과 거래 절차가 시작된다.
초기에는 이메일을 JWT의 사용자 식별값으로 사용했지만, 이메일은 변경 가능한 정보이기 때문에 서비스 간 식별자로 적합하지 않다고 판단.
JWT Subject와 인증 계층의 사용자 식별 기준을 userId로 변경하고 공통 인증 객체인 LoginUser(userId, email)를 사용하도록 개선. 인증은 전 서비스가 Authorization: Bearer 하나로 통일됨(레거시 X-User-Email 헤더는 더 이상 신뢰하지 않음).
다만 도메인 데이터의 소유권 판별 기준은 서비스마다 다름 — 채팅방/계약은 userId(Long)를 쓰지만, 게시글·제안·후기·이력서·결제·알림은 여전히 이메일을 기준으로 함(전환 작업이 일부만 완료된 상태).
하나의 수리 요청에 여러 제안이 동시에 채택될 경우 거래가 중복 생성될 수 있는 문제를 고려.
게시글 조회 시 비관적 락(PostRepository.lockById)을 적용하고, fix_deals/proposals에 활성 행만 유일하게 만드는 generated column 기반 UNIQUE 제약을 함께 사용하여 애플리케이션과 데이터베이스 양쪽에서 중복 거래 생성을 방지.
다중 스레드로 동시 채택 요청을 발생시키는 별도의 동시성 테스트는 아직 없음 — 현재는 락·제약 자체의 존재로만 방지하고 있어 추가 검증이 필요한 부분.
네트워크 지연이나 사용자의 중복 클릭으로 동일 API가 여러 번 호출될 수 있는 상황을 고려.
등의 방식으로 주요 거래 API가 중복 요청에도 안정적으로 동작하도록 구현.
개발 환경과 테스트 환경의 DB 차이로 인해 발생할 수 있는 문제를 줄이기 위해 주요 서비스의 통합 테스트에 Testcontainers를 적용.
테스트 실행 시 실제 MySQL 컨테이너를 생성하고 Flyway Migration을 실행한 뒤 JPA Entity와 DB Schema가 일치하는지 검증.
이를 통해 단순 H2 테스트가 아닌 실제 운영 DB 환경과 가까운 조건에서 다음 항목을 검증.
FlywaySchemaTest)FixDealRepositoryTest)AiPostDraftRepositoryTest)결제 검증(
PaymentVerificationTest)이나 동시 요청 관련 테스트(제안 채택 동시성, 회원가입 중복, 채팅방 중복 생성)는 현재 코드베이스에 아직 없음 — 해당 로직 자체(PortOne 재조회, DB 제약)는 존재하지만 전용 테스트로 검증되지는 않은 상태.
각 서비스는 자신의 데이터베이스에 속한 Entity만 직접 관리하고, 다른 서비스의 데이터는 ID를 통해 참조하도록 구성.
현재는 데이터 보존을 위해 물리 DB를 공유하는 transitional architecture이며, 논리적 소유권 분리.
ex) 채팅 서비스는 Post, Proposal, FixDeal, User Entity를 직접 참조하지 않고 다음 식별값만 저장.
postIdproposalIdfixDealIdrequesterIdrepairerId| 서비스 | 주요 역할 |
|---|---|
api-gateway | API 요청 라우팅 및 외부 요청 진입점 |
user-service | 회원가입, 로그인, JWT, 사용자 정보, 지역 관리 |
post-service | 수리 요청, 제안, 거래, 후기, 알림, 계약 관리 |
chat-service | 채팅방, 실시간 메시지, 첨부파일 관리 |
payment-service | 결제 주문, 결제 검증, Webhook 처리 |
common | 공통 인증 객체 및 서비스 간 공유 계약 |
FixDealRepositoryTest)제안 채택/채팅방 생성/회원가입에 대한 동시 요청(다중 스레드) 테스트와 결제 검증 테스트는 아직 없음 — 위 목록은 실제 존재하는 테스트 기준으로 정리한 것.
멋쟁이사자처럼 백엔드 24기 — 5팀 (FindAnswer)
| 이름 | 역할 | 담당 도메인 |
|---|---|---|
| 곽승욱 | 팀장 | 로그인(JWT·OAuth), 게시글 CRUD, CI/CD 배포(EC2·GitHub Actions) |
| 변재웅 | 부팀장 | 후기 시스템, 프로필 및 거래 내역, 수리자 이력서, 결제 및 수수료 정산 |
| 박준성 | 팀원 | 1:1 실시간 채팅, 지역 정보 연동 조회, AI 전자계약서 및 게시글 초안 보조 |
| 정선우 | 팀원 | 실시간 알림 파이프라인, 카테고리/필터 검색 엔진, 서비스 정책 및 약관 페이지 |