
서울시의 다양한 먹거리와 놀거리 조합을 추천해 주는 서비스입니다.
식당, 카페, 노래방, 당구장, PC방 업종을 검색할 수 있으며 평점과 거리 기반으로 적절한 가게 조합을 추천받을 수 있습니다.
또한 사용자가 직접 파티를 생성하고 다른 사용자들이 해당 파티에 참여하여 오프라인 모임을 가질 수 있는 기능도 제공합니다.
로그인 | 메인 | 가게 검색 |
---|---|---|
![]() |
![]() |
![]() |
가게 조합 검색 | 파티 메인 | 파티 생성 |
![]() |
![]() |
![]() |
파티 상세 | 즐겨찾기 한 가게 | 내가 쓴 리뷰 |
![]() |
![]() |
![]() |
회원탈퇴 | ||
![]() |
src/
├── main/
│ ├── java/wad/seoul_nolgoat/
│ │ ├── auth/ # 인증 관련 (Security, JWT, OAuth2)
│ │ ├── config/ # 설정 파일 (Security, Redis, Swagger 등)
│ │ ├── domain/ # 엔티티 및 리포지토리
│ │ ├── exception/ # 예외 관련 (커스텀 예외, 에러 코드, 전역 예외 처리 등)
│ │ ├── filter/ # 로깅 커스텀 필터
│ │ ├── service/ # 비즈니스 로직
│ │ ├── util/mapper/ # Entity <-> DTO 매핑
│ │ ├── web/ # 컨트롤러 계층 (API)
│ │ └── SeoulNolgoatApplication.java # 메인 클래스
│
├── resources/
│ ├── static/images/ # 이메일용 로고 이미지
│ ├── templates/ # 이메일 템플릿 파일
│ ├── application.yml # 메인 설정 파일 (다른 설정 파일들을 import)
│ ├── logback-dev.xml # 개발용 로그 설정
│ └── logback-prod.xml # 운영용 로그 설정

Java 17
과Spring Boot 3.x
로 백엔드 애플리케이션을 개발하고 REST API 서버를 구축했습니다.Java 17
은 텍스트 블록, record 클래스 등 새로운 기능들을 적극 활용해 코드 가독성을 높여보고자 선택했습니다.Spring Boot 3.x
는 Java EE 대신 Jakarta EE 기반으로 전환되었는데 Jakarta EE는 지속적으로 업그레이드되어 최신 기술을 반영할 수 있다는 이점이 있어 선택했습니다.
- 운영 및 개발 환경에서는
MySQL
을, 테스트 환경에서는H2
를 사용했습니다. Redis
를 활용해 Refresh 토큰을 관리했습니다.Spring Data JPA(Hibernate)
로 ORM 기반 데이터 접근을 구현했고QueryDSL
로 동적 쿼리를 타입 안정성 있게 작성했습니다.Spring Security
와JWT
를 활용해 인증 및 인가 기능을 구현했습니다.Postman
으로 API 테스트를 진행했습니다.Swagger
로 API 명세를 자동화하고 문서화했습니다.
AWS EC2
인스턴스(Ubuntu)에 백엔드 서버를 배포했습니다.AWS S3
로 정적 리소스(사용자 프로필 이미지 및 리뷰 이미지)를 관리했습니다.AWS Route 53
으로 도메인을 설정하고 연결했습니다.Nginx
로 리버스 프록시를 구성하고 HTTPS를 적용했습니다.GitHub Actions
를 활용해 작업 브랜치(dev)에 머지 시에는 컴파일 에러를 검증하고 배포 브랜치(main)에 머지 시에는 자동으로 배포되는 CI/CD 파이프라인을 구축했습니다.Logstash
,Elasticsearch
,Kibana
를 활용해 서버 로그를 수집, 저장 및 시각화했습니다.
Git Branch Strategy
main
- 배포 브랜치
- 직접 커밋 금지
- dev 브랜치에서의 머지만 허용 (Create a merge commit)
dev
- 메인 개발 브랜치
- 직접 커밋 금지
- 하위 브랜치에서의 머지만 허용 (Rebase & merge)
- 모든 개발 작업은 dev 브랜치를 기준으로 개별 브랜치를 생성하여 진행했습니다.