"WeMo, ‘우리(We)’가 모여 더 즐거운 모임을 만들어가는 곳!" WeMo는 바쁜 일상 속에서도 쉽고 즐겁게 모임을 탐색하고 참여할 수 있는 서비스입니다. 유저는 다양한 테마의 모임을 개설하거나 참여할 수 있으며, 일정 후기를 공유하며 더 나은 경험을 만들어갈 수 있습니다.
- 모임 및 일정 목록 조회:
다양한 모임을 카테고리별로 탐색할 수 있습니다. 모임 유형에 따라 정렬하거나 필터링 기능을 사용해 관심 있는 모임을 쉽게 찾을 수 있습니다. - 중심 위치 기준 요청 반경 km 이내:
사용자 중심의 위치 기반 검색으로, 요청하는 반경 이내의 모임을 조회할 수 있습니다. 이를 통해 사용자와 가까운 모임을 빠르게 찾을 수 있습니다.
- 모임 신청/취소:
원하는 모임에 참여 신청하고, 필요 시 취소할 수 있습니다. - 후기 작성:
모임에 참여 후 후기를 남겨 다른 유저와 정보를 공유할 수 있습니다. - 모임 및 일정 생성:
자신만의 모임을 개설하고, 일정과 관련된 세부 사항을 설정하여 참여자들을 모집할 수 있습니다. - 찜하기:
관심 있는 모임이나 일정을 찜하여 나중에 다시 확인하거나 참여할 수 있습니다.
- 내 일정 확인:
내가 참여한 모임과 일정을 한눈에 볼 수 있습니다. - 내 활동 기록:
모임 참여 내역, 후기 작성 내역 등을 확인할 수 있습니다. - 프로필 관리:
개인 정보를 수정하고, 자신의 활동 내역을 확인할 수 있습니다. - 찜한 일정 목록 조회:
찜한 모임 및 일정 목록을 확인하고, 이후 참여 여부를 결정할 수 있습니다.
| 기간 | 작업 내용 |
|---|---|
| 12/23 ~ 01/06 | 기획 및 서비스 기능 정리 |
| 01/02 ~ 01/20 | 1차 MVP 개발 |
| 01/04 ~ 01/07 | ERD 및 API 명세 작업 |
| 01/14 | 백엔드 서버 배포 |
| 01/14 ~ 01/30 | 기능 수정 및 리팩토링 |
| 01/24 ~ 01/31 | 2차 기획 및 기능 논의 |
| 01/27 | Github Actions CI 환경 구축 |
| 02/07 | Blue-Green 배포 및 CD 파이프라인 도입 |
| 02/07 ~ 02/12 | 2차 MVP 개발 |
| Category | Stack | Version |
|---|---|---|
| Runtime | JDK 17 | |
| Framework | Spring Boot 3.4 | |
| Build Tool | Gradle 8.12 | |
| Database | MySQL 8.0 | |
| Cache | Redis 7.4 | |
| Environment | Docker 27.x | |
| Test | JUnit 5 |
WeMo의 API 명세를 확인하려면 아래 링크를 참고해주세요.
위 두 가지 문서를 통해 API 요청과 응답 형식을 상세히 확인할 수 있습니다. 🚀
직관적인 구조 파악과 관리를 위해 도메인형 구조를 채택하였습니다. (더보기)
src
├── main
│ ├── java
│ │ └── com
│ │ └── wemo
│ │ └── backend
│ │ ├── WeMoApplication.java
│ │ ├── domain
│ │ │ ├── attendance
│ │ │ │ ├── entity
│ │ │ │ │ └── Attendance.java
│ │ │ │ ├── repository
│ │ │ │ │ └── AttendanceRepository.java
│ │ │ │ └── service
│ │ │ │ ├── AttendanceReader.java
│ │ │ │ ├── AttendanceReaderImpl.java
│ │ │ │ ├── AttendanceStore.java
│ │ │ │ └── AttendanceStoreImpl.java
│ │ │ ├── auth
│ │ │ │ ├── IpUtils.java
│ │ │ │ ├── JwtAuthenticationFilter.java
│ │ │ │ ├── JwtTokenProvider.java
│ │ │ │ ├── UserAuth.java
│ │ │ │ ├── UserAuthImpl.java
│ │ │ │ ├── UserDetailsImpl.java
│ │ │ │ ├── UserDetailsServiceImpl.java
│ │ │ │ └── token
│ │ │ │ ├── entity
│ │ │ │ │ └── RefreshToken.java
│ │ │ │ ├── repository
│ │ │ │ │ └── RefreshTokenRedisRepository.java
│ │ │ │ └── service
│ │ │ │ ├── AccessTokenManager.java
│ │ │ │ ├── JwtTokenUtils.java
│ │ │ │ ├── RefreshTokenCleanupScheduler.java
│ │ │ │ └── RefreshTokenManager.java
│ │ │ ├── category
│ │ │ │ ├── entity
│ │ │ │ │ └── Category.java
│ │ │ │ └── repository
│ │ │ │ └── CategoryRepository.java
│ │ │ ├── comm
│ │ │ │ ├── CommUtilService.java
│ │ │ │ └── CommUtilServiceImpl.java
│ │ │ ├── image
│ │ │ │ ├── controller
│ │ │ │ │ └── ImageController.java
│ │ │ │ ├── dto
│ │ │ │ │ └── PresignedUrlResponse.java
│ │ │ │ ├── entity
│ │ │ │ │ └── Image.java
│ │ │ │ ├── repository
│ │ │ │ │ └── ImageRepository.java
│ │ │ │ └── service
│ │ │ │ ├── ImageReader.java
│ │ │ │ ├── ImageReaderImpl.java
│ │ │ │ ├── ImageStore.java
│ │ │ │ ├── ImageStoreImpl.java
│ │ │ │ └── S3Service.java
│ │ │ ├── lightning
│ │ │ │ ├── controller
│ │ │ │ │ └── LightningController.java
│ │ │ │ ├── dto
│ │ │ │ │ ├── LightningCursorPagingResponse.java
│ │ │ │ │ ├── LightningDetailResponse.java
│ │ │ │ │ ├── LightningListResponse.java
│ │ │ │ │ ├── LightningRequest.java
│ │ │ │ │ └── LightningResponse.java
│ │ │ │ ├── entity
│ │ │ │ │ ├── DateType.java
│ │ │ │ │ ├── Lightning.java
│ │ │ │ │ └── LightningType.java
│ │ │ │ ├── repository
│ │ │ │ │ ├── LightningRepository.java
│ │ │ │ │ ├── LightningTypeRepository.java
│ │ │ │ │ └── querydsl
│ │ │ │ │ ├── LightningCursorQueryDsl.java
│ │ │ │ │ └── LightningCursorQueryDslImpl.java
│ │ │ │ └── service
│ │ │ │ ├── LightningReader.java
│ │ │ │ ├── LightningReaderImpl.java
│ │ │ │ ├── LightningService.java
│ │ │ │ ├── LightningServiceImpl.java
│ │ │ │ ├── LightningStore.java
│ │ │ │ ├── LightningStoreImpl.java
│ │ │ │ ├── LightningTypeReader.java
│ │ │ │ └── LightningTypeReaderImpl.java
│ │ │ ├── lightningJoin
│ │ │ │ ├── controller
│ │ │ │ │ └── LightningJoinController.java
│ │ │ │ ├── entity
│ │ │ │ │ └── LightningJoin.java
│ │ │ │ ├── repository
│ │ │ │ │ └── LightningJoinRepository.java
│ │ │ │ └── service
│ │ │ │ ├── LightningJoinReader.java
│ │ │ │ ├── LightningJoinReaderImpl.java
│ │ │ │ ├── LightningJoinService.java
│ │ │ │ ├── LightningJoinServiceImpl.java
│ │ │ │ ├── LightningJoinStore.java
│ │ │ │ └── LightningJoinStoreImpl.java
│ │ │ ├── like
│ │ │ │ ├── controller
│ │ │ │ │ └── LikeController.java
│ │ │ │ ├── entity
│ │ │ │ │ └── Likes.java
│ │ │ │ ├── repository
│ │ │ │ │ └── LikeRepository.java
│ │ │ │ └── service
│ │ │ │ ├── LikeReader.java
│ │ │ │ ├── LikeReaderImpl.java
│ │ │ │ ├── LikeService.java
│ │ │ │ ├── LikeServiceImpl.java
│ │ │ │ ├── LikeStore.java
│ │ │ │ └── LikeStoreImpl.java
│ │ │ ├── meeting
│ │ │ │ ├── controller
│ │ │ │ │ └── MeetingController.java
│ │ │ │ ├── dto
│ │ │ │ │ ├── MeetingCreateRequest.java
│ │ │ │ │ ├── MeetingCreateResponse.java
│ │ │ │ │ ├── MeetingCursorPagingResponse.java
│ │ │ │ │ ├── MeetingDetailResponse.java
│ │ │ │ │ ├── MeetingInfoResponse.java
│ │ │ │ │ ├── MeetingListPlanListResponse.java
│ │ │ │ │ ├── MeetingListResponse.java
│ │ │ │ │ ├── MeetingListResponseV2.java
│ │ │ │ │ ├── MeetingMemberPagingResponse.java
│ │ │ │ │ ├── MeetingPlanListResponse.java
│ │ │ │ │ ├── MeetingPlanPagingResponse.java
│ │ │ │ │ ├── MeetingReviewListResponse.java
│ │ │ │ │ ├── MeetingReviewPagingResponse.java
│ │ │ │ │ └── MeetingUpdateRequest.java
│ │ │ │ ├── entity
│ │ │ │ │ └── Meeting.java
│ │ │ │ ├── repository
│ │ │ │ │ ├── MeetingQueryDsl.java
│ │ │ │ │ ├── MeetingQueryDslImpl.java
│ │ │ │ │ └── MeetingRepository.java
│ │ │ │ └── service
│ │ │ │ ├── MeetingReader.java
│ │ │ │ ├── MeetingReaderImpl.java
│ │ │ │ ├── MeetingService.java
│ │ │ │ ├── MeetingServiceImpl.java
│ │ │ │ ├── MeetingStore.java
│ │ │ │ ├── MeetingStoreImpl.java
│ │ │ │ ├── MeetingUtilService.java
│ │ │ │ └── MeetingUtilServiceImpl.java
│ │ │ ├── meetingMember
│ │ │ │ ├── entity
│ │ │ │ │ └── MeetingMember.java
│ │ │ │ ├── repository
│ │ │ │ │ └── MeetingMemberRepository.java
│ │ │ │ └── service
│ │ │ │ ├── MeetingMemberReader.java
│ │ │ │ ├── MeetingMemberReaderImpl.java
│ │ │ │ ├── MeetingMemberStore.java
│ │ │ │ └── MeetingMemberStoreImpl.java
│ │ │ ├── oauth
│ │ │ │ ├── controller
│ │ │ │ │ └── Oauth2Controller.java
│ │ │ │ └── service
│ │ │ │ ├── Oauth2Service.java
│ │ │ │ └── Oauth2ServiceImpl.java
│ │ │ ├── plan
│ │ │ │ ├── controller
│ │ │ │ │ └── PlanController.java
│ │ │ │ ├── dto
│ │ │ │ │ ├── PlanCreateRequest.java
│ │ │ │ │ ├── PlanCreateResponse.java
│ │ │ │ │ ├── PlanCursorPagingResponse.java
│ │ │ │ │ ├── PlanDetailResponse.java
│ │ │ │ │ ├── PlanListInfo.java
│ │ │ │ │ └── PlanListResponse.java
│ │ │ │ ├── entity
│ │ │ │ │ └── Plan.java
│ │ │ │ ├── repository
│ │ │ │ │ ├── PlanRepository.java
│ │ │ │ │ └── querydsl
│ │ │ │ │ ├── PlanCursorQueryDsl.java
│ │ │ │ │ ├── PlanCursorQueryDslImpl.java
│ │ │ │ │ ├── PlanQueryDsl.java
│ │ │ │ │ └── PlanQueryDslImpl.java
│ │ │ │ └── service
│ │ │ │ ├── PlanReader.java
│ │ │ │ ├── PlanReaderImpl.java
│ │ │ │ ├── PlanService.java
│ │ │ │ ├── PlanServiceImpl.java
│ │ │ │ ├── PlanStore.java
│ │ │ │ └── PlanStoreImpl.java
│ │ │ ├── region
│ │ │ │ ├── controller
│ │ │ │ │ └── RegionController.java
│ │ │ │ ├── dto
│ │ │ │ │ ├── DistrictListInfo.java
│ │ │ │ │ ├── DistrictListResponse.java
│ │ │ │ │ ├── ProvinceListInfo.java
│ │ │ │ │ ├── ProvinceListResponse.java
│ │ │ │ │ ├── RegionDistrictListInfo.java
│ │ │ │ │ ├── RegionListResponse.java
│ │ │ │ │ └── RegionProvinceListInfo.java
│ │ │ │ ├── entity
│ │ │ │ │ ├── District.java
│ │ │ │ │ └── Province.java
│ │ │ │ ├── repository
│ │ │ │ │ ├── DistrictRepository.java
│ │ │ │ │ └── ProvinceRepository.java
│ │ │ │ └── service
│ │ │ │ ├── RegionReader.java
│ │ │ │ ├── RegionReaderImpl.java
│ │ │ │ ├── RegionService.java
│ │ │ │ ├── RegionServiceImpl.java
│ │ │ │ ├── RegionStore.java
│ │ │ │ └── RegionStoreImpl.java
│ │ │ ├── review
│ │ │ │ ├── controller
│ │ │ │ │ └── ReviewController.java
│ │ │ │ ├── dto
│ │ │ │ │ ├── ReviewCreateRequest.java
│ │ │ │ │ ├── ReviewCreateResponse.java
│ │ │ │ │ ├── ReviewDetailResponse.java
│ │ │ │ │ ├── ReviewListInfo.java
│ │ │ │ │ ├── ReviewListResponse.java
│ │ │ │ │ └── ReviewPagingResponse.java
│ │ │ │ ├── entity
│ │ │ │ │ └── Review.java
│ │ │ │ ├── repository
│ │ │ │ │ ├── ReviewRepository.java
│ │ │ │ │ └── querydsl
│ │ │ │ │ ├── ReviewQueryDsl.java
│ │ │ │ │ └── ReviewQueryDslImpl.java
│ │ │ │ └── service
│ │ │ │ ├── ReviewReader.java
│ │ │ │ ├── ReviewReaderImpl.java
│ │ │ │ ├── ReviewService.java
│ │ │ │ ├── ReviewServiceImpl.java
│ │ │ │ ├── ReviewStore.java
│ │ │ │ └── ReviewStoreImpl.java
│ │ │ └── user
│ │ │ ├── controller
│ │ │ │ ├── TokenController.java
│ │ │ │ ├── UserController.java
│ │ │ │ └── UserDashboardController.java
│ │ │ ├── dto
│ │ │ │ ├── AdditionalDataRequest.java
│ │ │ │ ├── EmailCheckRequest.java
│ │ │ │ ├── SigninRequest.java
│ │ │ │ ├── UserCreateRequest.java
│ │ │ │ ├── UserInfoResponse.java
│ │ │ │ ├── UserListInfo.java
│ │ │ │ ├── UserMeetingListResponse.java
│ │ │ │ ├── UserMeetingPagingResponse.java
│ │ │ │ ├── UserPlanListForCalendar.java
│ │ │ │ ├── UserPlanListResponse.java
│ │ │ │ ├── UserPlanListResponseForCalendar.java
│ │ │ │ ├── UserPlanPagingResponse.java
│ │ │ │ ├── UserPlanReviewableListResponse.java
│ │ │ │ ├── UserReviewListResponse.java
│ │ │ │ ├── UserReviewPagingResponse.java
│ │ │ │ ├── UserUpdateRequest.java
│ │ │ │ └── UserUpdateResponse.java
│ │ │ ├── entity
│ │ │ │ ├── LoginType.java
│ │ │ │ └── User.java
│ │ │ ├── repository
│ │ │ │ ├── UserRepository.java
│ │ │ │ └── querydsl
│ │ │ │ ├── UserQueryDsl.java
│ │ │ │ └── UserQueryDslImpl.java
│ │ │ └── service
│ │ │ ├── UserReader.java
│ │ │ ├── UserReaderImpl.java
│ │ │ ├── UserService.java
│ │ │ ├── UserServiceImpl.java
│ │ │ ├── UserStore.java
│ │ │ └── UserStoreImpl.java
│ │ └── global
│ │ ├── config
│ │ │ ├── RedisConfig.java
│ │ │ ├── S3Config.java
│ │ │ ├── SecurityConfig.java
│ │ │ ├── SwaggerConfig.java
│ │ │ └── WebClientConfig.java
│ │ ├── entity
│ │ │ └── Timestamped.java
│ │ ├── exception
│ │ │ ├── CustomException.java
│ │ │ ├── ErrorCode.java
│ │ │ └── handler
│ │ │ └── GlobalExceptionHandler.java
│ │ └── response
│ │ ├── ErrorResponse.java
│ │ └── SuccessResponse.java
│ └── resources
│ ├── application-prod.yml
│ ├── application.yml
│ ├── banner.txt
│ └── category.sql
└── test
├── java
│ └── com
│ └── wemo
│ └── backend
│ ├── WeMoApplicationTests.java
│ └── domain
│ └── user
│ └── service
│ └── UserServiceImplTest.java
└── resources
└── application-test.yml




