Skip to content

내 취향에 딱 맞는 아메리카노 카페 찾기 서비스

Notifications You must be signed in to change notification settings

dajeongdev/Americanote

Repository files navigation

☕️ Americanote ☕️    GitHub Actions Workflow Status

중간산출물_Americanote

(➕ 비사이드 온라인 해커톤 포텐데이 403에 참가하여 19팀 중 무려 2등🥈을 달성했습니다! 팀원분들께 정말 감사합니다!)

📃 서비스 소개 📃

"카페 리뷰는 많은데 정작 커피 맛은 어떤지 모르겠어💦"
"꼭 방문해서 먹어보고 커피 맛을 알아야 할까?"
"내 취향에 딱 맞는 아메리카노를 먹고싶어!"
그래서 만들었습니다! Americanote는 카페를 방문하지 않고도 커피의 향, 강도, 산미를 알 수 있어요!

   노션 구경하러 가기


😽 핵심 기능 😽

  • 나의 커피 취향을 저장할 수 있어요.
  • 카페를 가기 전, 커피의 맛을 확인할 수 있어요.
  • 지도에서 원하는 가격, 향, 강도, 산미 등을 필터링하여 볼 수 있어요.
  • 나의 커피 취향에 맞는 카페들을 추천받을 수 있어요.


🛠 Tech Stack 🛠

Role
Backend _icon  Java
_icon  Spring Boot
_icon  Spring Security
_icon  MySQL
_icon  JPA/Data JPA
_icon  QueryDSL
Infra _icon  Naver Cloud Server
_icon  Naver Cloud MySQL
_icon  Naver Cloud Global Domain


🌲 서비스 아키텍처 🌲

service-architecture


🌱 ERD 🌱

스크린샷 2024-04-02 22 51 19


📙 API Docs 📙

Swagger 문서 확인하러 가기


❗️ 리팩토링

  • 리팩토링 항목 정리 (0401)
  • 서버 구성 정리
  • validation & error 처리 -> 파트 나눠서 해보고 코드 리뷰 완료
  • CI/CD
    • Github Actions self-hosted runner를 사용한 배포 자동화 (0406, 0422)
  • 토큰 서비스 개선 @박다정 (0410)
  • 쿼리 최적화 -> N+1 문제 해결 (0403)
  • 크롤링 코드 개선 @최다빈
  • accessToken -> userId 컴포넌트화 @박다정
  • 클래스 접근제어자 수정 @박다정
  • readme 추가 (0402)


폴더 구조

├── AmericanoApplication.java
├── cafe
│   ├── config
│   │   └── CafeSwaggerConfig.java
│   ├── controller
│   │   └── CafeController.java
│   ├── domain
│   │   ├── CafeWithHasLike.java
│   │   ├── entity
│   │   │   ├── Cafe.java
│   │   │   └── RecentSearch.java
│   │   ├── request
│   │   │   └── SearchCafeRequest.java
│   │   └── response
│   │       ├── CafeDetailResponse.java
│   │       ├── CafePreviewResponse.java
│   │       ├── CafeResponse.java
│   │       └── CafeSearchResponse.java
│   ├── repository
│   │   ├── CafeRepository.java
│   │   ├── RecentSearchRepository.java
│   │   └── querydsl
│   │       ├── CafeQueryRepository.java
│   │       └── CafeQueryRepositoryImpl.java
│   └── service
│       ├── AddressToCoordinate.java
│       ├── CafeService.java
│       └── CrawlingCafe.java
├── coffee
│   ├── controller
│   │   └── CoffeeController.java
│   ├── domain
│   │   ├── entity
│   │   │   ├── Coffee.java
│   │   │   └── CoffeeFlavour.java
│   │   └── response
│   │       ├── CoffeeFlavourDegreeResponse.java
│   │       └── CoffeeResponse.java
│   ├── repository
│   │   ├── CoffeeFlavourRepository.java
│   │   ├── CoffeeRepository.java
│   │   └── querydsl
│   └── service
│       └── CoffeeService.java
├── common
│   ├── contributor
│   │   └── CustomFunctionContributor.java
│   ├── entity
│   │   ├── BaseEntity.java
│   │   ├── Degree.java
│   │   ├── ErrorCode.java
│   │   ├── Flavour.java
│   │   └── UserRole.java
│   ├── exception
│   │   ├── CommonException.java
│   │   ├── CommonExceptionHandler.java
│   │   ├── CommonValidationException.java
│   │   ├── CustomException.java
│   │   ├── TokenException.java
│   │   └── UserException.java
│   ├── response
│   │   ├── BasicApiSwaggerResponse.java
│   │   ├── CommonResponse.java
│   │   └── ErrorResponse.java
│   └── validator
│       └── CommonValidator.java
├── config
│   ├── QueryDslConfig.java
│   ├── SecurityConfig.java
│   └── SwaggerConfig.java
├── folder.txt
├── like
│   ├── config
│   │   └── LikeSwaggerConfig.java
│   ├── controller
│   │   └── LikeController.java
│   ├── domain
│   │   ├── Like.java
│   │   └── UserCafePK.java
│   ├── repository
│   │   └── LikeRepository.java
│   └── service
│       └── LikeService.java
├── mypage
│   ├── config
│   │   └── MypageSwaggerConfig.java
│   ├── controller
│   │   └── MypageController.java
│   └── service
│       └── MyPageService.java
├── review
│   ├── controller
│   │   └── ReviewController.java
│   ├── domain
│   │   ├── ReviewRequest.java
│   │   ├── entity
│   │   │   └── Review.java
│   │   └── response
│   │       └── ReviewResponse.java
│   ├── repository
│   │   └── ReviewRepository.java
│   └── service
│       └── ReviewService.java
├── security
│   ├── handler
│   │   ├── CustomAccessDeniedHandler.java
│   │   └── CustomAuthenticationEntryPoint.java
│   ├── jwt
│   │   ├── filter
│   │   │   ├── JwtAuthenticationFilter.java
│   │   │   └── JwtFailureFilter.java
│   │   └── util
│   │       └── JwtTokenProvider.java
│   └── service
│       └── CustomUserDetailService.java
└── user
    ├── config
    │   └── UserSwaggerConfig.java
    ├── controller
    │   └── UserController.java
    ├── domain
    │   ├── entity
    │   │   ├── User.java
    │   │   ├── UserFlavour.java
    │   │   └── UserToken.java
    │   ├── request
    │   │   ├── KakaoLoginRequest.java
    │   │   ├── UserPreferRequest.java
    │   │   └── UserRequest.java
    │   └── response
    │       └── UserResponse.java
    ├── repository
    │   ├── UserFlavourRepository.java
    │   ├── UserRepository.java
    │   └── UserTokenRepository.java
    └── service
        ├── KakaoLoginService.java
        ├── UserService.java
        └── UserTokenService.java