๐AI ๊ฒ์ฆ ๋น์ฆ๋์ค ํ๋ก์ ํธ
ํ๋ก์ ํธ๋ช
: '์๊ธฐ์์ ๊ธฐ์'
ํ๋ก์ ํธ ์๊ฐ: '์๊ธฐ์์ ๊ธฐ์'๋ ์์์ ๋ค์ ๋ฐฐ๋ฌ ์ฃผ๋ฌธ ๊ด๋ฆฌ์ ์ฃผ๋ฌธ ๋ด์ญ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ์์ ์ฃผ๋ฌธ ๊ด๋ฆฌ ํ๋ซํผ์
๋๋ค.
ํ๋ก์ ํธ ๊ฐ๋ฐ ๊ธฐ๊ฐ: 2025.09.26 ~ 2025.10.20
๋ถ๋ฅ
์์ธ
IDE
IntelliJ
Language
Java21
Framework
Spring Boot 3.5.5
Repository
H2 In-memory, PostgreSQL
Build Tool
Gradle
DevOps - dev
EC2, RDS(PostreSQL), Docker, GihubActions, (Nginx)
๐ฏ 1. ๋๋ฉ์ธ ๋ค์ด์ด๊ทธ๋จ
๐ฏ 2. AWS ๊ธฐ๋ฐ์ ์ด์ ํ๊ฒฝ ๋ค์ด์ด๊ทธ๋จ
๐ฏ 3. Coding Conventions
๐ 1. ์ปค๋ฐ ๋ฉ์์ง ๊ท์น
refactor/๊ธฐ๋ฅ๋ช
feat/๊ธฐ๋ฅ๋ช
fix/๋ฒ๊ทธ ๋ด์ฉ
docs/๋ฌธ์์์
test/ํ
์คํธ์ฝ๋
๋ถ๋ฅ
์์ธ
ํด๋๋ช
์๋ฌธ์ + _(snake_case)
๋ณ์๋ช
์นด๋ฉ์ผ์ด์ค(camelCase)
ํจ์๋ช
/๋ฉ์๋๋ช
์นด๋ฉ์ผ์ด์ค(camelCase)
ํด๋์ค๋ช
ํ์ค์นผ์ผ์ด์ค(pascalCase)
์์๋ช
๋๋ฌธ์ + _(upper_snake_case)
Enum
Enum Suffix(OrderTypeEnum)
๐ 3. Git branch ์ ๋ต
๋ธ๋์น
์์ธ
main
์ค์ ์๋น์ค์์ ๋ฐฐํฌ๋๋ ์ต์ข
๋ฒ์ ์ ๊ด๋ฆฌํ๋ ๋ธ๋์น
dev
๋ชจ๋ ๊ธฐ๋ฅ ๋ธ๋์น๊ฐ ํตํฉ๋๋ ๊ฐ๋ฐ ๋ฉ์ธ ๋ธ๋์น
feature
์๋ก์ด ๊ธฐ๋ฅ์ด๋ ๊ฐ์ ์ฌํญ์ ๊ฐ๋ฐํ๋ ๋จ์ ์์
๋ธ๋์น
hotfix
๊ธด๊ธ ๋ฒ๊ทธ๋ฅผ ์ ์ํ ์์ ํ๊ธฐ ์ํ ๋ธ๋์น
โโโ com
โโโ delivery
โโโ domain
โ ย ย โโโ address
โ โ โโโ controller
โ ย ย โ ย ย โโโ dto
โ ย ย โ โโโ entity
โ ย ย โ โโโ repository
โ โ โโโ service
โ ย ย โโโ ai
โ ย ย โโโ auth
โ ย ย โโโ cart
โ ย ย โโโ menu
โ ย ย โโโ order
โ ย ย โโโ review
โ ย ย โโโ store
โ ย ย โโโ test
โ ย ย โโโ user
โโโ global
โโโ common
โโโ config
โโโ exception
โโโ jwt
โโโ security
โโโ util
๐ 1. ์ธ์ฆ/์ธ๊ฐ ๊ธฐ๋ฅ
ํ์๊ฐ์
: ๋น๋ฐ๋ฒํธ๋ BCrypt๋ก ์ํธํ๋์ด ์ ์ฅ
๋ก๊ทธ์ธ: ๊ฒ์ฆ์ ์ฑ๊ณตํ๋ฉด AcessToken๊ณผ RefreshToken ๋ฐ๊ธ(AccessToken: ์ฟ ํค์ ์ ์ฅ, refreshToken: DB์ ์ ์ฅ)
AccessToken์ด ๋ง๋ฃ๋๋ฉด RefreshToken์ ํตํด ์ ํ ํฐ ์ฌ๋ฐ๊ธ
๋ก๊ทธ์์ ์ AccessToken์ ๋ธ๋๋ฆฌ์คํธ์ ๋ฑ๋ก๋๊ณ RefreshToken์ ์ญ์ ๋์ด ์ฌ์ฉ ๋ถ๊ฐ๋ฅ
๋ชจ๋ ์์ฒญ์ JwtAuthorizationFilter๋ฅผ ๊ฑฐ์ณ ์ฟ ํค์ ๋ด๊ธด AccessToken ๊ฒ์ฆ
Auth ๊ณผ์ ์์ Seucrity์ ์ํด ์์ฑ
์๊ธฐ ์์ ์ ์ ๋ณด๋ง ์์ /์ญ์ /์กฐํ ๊ฐ๋ฅ
Admin api๋ก ๊ถํ ๋ณ๊ฒฝ ๊ฐ๋ฅ
๋ณ์นญ ์์ธ์ฃผ์๋ฅผ ์
๋ ฅ๋ฐ์ ์๋ก์ด ๋ฐฐ์ก์ง ๋ฑ๋ก
๋ก๊ทธ์ธํ ์ฌ์ฉ์์ ๋ชจ๋ ์ฃผ์๋ฅผ ์กฐํ
๋ณ์นญ๊ณผ ์์ธ์ฃผ์๋ฅผ ์
๋ ฅ๋ฐ์ ๋ฐฐ์ก์ง ์์
์ฌ์ฉ์์ ์ฃผ์๋ฅผ ๋
ผ๋ฆฌ ์ญ์ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌ
ํน์ ์ฃผ์๋ฅผ ๊ธฐ๋ณธ ์ฃผ์๋ก ์ค์ ๊ฐ๋ฅ
OWNER๋ ๊ฐ๊ฒ๋ฅผ ์์ฑ/์์ /์ญ์ /๋ณธ์ธ ๊ฐ๊ฒ ๋ชฉ๋ก ์กฐํ ๊ฐ๋ฅ
MANAGER, MASTER๋ ๊ฐ๊ฒ์ ๋ชจ๋ ๊ถํ์ ๊ฐ์ง
MANAGER, MASTER๋ ์ ์ฃผ๋ณ ๊ฐ๊ฒ ๋ชฉ๋ก ์กฐํ ๊ฐ๋ฅ
๊ดํ๋ฌธ ๊ทผ์ฒ(3km)์์ ์ด์๋๋ ๊ฐ๊ฒ ๋ชฉ๋ก๋ง ์กฐํ ๊ฐ๋ฅ(๊ฒ์, ์นดํ
๊ณ ๋ฆฌ๋ณ, ์ง์ญ๋ณ ์กฐํ)
ํ์ฌ ๋ฑ๋ก๋ ์นดํ
๊ณ ๋ฆฌ ๋ชฉ๋ก ์กฐํ
ํ์ด์ง๋ค์ด์
๋ชฉ๋ก ์กฐํ ์ ๊ณต
์์ฑ/ ์์ / ์ญ์ / ๋จ์ผ ์กฐํ ์ ๊ณต
๊ถํ๋ณ ๊ธฐ๋ฅ ์ ๊ณต
ํ์ด์ง๋ค์ด์
๋ชฉ๋ก ์กฐํ ์ ๊ณต
์์ฑ/ ์์ / ์ญ์ / ์ํ ๋ณ ์ ๊ณต
๊ถํ๋ณ ๊ธฐ๋ฅ ์ ๊ณต
ํ๋กฌํํธ์ ์ํ ํ
์คํธ ์๋ ์์ฑ ๊ธฐ๋ฅ์ ์ง์
๋ฉ๋ด๋ฅผ ์์ ํ ๊ฐ๊ฒ ์ฌ์ฅ(OWNER): ๋ณธ์ธ์ด ์์ฑํ AI ๊ธฐ๋ก์ ๋ํด ์กฐํ, ์ญ์ , ๊ฒ์์ด ๊ฐ๋ฅ
๊ด๋ฆฌ์(MANAGER, MASTER): ๋ชจ๋ AI ๊ธฐ๋ก์ ๋ํด ์กฐํ, ์ญ์ , ๊ฒ์์ด ๊ฐ๋ฅ
๊ณ ๊ฐ์ 1~5์ ํ์ ๊ณผ ๋ฆฌ๋ทฐ ๋ด์ฉ์ ์์ฑํ ์ ์์ผ๋ฉฐ, ๋ชจ๋ ๋ฆฌ๋ทฐ๋ Soft Delete ๋ฐฉ์์ผ๋ก ๊ด๋ฆฌ
์ค๋ณต ๋ฆฌ๋ทฐ๋ ๋ฐฉ์ง๋๋ฉฐ, ์ฃผ๋ฌธ์ด ๋ฐฐ์ก ์๋ฃ ์ํ์ผ ๋๋ง ์์ฑ ๊ฐ๋ฅ
๊ถํ์ ๋ฐ๋ผ ์ ๊ทผ ๋ฒ์ ์ ํ
๋ฆฌ๋ทฐ ๊ฒ์
Cart 1๊ฐ๋ฅผ ์กฐํํ ๋ CartItem์ ๊ฐ์๋งํผ ์ถ๊ฐ ์ฟผ๋ฆฌ๊ฐ ์คํ๋๋ ๊ตฌ์กฐ์๊ณ , ์ด๋ก ์ธํด ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์
๐ ํด๊ฒฐ๋ฐฉ๋ฒ๊ณผ ๊ธฐ๋ํจ๊ณผ
Fetch ์กฐ์ธ์ ์ฌ์ฉํด ์ฟผ๋ฆฌ์์ Cart ๊ธฐ์ค์ผ๋ก CartItem, Menu, Store๋ฅผ ํ ๋ฒ์ ์กฐ์ธํด ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ํ ๋ฒ์ ์ฟผ๋ฆฌ๋ก ๊ฐ์ ธ์ด
๊ธฐ๋ํจ๊ณผ: ์ฟผ๋ฆฌ ํธ์ถ ์๋ฅผ ํฌ๊ฒ ์ค์ด๋ฉด์ ์ฑ๋ฅ์ ์ต์ ํ
๐ฏ GeminiConfig โ ํ๋ผ๋ฏธํฐ ๊ธฐ๋ฐ ๋น ํ๊ณ
๋ฉ๋ด ์ค๋ช
์๋ ์์ฑ์๋ง ์ฌ์ฉ๋๋ AI ๊ธฐ๋ฅ์ ํ์ฅ์ฑ์ ๊ณ ๋ คํ์ฌ ์์ฒญ ํ์
๋ณ๋ก ๋ค๋ฅธ ์ค์ ์ ๊ด๋ฆฌํ ํ์์ฑ์ด ์๊น.
์ด๊ธฐ ๊ตฌํ์ ์์ฒญ์ด ๋ค์ด์ฌ ๋๋ง๋ค ์์ฒญ ํ์
์ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์ GenerateContentConfig ๊ฐ์ฒด๋ฅผ ์๋ก ์์ฑํ๋ ๋ฐฉ์์ด์์ง๋ง ์์ฒญ์ด ๋ง์์ง์๋ก ๊ฐ์ฒด ์์ฑ ๋น์ฉ์ด ์ฆ๊ฐํ๋ ๋นํจ์จ์ด ๋ฐ์
์ด๋ฅผ ๊ฐ์ ํ๊ธฐ ์ํด ํ ๋ฒ๋ง ์์ฑ ํ ์ฌ์ฌ์ฉํ๋ HashMap ์บ์ฑ ๊ตฌ์กฐ๋ฅผ ์ ์ฉํ์ง๋ง, HashMap์ ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋์์ ์ ๊ทผํ๋ฉด ๋ฐ์ดํฐ๊ฐ ๊ผฌ์ผ ์ ์์ด ์ค๋ ๋ ์์ ํ์ง ์์ ๋ฌธ์ ๊ฐ ์์
๐ ํด๊ฒฐ๋ฐฉ๋ฒ๊ณผ ๊ธฐ๋ํจ๊ณผ
ImmutableMap ๊ธฐ๋ฐ Eager Init ๊ตฌ์กฐ๋ก ์ ํ
์ ํ๋ฆฌ์ผ์ด์
์์ ์ ๋ชจ๋ ์์ฒญ ํ์
์ ์ค์ ์ ๋ฏธ๋ฆฌ ์์ฑํด ๋ถ๋ณ ์บ์๋ก ๊ด๋ฆฌํ๊ณ , ๋ฐํ์์๋ ๋จ์ ์กฐํ๋ง ์ํํ๋๋ก ์ค๊ณ
๊ธฐ๋ํจ๊ณผ: ๊ฐ์ฒด ์์ฑ ๋น์ฉ์ด ์ฌ๋ผ์ง๊ณ ๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์๋ ์์ ์ ์ธ ๋์์ ๋ณด์ฅ
ํ์ฅ
Github ๊ด๋ฆฌ
๋๋ฉ์ธ ๊ฐ๋ฐ: ์ธ์ฆ/์ธ๊ฐ, auth, address, order
ํ
ํฌ ๋ฆฌ๋
Git ์ด๊ธฐํ
๋๋ฉ์ธ ๊ฐ๋ฐ: user+exception, menu
๋ฐฐํฌ
๋๋ฉ์ธ ๊ฐ๋ฐ: cart, order
ํ์๋ก ์์ฑ, ๋
ธ์
์ ๋ฆฌ
๋๋ฉ์ธ ๊ฐ๋ฐ: AI, Review
Git README ์์ฑ
๋๋ฉ์ธ ๊ฐ๋ฐ: Store, Category
Menu API ๋ช
์ธ์ ์์ฑ
๐ฏ ๊ฐ๋ฐ ๋ฐ ํ์
์ธก๋ฉด์์ ์ฐ๋ฆฌ ์กฐ๊ฐ ์ํ ๋ถ๋ถ
Rumtime Exception ๊ธฐ๋ฐ์ ๊ณตํต ์์ธ ์ฒ๋ฆฌ ์ ์ฑ
์ผ๊ด๋ ์๋ต ๋ฐํ์ ์ํ ๊ณตํต ์๋ต ๊ฐ์ฒด ์ ์
soft-delete ์ฒ๋ฆฌ๋ฅผ ์ํ ์ญ์ ์ ์ฑ
data ์ถ์ /๊ฐ์ฌ๋ฅผ ์ํ auditing ์ ์ฑ
๐ฏ ํ์ฌ ์ฐ๋ฆฌ ์์คํ
์ ํ๊ณ์ ์ด๋ฅผ ๋ฐ์ ์ํค๊ธฐ ์ํ ๊ณํ
ํ์ฌ RefreshToken๊ณผ ๋ธ๋๋ฆฌ์คํธ๋ฅผ DB์ ์ ์ฅํ๊ณ ๋ง๋ฃ๋ ํ ํฐ์ ์ค์ผ์ค๋ฌ๋ฅผ ํตํด ์ฃผ๊ธฐ์ ์ผ๋ก ์ญ์ , ์ด ๋ฐฉ์์ ์๋ฒ ์ฌ์์ ์ ์ค์ผ์ค๋ฌ๊ฐ ๋์ํ์ง ์์ ์ ์์ โ Redis๋ฅผ ๋์
ํด ํ ํฐ ๋ง๋ฃ์์ ์ ์๋์ผ๋ก ์ญ์ ๋๋๋ก ๋ณ๊ฒฝํ์ฌ ์ฑ๋ฅ ํฅ์
๐ฏ ํ์
์ ์์ฝ๊ฑฐ๋ ๋ถ์กฑํ๋ ๋ถ๋ถ
๋ค ํจ๊ป ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ํ๋ ์๊ฐ์ด ์์๋ ์ ์ด ์์ฝ
ํ๋ก์ ํธ ์ด๊ธฐ์ ์ผ์ ๊ณํ์ ์ธ๋ถํํ์ง ๋ชปํด์ ์๊ฐ์ด ๋ถ์กฑํด ์์ฑ๋๋ฅผ ๋์ผ ์๊ฐ์ด ์์๋ ์ ์ด ์์ฝ
๋๋ฉ์ธ ์ค๊ณ ์ ํ์ ๋๋ฉ์ธ๊ณผ์ ์ฐ๊ด์ฑ๊ณผ ํ์ฅ์ฑ์ ์ถฉ๋ถํ ๊ณ ๋ คํ์ง ๋ชปํ ์ ์ด ์์ฝ
๊ฐ์ ๋งก์ ๋ถ๋ถ ๊ตฌํ์ ์ง์คํด ์ ์ฒด ํ๋ฆ์ ํ์
ํ ์๊ฐ์ด ์์๋ ์ ์ด ์์ฝ
๊ธฐ๋ฅ ๊ตฌํ์ ์ง์คํ๋๋ผ ๊ณตํต ๋ฌธ์ ๊ด๋ฆฌ์ ์ถฉ๋ถํ ์๊ฐ์ ํ ์ ํ์ง ๋ชปํ ์ ์ด ์์ฝ