Week#1-Step#1
-
์ํ ์กฐํ
- ์ํ ๋ชฉ๋ก์ ์กฐํํ๋ ๊ธฐ๋ฅ
- HTTP ๋ฉ์๋: GET
- ์๋ํฌ์ธํธ:
/api/products
-
์ํ ์ถ๊ฐ
- ์๋ก์ด ์ํ์ ์ถ๊ฐํ๋ ๊ธฐ๋ฅ
- HTTP ๋ฉ์๋: POST
- ์๋ํฌ์ธํธ:
/api/products
-
์ํ ์์
- ๊ธฐ์กด ์ํ ์ ๋ณด๋ฅผ ์์ ํ๋ ๊ธฐ๋ฅ
- HTTP ๋ฉ์๋: PUT
- ์๋ํฌ์ธํธ:
/api/products/{id}
-
์ํ ์ญ์
- ํน์ ID๋ฅผ ๊ฐ์ง ์ํ์ ์ญ์ ํ๋ ๊ธฐ๋ฅ
- HTTP ๋ฉ์๋: DELETE
- ์๋ํฌ์ธํธ:
/api/products/{id}
Week#1-Step#2
-
์ํ ์กฐํ
- ์ํ ๋ชฉ๋ก์ ์กฐํํ๋ ๊ธฐ๋ฅ
- HTTP ๋ฉ์๋: GET
- ์๋ํฌ์ธํธ:
/api/products
-
์ํ ์ถ๊ฐ
- ์๋ก์ด ์ํ์ ์ถ๊ฐํ๋ ๊ธฐ๋ฅ
- HTTP ๋ฉ์๋: POST
- ์๋ํฌ์ธํธ:
/api/products
-
์ํ ์์
- ๊ธฐ์กด ์ํ ์ ๋ณด๋ฅผ ์์ ํ๋ ๊ธฐ๋ฅ
- HTTP ๋ฉ์๋: PUT
- ์๋ํฌ์ธํธ:
/api/products/{id}
-
์ํ ์ญ์
- ํน์ ID๋ฅผ ๊ฐ์ง ์ํ์ ์ญ์ ํ๋ ๊ธฐ๋ฅ
- HTTP ๋ฉ์๋: DELETE
- ์๋ํฌ์ธํธ:
/api/products/{id}
-
์ํ ๋ชฉ๋ก ํ๋ฉด
- ์ํ ๋ชฉ๋ก์ ํ๋ฉด์ ํ์ํ๋ ๊ธฐ๋ฅ
- HTML ํ์ด์ง:
templates/products.html - ์ ์ ๋ฐฉ๋ฒ :
localhost:8080/products - ์ํ ๋ชฉ๋ก๊ณผ ์ค๋ฅธ์ชฝ ์๋จ์ ์ํ ์ถ๊ฐ ๋ฒํผ
- ๊ฐ ์ํ ์ฐ์ธก ์ํ ์์ ๋ฒํผ๊ณผ ์ํ ์ญ์ ๋ฒํผ
-
์ํ ์ถ๊ฐ ํ๋ฉด
- ์๋ก์ด ์ํ์ ์ถ๊ฐํ๋ ํ๋ฉด
- HTML ํ์ด์ง:
templates/product_form.html - ํผ์ ํตํด ์ํ ์ ๋ณด๋ฅผ ์ ๋ ฅ๋ฐ์ ์ถ๊ฐ
-
์ํ ์์ ํ๋ฉด
- ๊ธฐ์กด ์ํ ์ ๋ณด๋ฅผ ์์ ํ๋ ํ๋ฉด
- HTML ํ์ด์ง:
templates/product_edit_form.html - ํผ์ ํตํด ์ํ ์ ๋ณด๋ฅผ ์ ๋ ฅ๋ฐ์ ์์
-
AJAX๋ฅผ ํตํ ๋น๋๊ธฐ ์ฒ๋ฆฌ
- ์ํ ์ถ๊ฐ, ์์ , ์ญ์ ์ ํ์ด์ง ์๋ก๊ณ ์นจ ์์ด ๋น๋๊ธฐ๋ก ์ฒ๋ฆฌ
fetchAPI๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฒ์ ํต์
Week#1-Step#3
- JDBC๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ H2 ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๋ค.
- ์ํ ์ ๋ณด๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๊ณ ์กฐํ, ์์ , ์ญ์ ํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ
์ด๋ธ ์์ฑ
Productํ ์ด๋ธ ์์ฑ
- JDBC DAO ๊ตฌํ
ProductDaoํด๋์ค ๊ตฌํ
- ์ปจํธ๋กค๋ฌ ๋ฆฌํฉํ ๋ง
- ๊ธฐ์กด์
HashMap๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋๋กProductController์์
- ๊ธฐ์กด์
- ์ํ ์ถ๊ฐ/์์ ์ DB ์ฒ๋ฆฌ
- ์ํ ์ถ๊ฐ ๋ฐ ์์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ํ๋๋ก ๋ก์ง ์์
- ์ํ ์กฐํ ์ DB ์ฌ์ฉ
- ์ํ ์กฐํ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ ๋ณด ์กฐํ
- ์ํ ์ญ์ ์ DB ์ฌ์ฉ
- ์ํ ์ญ์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ ๋ณด ์ญ์
Week#2-Step#1
- ์ํ ์ถ๊ฐ, ์์ ์ ์ ํจ์ฑ ๊ฒ์ฌ
- ์ํ ์ด๋ฆ์ ๊ณต๋ฐฑ ํฌํจ ์ต๋ 15์๊น์ง ์ ๋ ฅ ๊ฐ๋ฅ
- ๊ฐ๋ฅํ ํน์ ๋ฌธ์: ( ), [ ], +, -, &, /, _
- "์นด์นด์ค"๊ฐ ํฌํจ๋ ๋ฌธ๊ตฌ๋ ๋ด๋น MD์ ํ์ํ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉ ๊ฐ๋ฅ
Week#2-Step#2
- email, password ๋ฅผ ํตํ ํ์๊ฐ์
- ์ ์ ์ ๋ณด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ๋ก๊ทธ์ธ
- ๋ก๊ทธ์ธ์ด ์๋ฃ๋๋ค๋ฉด ํ ํฐ ์ ๊ณต (bearer ๋ฐฉ์ -> JWT ์ฌ์ฉ)
Week#3-Step#1
- ์ํฐํฐ, ๋ ํฌ์งํ ๋ฆฌ ์์ฑ
- ๊ทธ์ ๋ง๊ฒ ์๋น์ค ์์
- Dao ์ญ์
Week#3-Step#2
spring-gift-jpa
- ๊ธฐ์กด ์ฝ๋ ๋ฆฌํฉํ ๋ง
- ์ํฐํฐ, ๋ ํฌ์งํ ๋ฆฌ ์์ฑ
- ๊ทธ์ ๋ง๊ฒ ์๋น์ค ์์
- Dao ์ญ์
- ์ํฐํฐ ์ฐ๊ด ๊ด๊ณ ์ค์
-
Wish์ํฐํฐ๊ฐUser,Product์ฐธ์กฐํ๋๋ก ํจ -
user_id,product_id๋ฅผ FK๋ก ๊ฐ์ง๋๋ก ์ค์
-
Week#3-Step#3
์ํ๊ณผ ์์ ๋ฆฌ์คํธ ๋ณด๊ธฐ์ ํ์ด์ง๋ค์ด์ ์ ๊ตฌํํ๋ค.
- ๋๋ถ๋ถ์ ๊ฒ์ํ์ ๋ชจ๋ ๊ฒ์๊ธ์ ํ ๋ฒ์ ํ์ํ์ง ์๊ณ ์ฌ๋ฌ ํ์ด์ง๋ก ๋๋์ด ํ์ํ๋ค. ์ ๋ ฌ ๋ฐฉ๋ฒ์ ์ค์ ํ์ฌ ๋ณด๊ณ ์ถ์ ์ ๋ณด์ ์ฐ์ ์์๋ฅผ ์ ํ ์๋ ์๋ค.
- ํ์ด์ง๋ค์ด์ ์ ์ํ๋ ์ ๋ ฌ ๋ฐฉ๋ฒ, ํ์ด์ง ํฌ๊ธฐ ๋ฐ ํ์ด์ง์ ๋ฐ๋ผ ์ ๋ณด๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ๋ฒ์ด๋ค.
์ด๋ฅผ ์ง์ ๊ตฌํํ ์๋ ์์ง๋ง, ์คํ๋ง ๋ฐ์ดํฐ๋ **Pageable**์ด๋ผ๋ ๊ฐ์ฒด๋ฅผ ์ ๊ณตํ์ฌ ์ฝ๊ฒ ๊ตฌํํ ์ ์๋ค. ๋ํ List, Slice, Page ๋ฑ ๋ค์ํ ๋ฐํ ํ์
์ ์ ๊ณตํ๋ค.
Week#4-Step#1
์ํ ์ ๋ณด์ ์นดํ ๊ณ ๋ฆฌ๋ฅผ ์ถ๊ฐํ๋ค. ์ํ๊ณผ ์นดํ ๊ณ ๋ฆฌ ๋ชจ๋ธ ๊ฐ์ ๊ด๊ณ๋ฅผ ๊ณ ๋ คํ์ฌ ์ค๊ณํ๊ณ ๊ตฌํํ๋ค.
- ์นดํ ๊ณ ๋ฆฌ๋ 1์ฐจ ์นดํ ๊ณ ๋ฆฌ๋ง ์์ผ๋ฉฐ 2์ฐจ ์นดํ ๊ณ ๋ฆฌ๋ ๊ณ ๋ คํ์ง ์๋๋ค.
- ์นดํ ๊ณ ๋ฆฌ๋ ์์ ํ ์ ์๋ค.
- ๊ด๋ฆฌ์ ํ๋ฉด์์ ์ํ์ ์ถ๊ฐํ ๋ ์นดํ ๊ณ ๋ฆฌ๋ฅผ ์ง์ ํ ์ ์๋ค.
- ์นดํ
๊ณ ๋ฆฌ์ ์์๋ ์๋์ ๊ฐ๋ค.
- ๊ตํ๊ถ, ์ํ๊ถ, ๋ทฐํฐ, ํจ์ , ์ํ, ๋ฆฌ๋น/๋์, ๋ ์ /์คํฌ์ธ , ์ํฐ์คํธ/์บ๋ฆญํฐ, ์ ์๋/๋ฐ๋ ค, ๋์งํธ/๊ฐ์ , ์นด์นด์คํ๋ ์ฆ, ํธ๋ ๋ ์ ๋ฌผ, ๋ฐฑํ์
์๋ ์์์ ๊ฐ์ด HTTP ๋ฉ์์ง๋ฅผ ์ฃผ๊ณ ๋ฐ๋๋ก ๊ตฌํํ๋ค.
GET /api/categories HTTP/1.1
HTTP/1.1 200
Content-Type: application/json
{
โidโ: 91,
โnameโ: โ๊ตํ๊ถโ,
โcolorโ: โ#6c95d1โ,
โimageUrlโ: โhttps://gift-s.kakaocdn.net/dn/gift/images/m640/dimm_theme.pngโ,
โdescriptionโ: โโ
}
- ๊ตฌํํ ๊ธฐ๋ฅ์ ๋ํด ์ ์ ํ ํ ์คํธ ์ ๋ต์ ์๊ฐํ๊ณ ์์ฑํ๋ค.
- ์นดํ ๊ณ ๋ฆฌ๋ฅผ ์ถ๊ฐํ๋ ๋ฌธ์ ์ด๋ค. 1์ฐจ์นดํ ๊ณ ๋ฆฌ๋ฅผ ์ง์ ํ๊ณ , ์์ ํ ์ ์์ผ๋ฉฐ, ๊ด๋ฆฌ์ ํ๋ฉด์์ ์ง์ ํ ์ ์์ด์ผ ํ๋ค.
Week#4-Step#2
- ์ต์
๊ตฌํ
- ๊ฐ ์ํ์ ์ต์ ๋ณ ์์ฌ ์๋ ์ ์ฅ api๊ตฌํ
Week#5-Step#1
์นด์นด์ค ๋ก๊ทธ์ธ์ ํตํด ์ธ๊ฐ ์ฝ๋๋ฅผ ๋ฐ๊ณ , ์ธ๊ฐ ์ฝ๋๋ฅผ ์ฌ์ฉํด ํ ํฐ์ ๋ฐ์ ํ ํฅํ ์นด์นด์ค API ์ฌ์ฉ์ ์ค๋นํ๋ค.
- ์นด์นด์ค๊ณ์ ๋ก๊ทธ์ธ์ ํตํด ์ธ์ฆ ์ฝ๋๋ฅผ ๋ฐ๋๋ค.
- ํ ํฐ ๋ฐ๊ธฐ๋ฅผ ์ฝ๊ณ ์ก์ธ์ค ํ ํฐ์ ์ถ์ถํ๋ค.
- ์ฑ ํค, ์ธ๊ฐ ์ฝ๋๊ฐ ์ ๋ ์ ์ถ๋์ง ์๋๋ก ํ๋ค.
- (์ ํ) ์ธ๊ฐ ์ฝ๋๋ฅผ ๋ฐ๋ ๋ฐฉ๋ฒ์ด ๋ถํธํ ๊ฒฝ์ฐ ์นด์นด์ค ๋ก๊ทธ์ธ ํ๋ฉด์ ๊ตฌํํ๋ค.
์ค์ ์นด์นด์ค ๋ก๊ทธ์ธ์ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์งํ๋๋ค.

