Skip to content

Latest commit

 

History

History
145 lines (122 loc) · 9.22 KB

File metadata and controls

145 lines (122 loc) · 9.22 KB

Share Space

version

쉐어스페이스는 좁은 주거 공간, 계절 용품 보관 문제, 취미 장비 관리 등

공간 부족 문제를 해결해 줄 수 있는 이웃 간의 공간 공유 플랫폼입니다.

🔗 API 명세 | 📋 기능 명세 | ☢️ 트러블슈팅 | 🛠️ 기술 문서


👥 팀원

이용학 남윤형 전창민
@Dradradre @yunhyungNAM @thereisname

🛠️ Tech Stacks

🏷️ Category 🚀 Technologies
📚 Frameworks Spring Boot Java
🗄️ Databases MySQL Spring Data JPA Hibernate ORM QueryDSL
🔐 Security Spring Security JWT
☁️ Cloud Services AWS S3
🛠️ Utilities Lombok Spring AOP ANTLR
🧪 Testing JUnit Mockito
🏗️ Build Tools Gradle Dependency Management

🏗️ 서버 아키텍처

아키텍처

ShareSpace 서버 아키텍처


🚀 구현 사항

이용학

🔄 매칭 시스템

  • REQUESTEDPENDINGSTOREDCOMPLETED 상태 흐름 관리
  • 각 상태 변경 시 관련 당사자들에게 실시간 알림 전송
  • 매칭 취소 및 거절 시나리오 처리
  • 완료된 Matching 건에 대한 History 관리

🔐 권한 관리 시스템

  • @CheckPermission 커스텀 어노테이션 구현
  • Spring AOP를 활용하여 메서드 레벨에서 사용자 권한 검증
  • 게스트/호스트 역할별 접근 제어 구현

📨 실시간 알림 시스템

  • SSE(Server-Sent Events) 기반 실시간 알림
  • 서버에서 클라이언트로의 단방향 실시간 통신 구현
  • ConcurrentHashMap을 사용한 사용자별 SseEmitter 관리
  • 알림 스케줄러를 도입하여 매일 자정마다 실행되는 배치 작업 구현

📊 Response 구조 표준화

  • BaseResponse 패턴 구현
  • 일관된 API 응답 구조
  • 성공/실패 여부 표준화
  • HTTP 상태 코드 및 메시지 통합 관리

🏗️ 인프라 개선

  • 서버와 클라이언트 도메인을 동일하게 설정하여 쿠키 전송 문제 해결
  • GitHub Actions를 활용하여 프론트엔드 빌드 및 배포 자동화
  • React 정적 파일을 Nginx를 통해 서빙하여 SPA 환경 최적화
  • 모든 API 요청에 /api 접두사를 추가하여 정적 파일과 구분

남윤형

🔑 회원가입 및 인증

  • JavaMailSender를 활용하여 회원가입 후 이메일 인증 처리
  • @Scheduled를 사용해 자정마다 이메일 미인증 사용자 삭제
  • BCryptPasswordEncoder를 사용한 비밀번호 암호화 및 저장

🔐 로그인 및 인증

  • JWT(JSON Web Token) 기반 인증 시스템 구현
  • 로그인 성공 시 쿠키에 SameSite=Lax, Secure, HttpOnly 설정
  • Custom LoginFilter를 통한 다양한 로그인 실패 조건 처리
  • Refresh Token을 사용한 토큰 재발급 기능 구현
  • Access Token을 블랙리스트(HashSet)로 관리하여 즉시 무효화 처리
  • BlackList 된 Access Token을 스케줄러 작업을 통해 주기적으로 삭제

📩 JavaMailSender

  • 6자리 난수 생성 후 스프링 라이브러리를 활용하여 사용자 이메일로 전송
  • ConcurrentHashMap 활용 Java In-Memory 난수코드 저장 및 검증
  • 전송 실패 시 예외 처리 및 재시도 로직 구현

🗺️ 카카오 API 연동

  • 도로명/지번 주소 기반으로 카카오 지도 API를 활용하여 위경도 데이터 수집
  • 좌표 정보 수집하여 거리 계산 위한 정보 제공

🖥️ 호스트 대쉬보드

  • 매칭 항목 STORED 상태의 expiry_date와 Java LocalDate 비교하여 반납 3일 이하 항목 추출
  • 매칭 항목 REQUESTED PENDING STORED 상태 각 개수를 추출 및 반환

➕기타 등록시스템

  • 관리자에게 전달 가능한 문의하기 기능 구현
  • GUEST 유저와 관계성 있는 product 등록 기능 구현

전창민

🏡 장소 관리 시스템

  • 장소 등록 및 수정 기능 구현 (다중 이미지 처리 및 이미지 URL 데이터베이스 저장 포함)
  • 특정 물품에 적합한 장소 리스트 조회 기능 개발 (매칭 로직 설계 및 거리 계산 알고리즘 구현)
  • 장소 수정 시 이미지 삭제 및 추가 로직 최적화
  • 거리 계산 로직 반올림 처리 및 정수 단위 반환

📬 쪽지 관리 시스템

  • 쪽지 전송 및 수신 로직 개발
  • 읽지 않은 쪽지 개수 실시간 조회 기능 구현
  • PENDING, STORED 상태 사용자에게만 쪽지 전송 가능하도록 권한 로직 설계
  • 발신 및 수신 대상 사용자 리스트 동적 조회
  • N+1 문제 해결을 위한 JPQL 최적화 및 효율적 데이터 조회 구현

📷 이미지 처리

  • AWS S3를 활용한 이미지 등록, 수정, 삭제 로직 개발
  • 다중 파일 업로드 및 삭제 최적화
  • 장소 수정 시 기존 이미지 유지 및 신규 이미지 추가 처리 로직 구현
  • 이미지 확장자 제한 (JPEG, PNG)
  • 비용 효율성을 고려한 다중 파일 삭제 로직 설계
  • 장소 수정 시 변경된 이미지만 S3에 반영하는 로직 구현

🏗️ 인프라 구축

  • 수동배포를 통한 배포환경 구성 테스트 진행
  • GitHub Actions를 사용한 CI/CD 자동 배포 파이프라인 구축
  • Docker Compose 기반 컨테이너 배포 환경 설계
  • AWS VPC, EC2, RDS를 활용한 배포 환경 구축
  • Public/Private Subnet을 통한 네트워크 분리 및 보안 그룹 설정 최적화
  • Docker Hub와 연동해 자동화된 이미지 빌드 및 푸시 프로세스 구현
  • EC2 상에서 Docker Compose를 활용한 컨테이너 실행 및 관리
  • Nginx를 설정하여 리버스 프록시 구성
  • HTTPS 설정으로 보안 강화