- ์ ๋ง ๋น ๋ฅด๊ฒ REST API๋ฅผ ๋ง๋ค์ ์์ต๋๋ค.
- ๊ธฐ๋ณธ์ ์ผ๋ก API Document๋ฅผ Swagger ๋ง๋ค์ด์ค๋๋ค.
- CLI๋ฅผ ํตํด์ ํธ๋ฆฌํ๊ฒ ๋ชจ๋ธ ์์ฑ, ์ ์ ์ ๊ทผ ๊ถํ ๋ฑ๋ฑ ์์ ์ ์งํํ ์ ์์ต๋๋ค.
- ๋ค์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ORM์ผ๋ก ์ฝ๊ฒ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
- ๊ธฐ๋ณธ์ ์ผ๋ก Node, NPM์ด ์ค์น๋์๋ ํ๊ฒฝ์ด๋ผ ๊ฐ์ ํ๊ฒ ์ต๋๋ค.
$ npm install -g loopback-cli
๋ฃจํ๋ฐฑ์ ๊ธฐ์ด์ ์ธ ํน์ง์ ์์๋ณด๊ฒ ์ต๋๋ค.
$ lb
? ์ ํ๋ฆฌ์ผ์ด์
์ด๋ฆ์ ๋ฌด์์
๋๊น? hello-world
? ํ๋ก์ ํธ๋ฅผ ํฌํจ์ํฌ ๋๋ ํ ๋ฆฌ ์ด๋ฆ ์
๋ ฅ: hello-world
create hello-world/
info ์์
๋๋ ํ ๋ฆฌ๋ฅผ hello-world(์ผ)๋ก ๋ฒ๊ฒฝ
? ์ฌ์ฉํ๋ ค๋ LoopBack ๋ฒ์ ์ ๋ฌด์์
๋๊น? 3.x (current)
? ์์ํ๋ ์ ํ๋ฆฌ์ผ์ด์
์ข
๋ฅ๋ ๋ฌด์์
๋๊น? hello-world (A project containing a controller, includi
ng a single vanilla Message and a single remote method)
- ํฐ๋ฏธ๋์์ ์ํ์๋ ๋๋ ํ ๋ฆฌ ์ด๋ ์ดํ lb ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๊ณ ํ๋ก์ ํธ ์ค์ ์ ์ด์ด ๊ฐ๋๋ค.
- ํ๋ฌ์ ํธ ์ด๋ฆ, ๋๋ ํ ๋ฆฌ ์ด๋ฆ ๋ฑ ๊ฐ๋จํ๊ฒ ์ค์ ํฉ๋๋ค.
- ๋ฒ์ ์ 3.x ์ต์ ๋ฒ์ ์ ์ ํํฉ๋๋ค.
- ์์ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ข ๋ฅ๋ hello-world๋ฅผ ์ ํํฉ๋๋ค.
$ cd hello-world/
$ node .
- ์์์
CLI๋ก ์์ฑํ ํ๋ก์ ํธ ๋๋ ํ ๋ฆฌ๋ก ์ด๋ํฉ๋๋ค. node .๋ช ๋ น์ด๋ก ํ๋ก์ ํธ๋ฅผ ์คํ ํฉ๋๋ค.http://0.0.0.0:3000/explorer๋ก ์ด๋ํฉ๋๋ค.- API Document
Swagger๊ฐ ์ ์์ ์ผ๋ก ์ถ๋ ฅ๋๋ฉด ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ต๋๋ค.
- Loopback ๊ธฐ๋ณธ
User๋ชจ๋ธ์ ๊ธฐ๋ฐ์ผ๋ก User API๋ฅผ ๋ง๋ค์ด ์ค๋๋ค. - User API๋ ํ์ ๊ฐ์ , ๋ก๊ทธ์ธ, ๋ก๊ทธ์์, ํ์ ์ ๋ณด ์์ , ๋ฑ๋ฑ User์ ๋ํ REST API๊ฐ ์์ต๋๋ค.
{
"realm": "string",
"username": "loopback",
"email": "loopback@loopback.com",
"password": "loopback"
}
data์ JSON ํ์ ์ผ๋ก ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํฉ๋๋ค.- ๊ธฐ๋ณธ์ค์ ์ธ In-memory db์ ์ ์ฅ๋ฉ๋๋ค.
{
"email": "loopback@loopback.com",
"password": "loopback"
}
credentials์์์ ๊ฐ์ ํ email, password ์ ๋ณด๋ฅผ JSON ํ์ ์ผ๋ก ์ ๋ ฅํฉ๋๋ค.- ํ์ ์ ๋ณด๊ฐ ์ผ์นํ ๊ฒฝ์ฐ
Response Body์AccessToekn์ ๋ณด๋ฅผ ๋๊ฒจ ์ค๋๋ค. AccessToekn.id์ ๊ฐKIjxd....์ ์ค๋ฅธ์ชฝ ์๋จ ToKen Set์ ์ ๋ ฅํฉ๋๋ค.- loopback์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ธ์ฆ์ฒ๋ฆฌ๋ฅผ AccessToekn ๋ฐฉ์์ผ๋ก ์ง์ํฉ๋๋ค.
AccessToekn๋ชจ๋ธ ๋ํ Loopback์ ๊ธฐ๋ณธ ์ ๊ณต ๋ชจ๋ธ์ค ํ๋์ ๋๋ค.
idํ๋ผ๋งํฐ์AccessToekn์์ ๋ฐ๊ธ ๋ฐ์userId๋ฅผ ์ ๋ ฅํฉ๋๋ค.- ์์ ์ ์ ๋ณด๋ฅผ ์กฐํํ ์ ์์ต๋๋ค.
- ์์ ์ ์ด์ธ์ ํ์ ์ ๋ณด๋ฅผ ์กฐํํ ๊ฒฝ์ฐ ์๋์ ๊ฐ์
StatusCode401๋ฅผ ๋ฆฌํด ๋ฐ์ต๋๋ค.
{
"error": {
"statusCode": 401,
"name": "Error",
"message": "๊ถํ ํ์"
}
}
๋ฃจํ๋ฐฑ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ธ์ ์์ฑํ๊ณ ๋ชจ๋ธ ๊ฐ์ ๊ด๊ณ๋ฅผ ์ ์ํ๋ฉด ๊ธฐ๋ณธ์ ์ธ CURD REST API๋ฅผ ์๋์ผ๋ก ๋ง๋ค์ด ์ค๋๋ค. ๋ํ, Swagger๋ฅผ ์ด์ฉํด์ API Document ๋ํ ์๋์ผ๋ก ๋ง๋ค์ด ์ฃผ์ด ์ ๋ง ๋น ๋ฅด๊ฒ API๋ฅผ ๊ฐ๋ฐํ ์ ์๊ฒ ํด์ค๋๋ค. ๋ ํน์ API์ ๋ํ ์ ๊ทผ ๊ถํ ๋ฐ ์ธ์ฆ ์ฒ๋ฆฌ๋ ์ ๋ง ๊ฐ๋จํ๊ฒ ์ด๋ฃจ์ด์ง๊ณ , ์ด ๋ฐ์๋ ๋ค์ํ ์ฅ์ ๋ค๋ก ๋น ๋ฅด๊ฒ ๊ณ๋ฐํ ์ ์๋๋ก ๋์์ค๋๋ค. ์ด๋ฌํ ์ฅ์ ๋ค์ ํ ๋ฒ์ ์๊ฐํ๊ธฐ๋ ํ๋ค์ด ํด๋น ํํธ ๋ง๋ค ์๊ฐ๋ฅผ ์ด์ด ๋๊ฐ ๊ฑฐ ๊ฐ์ต๋๋ค. ์ค๋ ํฌ์คํ ํ ๋ด์ฉ์ ๋ถ์คํ์ง๋ง ์ด๋ ๊ฒ๋ผ๋ ์์์ ํ์ง ์์ผ๋ฉด ๊ณ์ ๋ฆ์ด์ง ๊ฑฐ ๊ฐ์ ๋น ๋ฅด๊ฒ ์ ๋ฆฌํด๋ณด์์ต๋๋ค. ์์ผ๋ก๋ ๊ฐ๋จํ ๊ฒ์ํ์ ๋ง๋ค๋ฉด์ Loopback์ ์ฅ์ ๋ค์ ์๊ฐํ ์์ ์ ๋๋ค.



