알고리즘 스터디를 운영하며, 체계적인 관리의 필요성을 느껴 프로젝트를 진행했습니다
이메일 계정과 Google 계정, 카카오 계정으로 로그인할 수 있습니다
로그인 후 미션을 직접 설정하여 스터디를 생성할 수 있습니다
초대장을 보내 스터디에 초대할 수 있습니다
☝️ 팀원 검색 및 초대
☝️ 초대 메시지
☝️ 초대 거절 및 수락 페이지
소속된 팀과 미션 달성률, 각오 및 디데이를 확인합니다
☝️ 대시보드
팀원들의 미션 수행 여부를 확인하고 나의 전체 등수를 확인합니다
사용한 기술 스택은 다음과 같습니다
- Spring Boot (API Server)
- Spring Security (Security)
- Spring Batch (Batch)
- PostgreSQL (RDB)
- Spring Data JPA & QueryDSL (ORM)
- OAuth2.0 (Login)
- AWS EC2, S3 (Public Cloud)
- Nginx (Reverse Proxy Server)
- Javascript, Thymeleaf, jQuery (Client)
- Redis (Cache)
- Apache Kafka (Message Broker) - 미적용
- Jenkins (CI/CD) - 미적용
ERD & API는 다음과 같이 정리했습니다
- ERDCloud : https://www.erdcloud.com/d/ZmdWhdSJ3Lm8rC2Jw
- API :
Spring MVC 패턴으로 작성하였습니다
프로젝트 구조는 다음과 같습니다
../com.example.algostudy/
├── batch - Spring Batch
│ ├── chunk - 청크 기반 CustomItemProcessor
│ ├── job - Job
│ ├── listener - Listener
│ └── tasklet - Tasklet
├── common
│ └── CommonTools - 공통 기능 메소드 정의
├── config
│ ├── AmazonS3Config - Amazon S3 설정파일
│ ├── BatchConfig - Spring Batch 설정파일
│ └── SecurityConfig - Spring Security 설정파일
├── security
│ ├── authentication - 인증(Authentication) 설정파일
│ └── authorization - 인가(Authorization) 설정파일
├── domain
│ ├── entity - JPA Entity
│ └── dto - Data Transfer Object
├── controller
│ └── ... - Controller
├── listener - ApplicationListener 메소드 정의
├── mapper
│ └── ... - MapStruct Mapper 메소드 정의
├── repository
│ └── ... - Repository
└── service
└── ... - ServiceSecurity 설정을 통해 인가된 사용자만 허용 URL에 접근할 수 있도록 제한한다.
다음과 같이 설정하였습니다
- Form Login (Auth)
- Remember Me (Auth)
- Session : maximumSessions(1)
- Session : SessionCreationPolicy.If_Required
- Authorization : URL-based (UrlResourcesMapFactoryBean)
매일 0시에 일별 미션을 체크하여 미션 캘린더에 저장하고 종료일자가 지난 미션을 삭제한다
구조는 다음과 같습니다
Spring Data JPA, QueryDSL을 통해 각각 객체 중심의 domain 설계, JPQL build를 하였습니다.
이메일 로그인과 소셜 로그인을 제공하여 번거로운 회원가입 과정을 생략할 수 있습니다
구조는 다음과 같습니다
Sorted Set 자료구조를 사용하여 랭킹 보드를 구현하였습니다
구조는 다음과 같습니다











