PHP ํ๋ ์์ํฌ Slim Framework ์ฒซ๊ฑธ์
์๋
ํ์ธ์. ๋จผ๋ฐ์ด์นํจ์ Selen์
๋๋ค.
์ ๋ ์ง๊ธ Slim์ ํตํด API์๋ฒ๋ฅผ ๋ง๋ค์ด๋ณด๋ ค๊ณ ํ๋๋ฐ์,
์ผ๋จ ์๋ฒ์ ์ํฉ์ ์ ์๋ฉด AWS์ ์๋ EC2 t2.nano ์ธ์คํด์ค์
๋๋ค.
๋๋ฉ์ธ์ A๋ ์ฝ๋๋ก ์ฐ๊ฒฐํด๋์๊ณ , EIP๋ฅผ ์ฌ์ฉ์ค์
๋๋ค.(๋๋ฉ์ธ ์ฐ๊ฒฐํ๋ ค๋ฉด ๋น์ฐํ๊ฑด๊ฐ์?
DB๋ RDS๋ก, mariaDB๋ฅผ ์ฌ์ฉํด ํ
์คํธํ ๊ฑฐ์์.
์ง๊ธ ์ด ๊ธ์ ์ ๋ ์์ ์ 2016๋
3์ 3์ผ. 3์ ์ด์
๋๋ค.
์ด๋์ ๋ฒ์ ์ 3.1์ด์์ง๋ง ํ์ฌ์์ ์ผํ๊ณ ์๋ ์ฌ์ด์ ๋ ์๋ก์ด ๋ฒ์ ์ด ๋์๋ค์.
์ฌ๋ฆผ์ ๋ฒ์ ์ด ๋๋ฌด ๋นจ๋ฆฌ๋ฐ๋๋๊ฒ ๊ฐ์์. ์ผ๋จ ์ด๋๋ก ๊ฐ๋ด
๋๋ค.
์ด์ ๋์ถฉ ์ํฉ์ค๋ช
์ด ๋๋ฌ์ผ๋ ์ฌ๋ฆผ์ ์ฌ์ฉํด๋ณด๋ ค๊ณ ํ๋๋ฐ์,
์ผ๋จ ์ ๋ ์๋ฒ์ PHP7๋ฅผ ์ค์นํ๊ณ , ์ปดํฌ์ ๋ฅผ ์ค์นํ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ Slim Framework์ ๊ณต์ ์ฌ์ดํธ์ ๋์จ๋๋ก
composer create-project slim/slim-skeleton ํ๋ก์ ํธ์ด๋ฆ
์์ ๊ฐ์ ์ปค๋งจ๋๋ฅผ ํตํด ์ ํ๋ก์ ํธ๋ฅผ ์์ฑํ์ต๋๋ค.
๋ฌผ๋ก ์ปค๋งจ๋๋ฅผ ์คํํ๋ ์์น๋ API๊ฐ ์์ด์ผ ํ ์์น๋ก ํ์ง์!
๊ทธ๋ฌ๋ฉด ์๊ฐ์ด ์ง๋๋๋ ์ด๊ฒ์ ๊ฒ ์ค์น๊ฐ ๋ฉ๋๋ค.
์ด์ ์ ๋ ํ๋ฒ ์คํํด๋ณด๊ธฐ๋ก ํฉ๋๋ค.
๊ทธ ์ ์ ํด๋น ํ๋ก์ ํธ์ ๊ถํ์ ๋ชจ๋ 755๋ก ๋ฐ๊ฟ๊ฑด๋ฐ์, ์ ๊ฐ ๋ฌด์งํ ๊ด๊ณ๋ก(...) ์ด๊ฒ ํด๋ ๋๋๊ฑด์ง, ๋์์ง ์์๊ฒ์ธ์ง ์ ํํ๊ฒ ์์ง ๋ชปํฉ๋๋ค.
(์ ๊ฒ ํ๋ช
ํ ๋ฐฉ๋ฒ์ ์๋ ค์ฃผ์ค๋ถ์ ์ฐพ์ต๋๋ค.)
sudo chmod -R 755 ํ๋ก์ ํธ์ด๋ฆ
์์ ๊ฐ์ด ํ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋์ ์ด ๋ค์ ์ญ์ ํํ์ด์ง ๋ฉ์ธ์ ๋์จ๋๋ก ๋ฐ๋ผํ ๊ฑด๋ฐ์,
php -S 0.0.0.0:8080 -t public public/index.php
์ด๋ ๊ฒ ๋ฐ๋ผํด๋ด
๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋์ API์๋ฒ์ ์ฃผ์์ 8080ํฌํธ๋ฅผ ๋ถ์ฌ์ ์ ์ํด๋ด
๋๋ค.
์๋์. ์์ฃผ์์ฃผ ๋ง์กฑ์ค๋ฝ๊ฒ ์ด์๊ฒ ๋์์ค์ ๊ณ ๋ง๋ค์.
8080ํฌํธ๋ฅผ 80 ๋๋ 443์ผ๋ก ๋ฐ๊ฟ๋ณด๊ณ ์ถ์ง๋ง ๊ทธ๊ฑด ๋์ค์ ํด๋ณผ๋์.
์ผ๋จ route๋ฅผ ๋ค๋ค๋ณด๊ณ ์ถ์ด์.
์๋๋ฉด ๋ญ๋ ์ฐ๊ฒฐ์ด ๋์ด์ ๊ฒฐ๊ณผ๊ฐ์ด ๋์ ๋ณด์ฌ์ผ ์ ์์์์์์!
ํ๋ก์ ํธ๊ฒฝ๋ก/src/routes.php
ํ์ผ์ ๋ค์ฌ๋ค ๋ณด๊ฒ๋๋ฉด ๋ผ์ฐํ
๊ด๋ จ ์ค์ ๋ค์ด ์์ด์!
์ง๊ธ์ ๋ญ๊ฐ๊ฐ ์ ํ์์ง๋ง ์ ๋ ์ ๊ฐ ์์๋ณผ์ ์๋๊ฒ๋ง ์จ๋ณผ๊ฑฐ์์.
๊ธฐ์กด์ ์ ํ์๋ ์์ค๋ฅผ ์์ฃผ์์ฃผ ์กฐ๊ธ๋ง ๋ฐ๊ฟ์ ์๋ํ๋์ง ํ์ธํด ๋ณผ๊ฑด๋ฐ์, ์ ๋ ์๋์ฒ๋ผ ํด๋ดค์ด์
$app->get('/test', function ($request, $response, $args) {
ย ย $this->logger->info("Slim-Skeleton '/' route"); ย ย // ์๋ง ๋ก๊ทธ๋ฅผ ๋จ๊ธฐ๋ ์น๊ตฌ๊ฒ ์ฃ .
ย ย return $this->renderer->render($response, 'index.phtml', $args);
Bold์ฒ๋ฆฌ๋ ๋ถ๋ถ๋ง ๋ฐ๊ฟ๋ณด์๋๋ฐ์,
logger๋ ๋ก๊ทธ๋ฅผ ๋จ๊ธฐ๋ ํจ์๋ค์ด ์๋๊ฒ๊ฐ์์.
๊ทธ๋ฆฌ๊ณ renderer๋ ๋ง ๊ทธ๋๋ก ๋ ๋๋งํ ๋ ๋์์ ์ฃผ๋ ํจ์๊ฐ ์๋ ์น๊ตฌ๊ฐ ์๋๊น ์ถ์ด์.
๊ทธ๋ฆฌ๊ณ return๊ฐ์ ์๋ง ํ
ํ๋ฆฟํ์ผ์ ๋ถ๋ฌ์์ phpํ์ผ์ ์ ๋นํ ์ฒ๋ฆฌํด์ฃผ๊ฒ ์ฃ ?
์์ธํ๊ฑด ์ ํํ
๋ ๋ฌป์ง๋ง์..(์์ธํ ์์๋๋ถ์ ๋งํด์ฃผ์๋ฉด ๋์!! ํ์)
๊ทธ๋ฆฌ๊ณ ์ ๋ผ์ฐํ
์ ์ฌ๋ฌ๊ฐ ํ๋ ๋ฐฉ๋ฒ์ด ๋จ์ํ๊ฒ ์ถ๊ฐํ๊ธฐ๋ง ํ๋ฉด ๋๋๊ฑด์ง ๊ถ๊ธํด์ ์๋ํด ๋ณผ๊ฑฐ์์.
์ ๋๋ค! ์ญ์ ๋๋๊ตฐ์
$app->get('/member/login/{id}/{passwd}', function ($request, $response, $args) {
ย ย $this->logger->info(โTEST '/member/login' route");
print_rํจ์๋ฅผ ์ฐ๊ฑฐ๋ echo๋ก ๋ณด์ฌ์ค๋ ์ ๋์ค๋๋ผ๊ณ ์.
๊ทธ๋์ $args๋ณ์์ ๋ญ๊ฐ์๋์ง ๊ถ๊ธํด์ ํ์ธํด๋ณด๋๋ผ ์ ๋ ๊ฒ ๋ฐ๊ฟ๋ณด์์ด์..
($request๋ $respone๋ ํ์ธํด๋ดค์ง๋ง์)
ํ๋ผ๋ฉํฐ์ []์ ๊ฐ์ธ๋ฉด ์ต์
์ผ๋ก ๋ฐ์์ ์๋๊ฑด์ค ์์๋๋ฐ ๊ทธ๊ฑด ๋ฑํ ์๋๊ฐ๋ด์...... ์ฌํ๋ค..
๊ทธ๋ฐ๋ฐ! ์ ๊ฐ ์๋ชปํ๋๊ฒ์ด์์ด์!
$app->get('/member/login/[{id}]/[{passwd}]', function ($request, $response, $args) {
ย ย $this->logger->info("Bacving-API '/member/login' route");
์ ๊ฐ์ด id, passwd ๋๋ค ์ต์
์ผ๋ก ๋ฐ์ผ๋ ค๊ณ ํ์์ง๋ง
์ฌ์ค์ ๋งจ ๋ค์ ์ธ์๊ฐ๋ง ์ต์
์ผ๋ก ๊ฐ๋ฅํ๊ฒ ๊ฐ์์.
$app->get('/member/login/{id}/[{passwd}]', function ($request, $response, $args) {
ย ย $this->logger->info("Bacving-API '/member/login' route");
์ฒ๋ผ ํ๋๊น ์์ฃผ ์ ๋๋๊ตฐ์.
์๋ฌด๋๋ ๋ก๊ทธ์ธ ๋ฐฉ์์ ์ด๊ฒ ๋ง์ง ์์๊ฐ ์ถ์ด์.
์ฐ์ ์ ์ผ๋ก RESTful์ ๋ํด ์ ํํ ์์๋ณด๊ณ ์์ผ๊ฒ ์ด์.
์ผ๋จ ๋ผ์ฐํ
์ ์์ฃผ์์ฃผ ์ฝ๊ฐ๋ง ๋ค๋ค๋ณด์์ด์.
์ด๊ฒ๋ง ํด๋ jsonํ์์ผ๋ก ๋๊ฒจ์ฃผ๊ธฐ ์์ฃผ ๋ฑ ์ข์ ๋์ด๋๋ค์.
๊ทธ๋ผ RESTful์ ๋ํด ์์๋ณด๊ณ ๋ค์ ๋ง๋์!