์์ดํ ์๋ฎฌ๋ ์ด์ ์ ๋๋ค. API๋ชฉ๋ก์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
ํ์๊ฐ์ API cubetale.shop:3020/api/sign-up { "playerId": "์์ด๋", "password": "๋น๋ฐ๋ฒํธ 6์๋ฆฌ์ด์", "name": "์ด๋ฆ", "age": ๋์ด, "gender": "์ฑ๋ณ" }
๋ก๊ทธ์ธ API cubetale.shop:3020/api/login { "playerId": "ํ์๊ฐ์ ํ ์์ด๋", "password": "๋น๋ฐ๋ฒํธ" }
์บ๋ฆญํฐ ์์ฑ API cubetale.shop:3020/api/char-create { "nickname": "๋๋ค์" }
์บ๋ฆญํฐ ์์ธ ์กฐํ API cubetale.shop:3020/api/char-create/์กฐํํ ์บ๋ฆญํฐ id
์์ดํ ์์ฑ API :3020/api/item-create { "item_name": "์์ดํ ์ด๋ฆ", "item_health": ์ฒด๋ ฅ์คํ , "item_power": ๊ณต๊ฒฉ๋ ฅ์คํ , "item_price": ๊ฐ๊ฒฉ }
์์ดํ ์์ API cubetale.shop:3020/api/item-create/์กฐํํ ์์ดํ code { "item_name": "์์ ํ ์์ดํ ์ด๋ฆ", "item_health": ์์ ํ ์ฒด๋ ฅ์คํ , "item_power": ์์ ํ ๊ณต๊ฒฉ๋ ฅ์คํ }
์์ดํ ๋ชฉ๋ก ์กฐํ API cubetale.shop:3020/api/item-create
์์ดํ ์์ธ ์กฐํ API cubetale.shop:3020/api/item-create/์กฐํํ ์์ดํ code
- ์ํธํ ๋ฐฉ์
- ๋น๋ฐ๋ฒํธ๋ฅผ DB์ ์ ์ฅํ ๋ Hash๋ฅผ ์ด์ฉํ๋๋ฐ, Hash๋ ๋จ๋ฐฉํฅ ์ํธํ์ ์๋ฐฉํฅ ์ํธํ ์ค ์ด๋ค ์ํธํ ๋ฐฉ์์ ํด๋นํ ๊น์? Hash๋ ๋จ๋ฐฉํฅ ์ํธํ์ ๋๋ค.
- ๋น๋ฐ๋ฒํธ๋ฅผ ๊ทธ๋ฅ ์ ์ฅํ์ง ์๊ณ Hash ํ ๊ฐ์ ์ ์ฅ ํ์ ๋์ ์ข์ ์ ์ ๋ฌด์์ธ๊ฐ์? Hashํจ์์ ํน์ฑ์ธ ๋จ๋ฐฉํฅ ์ํธํ๋ก ์ธํด ๋ฐ์ดํฐ๋ฅผ ํด์ฑํ์ ๋ ์ํธํ๋ ๊ฐ์ ๋ค์ ๋ณตํธํ ํ ์ ์์ด ๋ณด์์ ๋ฐ์ด๋ฉ๋๋ค.
- ์ธ์ฆ ๋ฐฉ์
- JWT(Json Web Token)์ ์ด์ฉํด ์ธ์ฆ ๊ธฐ๋ฅ์ ํ๋๋ฐ, ๋ง์ฝ Access Token์ด ๋ ธ์ถ๋์์ ๊ฒฝ์ฐ ๋ฐ์ํ ์ ์๋ ๋ฌธ์ ์ ์ ๋ฌด์์ผ๊น์? Access Token์ด ๋ ธ์ถ๋๋ฉด ์ค์ ๋ก๋ ์๋ ์ ์ ๊ฐ ์๋์ง๋ง ํด๋น ์ ์ ์ ๊ถํ์ ๊ฐ์ง๊ณ ํ ์ ์๋ ๋ชจ๋ ๊ฒ์ ๋ง์๋๋ก ์ฌ์ฉํ ์ ์์ด ์ํํ๋ค.
- ํด๋น ๋ฌธ์ ์ ์ ๋ณด์ํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ผ๋ก๋ ์ด๋ค ๊ฒ์ด ์์๊น์? ์ด๋ฌํ ๋ณด์์ ๋ํ ๋ฌธ์ ๋ฅผ ์ํด Access Token์ ์ ํจ๊ธฐ๊ฐ์ ์งง๊ฒ ์ค์ ํ์ฌ ์ฌ์ฉ์๊ฐ ์์ฃผ ์ธ์ฆํ๊ฒํด์ฃผ๊ฑฐ๋, Refresh Token์ ๋ง๋ค์ด DB์ ์ ์ฅํ๊ณ , Access Token์ด ๋ง๋ฃ๋๋ฉด Refresh Token์ ํตํด ์๋ก์ด Access Token์ ์์ฑํด์ฃผ๋ ๋ฐฉ๋ฒ์ด ์๋ค.
- ์ธ์ฆ๊ณผ ์ธ๊ฐ
- ์ธ์ฆ๊ณผ ์ธ๊ฐ๊ฐ ๋ฌด์์ธ์ง ๊ฐ๊ฐ ์ค๋ช ํด ์ฃผ์ธ์. ์ธ์ฆ์ ์ฌ์ฉ์์ ์ ์์ ๊ฒ์ฆํ๋ ๊ฒ์ด๊ณ , ์ธ๊ฐ๋ ์ธ์ฆ๋ ์ฌ์ฉ์๊ฐ ์ด๋ ํ ์์์ ์ ๊ทผํ ์ ์๋์ง ํ์ธํ๋ ๊ฒ์ด๋ค.
- ์ API ๊ตฌํ ๋ช ์ธ์์ ์ธ์ฆ์ ํ์๋ก ํ๋ API์ ๊ทธ๋ ์ง ์์ API์ ์ฐจ์ด๊ฐ ๋ญ๋ผ๊ณ ์๊ฐํ์๋์? ์ธ์ฆ์ด ํ์์๋ ํ์๊ฐ์ ์ ์์ง ์ฌ์ฉ์์ ์ ์์ ๊ฒ์ฆํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ธ์ฆ์ด ํ์ํ์ง ์๊ณ ๊ณผ์ ์์ ๊ตฌํํ UserMiddleware๋ ์ฌ์ฉ์์ ์ฟ ํค๋ฅผ ๊ฒ์ฆํ๋ ๋จ๊ณ์ด๊ธฐ ๋๋ฌธ์ ์ธ์ฆ์ ํด๋นํฉ๋๋ค.
- ์์ดํ ์์ฑ, ์์ API๋ ์ธ์ฆ์ ํ์๋ก ํ์ง ์๋๋ค๊ณ ํ์ง๋ง ์ฌ์ค์ ์ด๋ API๋ณด๋ค๋ ์ธ์ฆ์ด ํ์ํ API์ ๋๋ค. ์ ๊ทธ๋ด๊น์? ๊ด๋ฆฌ์๊ฐ ์๋ ๋๊ตฐ๊ฐ ์ฌ๊ธฐ ์์ดํ ์ ์์ฑํ๊ณ ์ด๋ณด์์ ์์ดํ ์ด ์ต์์ ์์ดํ ์ด ๋๋ฉด ๊ฒ์ ๊ฒฝ์ ๊ฐ ๋ง๊ฐ์ง๊ธฐ ๋๋ฌธ์ ๋๋ค.
- Http Status Code
- ๊ณผ์ ๋ฅผ ์งํํ๋ฉด์ ์ฌ์ฉํ Http Status Code๋ฅผ ๋ชจ๋ ๋์ดํ๊ณ , ๊ฐ๊ฐ์ด ์๋ฏธํ๋ ๊ฒ๊ณผ ์ด๋ค ์ํฉ์ ์ฌ์ฉํ๋์ง ์์ฑํด ์ฃผ์ธ์. 200: ์์ฒญ์ด ์ฑ๊ณตํ๋ค๋ ์๋ฏธ์ ๋๋ค. (GET, HEAD, PUT, TRACE) 201: ์์ฒญ์ด ์ฑ๊ณตํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ ์๋ก์ด ๋ฆฌ์์ค๊ฐ ์์ฑ๋์์ต๋๋ค. (POST, PUT) 400: Bad Request ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ ์ค๋ฅ๋ก ์ธ์๋๋ ์ํฉ(ex: ์๋ชป๋ ์์ฒญ ๊ตฌ๋ฌธ, ์๋ชป๋ ์์ฒญ ๋ฉ์์ง ํ๋ ์ด๋ฐ ๋๋ ์ฌ๊ธฐ์ฑ ์์ฒญ ๋ผ์ฐํ )์ผ๋ก ์ธํด ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๊ฑฐ๋ ์ฒ๋ฆฌํ์ง ์์ต๋๋ค. 401: Unauthorized HTTP ํ์ค์ "์ธ์ฆ๋์ง ์์"์ ๋ช ์ํ์ง๋ง, ์๋ฏธ์ ์ผ๋ก ์ด ์๋ต์ "์ธ์ฆ๋์ง ์์"์ ์๋ฏธํฉ๋๋ค. ์ฆ, ํด๋ผ์ด์ธํธ๋ ์์ฒญ๋ ์๋ต์ ๋ฐ์ผ๋ ค๋ฉด ์์ ์ ์ธ์ฆํด์ผํฉ๋๋ค. 404: Not Fount ์๋ฒ๊ฐ ์์ฒญํ ๋ฆฌ์์ค๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค. ๋ธ๋ผ์ฐ์ ์์ ์ด๋ URL์ด ์ธ์๋์ง ์์์ ์๋ฏธํฉ๋๋ค. 409: Conflict ์ด ์๋ต์ ์์ฒญ์ด ์๋ฒ์ ํ์ฌ ์ํ์ ์ถฉ๋ํ ๋ ์ ์ก๋ฉ๋๋ค. 500: Internal Server Error ์๋ฒ์์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํด์ผ ํ ์ง ๋ชจ๋ฅด๋ ์ํฉ์ด ๋ฐ์ํ์ต๋๋ค.
- ๊ฒ์ ๊ฒฝ์
- ํ์ฌ๋ ๊ฐํธํ ๊ตฌํ์ ์ํด ์บ๋ฆญํฐ ํ
์ด๋ธ์ money๋ผ๋ ๊ฒ์ ๋จธ๋ ์ปฌ๋ผ๋ง ์ถ๊ฐํ์์ต๋๋ค.
- ์ด๋ ๊ฒ ๋์์ ๋ ์ด๋ ํ ๋จ์ ์ด ์์ ์ ์์๊น์? ํญ์ ๋ฌธ์ ์ ์ ๋ณด์์ ์์ต๋๋ค. ์บ๋ฆญํฐ์ ๋ณด์์ด ๋ซ๋ ค ๋ด ์บ๋ฆญํฐ๋ฅผ ๋ง์๋๋ก ์กฐ์ข ์ด ๊ฐ๋ฅ ํ ๋ money๋ ๊ฒฐ๊ตญ ์ฌํ์ ๋ํ ๋ฐ์ดํฐ์ด๊ธฐ์ ๊ฒ์์์ ๊ต์ฅํ ๋ฏผ๊ฐํ ์์์ ๋๋ค. ํด๋น ์์์ด ์บ๋ฆญํฐ ์ ๋ณด์ ํจ๊ป ์์ผ๋ฉด ์บ๋ฆญํฐ ์ ๋ณด๊ฐ ๋ซ๋ฆด ๋ธ ์ฌํ์ ์์ ๋ง์๋๋ก ๋๋ฆฌ๊ฑฐ๋ ์ค์ผ ์ ์์ต๋๋ค.
- ์ด๋ ๊ฒ ํ์ง ์๊ณ ๋ค๋ฅด๊ฒ ๊ตฌํํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ด๋ค ๊ฒ์ด ์์๊น์? ์ฆ, ๋ณด์์ฑ์ ๋๋ฆฌ๋๊ฒ ํต์ฌ์ด๊ณ ๋น์ฅ์ ์๊ฐํ ์ ์๋ ๊ฒ์ ์๋ฒ์์ ํด๋ผ์ด์ธํธ์ ์ง์ ์ ์กํ๊ฒ ๋ ์บ๋ฆญํฐ ์ ๋ณด์ ๋ฃ๋ ๊ฒ ๋ณด๋ค๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ง์ ๋ค์ด๊ฐ ์ฌํ ๋ฆฌ์์ค๋ฅผ ๋ฐ๋ก ๊ด๋ฆฌ๋ฅผ ํ์ฌ ๋ณด์์ฑ์ ๋๋ ค์ค์ผ ํ ๊ฒ ๊ฐ์ต๋๋ค. ๋ค๋ฅธ DB์ ๋ฃ๋ ๋ฐฉ์์ผ๋ก ํ์ฌ ์บ๋ฆญํฐ ์ ๋ณด ์ ์ฌํ ๊ด๋ฆฌ๋ ๋ฐ๋ก ํด์ฃผ๋ฉด ๋์ฑ ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
- ์์ดํ ๊ตฌ์ ์์ ๊ฐ๊ฒฉ์ ํด๋ผ์ด์ธํธ์์ ์ ๋ ฅํ๊ฒ ํ๋ฉด ์ด๋ ํ ๋ฌธ์ ์ ์ด ์์ ์ ์์๊น์? ์์ดํ ๊ฐ๊ฒฉ์ ์๊ธฐ ๋ง์๋๋ก ๊ตฌ๋งคํ ์ ์๊ธฐ ๋๋ฌธ์ ์๋ฅผ ๋ค์ด ์์ดํ ์์ ์์ 0์์ ์ฐ ๋ฌด๊ธฐ๊ฐ ํ๋งคํ ๋ 10000์ด๋ผ๊ณ ํ๋ฉด ๋ ๋ณต์ฌ๊ฐ ๋๊ธฐ ๋๋ฌธ์ ๊ฒ์ ๊ฒฝ์ ๊ฐ ๋ง๊ฐ์ง๋๋ค. ๋ํ, ๊ฐ๊ฒฉ์ ๊ตฌ๋งคํ ๋ 1000์ ์ง๋ฆฌ๋ฅผ 10000์์ผ๋ก ๊ตฌ๋งคํ๊ฒ ๋๋ค๋ฉด ์๋ 10๊ฐ๋ฅผ ๊ตฌ๋งคํ ์๊ฐ์ด์์ง๋ง 1๊ฐ๋ฅผ ๊ตฌ๋งคํ๊ฒ ๋์ด ์๋ฒ ๋กค๋ฐฑ์ ์ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์์ง ๊ฒ ๊ฐ์ต๋๋ค. ๊ฒฝ๋งค์ฅ์์๋ ๋ฌธ์ ๊ฐ ์์ง๋ง ์ธ๊ฐ์ด๋ผ๋ฉด ์ธ์ ๋ ์ค์๋ฅผ ํ ์ ์๊ธฐ ๋๋ฌธ์ 1000๋ง์์ง๋ฆฌ๋ฅผ 100๋ง์์ ์ฌ๋ฆฌ๋ ์ค์๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ๊ฒฝ๋งค์ฅ์ ๋ค๋ฅธ ์ ์ ๋ค์๊ฒ ์ค์ ๋ก ๋ณด์ด๋ ์๊ฐ ๊น์ง ์๊ฐ ์ฐจ์ด๋ฅผ ๋์ด ์์ดํ ๊ฐ๊ฒฉ์ ๋ค์ ์ฒดํฌํ๊ณ ์๋ชป ์ ๋ ฅํ ๊ฒฝ์ฐ ๋ค์ ์๊ฑฐํ ์ ์๋ ๋ฌผ๋ฆฌ์ ์ธ ์๊ฐ์ ์ฃผ๋ ๊ฒ๋ ๊ด์ฐฎ์ ๊ฒ ๊ฐ์ต๋๋ค.
- ํ์ฌ๋ ๊ฐํธํ ๊ตฌํ์ ์ํด ์บ๋ฆญํฐ ํ
์ด๋ธ์ money๋ผ๋ ๊ฒ์ ๋จธ๋ ์ปฌ๋ผ๋ง ์ถ๊ฐํ์์ต๋๋ค.