μ°λ¦¬ 컀μ€ν°λ§μ΄μ§(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 λ¬Έμ μλ°©
1. μΉ΄λ νν - νν μ νμ μμ

- μμλΆλ₯ νν: 5κ°μ§ μμλΆλ₯ μ ν μ λͺ¨λ κ°λ§Ήμ μμ 3% μ 립
- λ§μΆ€ν νν: μΈλΆ κ°λ§Ήμ κ·Έλ£Ή μ ν μ μ΅λ 4% μ 립
- μ μ°ν λ³κ²½: 30μΌλ§λ€ νν λ³κ²½ κ°λ₯
2. ν¬μΈνΈ μ¬μ©μ² - ν¬μΈνΈ μ¬μ©μ λ€μμ±

- νμ΄λ°±: μΉ΄λ κ²°μ μΌμ ν¬μΈνΈλ₯Ό νκΈμ²λΌ μ¬μ©
- μ‘°κ°ν¬μ: μνλ μ£Όμμ μ€μ νκ³ ν¬μΈνΈλ‘ μ£Όμ λ§€μ
- μΌμΌλ³΅κΆ: λ§€μΌ μμ μΆμ²¨μΌλ‘ μ΅λ 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) νν°λ₯Ό μ μ©νμ¬ λ‘κ·Έλ₯Ό μμ°¨μ μΌλ‘ κ΄λ¦¬νκ³ λΆμν μ μμ΅λλ€.

- λͺ¨λν°λ§: Grafanaλ₯Ό ν΅ν΄ μμ€ν
μνλ₯Ό μ€μκ°μΌλ‘ λͺ¨λν°λ§νκ³ λ¬Έμ λ₯Ό μ¦μ λμν μ μλλ‘ ν©λλ€.

λ°±μλλ 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 μ¬μ©μ νλ λ‘κΉ |
μλΉμ€ μꡬμ¬ν μ μμ.pdf







