우리 커스터마이징(QUOSTOMIZE) 은 사용자가 매달 자신의 생활 패턴과 취향에 맞게 카드 혜택과 포인트 사용처를 직접 선택할 수 있는 서비스입니다.
사용자가 직접 결정하는 맞춤형 혜택 제공을 통해 기존 카드 서비스의 한계를 뛰어넘고, 변화하는 소비 트렌드에 유연하게 대응합니다.
👉🏻 시연영상 바로가기
👉🏻 사이트 바로가기
본 프로젝트는 서비스 보안과 안정성 강화를 주요 설계 방향으로 두고 개발되었습니다.
1. 보안과 안정성 강화
- Next.js + Auth.js
- 토큰을 브라우저 쿠키 대신 서버 세션에 저장하여 데이터 직접 노출 방지
- Next.js API Route
- 클라이언트-백엔드 간 직접 통신을 차단해 헤더 정보 및 API 주소 보호
- JWT 보안 강화
- 비밀번호는 단방향 암호화, 개인정보는 양방향 암호화 적용
- Acess/Refresh Token 검증 및 Blacklist 로직 추가로 보안 수준 향상
- AWS WAF 적용
- AWS WAF 적용으로 SQL Injection, XSS 공격 예방
2. 멱등성 적용
- Redis를 활용한 멱등키 관리로 카드 생성 요청 중복 처리 방지
- 동일한 요청은 캐시된 응답 반환으로 효율성과 안정성 확보
3. 대량 데이터 처리
- 배치 프로세스: 복권 응모 데이터를 매일 정해진 시간에 처리
- Redaer: 1000명 데이터 읽어오기
- Processor: 응모자 중 당첨자 선정
- Writer: 당첨 결과 기록
4. 코드 품질 관리
- SonarQube를 통한 정적 코드 분석으로 코드 품질 유지
- DB Lock으로 동시성 문제 해결
- 비동기 처리 강화로 안정적인 예외 처리 구현
- JPA 활용 중 발생하는 N + 1 문제 예방
- 상위분류 혜택: 5가지 상위분류 선택 시 모든 가맹점에서 3% 적립
- 맞춤형 혜택: 세부 가맹점 그룹 선택 시 최대 4% 적립
- 유연한 변경: 30일마다 혜택 변경 가능
- 페이백: 카드 결제일에 포인트를 현금처럼 사용
- 조각투자: 원하는 주식을 설정하고 포인트로 주식 매수
- 일일복권: 매일 자정 추첨으로 최대 1만 포인트 지급
3. 카드 생성 - 실제 카드 생성 프로세스와 멱등성을 적용한 생성 기능
- RestClient를 활용한한국투자증권 OPENAPI와 연동
- Access Token 발급 & 보유 주식 정보 기능
- S3를 활용한 주식 이미지 다운로드
- Spring Batch를 활용해 복권 기능을 활성화한 사용자 집계
- 자정(00:00)에 1/1000 확률로 포인트 획득
우리 커스터마이징 서비스(QUOSTOMIZE)를 위한 관리자 페이지입니다.
정보 조회, 알림 메일 발송, 서비스 및 로그 관리, 실시간 모니터링 기능을 통해 서비스를 효율적으로 관리합니다.
👉🏻 관리자 페이지 바로가기
본 프로젝트는 서비스 안정성과 효율성 증대를 주요 설계 방향으로 두고 개발되었습니다.
- Authentication + Role 기반 Admin 여부 확인: 로그인 시 사용자 인증 후, 관리자인지 확인하는 절차를 구현하여 권한을 제어합니다.
- MiddleWare + API 내부 Role 체크: 중간 미들웨어에서 API 접근 시 역할을 확인하여 이중 인증을 제공합니다.
- 만료 토큰 갱신 및 예외 처리: 토큰 기반 인증을 적용하여 토큰 만료 시 갱신하고 예외 처리를 통해 안정적인 인증 프로세스를 유지합니다.
- 역할 기반 접근 제어: Admin만 민감한 데이터에 접근할 수 있도록 하여 보안을 강화했습니다.
-
정보 조회: 관리자가 다양한 정보(이용자, 카드, 가맹점 등)를 조회할 수 있습니다.
-
로그 관리: MDC(Mapped Diagnostic Context) 필터를 적용하여 로그를 순차적으로 관리하고 분석할 수 있습니다.
백엔드는 Github Actions와 AWS를 활용하여 배포를 진행하였습니다. 자동화된 배포 과정을 통해 안정적인 서비스 운영을 지원합니다.
- 커밋 푸시
- 개발 중인 코드는
dev
브랜치에 푸시됩니다. dev
브랜치는 배포 및 QA를 위한 작업 브랜치입니다.
- 개발 중인 코드는
- Pull Request 생성
- 배포를 위해
dev
브랜치에서main
브랜치로 Pull Request를 생성합니다.
- 배포를 위해
- Github Actions 실행
- Pull Request 생성 시 Github Actions가 자동으로 트리거됩니다.
- 다음 작업이 순차적으로 진행됩니다:
yml
파일 생성과 백엔드 코드 빌드- Docker 이미지 생성
- Docker 이미지 배포
- 생성된 Docker 이미지는 AWS ECR (Elastic Container Registry)에 Push됩니다.
- EC2 서버 배포
- EC2 인스턴스가 ECR에서 최신 Docker 이미지를 Pull하여 업데이트를 진행합니다.
- 업데이트된 이미지를 통해 서비스가 배포됩니다.
위 과정을 통해 코드 푸시부터 배포까지의 작업이 자동화되어 빠르고 효율적으로 운영되고 있습니다.
백엔드
└── quostomizebe/
├── api/
│ ├── admin/
│ ├── adminResponse/
│ ├── auth/
│ ├── card/
│ ├── cardBenefit/
│ ├── cardApplicant/
│ ├── health/
│ ├── lotto/
│ ├── member/
│ ├── memberQuestion/
│ ├── payment/
│ ├── pointUsageMethod/
│ ├── sms/
│ └── stock/
├── common/
│ ├── aspects/
│ ├── auth/
│ ├── config/
│ ├── dto/
│ ├── email/
│ ├── entity/
│ ├── error/
│ ├── filter/
│ ├── idempotency/
│ ├── jwt/
│ ├── s3/
│ └── sms/
├── domain/
│ ├── admin/
│ ├── auth/
│ ├── customizer/
│ │ ├── adminResponse/
│ │ ├── benefit/
│ │ ├── card/
│ │ ├── cardBenefit/
│ │ ├── cardApplication/
│ │ ├── customer/
│ │ ├── lotto/
│ │ ├── memberQuestion/
│ │ ├── payment/
│ │ ├── point/
│ │ ├── pointUsageMethod/
│ │ └── stock/
│ └── log/
└── QuostomizeBeApplication.java
- 프로젝트 시작일: 2024.11.11
- 프로젝트 종료일: 2024.12.09
- 메인 기능 API: 2024.11.07 - 2024.11.15
- 배치 API: 2024.11.01 - 2024.11.15
- 관리자 페이지 API: 2024.12.02 - 2024.12.09
카테고리 | 라이브러리 | 버전 | 설명 |
---|---|---|---|
프레임워크 & 코어 | Spring Boot | 3.3.5 | Spring 기반의 애플리케이션 프레임워크로 RESTful API 및 다양한 Starter 지원 |
Spring Security | 6.3.4 | 보안 관련 인증 및 권한 관리를 위한 프레임워크 | |
Spring Data JPA | 3.3.5 | JPA를 활용한 데이터베이스 연동과 ORM 기능 제공 | |
Spring Data Redis | 3.3.5 | Redis를 활용한 데이터 캐싱 및 세션 관리 | |
Spring AOP | 6.1.14 | 관점 지향 프로그래밍(AOP)을 통한 로깅 및 트랜잭션 관리 | |
Spring Cloud AWS | 2.2.6 | AWS 서비스와의 통합 지원 | |
Spring Actuator | 3.3.5 | 애플리케이션 상태 모니터링 및 관리 | |
데이터베이스 & ORM | MySQL Connector | 8.3.0 | MySQL 데이터베이스 연결을 위한 JDBC 드라이버 |
QueryDSL | 5.0.0 | 타입 세이프한 방식으로 동적 SQL 생성 지원 | |
Hibernate Core | 6.5.3.Final | JPA 구현체로 ORM 매핑 지원 | |
p6spy | 3.9.0 | SQL 로깅 및 성능 모니터링 도구 | |
HikariCP | 5.1.0 | 고성능 데이터베이스 커넥션 풀 라이브러리 | |
Spring Data Commons | 3.3.5 | 공통 데이터베이스 작업을 지원하는 스프링 모듈 | |
문서화 | SpringDoc OpenAPI | 2.2.0 | Swagger UI를 활용한 API 문서화 지원 |
보안 & 인증 | JWT (jjwt) | 0.9.1 | JSON Web Token 기반 인증 및 토큰 생성/검증 |
JAXB | 2.3.0 | XML 데이터 처리와 직렬화/역직렬화 지원 | |
Spring Security Core | 6.3.4 | Spring Security의 핵심 기능 제공 | |
Spring Security Test | 6.3.4 | 보안 관련 테스트 지원 | |
유틸리티 | Jackson Core | 2.17.2 | JSON 직렬화 및 역직렬화의 핵심 라이브러리 |
Jackson Databind | 2.14.3 | JSON 데이터 매핑 및 변환 기능 제공 | |
Jackson JSR310 | 2.17.2 | Java 8 날짜 및 시간 API 지원 | |
Commons IO | 2.17.0 | 입출력 스트림 처리 및 파일 관리 | |
CoolSMS SDK | 4.3.0 | SMS 발송 기능 지원 | |
모니터링 | Micrometer Prometheus | 1.13.6 | Prometheus 기반 메트릭 수집 및 모니터링 |
Spring Actuator | 3.3.5 | 애플리케이션 상태 모니터링 및 관리 | |
테스트 | Mockito | 4.11.0 | Mock 객체를 활용한 유닛 테스트 지원 |
WireMock | 3.9.2 | HTTP API mocking 및 테스트용 스텁 제공 | |
로깅 | Logback Classic | 1.5.11 | 로깅 프레임워크 구현체 |
Logback Core | 1.5.11 | Logback의 핵심 라이브러리 | |
SLF4J API | 2.0.16 | 로깅 API 인터페이스 | |
AspectJ Weaver | 1.9.22.1 | Aspect-Oriented Programming을 위한 Weaver | |
AWS SDK | AWS SDK Core | 1.11.792 | AWS 서비스와의 통합을 위한 핵심 라이브러리 |
AWS SDK S3 | 1.11.792 | AWS S3 통합을 위한 라이브러리 | |
Swagger | Swagger Annotations (Jakarta) | 2.2.15 | API 문서화를 위한 Swagger Annotations |
Swagger Models (Jakarta) | 2.2.15 | Swagger API 모델 정의 라이브러리 | |
서버 | Tomcat Embed Core | 10.1.31 | Spring Boot 내장 Tomcat 서버 |
커밋 컨벤션
- {Tag}/{작업 내용}
Feat/input : 비밀번호 숨김 처리
- 커밋 규칙
Tag Name | Description |
---|---|
Feat | 새로운 기능을 추가 |
Fix | 버그 수정 |
Design | CSS 등 사용자 UI 디자인 변경 |
!BREAKING CHANGE | 커다란 API 변경의 경우 |
!HOTFIX | 치명적인 버그 긴급 수정 |
Style | 코드 포맷 변경, 세미콜론 누락 등 |
Refactor | 프로덕션 코드 리팩토링 |
Comment | 주석 추가 및 변경 |
Docs | 문서 수정 |
Test | 테스트 코드 추가 또는 수정 |
Chore | 빌드 업무 수정 및 패키지 관리 업데이트 |
Rename | 파일/폴더명 수정 |
Remove | 파일/폴더 삭제 |
![]() |
![]() |
![]() |
기남석 | 김영성 | 김현우 |
총괄 팀장 Frontend 팀장 FullStack 개발 |
FullStack 개발 팀원 | Backend 팀장 FullStack 개발 |
스프링 배치 복권 기능 구현 JPA dirty checking을 고려한 API 통합 JUnit을 통한 단위테스트 코드 작성 |
투자 페이지 API 개발 회원가입 페이지 API 개발 |
백엔드 프로젝트 세팅 CICD & 인프라 구축 인증, 인가 구현 외부 API 연결(한국투자증권OPENAPI, SMTP) 카드 생성 과정에서 멱등성 적용 |
![]() |
![]() |
![]() |
방성경 | 오선민 | 홍찬의 |
FullStack 개발 팀원 | PM FullStack 개발 팀원 |
FullStack 개발 팀원 |
- - - |
ELB 세팅, ERD 설계 등 인프라 구축 @Scheduled를 활용한 혜택 예약 API 개발 관리자 페이지 기능을 위한 전체 API 개발 |
복권 참여자, 카드 생성 API SMS 사용자 2차 인증 구현 MDC 활용한 로그 추적 구현 Spring AOP 사용자 활동 로깅 |