ํ์ง๋ง ์ง๊ธ๊ณผ ๊ฐ์ด ํด๋ผ์ด์ธํธ๊ฐ ์๋ ์ํฉ์์๋ ์๋์ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ์ธ๊ฐ ์ฝ๋๋ฅผ ํ๋ํ๋ค.
- ๋ด ์ ํ๋ฆฌ์ผ์ด์ > ์ฑ ์ค์ > ์ฑ ํค๋ก ์ด๋ํ์ฌ REST API ํค๋ฅผ ๋ณต์ฌํ๋ค.
- https://kauth.kakao.com/oauth/authorize?scope=talk_message&response_type=code&redirect_uri=http://localhost:8080&client_id=**`{REST_API_KEY}`**์ ์ ์ํ์ฌย ์นด์นด์คํก ๋ฉ์์ง ์ ์ก์ ๋์ํ๋ค.
- http://localhost:8080/?code=**`{AUTHORIZATION_CODE}`**์์ ์ธ๊ฐ ์ฝ๋๋ฅผ ์ถ์ถํ๋ค.
์นด์นด์ค ํ๋ซํผ ์๋น์ค๋ฅผ ์ด์ฉํ์ฌ ๊ฐ๋ฐํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด๋ฆ, ์์ด์ฝ, ์ํ๋ช , ์๋น์ค๋ช , ํ์ฌ๋ช , ๋ก๊ณ , ์ฌ๋ฒ ๋ฑ์ ์นด์นด์ค์ ์ํ๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก(์ 17์กฐ(์ํ ์ฌ์ฉ ์ ์๋ฌด ์ฌํญ)), ์๋ ํญ๋ชฉ๋ค์ "์นด์นด์ค"์ฌ์ฉ ๋ถ๊ฐํ๋ค
- ์ฑ ์ด๋ฆ:
- ํ์ฌ๋ช :
- ์นดํ ๊ณ ๋ฆฌ:
ํ ํฐ ๋ฐ๊ธฐ์ ๋ฐ๋ฅด๋ฉด ์๋์ ๊ฐ์ดย **RequestEntity**๋ฅผ ๋ง๋ค ์ ์๋ค.
var url = "https://kauth.kakao.com/oauth/token";
var headers = new HttpHeaders();
headers.add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_FORM_URLENCODED_VALUE);
var body = new LinkedMultiValueMap<String, String>();
body.add("grant_type", "authorization_code");
body.add("client_id", properties.clientId());
body.add("redirect_uri", properties.redirectUri());
body.add("code", authorizationCode);
var request = new RequestEntity<>(body, headers, HttpMethod.POST, URI.create(url));
- ๋ ํผ๋ฐ์ค๋ฅผ ์ฐธ๊ณ ํ์ฌ ๋ฐ์ํ ์ ์๋ ๋ค์ํ ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํ๋ค.
- RestTemplate์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐย Spring RestTemplate Error Handling๋ฅผ ์ฐธ๊ณ ํ๋ค.
- REST Clients
- ์ฌ์ฉํ ํด๋ผ์ด์ธํธ๋ฅผ ์ ํํ ๋ ์ด๋ค ๊ธฐ์ค์ ์ฌ์ฉํด์ผ ํ ๊น?
- ํด๋ผ์ด์ธํธ ์ธ์คํด์ค๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์์ฑ/๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ธ๊ฐ?
- ์์ฒญ์ ๋ณด๋ด๊ณ ์๋ต์ ํ์ฑํ๋ ๋ถ๋ถ๋ง ํ ์คํธํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น?
- ๋น์ฆ๋์ค ๋ก์ง์ ์ฐ๊ฒฐํ ๋ ๋จ์/ํตํฉ ํ ์คํธ๋ ์ด๋ป๊ฒ ํ ๊น?
- ์๋ต ์๊ฐ์ด ๊ธธ๋ฉด ์ด๋ป๊ฒ ํ ๊น? ๋ช ์ด๊ฐ ์ ๋นํ ๊น?
- ์ค๋ฅ ์ฝ๋๋ ์ด๋ป๊ฒ ์ฒ๋ฆฌํด์ผ ํ ๊น?
- ์๋ต ๊ฐ์ ํ์ฑํ ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ์ด๋ป๊ฒ ํ ๊น?
Week#5-Step#2
์นด์นด์คํก ๋ฉ์์ง API๋ฅผ ์ฌ์ฉํ์ฌ ์ฃผ๋ฌธํ๊ธฐ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ค.
- ์ฃผ๋ฌธํ ๋ ์๋ น์ธ์๊ฒ ๋ณด๋ผ ๋ฉ์์ง๋ฅผ ์์ฑํ ์ ์๋ค.
- ์ํ ์ต์ ๊ณผ ํด๋น ์๋์ ์ ํํ์ฌ ์ฃผ๋ฌธํ๋ฉด ํด๋น ์ํ ์ต์ ์ ์๋์ด ์ฐจ๊ฐ๋๋ค.
- ํด๋น ์ํ์ด ์์ ๋ฆฌ์คํธ์ ์๋ ๊ฒฝ์ฐ ์์ ๋ฆฌ์คํธ์์ ์ญ์ ํ๋ค.
- ๋์๊ฒ ๋ณด๋ด๊ธฐ๋ฅผ ์ฝ๊ณ ์ฃผ๋ฌธ ๋ด์ญ์ ์นด์นด์คํก ๋ฉ์์ง๋ก ์ ์กํ๋ค.
- ๋ฉ์์ง๋ย ๋ฉ์์ง ํ ํ๋ฆฟ์ ๊ธฐ๋ณธ ํ ํ๋ฆฟ์ด๋ ์ฌ์ฉ์ ์ ์ ํ ํ๋ฆฟ์ ์ฌ์ฉํ์ฌ ์์ ๋กญ๊ฒ ์์ฑํ๋ค.
์๋ ์์์ ๊ฐ์ด HTTP ๋ฉ์์ง๋ฅผ ์ฃผ๊ณ ๋ฐ๋๋ก ๊ตฌํํ๋ค.
Request
POST /api/orders HTTP/1.1
Authorization: Bearer {token}
Content-Type: application/json
{
"optionId": 1,
"quantity": 2,
"message": "Please handle this order with care."
}
Response
HTTP/1.1 201 Created
Content-Type: application/json
{
"id": 1,
"optionId": 1,
"quantity": 2,
"orderDateTime": "2024-07-21T10:00:00",
"message": "Please handle this order with care."
}
์ค์ ์นด์นด์คํก ๋ฉ์์ง๋ ์๋์ ๊ฐ์ด ์ ์ก๋๋ค. ํ์ง๋ง ์ด๋ฒ ๋ฏธ์
์์๋ ์์ ์๊ฐ ๋์ด๊ธฐ ๋๋ฌธ์ ์นด์นด์คํก ์น๊ตฌ ๋ชฉ๋ก ๊ฐ์ ธ์ค๊ธฐ๋ ์๋ตํ๋ค.

