From 2545d2257b716e541035f0ff6e7321325f65d0cd Mon Sep 17 00:00:00 2001 From: DaveLee-b <76063864+DaveLee-b@users.noreply.github.com> Date: Wed, 7 Jan 2026 12:52:01 +0900 Subject: [PATCH 1/4] Enhance README with table of contents and conventions Add table of contents and update conventions section --- README.md | 360 ++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 269 insertions(+), 91 deletions(-) diff --git a/README.md b/README.md index 33308f6..aa49a36 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,32 @@ ![Swagger UI](https://img.shields.io/badge/Swagger_UI-85EA2D?style=flat&logo=swagger&logoColor=black)

+## ๐Ÿ“‘ Table of Contents + +- [ShoppingFourU](#shoppingfouru) +- [๐Ÿ‘ฅ Team Member](#-team-member) +- [๐Ÿ› Architecture](#-architecture) +- [๐Ÿ“Œ Convention](#-convention) +- [๐Ÿ“ก API Documentation](#-api-documentation) +- [๐Ÿ”ฅ Troubleshooting](#-troubleshooting) + - [๋ถˆํ•„์š”ํ•œ ์ฟผ๋ฆฌ ์ƒ์„ฑ ๋ฌธ์ œ](#๋ถˆํ•„์š”ํ•œ-์ฟผ๋ฆฌ-์ƒ์„ฑ-๋ฌธ์ œ) + - [JWT ํ•„ํ„ฐ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋ฌธ์ œ](#jwt-ํ•„ํ„ฐ-์˜ˆ์™ธ-์ฒ˜๋ฆฌ-๋ฌธ์ œ) +- [๐Ÿš€ ๊ธฐ๋ณธ ํ”„๋กœ์ ํŠธ ์ดํ›„ ๋ณด์™„์ ](#-๊ธฐ๋ณธ-ํ”„๋กœ์ ํŠธ-์ดํ›„-๋ณด์™„์ ) + - [Git ยท Slack ์•Œ๋ฆผ & Bot ์—๋Ÿฌ ์—ฐ๋™](#-git--slack-์•Œ๋ฆผ--bot-์—๋Ÿฌ-์—ฐ๋™) + - [API ์ ‘๊ทผ ์ œํ•œ (Rate Limiting)](#-api-์ ‘๊ทผ-์ œํ•œ-rate-limiting) + - [Domain Refactoring](#-domain-refactoring) + - [ํ• ์ธ ยท ๋ฉค๋ฒ„์‹ญ ์ •์ฑ… ๋ชจ๋“ˆํ™”](#-ํ• ์ธ--๋ฉค๋ฒ„์‹ญ-์ •์ฑ…-๋ชจ๋“ˆํ™”) + - [์ฃผ๋ฌธ ์‹œ ๋ฐฐ์†ก์ง€ ๊ฒ€์ฆ ๊ฐ•ํ™”](#-์ฃผ๋ฌธ-์‹œ-๋ฐฐ์†ก์ง€-๊ฒ€์ฆ-๊ฐ•ํ™”) + - [์ฃผ๋ฌธโ€“๊ฒฐ์ œ ํ”„๋กœ์„ธ์Šค ๋ฆฌํŒฉํ† ๋ง & ๋™์‹œ์„ฑ ์ œ์–ด](#-์ฃผ๋ฌธ๊ฒฐ์ œ-ํ”„๋กœ์„ธ์Šค-๋ฆฌํŒฉํ† ๋ง--๋™์‹œ์„ฑ-์ œ์–ด) + - [๋‚™๊ด€์  ๋ฝ (Optimistic Lock) ๋„์ž…](#-๋‚™๊ด€์ -๋ฝ-optimistic-lock-๋„์ž…) + - [์žฌ๊ณ  ์˜ˆ์•ฝ ์‹œ์Šคํ…œ ๋„์ž…](#-์žฌ๊ณ -์˜ˆ์•ฝ-์‹œ์Šคํ…œ-๋„์ž…) + - [์ฐœ (Wishlist) ๋„๋ฉ”์ธ ์ถ”๊ฐ€](#-์ฐœ-wishlist-๋„๋ฉ”์ธ-์ถ”๊ฐ€) +- [๐Ÿงช ์ƒˆ๋กœ์šด ๊ธฐ์ˆ  ๋„์ž… ์‚ฌํ•ญ ๋ฐ ์„ ์ • ์ด์œ ](#-์ƒˆ๋กœ์šด-๊ธฐ์ˆ -๋„์ž…-์‚ฌํ•ญ-๋ฐ-์„ ์ •-์ด์œ ) + - [์ƒํ’ˆ ํ• ์ธ ์‹œ ์ด๋ฉ”์ผ ์•Œ๋ฆผ ์‹œ์Šคํ…œ ๋„์ž…](#์ƒํ’ˆ-ํ• ์ธ-์‹œ-์ด๋ฉ”์ผ-์•Œ๋ฆผ-์‹œ์Šคํ…œ-๋„์ž…) + - [OpenAI ๊ธฐ๋ฐ˜ FAQ ์ฑ—๋ด‡ ๋„์ž…](#openai-๊ธฐ๋ฐ˜-faq-์ฑ—๋ด‡-๋„์ž…) + - [ELK + ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ ๋„์ž…](#elk--๋ชจ๋‹ˆํ„ฐ๋ง-์‹œ์Šคํ…œ-๋„์ž…) + + # ShoppingFourU `ShoppingFourU` ๋Š” ์˜จ๋ผ์ธ ์‡ผํ•‘๋ชฐ ์šด์˜์— ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋“ค์„ ์™„์ „ํ•˜๊ฒŒ ๊ตฌํ˜„ํ•œ E-commerce ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค.
ํšŒ์› ๊ด€๋ฆฌ๋ถ€ํ„ฐ ์ƒํ’ˆ ๋“ฑ๋ก, ์žฅ๋ฐ”๊ตฌ๋‹ˆ, ์ฃผ๋ฌธ/๊ฒฐ์ œ๊นŒ์ง€ ์‹ค์ œ ์„œ๋น„์Šค์™€ ๋™์ผํ•œ ํ๋ฆ„์„ ์ œ๊ณตํ•˜๋ฉฐ
@@ -35,100 +61,13 @@ ## ๐Ÿ› Architecture ๐Ÿ“œ ERD ์„ค๊ณ„๋„ -image -
- -## ๐Ÿ“Œ Naming Rules - -| ํ•ญ๋ชฉ | ๊ทœ์น™ | -| --------- | ------------ | -| Package | `kebab-case` | -| Class | `PascalCase` | -| Constant | `UPPERCASE` | -| Method | `camelCase` | -| Variables | `camelCase` | -
- - -## ๐Ÿ“ Commit Convention - -| Header | ๊ธฐ๋Šฅ | -| ------------ | -------------------- | -| **Update** | ๋ณ€๊ฒฝ ์‚ฌํ•ญ ์—…๋ฐ์ดํŠธ | -| **feat** | ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€ | -| **fix** | ๋ฒ„๊ทธ ์ˆ˜์ • | -| **docs** | ๋ฌธ์„œ ์ˆ˜์ • | -| **style** | ์ฝ”๋“œ ํฌ๋งทํŒ… | -| **refactor** | ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง | -| **test** | ํ…Œ์ŠคํŠธ ์ฝ”๋“œ | -| **chore** | ๋นŒ๋“œ ์—…๋ฌด ์ˆ˜์ •, ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ € ์ˆ˜์ • | -| **comment** | ์ฃผ์„ ์ถ”๊ฐ€ ๋ฐ ๋ณ€๊ฒฝ | -| **remove** | ํŒŒ์ผ, ํด๋” ์‚ญ์ œ | -| **rename** | ํŒŒ์ผ, ํด๋”๋ช… ์ˆ˜์ • | -
- - -โœ” ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ํ˜•์‹
- -[ํ‹ฐ์ผ“ ๋ฒˆํ˜ธ] ์ž‘์—… ์œ ํ˜•: ์ž‘์—… ๋‚ด์šฉ

- -โœ” ์˜ˆ์‹œ
- -[TKT-15] feat: ๋กœ๊ทธ์ธ ์‹œ ์ž ๊ธˆ ๊ฒ€์ฆ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
- -[TKT-17] chore: ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ถ”๊ฐ€
- -[TKT-23] feat: ์ธ์ฆ/์ธ๊ฐ€ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
-
- - -## ๐Ÿฌ Git Flow - -image - -- **main** : ์ถœ์‹œ ๊ฐ€๋Šฅํ•œ ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ์˜ ๋ธŒ๋žœ์น˜ - -- **dev** : ๋‹ค์Œ ๋ฒ„์ „์„ ๊ฐœ๋ฐœํ•˜๋Š” ๋ธŒ๋žœ์น˜ - -- **feat** : ์ด์Šˆ ๋‹จ์œ„๋กœ ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•˜๋Š” ๋ธŒ๋žœ์น˜ - - ๋ธŒ๋žœ์น˜ ๋„ค์ด๋ฐ: `feat/#์ด์Šˆ๋ฒˆํ˜ธ/[topic]` - -- **fix** : ์ด์Šˆ ๋‹จ์œ„๋กœ ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๋ธŒ๋žœ์น˜ - - ๋ธŒ๋žœ์น˜ ๋„ค์ด๋ฐ: `fix/#์ด์Šˆ๋ฒˆํ˜ธ/[topic]` - -*๋ธŒ๋žœ์น˜๋ช…์€ Jira ์ž‘์—…์„ ์ƒ์„ฑํ•˜๋ฉด ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. -
-
- - -## ๐Ÿงฉ Issue Template - -โœจ์ด์Šˆ ์„ค๋ช… -

- - -๐Ÿ”ฅํˆฌ๋‘๋ฆฌ์ŠคํŠธ -

- - -๐Ÿ”–๊ธฐํƒ€ ์‚ฌํ•ญ -

+basic-project-shopping_last_last_copy
-## ๐Ÿ”€ PR Template +## ๐Ÿ“Œ Convention +์ž์„ธํ•œ ์ปจ๋ฒค์…˜์‚ฌํ•ญ์€ ๋…ธ์…˜์„ ํ†ตํ•ด ํ™•์ธ ํ•ด์ฃผ์„ธ์š”! +https://vivid-thyme-ac6.notion.site/Commit-Convention-2e19e3e335cc80d7bf16c7377e4ddeac?source=copy_link -๐Ÿ“์š”์•ฝ(Summary)
-์ด์Šˆ ๋ฒˆํ˜ธ : # -

- - -๐Ÿ”จ๋ณ€๊ฒฝ ์‚ฌํ•ญ(Changes) -

- - -๐Ÿ˜‰๋ฆฌ๋ทฐ ์š”๊ตฌ์‚ฌํ•ญ -

-
## ๐Ÿ“ก API Documentation @@ -190,3 +129,242 @@ return header.substring(BEARER_PREFIX.length()); ์˜ˆ์™ธ๋ฅผ ๋˜์ง€์ง€ ์•Š๊ณ  null ๋ฐ˜ํ™˜
- ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด Security์—์„œ ์ธ์ฆ์—†์ด ํ†ต๊ณผ์‹œํ‚ค๊ณ  Controller ๋กœ์ง๊นŒ์ง€ ์ •์ƒ์ ์œผ๋กœ ์ „๋‹ฌ๋จ + +## ๐Ÿš€ ๊ธฐ๋ณธ ํ”„๋กœ์ ํŠธ ์ดํ›„ ๋ณด์™„์  + +๊ธฐ๋ณธ ํ”„๋กœ์ ํŠธ ๊ตฌํ˜„ ์ดํ›„, +์‹ค์ œ ์šด์˜ ํ™˜๊ฒฝ์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋“ค์„ ๊ฐ€์ •ํ•˜๊ณ  **์•ˆ์ •์„ฑ๊ณผ ํ™•์žฅ์„ฑ**์„ ์ค‘์‹ฌ์œผ๋กœ ๊ตฌ์กฐ๋ฅผ ๋ณด์™„ํ–ˆ์Šต๋‹ˆ๋‹ค. +๋‹จ์ˆœ ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ๋„˜์–ด์„œ **์šด์˜ ๊ด€์ ์˜ ํ’ˆ์งˆ ๊ฐœ์„ **์— ์ดˆ์ ์„ ๋งž์ท„์Šต๋‹ˆ๋‹ค. + +### ๐Ÿ”” Git ยท Slack ์•Œ๋ฆผ & Bot ์—๋Ÿฌ ์—ฐ๋™ + +#### ๋„์ž… ๋ฐฐ๊ฒฝ +- ์—๋Ÿฌ ๋ฐœ์ƒ ์‹œ ๋กœ๊ทธ ํ™•์ธ์ด ๋Šฆ์–ด์ง +- PR, ๋ฐฐํฌ ์ด๋ฒคํŠธ๊ฐ€ ํŒ€ ์ „์ฒด์— ๊ณต์œ ๋˜์ง€ ์•Š์Œ + +#### ๊ฐœ์„  ๋‚ด์šฉ +- GitHub ์ด๋ฒคํŠธ โ†’ Slack **์‹ค์‹œ๊ฐ„ ์•Œ๋ฆผ ์—ฐ๋™** +- PR ์ƒ์„ฑ / ๋จธ์ง€ / ๋ฐฐํฌ ์•Œ๋ฆผ **์ž๋™ํ™”** +- ์ฃผ๋ฌธ ์‹คํŒจ, ๊ฒฐ์ œ ์˜ค๋ฅ˜ ๋“ฑ **์ค‘์š” ๋„๋ฉ”์ธ ์—๋Ÿฌ Bot ์•Œ๋ฆผ** +- ์žฅ์•  ์ƒํ™ฉ์— ๋Œ€ํ•œ **์ฆ‰๊ฐ์ ์ธ ํŒ€ ๋‹จ์œ„ ๋Œ€์‘ ๊ฐ€๋Šฅ** + +#### ํšจ๊ณผ +- ์ด์Šˆ ์ธ์ง€ ์‹œ๊ฐ„ ๋‹จ์ถ• +- ์šด์˜ ์ค‘ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์— ๋Œ€ํ•œ ๊ฐ€์‹œ์„ฑ ํ™•๋ณด + +--- + +### ๐Ÿšฆ API ์ ‘๊ทผ ์ œํ•œ (Rate Limiting) + +#### ๋„์ž… ๋ฐฐ๊ฒฝ +- ๋ฌด๋ถ„๋ณ„ํ•œ API ํ˜ธ์ถœ๋กœ ์ธํ•œ ์„œ๋ฒ„ ๋ถ€ํ•˜ ๋ฐ ์„œ๋น„์Šค ํ’ˆ์งˆ ์ €ํ•˜ ์šฐ๋ ค + +#### ์„ค๊ณ„ ๋ชฉํ‘œ + +**1์ฐจ ๋ฐฉ์–ด** +- Global Filter ๊ธฐ๋ฐ˜ IP ๋‹จ์œ„ ์ œํ•œ +- ์ดˆ๋‹น 100ํšŒ / ์ตœ๋Œ€ 10,000 IP ๊ธฐ์ค€ + +**2์ฐจ ๋ฐฉ์–ด** +- AOP ๊ธฐ๋ฐ˜ Controller ๋‹จ์œ„ ์ ‘๊ทผ ์ œ์–ด +- API ํŠน์„ฑ์— ๋”ฐ๋ผ IP / ์‚ฌ์šฉ์ž๋ณ„ ์ œํ•œ ์ •์ฑ… ๋ถ„๋ฆฌ ์ ์šฉ + +#### Bucket4j ์„ ํƒ ์ด์œ  +- ๋ฉ”์„œ๋“œ๋ณ„๋กœ ์„œ๋กœ ๋‹ค๋ฅธ ์ œํ•œ ์ •์ฑ… ์ ์šฉ ๊ฐ€๋Šฅ +- Redis ์‚ฌ์šฉ์ด ์ œํ•œ์ ์ธ ํ™˜๊ฒฝ ๊ณ ๋ ค +- Caffeine ๊ธฐ๋ฐ˜ ์บ์‹œ๋กœ **๊ฒฝ๋Ÿ‰ ยท ๊ณ ์„ฑ๋Šฅ ยท ๋™์‹œ์„ฑ ์•ˆ์ •์„ฑ ํ™•๋ณด** + +--- + +### ๐Ÿง  Domain Refactoring + +#### 1๏ธโƒฃ ํ• ์ธ ยท ๋ฉค๋ฒ„์‹ญ ์ •์ฑ… ๋ชจ๋“ˆํ™” + +**๊ธฐ์กด ๋ฌธ์ œ** +- ๋ฉค๋ฒ„์‹ญ๊ณผ ํ• ์ธ ๊ตฌ์กฐ๊ฐ€ 1:1๋กœ ๊ฐ•ํ•˜๊ฒŒ ๊ฒฐํ•ฉ +- ํ• ์ธ ๋กœ์ง์ด ๋ณต์žกํ•˜์—ฌ ๋‹ค๋ฅธ ๋„๋ฉ”์ธ ์ ์šฉ์ด ์–ด๋ ค์›€ + +**๊ฐœ์„  ์‚ฌํ•ญ** +- ์ƒํ’ˆ๋ณ„ ํ• ์ธ ๊ตฌ์กฐ ๋„์ž… +- ํ• ์ธ ์กฐํ•ฉ ๊ฐ€๋Šฅ ๊ตฌ์กฐ ์„ค๊ณ„ +- ์ตœ๋Œ€ ํ• ์ธ ์ž๋™ ๊ณ„์‚ฐ ๋กœ์ง ์ถ”๊ฐ€ +- ํ• ์ธ ๊ณ„์‚ฐ ๋กœ์ง์„ ๋ณ„๋„ ์„œ๋น„์Šค๋กœ ๋ถ„๋ฆฌ + +**๊ฒฐ๊ณผ** +- ํ• ์ธ ์ •์ฑ… ํ™•์žฅ์„ฑ ์ฆ๊ฐ€ +- ๋‹ค๋ฅธ ๋„๋ฉ”์ธ์—์„œ๋„ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ตฌ์กฐ ํ™•๋ณด + +--- + +#### 2๏ธโƒฃ ์ฃผ๋ฌธ ์‹œ ๋ฐฐ์†ก์ง€ ๊ฒ€์ฆ ๊ฐ•ํ™” + +**๊ฐœ์„  ๋‚ด์šฉ** +- ๋ฐฐ์†ก์ง€ ๋ฏธ์ž…๋ ฅ ์‹œ + โ†’ ์œ ์ €์˜ ๊ธฐ๋ณธ ๋ฐฐ์†ก์ง€ ์ค‘ **๊ฐ€์žฅ ์ตœ๊ทผ ์ฃผ๋ฌธ์— ์‚ฌ์šฉ๋œ ๋ฐฐ์†ก์ง€ ์ž๋™ ์ ์šฉ** +- ์ฃผ๋ฌธ ์š”์ฒญ ์‹œ ์ „๋‹ฌ๋œ ๋ฐฐ์†ก์ง€ ID๊ฐ€ + โ†’ **ํ•ด๋‹น ์œ ์ € ์†Œ์œ  ๋ฐฐ์†ก์ง€์ธ์ง€ ๊ฒ€์ฆ ๋กœ์ง ์ถ”๊ฐ€** + +**ํšจ๊ณผ** +- ์ž˜๋ชป๋œ ๋ฐฐ์†ก ์ •๋ณด๋กœ ์ธํ•œ ์ฃผ๋ฌธ ์˜ค๋ฅ˜ ๋ฐฉ์ง€ +- ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ๊ฐœ์„  + +--- + +### ๐Ÿ’ณ ์ฃผ๋ฌธโ€“๊ฒฐ์ œ ํ”„๋กœ์„ธ์Šค ๋ฆฌํŒฉํ† ๋ง & ๋™์‹œ์„ฑ ์ œ์–ด + +#### ๊ธฐ์กด ๋ฌธ์ œ์  +- ์ฃผ๋ฌธ / ๊ฒฐ์ œ API๊ฐ€ ๋ถ„๋ฆฌ๋œ ํŠธ๋žœ์žญ์…˜ ๊ตฌ์กฐ + โ†’ ๊ฒฐ์ œ ์„ฑ๊ณต ํ›„ ์žฌ๊ณ  ์ฐจ๊ฐ ์‹คํŒจ ์‹œ ๋กค๋ฐฑ ๋ถˆ๊ฐ€ +- ์žฌ๊ณ  ๋™์‹œ์„ฑ ์ œ์–ด ๋ถ€์žฌ + โ†’ ์ดˆ๊ณผ ํŒ๋งค ๊ฐ€๋Šฅ์„ฑ ์กด์žฌ + +#### ๊ฐœ์„ ๋œ ํ”„๋กœ์„ธ์Šค + +**์ฃผ๋ฌธ ์ƒ์„ฑ API** +- ์ƒํ’ˆ ๊ตฌ๋งค ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ํ™•์ธ +- ์ฃผ๋ฌธ ์ •๋ณด ์ €์žฅ + ๐Ÿ‘‰ ์ƒํƒœ: `PENDING_PAYMENT` + +**๊ฒฐ์ œ ์ƒ์„ฑ API** +- ์™ธ๋ถ€ ๊ฒฐ์ œ ๋ชจ๋“ˆ ํ˜ธ์ถœ +- **(Transaction)** + - ๊ฒฐ์ œ ์ •๋ณด ์ €์žฅ + - ์ƒํ’ˆ ์žฌ๊ณ  ์ฐจ๊ฐ + - ์ฃผ๋ฌธ ์ƒํƒœ ๋ณ€๊ฒฝ โ†’ `PAID` + +> ๐Ÿ’ก +> ์™ธ๋ถ€ ๊ฒฐ์ œ API ํ˜ธ์ถœ์€ ํŠธ๋žœ์žญ์…˜์— ํฌํ•จํ•˜์ง€ ์•Š๊ณ , +> DB ๋ณ€๊ฒฝ ๋กœ์ง๋งŒ ์›์ž์ ์œผ๋กœ ๋ฌถ์–ด **๋ฝ ์ ์œ  ๋ฐ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ๋ฐฉ์ง€** + +--- + +### ๐Ÿ” ๋‚™๊ด€์  ๋ฝ (Optimistic Lock) ๋„์ž… + +- ์ƒํ’ˆ ์—”ํ‹ฐํ‹ฐ์— `@Version` ํ•„๋“œ ์ถ”๊ฐ€ +- ๋™์‹œ ์žฌ๊ณ  ์ฐจ๊ฐ ์‹œ ์ปค๋ฐ‹ ์‹œ์ ์— ์ถฉ๋Œ ๊ฐ์ง€ +- ์ถฉ๋Œ ๋ฐœ์ƒ ์‹œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ํ›„ ์žฌ์‹œ๋„ ์ „๋žต ์ ์šฉ + +**์„ ํƒ ์ด์œ ** +- ์žฌ๊ณ  ์ถฉ๋Œ ๋นˆ๋„๊ฐ€ ๋‚ฎ์€ ๊ตฌ์กฐ +- ๋น„๊ด€์  ๋ฝ๋ณด๋‹ค ์„ฑ๋Šฅ์ƒ ์œ ๋ฆฌํ•˜๋‹ค๊ณ  ํŒ๋‹จ + +--- + +### ๐Ÿ“ฆ ์žฌ๊ณ  ์˜ˆ์•ฝ ์‹œ์Šคํ…œ ๋„์ž… + +#### ๋„์ž… ์ด์œ  +- ๋™์‹œ ์ฃผ๋ฌธ ํ™˜๊ฒฝ์—์„œ ์ดˆ๊ณผ ํŒ๋งค ๋ฐฉ์ง€ +- ๊ฒฐ์ œ ์™„๋ฃŒ ์ „ ๊ตฌ๋งค ๊ถŒํ•œ ์„ ์  ํ•„์š” + +#### ํ”„๋กœ์„ธ์Šค + +**์ฃผ๋ฌธ ์ƒ์„ฑ ์‹œ** +- ์žฌ๊ณ  ์ฐจ๊ฐ +- ์žฌ๊ณ  ์˜ˆ์•ฝ ์ •๋ณด ์ €์žฅ +- ์ฃผ๋ฌธ ์ƒํƒœ: `PENDING_PAYMENT` + +**๊ฒฐ์ œ ์„ฑ๊ณต ์‹œ** +- ์žฌ๊ณ  ์˜ˆ์•ฝ ํ•ด์ œ +- ์ฃผ๋ฌธ ์ƒํƒœ ๋ณ€๊ฒฝ: `PAID` + +**๊ฒฐ์ œ ์‹คํŒจ / ์˜ˆ์•ฝ ๋งŒ๋ฃŒ ์‹œ** +- ์˜ˆ์•ฝ ์ •๋ณด ์‚ญ์ œ +- ์žฌ๊ณ  ๋ณต๊ตฌ + +#### ๊ฒฐ๊ณผ +- ์žฌ๊ณ  ๋™์‹œ์„ฑ ๋ฌธ์ œ ๊ทผ๋ณธ์  ํ•ด๊ฒฐ +- ์•ˆ์ •์ ์ธ ์ฃผ๋ฌธโ€“๊ฒฐ์ œ ํ๋ฆ„ ํ™•๋ณด + +--- + +### โค๏ธ ์ฐœ (Wishlist) ๋„๋ฉ”์ธ ์ถ”๊ฐ€ + +#### ๋„์ž… ๋ฐฐ๊ฒฝ +- ๊ตฌ๋งค ์ „ ํƒ์ƒ‰ ๋‹จ๊ณ„์—์„œ์˜ **๋ช…ํ™•ํ•œ ๊ด€์‹ฌ ๋ฐ์ดํ„ฐ ํ™•๋ณด** +- ํ• ์ธ ์•Œ๋ฆผ ๋“ฑ ๋น„๋™๊ธฐ ์•Œ๋ฆผ ๊ธฐ๋Šฅ์˜ ๊ธฐ์ค€ ๋„๋ฉ”์ธ ํ•„์š” +- ์žฅ๋ฐ”๊ตฌ๋‹ˆ์™€ ๋ชฉ์ ์ด ๋‹ค๋ฅธ **์ค‘ยท์žฅ๊ธฐ ๊ด€์‹ฌ ์ƒํ’ˆ ๊ด€๋ฆฌ ๋„๋ฉ”์ธ ๋ถ„๋ฆฌ** + +#### ํšจ๊ณผ +- ์‚ฌ์šฉ์ž ํ–‰๋™ ๋ฐ์ดํ„ฐ ์ •๊ตํ™” +- ํ• ์ธ ์•Œ๋ฆผ, ์ถ”์ฒœ ๊ธฐ๋Šฅ ๋“ฑ ํ™•์žฅ ๊ธฐ๋ฐ˜ ํ™•๋ณด +- ๋„๋ฉ”์ธ ์ฑ…์ž„ ๋ถ„๋ฆฌ๋กœ ๋กœ์ง ๋ช…ํ™•์„ฑ ํ–ฅ์ƒ + + + +## ์ƒˆ๋กœ์šด ๊ธฐ์ˆ  ๋„์ž… ์‚ฌํ•ญ ๋ฐ ์„ ์ • ์ด์œ  + + +### ์ƒํ’ˆ ํ• ์ธ ์‹œ ์ด๋ฉ”์ผ ์•Œ๋ฆผ ์‹œ์Šคํ…œ ๋„์ž… + +#### ๋„์ž… ๋ฐฐ๊ฒฝ +- ํ• ์ธ ๋ฐ ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์‹œ, ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์ดํŠธ์— ์ ‘์† ์ค‘์ด ์•„๋‹ˆ๋”๋ผ๋„ + ์ •๋ณด๋ฅผ ์ „๋‹ฌ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก **์‚ฌ์šฉ์ž ํŽธ์˜์„ฑ ํ–ฅ์ƒ**์„ ๋ชฉํ‘œ๋กœ ํ•จ + +#### ํ•ด๊ฒฐ ๋ชฉํ‘œ +- ์ฐœํ•œ ์ƒํ’ˆ ๋˜๋Š” ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ๋‹ด๊ธด ์ƒํ’ˆ์— ํ• ์ธ ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์‹œ + ์ด๋ฉ”์ผ ์•Œ๋ฆผ์„ ํ†ตํ•ด **๊ธฐ๊ฐ„์ด ์งง์€ ์ด๋ฒคํŠธ๋ฅผ ๋†“์น˜์ง€ ์•Š๋„๋ก ์œ ๋„** +- ์ฐœ / ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ๋™์‹œ์— ์กด์žฌํ•˜๋Š” ์ƒํ’ˆ์— ๋Œ€ํ•ด + **์ค‘๋ณต ๋ฉ”์ผ ๋ฐœ์†ก ๋ฐฉ์ง€ ๋กœ์ง ์ ์šฉ** + +#### ์ด๋ฉ”์ผ ์„ ์ • ์ด์œ  +- ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ์šฉ์ž๊ฐ€ ์ด๋ฉ”์ผ์„ ๋ณด์œ ํ•˜๊ณ  ์žˆ์–ด ์ ‘๊ทผ์„ฑ์ด ๋†’์Œ +- ํšŒ์›๊ฐ€์ž… ์‹œ ์ด๋ฏธ ์ด๋ฉ”์ผ ์ •๋ณด๋ฅผ ์ˆ˜์ง‘ํ•˜๋ฏ€๋กœ + ์ถ”๊ฐ€ ์ •๋ณด ์ž…๋ ฅ์ด๋‚˜ ์™ธ๋ถ€ ์„œ๋น„์Šค ์ฐธ์—ฌ๋ฅผ ์š”๊ตฌํ•˜์ง€ ์•Š์•„๋„ ๋จ +- Slack, Discord ๋“ฑ์€ ๋ณ„๋„์˜ ํ”„๋กœ๊ทธ๋žจ ์‚ฌ์šฉ ๋ฐ ๊ณต๊ฐ„ ์ฐธ์—ฌ๊ฐ€ ํ•„์š”ํ•˜์—ฌ + ์‚ฌ์šฉ์ž ์•Œ๋ฆผ ๋ชฉ์ ๊ณผ ๋งž์ง€ ์•Š์•„ ์ œ์™ธ +- ์นด์นด์˜คํ†ก ์ฑ„๋„์˜ ๊ฒฝ์šฐ + - ์‚ฌ์—…์ž ๋“ฑ๋ก ํ•„์ˆ˜ + - ์œ ๋ฃŒ ๋ฉ”์‹œ์ง€ ๋ฐœ์†ก + - ์นด์นด์˜ค ๊ณ„์ • ๊ด€๋ จ ์ •๋ณด ์ถ”๊ฐ€ ๊ด€๋ฆฌ ํ•„์š” + โ†’ ์šด์˜ ๋น„์šฉ ๋ฐ ๋ณต์žก์„ฑ ์ฆ๊ฐ€๋กœ ์ธํ•ด ์ œ์™ธ + +### OpenAI ๊ธฐ๋ฐ˜ FAQ ์ฑ—๋ด‡ ๋„์ž… + +#### ํŒ€ ๋ฐฉํ–ฅ์„ฑ +- ์‹ ๊ทœ AI ๊ธฐ๋Šฅ ํ™•์žฅ๋ณด๋‹ค๋Š” **๊ธฐ์กด ์„œ๋น„์Šค ๋‚ด๋ถ€ ๊ธฐ๋Šฅ ๊ฐ•ํ™”**์— ์ค‘์  +- FAQ ์™ธ NOTICE, POLICY ์ฑ—๋ด‡๋„ ๊ฒ€ํ† ํ•˜์˜€์œผ๋‚˜ + ํŒ€ ๋ฐฉํ–ฅ์„ฑ๊ณผ ์ผ์ • ๊ณ ๋ คํ•˜์—ฌ **FAQ ์ฑ—๋ด‡ ์šฐ์„  ๊ฐœ๋ฐœ** ๊ฒฐ์ • + +#### ๊ฐœ๋ฐœ ๋ฐฉ์‹ +- ๊ฐ•์‚ฌ๋‹˜ ์ œ๊ณต OpenAI ์˜ˆ์ œ ์ฝ”๋“œ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ๋ฐœ +- ๊ธฐ์กด ๊ตฌ์กฐ๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  + - ํด๋” ๊ตฌ์กฐ ์„ธ๋ถ„ํ™” + - ์ผ๋ถ€ ๋กœ์ง ์ˆ˜์ • ๋ฐ ์ฑ…์ž„ ๋ถ„๋ฆฌ + +#### ๋ฐ์ดํ„ฐ ๊ตฌ์„ฑ +- ๋„๋ฉ”์ธ๋ณ„ ์ž์ฃผ ๋ฌป๋Š” ์งˆ๋ฌธ๊ณผ ๋‹ต๋ณ€์„ **JSON ํŒŒ์ผ๋กœ ์ •๋ฆฌ** +- ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ **๋ฒกํ„ฐ ์Šคํ† ์–ด(Vector Store) ์—ฐ๋™** + +#### ๊ธฐ๋Šฅ ๋ฒ”์œ„ +- FAQ JSON ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜ ์งˆ์˜์‘๋‹ต ์ œ๊ณต +- ์„œ๋น„์Šค ๋‹ด๋‹น ๋„๋ฉ”์ธ ์™ธ ์งˆ๋ฌธ์— ๋Œ€ํ•ด์„œ๋Š” + ์‘๋‹ต์„ ์ œํ•œํ•˜์—ฌ **๋น„์˜๋„์  ๋‹ต๋ณ€ ๋ฐฉ์ง€** + +### ELK + ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ ๋„์ž… + +#### ๋„์ž… ๋ฐฐ๊ฒฝ +- ์„œ๋น„์Šค ์šด์˜ ๋‹จ๊ณ„์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ ๋ฐ ์žฅ์•  ์›์ธ์„ + ๋‹จ์ˆœ ์ฝ”๋“œ ๋กœ๊ทธ๋งŒ์œผ๋กœ ์ถ”์ ํ•˜๋Š” ๋ฐ ํ•œ๊ณ„ ์กด์žฌ +- ๋กœ๊ทธ ์ˆ˜์ง‘ ยท ๋ถ„์„ ยท ์‹œ๊ฐํ™”๋ฅผ ์œ„ํ•ด **ELK ์Šคํƒ ๋„์ž…** +- ์ดํ›„ ์„œ๋ฒ„๊ฐ€ ๊ฐ„ํ—์ ์œผ๋กœ ๋‹ค์šด๋˜๋Š” ํ˜„์ƒ ๋ฐœ์ƒ + - ELK ๋กœ๊ทธ๋งŒ์œผ๋กœ๋Š” ์›์ธ ํŒŒ์•…์ด ์–ด๋ ค์›€ +- CPU / ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰, ์ปจํ…Œ์ด๋„ˆ ๋ฆฌ์†Œ์Šค ์ƒํƒœ ๋“ฑ + **์‹œ์Šคํ…œ ์ „๋ฐ˜์˜ ์ƒํƒœ๋ฅผ ํ•จ๊ป˜ ํ™•์ธํ•  ํ•„์š”์„ฑ ์ธ์ง€** +- ์ด์— ๋”ฐ๋ผ **Prometheus + Grafana** ์ถ”๊ฐ€ ๋„์ž… + +#### ์—ญํ•  ๋ถ„๋ฆฌ ๋ฐ ํ™œ์šฉ + +**ELK Stack** +- ์—๋Ÿฌ ๋กœ๊ทธ ์ˆ˜์ง‘ +- ์š”์ฒญ ํ๋ฆ„ ๋ฐ ์žฅ์•  ์›์ธ ์ถ”์  + +**Prometheus + Grafana** +- EC2 ๋ฐ Docker ์ปจํ…Œ์ด๋„ˆ ๋ฆฌ์†Œ์Šค ๋ชจ๋‹ˆํ„ฐ๋ง +- CPU / ๋ฉ”๋ชจ๋ฆฌ / ์„œ๋น„์Šค ๋ถ€ํ•˜ ์ƒํƒœ ์‹ค์‹œ๊ฐ„ ์‹œ๊ฐํ™” + +#### ๋„์ž… ํšจ๊ณผ +- ๋กœ๊ทธ์™€ ๋ฉ”ํŠธ๋ฆญ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ๋ถ„์„ ๊ฐ€๋Šฅ +- ์„œ๋น„์Šค ์žฅ์•  ๋ฐœ์ƒ ์‹œ ์›์ธ ํŒŒ์•… ์†๋„ ํ–ฅ์ƒ +- ์šด์˜ ๊ด€์ ์—์„œ ์‹œ์Šคํ…œ ์ƒํƒœ๋ฅผ ํ•œ๋ˆˆ์— ํŒŒ์•… ๊ฐ€๋Šฅ + + From 7c6e1dca6b3f54f4d747a741e7d8882a7ed2a3c6 Mon Sep 17 00:00:00 2001 From: DaveLee-b <76063864+DaveLee-b@users.noreply.github.com> Date: Wed, 7 Jan 2026 14:08:38 +0900 Subject: [PATCH 2/4] Update section header for new technology introduction --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index aa49a36..789d835 100644 --- a/README.md +++ b/README.md @@ -291,7 +291,7 @@ Controller ๋กœ์ง๊นŒ์ง€ ์ •์ƒ์ ์œผ๋กœ ์ „๋‹ฌ๋จ -## ์ƒˆ๋กœ์šด ๊ธฐ์ˆ  ๋„์ž… ์‚ฌํ•ญ ๋ฐ ์„ ์ • ์ด์œ  +### ๐Ÿงช ์ƒˆ๋กœ์šด ๊ธฐ์ˆ  ๋„์ž… ์‚ฌํ•ญ ๋ฐ ์„ ์ • ์ด์œ  ### ์ƒํ’ˆ ํ• ์ธ ์‹œ ์ด๋ฉ”์ผ ์•Œ๋ฆผ ์‹œ์Šคํ…œ ๋„์ž… From fea5ad9d579bb8f2cfe1adf026d3a80a2d97138f Mon Sep 17 00:00:00 2001 From: DaveLee-b <76063864+DaveLee-b@users.noreply.github.com> Date: Wed, 7 Jan 2026 14:26:19 +0900 Subject: [PATCH 3/4] Refactor README section titles and formatting Updated section titles and improved formatting in README. --- README.md | 136 ++++++------------------------------------------------ 1 file changed, 15 insertions(+), 121 deletions(-) diff --git a/README.md b/README.md index 789d835..72720e7 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ - [๋‚™๊ด€์  ๋ฝ (Optimistic Lock) ๋„์ž…](#-๋‚™๊ด€์ -๋ฝ-optimistic-lock-๋„์ž…) - [์žฌ๊ณ  ์˜ˆ์•ฝ ์‹œ์Šคํ…œ ๋„์ž…](#-์žฌ๊ณ -์˜ˆ์•ฝ-์‹œ์Šคํ…œ-๋„์ž…) - [์ฐœ (Wishlist) ๋„๋ฉ”์ธ ์ถ”๊ฐ€](#-์ฐœ-wishlist-๋„๋ฉ”์ธ-์ถ”๊ฐ€) -- [๐Ÿงช ์ƒˆ๋กœ์šด ๊ธฐ์ˆ  ๋„์ž… ์‚ฌํ•ญ ๋ฐ ์„ ์ • ์ด์œ ](#-์ƒˆ๋กœ์šด-๊ธฐ์ˆ -๋„์ž…-์‚ฌํ•ญ-๋ฐ-์„ ์ •-์ด์œ ) +- [๐Ÿš€ ์ƒˆ๋กœ์šด ๊ธฐ์ˆ  ๋„์ž… ์‚ฌํ•ญ ๋ฐ ์„ ์ • ์ด์œ ](#-์ƒˆ๋กœ์šด-๊ธฐ์ˆ -๋„์ž…-์‚ฌํ•ญ-๋ฐ-์„ ์ •-์ด์œ ) - [์ƒํ’ˆ ํ• ์ธ ์‹œ ์ด๋ฉ”์ผ ์•Œ๋ฆผ ์‹œ์Šคํ…œ ๋„์ž…](#์ƒํ’ˆ-ํ• ์ธ-์‹œ-์ด๋ฉ”์ผ-์•Œ๋ฆผ-์‹œ์Šคํ…œ-๋„์ž…) - [OpenAI ๊ธฐ๋ฐ˜ FAQ ์ฑ—๋ด‡ ๋„์ž…](#openai-๊ธฐ๋ฐ˜-faq-์ฑ—๋ด‡-๋„์ž…) - [ELK + ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ ๋„์ž…](#elk--๋ชจ๋‹ˆํ„ฐ๋ง-์‹œ์Šคํ…œ-๋„์ž…) @@ -78,6 +78,7 @@ https://vivid-thyme-ac6.notion.site/Commit-Convention-2e19e3e335cc80d7bf16c7377e [๐Ÿ“„ Swagger Documentation](http://shoppingfouru.ap-northeast-2.elasticbeanstalk.com/swagger-ui/index.html)


+ ## ๐Ÿ”ฅ Troubleshooting ### ๋ถˆํ•„์š”ํ•œ ์ฟผ๋ฆฌ ์ƒ์„ฑ ๋ฌธ์ œ @@ -94,7 +95,6 @@ https://vivid-thyme-ac6.notion.site/Commit-Convention-2e19e3e335cc80d7bf16c7377e - ์ฟผ๋ฆฌ ํšŸ์ˆ˜ 50% ๊ฐ์†Œ (2ํšŒ โ†’ 1ํšŒ)
---- ### JWT ํ•„ํ„ฐ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋ฌธ์ œ @@ -129,6 +129,7 @@ return header.substring(BEARER_PREFIX.length()); ์˜ˆ์™ธ๋ฅผ ๋˜์ง€์ง€ ์•Š๊ณ  null ๋ฐ˜ํ™˜
- ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด Security์—์„œ ์ธ์ฆ์—†์ด ํ†ต๊ณผ์‹œํ‚ค๊ณ  Controller ๋กœ์ง๊นŒ์ง€ ์ •์ƒ์ ์œผ๋กœ ์ „๋‹ฌ๋จ +

## ๐Ÿš€ ๊ธฐ๋ณธ ํ”„๋กœ์ ํŠธ ์ดํ›„ ๋ณด์™„์  @@ -136,29 +137,10 @@ Controller ๋กœ์ง๊นŒ์ง€ ์ •์ƒ์ ์œผ๋กœ ์ „๋‹ฌ๋จ ์‹ค์ œ ์šด์˜ ํ™˜๊ฒฝ์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋“ค์„ ๊ฐ€์ •ํ•˜๊ณ  **์•ˆ์ •์„ฑ๊ณผ ํ™•์žฅ์„ฑ**์„ ์ค‘์‹ฌ์œผ๋กœ ๊ตฌ์กฐ๋ฅผ ๋ณด์™„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹จ์ˆœ ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ๋„˜์–ด์„œ **์šด์˜ ๊ด€์ ์˜ ํ’ˆ์งˆ ๊ฐœ์„ **์— ์ดˆ์ ์„ ๋งž์ท„์Šต๋‹ˆ๋‹ค. -### ๐Ÿ”” Git ยท Slack ์•Œ๋ฆผ & Bot ์—๋Ÿฌ ์—ฐ๋™ - -#### ๋„์ž… ๋ฐฐ๊ฒฝ -- ์—๋Ÿฌ ๋ฐœ์ƒ ์‹œ ๋กœ๊ทธ ํ™•์ธ์ด ๋Šฆ์–ด์ง -- PR, ๋ฐฐํฌ ์ด๋ฒคํŠธ๊ฐ€ ํŒ€ ์ „์ฒด์— ๊ณต์œ ๋˜์ง€ ์•Š์Œ - -#### ๊ฐœ์„  ๋‚ด์šฉ -- GitHub ์ด๋ฒคํŠธ โ†’ Slack **์‹ค์‹œ๊ฐ„ ์•Œ๋ฆผ ์—ฐ๋™** -- PR ์ƒ์„ฑ / ๋จธ์ง€ / ๋ฐฐํฌ ์•Œ๋ฆผ **์ž๋™ํ™”** -- ์ฃผ๋ฌธ ์‹คํŒจ, ๊ฒฐ์ œ ์˜ค๋ฅ˜ ๋“ฑ **์ค‘์š” ๋„๋ฉ”์ธ ์—๋Ÿฌ Bot ์•Œ๋ฆผ** -- ์žฅ์•  ์ƒํ™ฉ์— ๋Œ€ํ•œ **์ฆ‰๊ฐ์ ์ธ ํŒ€ ๋‹จ์œ„ ๋Œ€์‘ ๊ฐ€๋Šฅ** - -#### ํšจ๊ณผ -- ์ด์Šˆ ์ธ์ง€ ์‹œ๊ฐ„ ๋‹จ์ถ• -- ์šด์˜ ์ค‘ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์— ๋Œ€ํ•œ ๊ฐ€์‹œ์„ฑ ํ™•๋ณด - ---- - -### ๐Ÿšฆ API ์ ‘๊ทผ ์ œํ•œ (Rate Limiting) +### 1. Git ยท Slack ์•Œ๋ฆผ & Bot ์—๋Ÿฌ ์—ฐ๋™ -#### ๋„์ž… ๋ฐฐ๊ฒฝ -- ๋ฌด๋ถ„๋ณ„ํ•œ API ํ˜ธ์ถœ๋กœ ์ธํ•œ ์„œ๋ฒ„ ๋ถ€ํ•˜ ๋ฐ ์„œ๋น„์Šค ํ’ˆ์งˆ ์ €ํ•˜ ์šฐ๋ ค +### 2. API ์ ‘๊ทผ ์ œํ•œ (Rate Limiting) #### ์„ค๊ณ„ ๋ชฉํ‘œ **1์ฐจ ๋ฐฉ์–ด** @@ -174,50 +156,15 @@ Controller ๋กœ์ง๊นŒ์ง€ ์ •์ƒ์ ์œผ๋กœ ์ „๋‹ฌ๋จ - Redis ์‚ฌ์šฉ์ด ์ œํ•œ์ ์ธ ํ™˜๊ฒฝ ๊ณ ๋ ค - Caffeine ๊ธฐ๋ฐ˜ ์บ์‹œ๋กœ **๊ฒฝ๋Ÿ‰ ยท ๊ณ ์„ฑ๋Šฅ ยท ๋™์‹œ์„ฑ ์•ˆ์ •์„ฑ ํ™•๋ณด** ---- -### ๐Ÿง  Domain Refactoring +### 3. Domain Refactoring #### 1๏ธโƒฃ ํ• ์ธ ยท ๋ฉค๋ฒ„์‹ญ ์ •์ฑ… ๋ชจ๋“ˆํ™” -**๊ธฐ์กด ๋ฌธ์ œ** -- ๋ฉค๋ฒ„์‹ญ๊ณผ ํ• ์ธ ๊ตฌ์กฐ๊ฐ€ 1:1๋กœ ๊ฐ•ํ•˜๊ฒŒ ๊ฒฐํ•ฉ -- ํ• ์ธ ๋กœ์ง์ด ๋ณต์žกํ•˜์—ฌ ๋‹ค๋ฅธ ๋„๋ฉ”์ธ ์ ์šฉ์ด ์–ด๋ ค์›€ - -**๊ฐœ์„  ์‚ฌํ•ญ** -- ์ƒํ’ˆ๋ณ„ ํ• ์ธ ๊ตฌ์กฐ ๋„์ž… -- ํ• ์ธ ์กฐํ•ฉ ๊ฐ€๋Šฅ ๊ตฌ์กฐ ์„ค๊ณ„ -- ์ตœ๋Œ€ ํ• ์ธ ์ž๋™ ๊ณ„์‚ฐ ๋กœ์ง ์ถ”๊ฐ€ -- ํ• ์ธ ๊ณ„์‚ฐ ๋กœ์ง์„ ๋ณ„๋„ ์„œ๋น„์Šค๋กœ ๋ถ„๋ฆฌ - -**๊ฒฐ๊ณผ** -- ํ• ์ธ ์ •์ฑ… ํ™•์žฅ์„ฑ ์ฆ๊ฐ€ -- ๋‹ค๋ฅธ ๋„๋ฉ”์ธ์—์„œ๋„ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ตฌ์กฐ ํ™•๋ณด - ---- - #### 2๏ธโƒฃ ์ฃผ๋ฌธ ์‹œ ๋ฐฐ์†ก์ง€ ๊ฒ€์ฆ ๊ฐ•ํ™” -**๊ฐœ์„  ๋‚ด์šฉ** -- ๋ฐฐ์†ก์ง€ ๋ฏธ์ž…๋ ฅ ์‹œ - โ†’ ์œ ์ €์˜ ๊ธฐ๋ณธ ๋ฐฐ์†ก์ง€ ์ค‘ **๊ฐ€์žฅ ์ตœ๊ทผ ์ฃผ๋ฌธ์— ์‚ฌ์šฉ๋œ ๋ฐฐ์†ก์ง€ ์ž๋™ ์ ์šฉ** -- ์ฃผ๋ฌธ ์š”์ฒญ ์‹œ ์ „๋‹ฌ๋œ ๋ฐฐ์†ก์ง€ ID๊ฐ€ - โ†’ **ํ•ด๋‹น ์œ ์ € ์†Œ์œ  ๋ฐฐ์†ก์ง€์ธ์ง€ ๊ฒ€์ฆ ๋กœ์ง ์ถ”๊ฐ€** - -**ํšจ๊ณผ** -- ์ž˜๋ชป๋œ ๋ฐฐ์†ก ์ •๋ณด๋กœ ์ธํ•œ ์ฃผ๋ฌธ ์˜ค๋ฅ˜ ๋ฐฉ์ง€ -- ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ๊ฐœ์„  - ---- - -### ๐Ÿ’ณ ์ฃผ๋ฌธโ€“๊ฒฐ์ œ ํ”„๋กœ์„ธ์Šค ๋ฆฌํŒฉํ† ๋ง & ๋™์‹œ์„ฑ ์ œ์–ด - -#### ๊ธฐ์กด ๋ฌธ์ œ์  -- ์ฃผ๋ฌธ / ๊ฒฐ์ œ API๊ฐ€ ๋ถ„๋ฆฌ๋œ ํŠธ๋žœ์žญ์…˜ ๊ตฌ์กฐ - โ†’ ๊ฒฐ์ œ ์„ฑ๊ณต ํ›„ ์žฌ๊ณ  ์ฐจ๊ฐ ์‹คํŒจ ์‹œ ๋กค๋ฐฑ ๋ถˆ๊ฐ€ -- ์žฌ๊ณ  ๋™์‹œ์„ฑ ์ œ์–ด ๋ถ€์žฌ - โ†’ ์ดˆ๊ณผ ํŒ๋งค ๊ฐ€๋Šฅ์„ฑ ์กด์žฌ +### 4. ์ฃผ๋ฌธโ€“๊ฒฐ์ œ ํ”„๋กœ์„ธ์Šค ๋ฆฌํŒฉํ† ๋ง & ๋™์‹œ์„ฑ ์ œ์–ด #### ๊ฐœ์„ ๋œ ํ”„๋กœ์„ธ์Šค **์ฃผ๋ฌธ ์ƒ์„ฑ API** @@ -236,21 +183,15 @@ Controller ๋กœ์ง๊นŒ์ง€ ์ •์ƒ์ ์œผ๋กœ ์ „๋‹ฌ๋จ > ์™ธ๋ถ€ ๊ฒฐ์ œ API ํ˜ธ์ถœ์€ ํŠธ๋žœ์žญ์…˜์— ํฌํ•จํ•˜์ง€ ์•Š๊ณ , > DB ๋ณ€๊ฒฝ ๋กœ์ง๋งŒ ์›์ž์ ์œผ๋กœ ๋ฌถ์–ด **๋ฝ ์ ์œ  ๋ฐ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ๋ฐฉ์ง€** ---- -### ๐Ÿ” ๋‚™๊ด€์  ๋ฝ (Optimistic Lock) ๋„์ž… +### 5. ๋‚™๊ด€์  ๋ฝ (Optimistic Lock) ๋„์ž… - ์ƒํ’ˆ ์—”ํ‹ฐํ‹ฐ์— `@Version` ํ•„๋“œ ์ถ”๊ฐ€ - ๋™์‹œ ์žฌ๊ณ  ์ฐจ๊ฐ ์‹œ ์ปค๋ฐ‹ ์‹œ์ ์— ์ถฉ๋Œ ๊ฐ์ง€ - ์ถฉ๋Œ ๋ฐœ์ƒ ์‹œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ํ›„ ์žฌ์‹œ๋„ ์ „๋žต ์ ์šฉ -**์„ ํƒ ์ด์œ ** -- ์žฌ๊ณ  ์ถฉ๋Œ ๋นˆ๋„๊ฐ€ ๋‚ฎ์€ ๊ตฌ์กฐ -- ๋น„๊ด€์  ๋ฝ๋ณด๋‹ค ์„ฑ๋Šฅ์ƒ ์œ ๋ฆฌํ•˜๋‹ค๊ณ  ํŒ๋‹จ ---- - -### ๐Ÿ“ฆ ์žฌ๊ณ  ์˜ˆ์•ฝ ์‹œ์Šคํ…œ ๋„์ž… +### 6. ์žฌ๊ณ  ์˜ˆ์•ฝ ์‹œ์Šคํ…œ ๋„์ž… #### ๋„์ž… ์ด์œ  - ๋™์‹œ ์ฃผ๋ฌธ ํ™˜๊ฒฝ์—์„œ ์ดˆ๊ณผ ํŒ๋งค ๋ฐฉ์ง€ @@ -271,40 +212,14 @@ Controller ๋กœ์ง๊นŒ์ง€ ์ •์ƒ์ ์œผ๋กœ ์ „๋‹ฌ๋จ - ์˜ˆ์•ฝ ์ •๋ณด ์‚ญ์ œ - ์žฌ๊ณ  ๋ณต๊ตฌ -#### ๊ฒฐ๊ณผ -- ์žฌ๊ณ  ๋™์‹œ์„ฑ ๋ฌธ์ œ ๊ทผ๋ณธ์  ํ•ด๊ฒฐ -- ์•ˆ์ •์ ์ธ ์ฃผ๋ฌธโ€“๊ฒฐ์ œ ํ๋ฆ„ ํ™•๋ณด - ---- - -### โค๏ธ ์ฐœ (Wishlist) ๋„๋ฉ”์ธ ์ถ”๊ฐ€ - -#### ๋„์ž… ๋ฐฐ๊ฒฝ -- ๊ตฌ๋งค ์ „ ํƒ์ƒ‰ ๋‹จ๊ณ„์—์„œ์˜ **๋ช…ํ™•ํ•œ ๊ด€์‹ฌ ๋ฐ์ดํ„ฐ ํ™•๋ณด** -- ํ• ์ธ ์•Œ๋ฆผ ๋“ฑ ๋น„๋™๊ธฐ ์•Œ๋ฆผ ๊ธฐ๋Šฅ์˜ ๊ธฐ์ค€ ๋„๋ฉ”์ธ ํ•„์š” -- ์žฅ๋ฐ”๊ตฌ๋‹ˆ์™€ ๋ชฉ์ ์ด ๋‹ค๋ฅธ **์ค‘ยท์žฅ๊ธฐ ๊ด€์‹ฌ ์ƒํ’ˆ ๊ด€๋ฆฌ ๋„๋ฉ”์ธ ๋ถ„๋ฆฌ** - -#### ํšจ๊ณผ -- ์‚ฌ์šฉ์ž ํ–‰๋™ ๋ฐ์ดํ„ฐ ์ •๊ตํ™” -- ํ• ์ธ ์•Œ๋ฆผ, ์ถ”์ฒœ ๊ธฐ๋Šฅ ๋“ฑ ํ™•์žฅ ๊ธฐ๋ฐ˜ ํ™•๋ณด -- ๋„๋ฉ”์ธ ์ฑ…์ž„ ๋ถ„๋ฆฌ๋กœ ๋กœ์ง ๋ช…ํ™•์„ฑ ํ–ฅ์ƒ - - - -### ๐Ÿงช ์ƒˆ๋กœ์šด ๊ธฐ์ˆ  ๋„์ž… ์‚ฌํ•ญ ๋ฐ ์„ ์ • ์ด์œ  +### 7. ์ฐœ (Wishlist) ๋„๋ฉ”์ธ ์ถ”๊ฐ€ +
-### ์ƒํ’ˆ ํ• ์ธ ์‹œ ์ด๋ฉ”์ผ ์•Œ๋ฆผ ์‹œ์Šคํ…œ ๋„์ž… +## ๐Ÿš€ ์ƒˆ๋กœ์šด ๊ธฐ์ˆ  ๋„์ž… ์‚ฌํ•ญ ๋ฐ ์„ ์ • ์ด์œ  -#### ๋„์ž… ๋ฐฐ๊ฒฝ -- ํ• ์ธ ๋ฐ ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์‹œ, ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์ดํŠธ์— ์ ‘์† ์ค‘์ด ์•„๋‹ˆ๋”๋ผ๋„ - ์ •๋ณด๋ฅผ ์ „๋‹ฌ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก **์‚ฌ์šฉ์ž ํŽธ์˜์„ฑ ํ–ฅ์ƒ**์„ ๋ชฉํ‘œ๋กœ ํ•จ +### 1. ์ƒํ’ˆ ํ• ์ธ ์‹œ ์ด๋ฉ”์ผ ์•Œ๋ฆผ ์‹œ์Šคํ…œ ๋„์ž… -#### ํ•ด๊ฒฐ ๋ชฉํ‘œ -- ์ฐœํ•œ ์ƒํ’ˆ ๋˜๋Š” ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ๋‹ด๊ธด ์ƒํ’ˆ์— ํ• ์ธ ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์‹œ - ์ด๋ฉ”์ผ ์•Œ๋ฆผ์„ ํ†ตํ•ด **๊ธฐ๊ฐ„์ด ์งง์€ ์ด๋ฒคํŠธ๋ฅผ ๋†“์น˜์ง€ ์•Š๋„๋ก ์œ ๋„** -- ์ฐœ / ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ๋™์‹œ์— ์กด์žฌํ•˜๋Š” ์ƒํ’ˆ์— ๋Œ€ํ•ด - **์ค‘๋ณต ๋ฉ”์ผ ๋ฐœ์†ก ๋ฐฉ์ง€ ๋กœ์ง ์ ์šฉ** #### ์ด๋ฉ”์ผ ์„ ์ • ์ด์œ  - ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ์šฉ์ž๊ฐ€ ์ด๋ฉ”์ผ์„ ๋ณด์œ ํ•˜๊ณ  ์žˆ์–ด ์ ‘๊ทผ์„ฑ์ด ๋†’์Œ @@ -318,18 +233,7 @@ Controller ๋กœ์ง๊นŒ์ง€ ์ •์ƒ์ ์œผ๋กœ ์ „๋‹ฌ๋จ - ์นด์นด์˜ค ๊ณ„์ • ๊ด€๋ จ ์ •๋ณด ์ถ”๊ฐ€ ๊ด€๋ฆฌ ํ•„์š” โ†’ ์šด์˜ ๋น„์šฉ ๋ฐ ๋ณต์žก์„ฑ ์ฆ๊ฐ€๋กœ ์ธํ•ด ์ œ์™ธ -### OpenAI ๊ธฐ๋ฐ˜ FAQ ์ฑ—๋ด‡ ๋„์ž… - -#### ํŒ€ ๋ฐฉํ–ฅ์„ฑ -- ์‹ ๊ทœ AI ๊ธฐ๋Šฅ ํ™•์žฅ๋ณด๋‹ค๋Š” **๊ธฐ์กด ์„œ๋น„์Šค ๋‚ด๋ถ€ ๊ธฐ๋Šฅ ๊ฐ•ํ™”**์— ์ค‘์  -- FAQ ์™ธ NOTICE, POLICY ์ฑ—๋ด‡๋„ ๊ฒ€ํ† ํ•˜์˜€์œผ๋‚˜ - ํŒ€ ๋ฐฉํ–ฅ์„ฑ๊ณผ ์ผ์ • ๊ณ ๋ คํ•˜์—ฌ **FAQ ์ฑ—๋ด‡ ์šฐ์„  ๊ฐœ๋ฐœ** ๊ฒฐ์ • - -#### ๊ฐœ๋ฐœ ๋ฐฉ์‹ -- ๊ฐ•์‚ฌ๋‹˜ ์ œ๊ณต OpenAI ์˜ˆ์ œ ์ฝ”๋“œ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ๋ฐœ -- ๊ธฐ์กด ๊ตฌ์กฐ๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  - - ํด๋” ๊ตฌ์กฐ ์„ธ๋ถ„ํ™” - - ์ผ๋ถ€ ๋กœ์ง ์ˆ˜์ • ๋ฐ ์ฑ…์ž„ ๋ถ„๋ฆฌ +### 2. OpenAI ๊ธฐ๋ฐ˜ FAQ ์ฑ—๋ด‡ ๋„์ž… #### ๋ฐ์ดํ„ฐ ๊ตฌ์„ฑ - ๋„๋ฉ”์ธ๋ณ„ ์ž์ฃผ ๋ฌป๋Š” ์งˆ๋ฌธ๊ณผ ๋‹ต๋ณ€์„ **JSON ํŒŒ์ผ๋กœ ์ •๋ฆฌ** @@ -340,17 +244,7 @@ Controller ๋กœ์ง๊นŒ์ง€ ์ •์ƒ์ ์œผ๋กœ ์ „๋‹ฌ๋จ - ์„œ๋น„์Šค ๋‹ด๋‹น ๋„๋ฉ”์ธ ์™ธ ์งˆ๋ฌธ์— ๋Œ€ํ•ด์„œ๋Š” ์‘๋‹ต์„ ์ œํ•œํ•˜์—ฌ **๋น„์˜๋„์  ๋‹ต๋ณ€ ๋ฐฉ์ง€** -### ELK + ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ ๋„์ž… - -#### ๋„์ž… ๋ฐฐ๊ฒฝ -- ์„œ๋น„์Šค ์šด์˜ ๋‹จ๊ณ„์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ ๋ฐ ์žฅ์•  ์›์ธ์„ - ๋‹จ์ˆœ ์ฝ”๋“œ ๋กœ๊ทธ๋งŒ์œผ๋กœ ์ถ”์ ํ•˜๋Š” ๋ฐ ํ•œ๊ณ„ ์กด์žฌ -- ๋กœ๊ทธ ์ˆ˜์ง‘ ยท ๋ถ„์„ ยท ์‹œ๊ฐํ™”๋ฅผ ์œ„ํ•ด **ELK ์Šคํƒ ๋„์ž…** -- ์ดํ›„ ์„œ๋ฒ„๊ฐ€ ๊ฐ„ํ—์ ์œผ๋กœ ๋‹ค์šด๋˜๋Š” ํ˜„์ƒ ๋ฐœ์ƒ - - ELK ๋กœ๊ทธ๋งŒ์œผ๋กœ๋Š” ์›์ธ ํŒŒ์•…์ด ์–ด๋ ค์›€ -- CPU / ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰, ์ปจํ…Œ์ด๋„ˆ ๋ฆฌ์†Œ์Šค ์ƒํƒœ ๋“ฑ - **์‹œ์Šคํ…œ ์ „๋ฐ˜์˜ ์ƒํƒœ๋ฅผ ํ•จ๊ป˜ ํ™•์ธํ•  ํ•„์š”์„ฑ ์ธ์ง€** -- ์ด์— ๋”ฐ๋ผ **Prometheus + Grafana** ์ถ”๊ฐ€ ๋„์ž… +### 3. ELK + ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ ๋„์ž… #### ์—ญํ•  ๋ถ„๋ฆฌ ๋ฐ ํ™œ์šฉ From 6ae6634e3e66d119d13bc4b1a9fdd5d20b37e9bf Mon Sep 17 00:00:00 2001 From: DaveLee-b <76063864+DaveLee-b@users.noreply.github.com> Date: Wed, 7 Jan 2026 14:27:30 +0900 Subject: [PATCH 4/4] Fix formatting of table of contents in README.md --- README.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 72720e7..c43fa8e 100644 --- a/README.md +++ b/README.md @@ -23,22 +23,22 @@ - [๐Ÿ“Œ Convention](#-convention) - [๐Ÿ“ก API Documentation](#-api-documentation) - [๐Ÿ”ฅ Troubleshooting](#-troubleshooting) - - [๋ถˆํ•„์š”ํ•œ ์ฟผ๋ฆฌ ์ƒ์„ฑ ๋ฌธ์ œ](#๋ถˆํ•„์š”ํ•œ-์ฟผ๋ฆฌ-์ƒ์„ฑ-๋ฌธ์ œ) - - [JWT ํ•„ํ„ฐ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋ฌธ์ œ](#jwt-ํ•„ํ„ฐ-์˜ˆ์™ธ-์ฒ˜๋ฆฌ-๋ฌธ์ œ) + - [๋ถˆํ•„์š”ํ•œ ์ฟผ๋ฆฌ ์ƒ์„ฑ ๋ฌธ์ œ] + - [JWT ํ•„ํ„ฐ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋ฌธ์ œ] - [๐Ÿš€ ๊ธฐ๋ณธ ํ”„๋กœ์ ํŠธ ์ดํ›„ ๋ณด์™„์ ](#-๊ธฐ๋ณธ-ํ”„๋กœ์ ํŠธ-์ดํ›„-๋ณด์™„์ ) - - [Git ยท Slack ์•Œ๋ฆผ & Bot ์—๋Ÿฌ ์—ฐ๋™](#-git--slack-์•Œ๋ฆผ--bot-์—๋Ÿฌ-์—ฐ๋™) - - [API ์ ‘๊ทผ ์ œํ•œ (Rate Limiting)](#-api-์ ‘๊ทผ-์ œํ•œ-rate-limiting) - - [Domain Refactoring](#-domain-refactoring) - - [ํ• ์ธ ยท ๋ฉค๋ฒ„์‹ญ ์ •์ฑ… ๋ชจ๋“ˆํ™”](#-ํ• ์ธ--๋ฉค๋ฒ„์‹ญ-์ •์ฑ…-๋ชจ๋“ˆํ™”) - - [์ฃผ๋ฌธ ์‹œ ๋ฐฐ์†ก์ง€ ๊ฒ€์ฆ ๊ฐ•ํ™”](#-์ฃผ๋ฌธ-์‹œ-๋ฐฐ์†ก์ง€-๊ฒ€์ฆ-๊ฐ•ํ™”) - - [์ฃผ๋ฌธโ€“๊ฒฐ์ œ ํ”„๋กœ์„ธ์Šค ๋ฆฌํŒฉํ† ๋ง & ๋™์‹œ์„ฑ ์ œ์–ด](#-์ฃผ๋ฌธ๊ฒฐ์ œ-ํ”„๋กœ์„ธ์Šค-๋ฆฌํŒฉํ† ๋ง--๋™์‹œ์„ฑ-์ œ์–ด) - - [๋‚™๊ด€์  ๋ฝ (Optimistic Lock) ๋„์ž…](#-๋‚™๊ด€์ -๋ฝ-optimistic-lock-๋„์ž…) - - [์žฌ๊ณ  ์˜ˆ์•ฝ ์‹œ์Šคํ…œ ๋„์ž…](#-์žฌ๊ณ -์˜ˆ์•ฝ-์‹œ์Šคํ…œ-๋„์ž…) - - [์ฐœ (Wishlist) ๋„๋ฉ”์ธ ์ถ”๊ฐ€](#-์ฐœ-wishlist-๋„๋ฉ”์ธ-์ถ”๊ฐ€) + - [Git ยท Slack ์•Œ๋ฆผ & Bot ์—๋Ÿฌ ์—ฐ๋™] + - [API ์ ‘๊ทผ ์ œํ•œ (Rate Limiting)] + - [Domain Refactoring] + - [ํ• ์ธ ยท ๋ฉค๋ฒ„์‹ญ ์ •์ฑ… ๋ชจ๋“ˆํ™”] + - [์ฃผ๋ฌธ ์‹œ ๋ฐฐ์†ก์ง€ ๊ฒ€์ฆ ๊ฐ•ํ™”] + - [์ฃผ๋ฌธโ€“๊ฒฐ์ œ ํ”„๋กœ์„ธ์Šค ๋ฆฌํŒฉํ† ๋ง & ๋™์‹œ์„ฑ ์ œ์–ด] + - [๋‚™๊ด€์  ๋ฝ (Optimistic Lock) ๋„์ž…] + - [์žฌ๊ณ  ์˜ˆ์•ฝ ์‹œ์Šคํ…œ ๋„์ž…] + - [์ฐœ (Wishlist) ๋„๋ฉ”์ธ ์ถ”๊ฐ€] - [๐Ÿš€ ์ƒˆ๋กœ์šด ๊ธฐ์ˆ  ๋„์ž… ์‚ฌํ•ญ ๋ฐ ์„ ์ • ์ด์œ ](#-์ƒˆ๋กœ์šด-๊ธฐ์ˆ -๋„์ž…-์‚ฌํ•ญ-๋ฐ-์„ ์ •-์ด์œ ) - - [์ƒํ’ˆ ํ• ์ธ ์‹œ ์ด๋ฉ”์ผ ์•Œ๋ฆผ ์‹œ์Šคํ…œ ๋„์ž…](#์ƒํ’ˆ-ํ• ์ธ-์‹œ-์ด๋ฉ”์ผ-์•Œ๋ฆผ-์‹œ์Šคํ…œ-๋„์ž…) - - [OpenAI ๊ธฐ๋ฐ˜ FAQ ์ฑ—๋ด‡ ๋„์ž…](#openai-๊ธฐ๋ฐ˜-faq-์ฑ—๋ด‡-๋„์ž…) - - [ELK + ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ ๋„์ž…](#elk--๋ชจ๋‹ˆํ„ฐ๋ง-์‹œ์Šคํ…œ-๋„์ž…) + - [์ƒํ’ˆ ํ• ์ธ ์‹œ ์ด๋ฉ”์ผ ์•Œ๋ฆผ ์‹œ์Šคํ…œ ๋„์ž…] + - [OpenAI ๊ธฐ๋ฐ˜ FAQ ์ฑ—๋ด‡ ๋„์ž…] + - [ELK + ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ ๋„์ž…] # ShoppingFourU