ํ ์คํธ ๊ณผ์ 1๋ฒ
์ค๋ช : API ์๋ฒ(JSON HTTP API) ๊ฐ๋ฐ ๋๊ตฌ: Java ํ๋ ์์ํฌ: Play Framework 2.4(๋๋ ์ด์) ๋๋ Spring boot 1.2.3(๋๋ ์ด์) ๋ฐ์ดํฐ๋ฒ ์ด์ค: MySQL ํ๋กํ ์ฝ: HTTP, ํฌํธ 80 ๊ธฐ๋ฅ(์์ฒญ):- ์ง์ ์ฃ๋ ์ฌ๋.
- ํ์ผ(JPG ์๋ฐํ ์ฌ์ง)์ ์๋ฒ๋ก ์ ์กํฉ๋๋ค.
- ์ด๋ฏธ์ง๋ฅผ ์๋ฒ์ ๋๋ ํ ๋ฆฌ์ ์ ์ฅํฉ๋๋ค.
- ์๋ฒ ์๋ต์ ์ด๋ฏธ์ง์ ๋ด๋ถ URI์ ๋๋ค.
- ์๋ก์ด ์ฌ์ฉ์๋ฅผ ์ถ๊ฐํฉ๋๋ค.
- ๋น์ฌ๋ ์ฌ์ฉ์์ ๊ฐ์ธ ๋ฐ์ดํฐ(์ด๋ฏธ์ง์ URI, ์ฌ์ฉ์ ์ด๋ฆ, ์ด๋ฉ์ผ ๋ฑ)๋ฅผ ์๋ฒ๋ก ์ ์กํฉ๋๋ค.
- ์ฐ๋ฆฌ๋ ์ ๋ณด๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํฉ๋๋ค.
- ์๋ฒ ์๋ต์ ์ ์ฌ์ฉ์์ ๊ณ ์ ID์ ๋๋ค.
- ์ฌ์ฉ์์ ๋ํ ์ ๋ณด๋ฅผ ์ป์ต๋๋ค.
- ๊ณ ์ ํ ์ฌ์ฉ์ ID๋ฅผ ์๋ฒ๋ก ์ ์กํฉ๋๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ ๋ณด๋ฅผ ์ฝ๋ ์ค์ ๋๋ค.
- ์๋ฒ์ ์๋ต์ ์ฌ์ฉ์์ ๊ฐ์ธ ๋ฐ์ดํฐ์ ๋๋ค(์ ์ฐธ์กฐ).
- ์ฌ์ฉ์ ์ํ ๋ณ๊ฒฝ(์จ๋ผ์ธ, ์คํ๋ผ์ธ)
- ๊ณ ์ ํ ์ฌ์ฉ์ ID์ ์๋ก์ด ์ํ(์จ๋ผ์ธ, ์คํ๋ผ์ธ)๋ฅผ ์๋ฒ๋ก ์ ์กํฉ๋๋ค.
- ์ฌ์ฉ์ ์ํ ๋ณ๊ฒฝ.
- ์๋ฒ ์๋ต - ๊ณ ์ ํ ์ฌ์ฉ์ ID, ์ ๊ท ๋ฐ ์ด์ ์ํ.
- ์๋ฒ ํต๊ณ.
- ์ฐ๋ฆฌ๋ ์๋ฒ์ ๋งค๊ฐ๋ณ์๋ฅผ ์ ์กํฉ๋๋ค: 1. ํด๋ผ์ด์ธํธ ์ํ(์จ๋ผ์ธ, ์คํ๋ผ์ธ ๋๋ ๋ถ์ฌ), 2. ์์ฒญ์ ๊ณ ์ ID(ํ์์คํฌํ)(๋ถ์ฌํ ์ ์์)
- ์๋ฒ ์๋ต์ ์ํ, ์ฌ์ง URI, ์์ฒญ์ ๊ณ ์ ID(ํ์์คํฌํ)๊ฐ ํฌํจ๋ ์ฌ์ฉ์ ๋ชฉ๋ก์ ๋๋ค.
ํ์ ์๊ตฌ์ฌํญ:
- ํธ์ํด์. - ๋ชจ๋ ๋ฐ์ดํฐ๋ JSON ํ์์ ๋๋ค. - API ์๋ฒ๋ ์์ฒญ 3๊ณผ 5๊ฐ (์์ฒญ 1, 2, 4์ ๋นํด) ๊ฐ์ฅ ๋์ ์ฐ์ ์์๋ฅผ ๊ฐ์ง๋ฉฐ ์ต๋ํ ๋นจ๋ฆฌ ์๋ฃ๋์ด์ผ ํ๋ค๋ ์ ์ ๊ณ ๋ คํ์ฌ ์ค๊ณ๋์ด์ผ ํฉ๋๋ค. - ์ฒ๋ฆฌ ์ค ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค.์ ํ์ ์๊ตฌ์ฌํญ(๋ฐ๋์งํจ):
- ์ฝ๋ ๋ฌธ์ํ. - API ์๋ฒ ์ํคํ ์ฒ๋ ๋์ ๋ถํ์ ํ์ฅ์ฑ์ ๊ฐ๋๋ก ์ค๊ณ๋์ด์ผ ํฉ๋๋ค. - ํ ์คํธ.๊ฒ์ฌ ๊ฒฐ๊ณผ:
- ํ ์คํธ ์์ ์ ๊ฒฐ๊ณผ๋ ์์นด์ด๋ธ์ ๋ฐฐํฌ์ ๋ํ ์์ธํ ์ง์นจ๊ณผ ํจ๊ป ์ ๊ณต๋์ด์ผ ํฉ๋๋ค. ํ ์คํธ ์์ ์ ์ํ Docker ์ปจํ ์ด๋๋ฅผ ๋น๋ํ๋ ค๋ฉด Dockerfile์ ์ฐ๊ฒฐํ๋ ๊ฒ์ด ์ข์ต๋๋ค. github.com์์ ๋ค์ด๋ก๋ ๊ฐ๋ฅํฉ๋๋ค. - ์์ฑ๋ API์ ๋ํ ๊ฐ๋ตํ ๋ฌธ์๋ฅผ ํฌํจํด์ผ ํฉ๋๋ค(์์ฒญ ๋ชฉ๋ก, ์์ฒญ ๋งค๊ฐ๋ณ์, ์์ฒญ ํ์, ์๋ต ํ์ ๋ฑ). - ์ค๊ณ, ํ๋ก๊ทธ๋๋ฐ, ๋ฌธ์ํ ๋ฑ์ ๋งฅ๋ฝ์์ ํ ์คํธ ์์ ์ ์์๋ ์๊ฐ์ ๋ํ ์ ๋ณด ์ด ํ ์คํธ ์์ ์ ์ง์๊ณผ ๊ธฐ์ ์ ํ๊ฐํ๊ธฐ ์ํ ๊ฒ์ผ ๋ฟ ์์ ํ(API ์๋ฒ)์ ๋ง๋๋ ๊ฒ์ ๋ชฉํ๋ก ํ์ง ์์ผ๋ฏ๋ก ์ค๋ช ๊ณผ ์ด์ ๋ฅผ ํฌํจํ ๋จ์ํ๊ฐ ํ์ฉ๋ฉ๋๋ค.์ธ์ฌํ๊ณ ์๋ จ๋ ํ๋ก๊ทธ๋๋จธ๋ ๋ค์ ์น์ ์ ๊ฑด๋๋ธ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์๋ ์์ ์์ฒด์ ํ ์คํธ๋ฅผ ๋ค๋ฃจ๊ฒ ์ต๋๋ค. ์์ ์ "ํค๋"๋ ์ดํดํ๋ ๋ฐ ์ด๋ ค์์ ์ผ์ผํค์ง ์์ผ๋ฏ๋ก ๋ด ์ ํ์ด Spring Boot์ ์๋ค๊ณ ๋งํ๊ฒ ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ฏธ ์์ ์ ์ํํ๊ธฐ ๋๋ฌธ์ด ์๋๋ผ ์ด๋ฏธ ๋ค์์ ์ฌ์ฉํ์ฌ ์ค์ ํ๋ก์ ํธ๋ฅผ ์๋ฃํ๊ธฐ ๋๋ฌธ์ ๋๋ค. Spring (ํ์ง๋ง ๋จ์์ฑ ๋๋ฌธ์ Boot๋ ๊ฑฐ๊ธฐ์ ์์์ต๋๋ค.) ์๋ฒ ๊ธฐ๋ฅ์ ๋ฐ๋ผ: 1) ํ์ผ ๋ค์ด๋ก๋. ์ฌ๊ธฐ์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ณต์กํ ๊ฒ์ด ์์ต๋๋ค. ์ฌ์ง์ด ์ผ๋ฐ์ ์ผ๋ก ์๋ฒ์ ์ด๋ป๊ฒ ์ ์ฅ๋๋์ง ์์๋ด๋ฉด ๋์๊ณ , ๊ฐ์ฅ ํธ๋ฆฌํ ๋ฐฉ๋ฒ์ ์ฌ์ง์ ํน๋ณํ ๋๋ ํ ๋ฆฌ์ ๋ฐฐ์นํ๋ ๊ฒ์ด์์ต๋๋ค. ์๋์์ ๊ตฌ์ฒด์ ์ธ ๊ตฌํ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค. 2) ์๋ก์ด ์ฌ์ฉ์๋ฅผ ์ถ๊ฐํ๋ ๊ฐ๋จํ ์์ ์ ๋๋ค. CRUD ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ ์ ์ด ์๋ค๋ฉด ๊ทธ๋ ๋๋ฅผ ์ง์ํ ๊ฒ์ด๊ณ , ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ์๋์ ๋ชจ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. 3) ์ด์ฉ์์ ๊ดํ ์ ๋ณด๋ฅผ ์ทจ๋ํฉ๋๋ค. ์ง๋ฌธ์ด ์์ต๋๋ค. ๋ชจ๋ ๊ฒ์ด ๋ช ํํฉ๋๋ค. 4)์ฌ์ฉ์ ์ํ๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค. ์์ ์ ์ฒ์ ๋ ๊ฐ์ง ์ฌํญ์ ๋ ์ง๋ก ๋ช ํํ์ง๋ง ์ธ๋ถ ์์ฒญ์ ์ด๋ป์ต๋๊น??? 100g์ด ์์ผ๋ฉด ์์๋ด๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค. ์ง๊ธ๋ ์ ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ดํดํ๋์ง 100% ํ์ ํ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ์๋๋ฅผ ์ฐธ์กฐํ์ธ์. 5)์๋ฒ ํต๊ณ. ์ด๊ฒ๋ ํฅ๋ฏธ๋กญ์ต๋๋ค. ์ฒซ ๋ฒ์งธ ์์ ์ ๋งค๊ฐ๋ณ์์ ๋ํ ๋ค์ํ ์ต์ ์ ์ฌ์ฉํ์ฌ ๋ฉ์๋๋ฅผ ๊ตฌํํ๋ ๊ฒ์ ์ ์ํ์ง๋ง, ์ด๊ฒ์ด ์ปจํธ๋กค๋ฌ ๋ฉ์๋์ฌ์ผ ํ๋ค๋ ์ ์ ๊ฐ์ํ ๋ ์ด๋ฅผ ์ํํ๋ ๋ฐฉ๋ฒ์ ์์ง ๋ช ํํ์ง ์์ต๋๋ค. ๋ ๋ฒ์งธ ์์ ์ ์ ์ ํ ์ํ๊ฐ ๋ณ๊ฒฝ๋ ๋ชจ๋ ์ฌ์ฉ์์๊ฒ ๋ฌป๋ ๊ฒ์ผ๋ก, ๋ถ๋ช ํ ๊ฒ ๊ฐ์ง๋ง ๋ฏธ๋ฌํจ์ด ์์ต๋๋ค.
์์ํ๊ธฐ
์, ์ด ์์ ์ ํ๋ฉด์ ์ด ๋ฌธ๊ตฌ๋ฅผ ๋ช ๋ฒ์ด๋ ์ฝ์๋์ง! Spring์์ ํ๋ก์ ํธ๋ฅผ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ์์๋ด๋ ค๊ณ ๋ ธ๋ ฅํ์ง๋ง ์ด๋ค ์ด์ ๋ก Spring Boot๋ฅผ ์ฌ์ฉํด ๋ณธ ์ ์ด ์๋ค๋ฉด ์ถํํฉ๋๋ค. ์ ๊ฐ ์๋์ ์ธ ๋ด์ฉ์ ๋งค์ฐ ๊ธฐ๋ปํ์ค ๊ฒ์ ๋๋ค. ํ๋ก๊ทธ๋๋จธ๊ฐ ํ๋ก์ ํธ์์ ํ๋ก์ ํธ๋ก ๋งค์ฐ ๋ง์ ์์ ์ฝ๋๋ฅผ ์ ์กํ๋ ๋ฐ ์ฌ์ฉํ๋ ๊ณณ์ ์ฝ์์ต๋๋ค. ์ด๊ฒ์ ํ ํ๋ฆฟ ์ฝ๋์ ๋๋ค. ์๋ฅผ ๋ค์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ์ค์ , ์๋ธ๋ฆฟ ๋งคํ ๋ฑ์ ์ํ ์ค์ ์ ๋๋ค. ์์ ์ ์ํ ํ ํ๋ฆฟ ์ฝ๋ ์ฐ๋ฆฌ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ JPA/Hibernate๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ผ๋ถ ํ ํ๋ฆฟ์ ์จ๊ธฐ์ง๋ง ์ด๋ฅผ ๊ตฌ์ฑํ๋ ค๋ฉด ๋ค์ xml ํ์ผ์ด๋ ๊ตฌ์ฑ ํด๋์ค๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์์ ํ๋ก์ ํธ๊ฐ ์๋ค๋ฉด ๋ ์ ์ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์๋๋ผ ๊ทธ ๋ฐ๋์ ๊ฒฝ์ฐ๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค. ๋ค์์ผ๋ก Spring์์ JPA ์์ ์ ๋ง๋ฌด๋ฆฌํฉ๋๋ค. ๋ง์ ํ๋ก์ ํธ๊ฐ ์์ง๋ง ๊ฐ์ฅ ํธ๋ฆฌํ ๊ฒ์ ๋ฌผ๋ก Spring Data์ ๋๋ค. ์ด๊ฒ์ JPA, NoSQL ๋ฐ ๋ค์ํ ํ๋ก์ ํธ๋ฅผ ํฌํจํ์ฌ ๊ฐ๋ฅํ ๋ชจ๋ ์์ ์ ์ํํ ์ ์๋ ๋งค์ฐ ํฐ ํ๋ก์ ํธ์ ๋๋ค. ๋ฏฟ์ ์ ์์ ์ ๋๋ก ๋ง๋ฒ์ ์ด๋ฏ๋ก ํ๋ก์ ํธ์์ ์ฌ์ฉํ ๊ฒ์ ๋๋ค. Spring์ ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ์ค์ ์ด ๊ฑฐ์ ์ ๊ฑฐ๋๊ณ Spring์ด ์ฐ๋ฆฌ๋ฅผ ์ํด ๋ชจ๋ ์์ ์ ์ํํฉ๋๋ค. ํธ๋์ญ์ ์ฑ, ์บ์ฑ ๋ฐ ํน์ํ ๊ฒฝ์ฐ ์ปจํ ์คํธ ๊ตฌ์ฑ์์ Google(๋ค๋ฅธ ํญ๋ชฉ ์ฐธ์กฐ)์ ๋ํ ๊ธฐํ ์ค์ ์ ํ์ํ ์ฃผ์๋ง ์ถ๊ฐํ๋ฉด ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ๋์์ ๋๋ถ๋ถ์ ์ด๋ณด ๊ฐ๋ฐ์๋ Spring์์ ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์ ํ ๋ชจ๋ฆ ๋๋ค. localhost:8080/*๋ก ์์ํ๋ ๋งํฌ๋ฅผ ๋ฐ๋ผ ํ๋ก์ ํธ๋ฅผ ์คํํ๊ณ ๋ธ๋ผ์ฐ์ ์์ ๊ฒฐ๊ณผ๋ฅผ ์ป๋๋ก ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ์์ ํ ์๋ ์ฌ๋์ ์๋ฌด๋ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ Spring Boot๊ฐ ๋ฑ์ฅํฉ๋๋ค! ๊ตฌ์ฒด์ ์ธ ์๋ฅผ ๋ค์ด Spring Boot์ ๋ํด ์ด์ผ๊ธฐํ๋ ๊ฒ์ด ๋ ์ข์ต๋๋ค! ๊ณต๋ฐฑ๋ถํฐ ์์ํด ๋ณด๊ฒ ์ต๋๋ค. Spring Boot ํ๋ก์ ํธ๋ฅผ ์์ฑํ๊ธฐ ์ํด Spring ๊ฐ๋ฐ์๋ ํ ํ๋ฆฟ ์์ฑ์ ์ํ "์์ฑ์"๋ฅผ ๊ณ ์ํ์ต๋๋ค. ํด๋น ์น์ฌ์ดํธ์์ ์ฌ์ฉํ ์ ์์ง๋ง ์ฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ์ ํธํ๋ IDE์ธ Intellij IDEA์์ ์ฌ์ฉํ๋ ๊ฒ์ด ํจ์ฌ ๋ ์ฝ์ต๋๋ค. File->New->Project ์ฐฝ์์ Spring ์ด๊ธฐํ ํญ์ผ๋ก ์ด๋ํ๋ฉด jdk๊ฐ ๊ทธ ์์ ์ค์ ๋์ด์ผ ํ๊ณ URL์ https://start.spring.io์ด๋ฉฐ ์ธํฐ๋ท ์ฐ๊ฒฐ์ ํ์ธํ ๋ค์ ํ์ํฉ๋๋ค. ์ด๋ฆ๊ณผ ์ฌ์ฉํ ๊ธฐ์ ์ ์ ํํ๋ ค๋ฉด ์ฒซ ๋ฒ์งธ ๋จ๊ณ์์๋ WEB๋ง ํ์ํฉ๋๋ค. ์์ ์ฒดํฌ ํ์๋ฅผ ํ๋ฉด ํ๋ก์ ํธ๊ฐ ์์ฑ๋ฉ๋๋ค. Maven์ด ๋ชจ๋ ์ข ์์ฑ์ ๊ฐ์ ธ์ค๋ ค๋ฉด ์์ด๋์ด์์ Maven ํญ์ ์ด๊ณ ์ ๋ฐ์ดํธ ๋ฒํผ์ ํด๋ฆญํด์ผ ํฉ๋๋ค. ํด๋ผ์ด์ธํธ-์๋ฒ ํต์ ์ ์ํ ๋ชจ๋ ์ค์ ์ด ํฌํจ๋ ๊ธฐ์ฑ ์ ํ๋ฆฌ์ผ์ด์ ํ ํ๋ฆฟ์ ๋ฐ์์ต๋๋ค. ์ฒซ์ธ์์ ์ป๊ธฐ ์ํด ์ปจํธ๋กค๋ฌ ํด๋์ค๋ฅผ ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค. ์๋ง๋ MVC์ ๋ํด ๋ค์ด๋ณธ ์ ์ด ์์ ๊ฒ์ ๋๋ค. ๋ชจ๋ Spring ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ปจํธ๋กค๋ฌ๋ ๋งค์ฐ ๋จ์ํ ๋์์ธ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ด๋ @Controller ์ฃผ์(@RestController์ ๊ฐ์ ์ ๋์ฌ๊ฐ ๊ฐ๋ฅํจ)์ผ๋ก ํ์๋ ํด๋์ค์ด๋ฉฐ, ์ด ํด๋์ค๋ ๋ค์ด์ค๋ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ์ญํ ์ ํฉ๋๋ค. ์ปจํธ๋กค๋ฌ๊ฐ ์ผ๋ถ ์ฃผ์์ ๋ํ ์์ฒญ์ ์ธ์ํ๋ ค๋ฉด ์ด ์ฃผ์๋ฅผ ์ปจํธ๋กค๋ฌ ๋ฉ์๋์ ๋งคํํด์ผ ํฉ๋๋ค.import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping(value = "/hello") public class DemoController { @RequestMapping(method = RequestMethod.GET) public String halloWorld() { return "Hello World!"; } @RequestMapping(value = "/{name}", method = RequestMethod.GET) public String halloName(@PathVariable("name") String name) { return "Hello, " + name + "!"; } }
์ฌ๊ธฐ์ ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง ์์ ๋ด
์๋ค.
@RestController . ์์์ ์ด ์ฃผ์๊ณผ ๋๊ฐ์ต๋๋ค. ์ฐ๋ฆฌ๋ ๊ฒฐ๊ณผ๋ฅผ ์ฆ์ ๋ณด๊ณ ์ถ๊ณ .jsp ํ์ด์ง๋ฅผ ์์ฑํ๊ณ ์ถ์ง ์๊ธฐ ๋๋ฌธ์ ๋๋จธ์ง ์ปจํธ๋กค๋ฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค. (์์ฐ) ๊ฒฐ๊ณผ๋ฅผ ๋ธ๋ผ์ฐ์ ์์ ๋ฌธ์์ด๋ก ์ฆ์ ๋ณด๋ ๊ฒ์ด ๋ ์ฌ์ธ ๊ฒ์
๋๋ค.
@RequestMapping์ ๋จ์ง ์ฃผ์์ ๋ํ ๋ฐ์ธ๋ฉ์
๋๋ค. ๊ณต๊ฐ ์ฃผ์ ์ ๋์ฌ๋ localhost:8080์
๋๋ค. ๋ณด์๋ค์ํผ, ์ ์ฒด ํด๋์ค๊ฐ
/hello ์ฃผ์์ ์ ์ง๋ฉ๋๋ค . ์ด๋ ์ด ํด๋์ค ๋ด์ ๋ชจ๋ ๋ฉ์๋์ ์ ๋์ด localhost:8080/hello๊ฐ ์์์ ์๋ฏธํฉ๋๋ค. ๋ค์์ ํด๋์ค์ ์ฒซ ๋ฒ์งธ ๋ฉ์๋์
๋๋ค. ์์ฒด ๋งคํ์๋ Http ํ๋กํ ์ฝ ๋ฉ์๋๊ฐ ํ์๋ฉ๋๋ค. GET ์์ฒญ(Http ํ๋กํ ์ฝ ๋ฉ์๋์ ๋ํด ์ง์ ์ฝ์ด๋ณด์ธ์.) ์ด๊ฒ์ด ์๋ฏธํ๋ ๋ฐ๋ ๋ฌด์์
๋๊น? localhost:8080/hello ์ฃผ์๋ก GET ์์ฒญ์ ํ๋ฉด โHello World!โ ๋ฌธ์์ด ํ์์ ์๋ต์ ๋ฐ๊ฒ ๋ฉ๋๋ค. ํ์ธํด ๋ณด๊ฒ ์ต๋๋ค! DemoApplication ํด๋์ค์๋ @SpringBootApplication์ด๋ผ๋ ์ ์ฒด Spring ์ปจํ
์คํธ๋ฅผ ๋จ๋
์ผ๋ก ์คํํ๋ค๊ณ ํ ์ ์๋ ๋ฉ์ง ์ฃผ์์ด ํ๋ ์์ต๋๋ค. ์ด ํด๋์ค์ ๊ธฐ๋ณธ ๋ฉ์๋๋ ๋ง๋ฒ์ฒ๋ผ ๋ณํฉ๋๋ค. SpringApplication์ ์จ๊ฒจ์ง ๋ชจ๋ ๋ง๋ฒ์ ์คํํฉ๋๋ค. ์ด ํด๋์ค์์ ์ปจํ
์คํธ ๋ฉ๋ด๋ฅผ ํธ์ถํ๋ฉด ์คํ ๋ผ์ธ์ ์ต์
์ด ํ์๋ฉ๋๋ค. ๋
น์ ํ์๋ก ์ผ์ฐ ์คํํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ฝ์์ ๋ ๋ณด๊ธฐ ์ข์์ง ๊ฒ์ด๋ฉฐ ์์ผ๋ก๋ ์ฝ์์์ ์ง์ ๋ก๊ทธ๋ฅผ ์ฝ๋ ๊ฒ์ด ๋ ์ฌ์์ง ๊ฒ์
๋๋ค. ์ ํ๋ฆฌ์ผ์ด์
์ ์คํํด ๋ณด๊ฒ ์ต๋๋ค. ์ฝ์ ์ถ๋ ฅ์ด ์ค์ง๋๋ฉด ์ฝ์์ ํ์๋์ด์ผ ํฉ๋๋ค.
2015-09-02 09:25:36.895 INFO 5844 --- [ ๋ฉ์ธ] sbceTomcatEmbeddedServletContainer : Tomcat์ด ํฌํธ์์ ์์๋์์ต๋๋ค: 8080 (http) 2015-09-02 09:25:36.900 INFO 5844 --- [ ๋ฉ์ธ] ๋ฐ๋ชจ.DemoApplication : ****์ด ๋ง์ DemoApplication์ ์์ํ์ต๋๋ค(JVM์ 15.501์์ ์คํ ์ค).์ฌ๊ธฐ์ "****"๋ ์ ํ๋ฆฌ์ผ์ด์ ์คํ ๊ธฐ๊ฐ์ ๋๋ค. ๊ทธ ํ ๋ชจ๋ ๋ธ๋ผ์ฐ์ (๋๋ ์ปฌ ๋๋ ์ฌ์ฉํ๋ ๋ชจ๋ ํญ๋ชฉ)์์ ์ปจํธ๋กค๋ฌ ๋ฉ์๋๊ฐ ๋งคํ๋ ์ฃผ์๋ฅผ ์ ๋ ฅํด์ผ ํฉ๋๋ค.
๋ก์ปฌ ํธ์คํธ:8080/์๋ ํ์ธ์๋ธ๋ผ์ฐ์ ๋ ํ์ค์ ํ์ํด์ผ ํฉ๋๋ค
์๋ ํ์ธ์ ์๋!์ฌ๊ธฐ ๋น์ ์ ์ํ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด ์์ต๋๋ค! ์ปจํธ๋กค๋ฌ์ ๋ค๋ฅธ ๋ฉ์๋๊ฐ ์๋ ๊ฒ์ ๋ฐ๊ฒฌํ ๊ฒฝ์ฐ ์์ฒด ์ฃผ์ ๋งคํ์ด ์์ผ๋ฉฐ ์๋ฆฌ ํ์์๊ฐ ํ์ฌ ์ฃผ์์ ์ถ๊ฐ๋ฉ๋๋ค. ์ด๋ Spring์ ์ํด ๋งค๊ฐ๋ณ์๋ก ๋ฉ์๋์ ์ ๋ฌ๋ฉ๋๋ค. @PathVariable ์ฃผ์์ด ์ด์ ๋ํ ์ฑ ์์ด ์๋ค๊ณ ์ถ์ธกํ๋ ๊ฒ์ ์ด๋ ต์ง ์์ต๋๋ค. ๊ทธ๋์ ์์ฒญ์ ๋ฐ๋ผ
localhost:8080/hello/๋น์ ์ ์ด๋ฆ๋ธ๋ผ์ฐ์ ๊ฐ ํ์๋ฉ๋๋ค
์๋ ํ์ธ์, ๋น์ ์ ์ด๋ฆ์ ๋๋ค!Spring Boot์ ๊ธฐ๋ณธ ์ฌํญ์ ์ ๋ฆฌํ์ต๋๋ค. ๋ค์์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฒจ๋ถํ ์์ ์ธ๋ฐ, ์ด์ ๋ํด์๋ ๋ค์ ํฌ์คํธ์์ ๋ค๋ฃจ๊ฒ ์ต๋๋ค. ๋ชจ๋์๊ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
GO TO FULL VERSION