์ฃผ๋ฌธํ๊ธฐ API๋ฅผ ๋ง๋๋ ๋ฌธ์ ๋ค.
์ด์ ์ ๊ณํํ๋๋ก, Order ์ํฐํฐ์ ๊ทธ ์ธ ๋ ์ด์ด๋ค ๋ง๋ค๊ณ
๊ฑฐ๊ธฐ์ User ์ ProductOption ์ ๋ค๋์ผ๋ก ์ฐ๊ด์ง์ด์ ๊ตฌํํ๋ฉด ๋ ๊ฒ ๊ฐ๋ค.
# spring-gift-order
## step 1 - ์นด์นด์ค ๋ก๊ทธ์ธ
- **์นด์นด์ค ๋ก๊ทธ์ธ ๊ตฌํ**
- [x] ๊ธฐ์กด ๋ก๊ทธ์ธ์ ์ผ๋จ ๊ทธ๋๋ก ์ ์ง
- [x] http://localhost:8080/oauth/kakao ์ ์ ์ ์, ๋ก๊ทธ์ธ ํ์ด์ง๋ก ๋ฆฌ๋ค์ด๋ ํธ
- [x] ํด๋น ํ์ด์ง์์ ๋ก๊ทธ์ธ ์๋ฃ ์, ์ธ๊ฐ ์ฝ๋๋ฅผ http://localhost:8080/oauth/kakao/callback ์ผ๋ก ์ ๋ฌ
- [x] ์ธ๊ฐ ์ฝ๋ ์ถ์ถ ํ, ํด๋น ์ฝ๋๋ฅผ ํตํด access token ๋ฐ๊ธ
- **์ถ๊ฐ ๊ธฐ๋ฅ**
- [x] ์นด์นด์ค ๋ก๊ทธ์ธ ์, ์ ์ ์ ๋ณด๋ฅผ ํตํด ์๋น์ค์ User์๋ ๋ฑ๋กํ์ฌ ๋ก๊ทธ์ธ ์ฒ๋ฆฌ ๋๋๋ก ํจ
## step 2 - ์ฃผ๋ฌธํ๊ธฐ
- **์ฃผ๋ฌธํ๊ธฐ ๊ธฐ๋ฅ ๊ตฌํ**
- [ ] `Order` ์ํฐํฐ, Dto, ๋ ํฌ์งํ ๋ฆฌ, ์๋น์ค, ์ปจํธ๋กค๋ฌ ๊ตฌํ
- [ ] ์ํ ์ต์
๊ณผ ์๋์ ์ ํํ์ฌ ์ฃผ๋ฌธ ์, ํด๋น ์ํ ์ต์
์ ์๋ ์ฐจ๊ฐ
- [ ] ํด๋น ์ํ์ด ์์ ๋ฆฌ์คํธ์ ์๋ ๊ฒฝ์ฐ ์์ ๋ฆฌ์คํธ์์ ์ญ์
- **์นด์นด์คํก ๋ฉ์์ง API ํธ์ถ**
- [ ] `access token`์ ๊ฒ์ฆํ์ฌ ์นด์นด์คํก ๋ฉ์์ง ์ ์ก API ํธ์ถ