week 8 incheol - GANGNAM-JAVA/JAVA-STUDY GitHub Wiki
- JAVA(์ต์ฃผ๋น)
- ์๋ฐ 8 ํน์ง
-
Lambda expressions
- ๋๋ค ํํ์์ Anonymous Function๋ผ๊ณ ํ ์ ์๋ค
-
Method Reference
- ํน์ ๋๋ค ํํ์์ ์ถ์ฝํ ๊ฒ์ผ๋ก ๋ณผ ์ ์๋ค
-
Stream
- ๊ฐ๊ฒฐํ๊ฒ ์ปฌ๋ ์ ์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ธฐ๋ฅ
- ์ Stream์ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌ๊ฐ๋ฅํ๋๋ก ํ๋ ๊ธฐ๋ฅ
- ์ฌ๋ฌ ์ฐ๋ ๋์์ ์ฒ๋ฆฌํ ์ ์๋๋ก ๋ถํ ํ Stream ์ด๋ค
-
Default Method
- ์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด๋ฅผ ์ธํฐํ์ด์ค ์์ฒด์์ ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณต ๊ฐ๋ฅํ๋ค
-
Optional
- ๊ฐ์ Optional๋ก ์บก์ํํ์ฌ NullPointerException์ ๋ง๋๋ค
-
CompletaleFuture
- Future์ ๊ธฐ๋ฅ์ ํ์ฅ์์ผ์ค๋ค
- ๋ ๊ฐ์ ๋น๋๊ธฐ ๊ณ์ฐ ๊ฒฐ๊ณผ๋ฅผ ํ๋๋ก ํฉ์น๋ค
- ๊ฐ ๊ณ์ฐ ๊ฒฐ๊ณผ๋ ๋ ๋ฆฝ์ ์ด๊ฑฐ๋ ์ข ์์ ์ผ ์ ์๋ค
- Future ์งํฉ์ด ์คํํ๋ ๋ชจ๋ ํ์คํฌ์ ์๋ฃ๋ฅผ ๊ธฐ๋ค๋ฆฐ๋ค
- Future ์งํฉ์์ ๊ฐ์ฅ ๋นจ๋ฆฌ ์๋ฃ๋๋ ํ์คํฌ๋ฅผ ๊ธฐ๋ค๋ ธ๋ค๊ฐ ๊ฒฐ๊ณผ๋ฅผ ์ป๋๋ค
- Future๊ฐ ์๋ฃ๋๋ฉด ์ถ๊ฐ ์์ ์ ์ํ ํ ์ ์๋ค
-
New date / time APIs
- Joda-Time์ ๋ง์ ๊ธฐ๋ฅ์ java.time ํจํค์ง๋ก ์ถ๊ฐํ๋ค
- LocalDate, LocalTime, Instant, Duration, Period โฆ
- Joda-Time์ ๋ง์ ๊ธฐ๋ฅ์ java.time ํจํค์ง๋ก ์ถ๊ฐํ๋ค
-
Lambda expressions
- String, StringBuilder, StringBuffer ์ฐจ์ด
- String : immutable ๋ฐ์ดํฐ๋ก์จ ์ถ๊ฐ ์ฐ์ฐ์ ๋ํด์ ์๋ก์ด ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์๋กญ๊ฒ ํ ๋น ๋๋ฏ๋ก ์ฐ์ฐ์ด ๋ณต์กํ ์๋ก ๊ฐ๋น์ง ๋ฐ์ดํฐ๊ฐ ๋ง์ด ๋ฐ์ํ๋ค.
- StringBuilder : mutable ๋ฐ์ดํฐ์ด๊ณ ๋ฉํฐ ์ค๋ ๋ ํ๊ฒฝ์์๋ ๋๊ธฐํ ๋ณด์ฅ์ ํด์ฃผ์ง ์๋๋ค. (๋จ์ผ ์ค๋ ๋ ํ๊ฒฝ์์๋ ์ฑ๋ฅ์ด ๋ ์ฐ์ํ๋ค)
- StringBuffer : mutable ๋ฐ์ดํฐ์ด๊ณ ์ถ๊ฐ ์ฐ์ฐ์ ๋ํด์ ๊ธฐ์กด ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํด์ค๋ค. (๋ฉํฐ ์ค๋ ๋ ํ๊ฒฝ์์๋ ๋๊ธฐํ๋ฅผ ๋ณด์ฅํด์ค๋ค)
- ์๋ฐ 8 ํน์ง
- SPRING(์ ์ธ์ฒ )
-
dispatcherServlet์ด๋?
Dispatcher Servlet์ด๋ ์ธ๋ถ์ ์์ฒญ์ ํน์ ์ปจํธ๋กค๋ฌ๋ก ๋งคํํ๊ธฐ ์ํด Front Controller ํจํด์ ์ ์ฉํ Servlet์ด๋ค.
Front Controller๋ ์ฃผ๋ก ์๋ธ๋ฆฟ ์ปจํ ์ด๋์ ์ ์ผ ์์์ ์๋ฒ๋ก ๋ค์ด์ค๋ ํด๋ผ์ด์ธํธ์ ๋ชจ๋ ์์ฒญ์ ๋ฐ์์ ์ฒ๋ฆฌํด์ฃผ๋ ์ปจํธ๋กค๋ฌ์ธ๋ฐ, MVC ๊ตฌ์กฐ์์ ํจ๊ป ์ฌ์ฉ๋๋ ํจํด์ด๋ค. ์ด์ ์๋ ์๋ธ๋ฆฟ์ ์ปจํธ๋กค๋ฌ ๋น ํ๋์ฉ ๋๊ณ ์์ด์ ์ปจํธ๋กค๋ฌ๊ฐ ์ถ๊ฐ๋ ๋๋ง๋ค ์๋ธ๋ฆฟ ์ค์ ๋ ์ถ๊ฐํด์ฃผ์ด์ผ ํ๋ค. ๊ทธ๋ฌ๋ dispatcher servlet์ ๋๋ฉด์ ์ปจํธ๋กค๋ฌ ์ถ๊ฐ์ ๋ณ๋์ servlet ์ค์ ์ ํ ํ์๊ฐ ์์๋ค. ๊ทธ๋ฆฌ๊ณ dispatcher servlet์ ํตํด์ Tracking์ด๋ Security๋ฅผ ์ ์ฉํ ๋ ํธํ๊ฒ ๊ตฌํ์ด ๊ฐ๋ฅํ๊ณ , URL ๊ตฌ์ฑ์ด ๊ฐํธํด์ก๋ค.
-
ํด๋ผ์ด์ธํธ๊ฐ ํด๋น ์ดํ๋ฆฌ์ผ์ด์ ์ ์ ๊ทผํ๋ฉด DispatcherServlet์ด ๊ฐ๋ก์ฑ๋ค.
web.xml์ ๋ฑ๋ก๋ dispatcherServlet์ ์ด '/'์ ๊ฐ์ด ํด๋น ์ดํ์ ํต๊ณผํ๋ ๋ชจ๋ URL๋ก ๋ฑ๋กํ๊ธฐ ๋๋ฌธ์ด๋ค. ํน์ URL๋ง ์ ์ฉํ๊ณ ์ถ๋ค๋ฉด ์ ๋ด์ฉ์ ๋ณ๊ฒฝํด์ฃผ๋ฉด ๋๋ค.
์คํ๋ง์ web.xml ํ์ผ์ ์๋์ ๊ฐ์ด dispatcher servlet์ ์ฉ url pattern์ ์ ์ฉํ ์ ์๋ค.
<servlet> <servlet-name>salesServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- contextLoader๊ฐ ํด๋น ์์น์ ์ค์ ํ์ผ์ ์ฝ์ด, ํด๋น ํ์ผ์ dispatcher servlet์ผ๋ก ๋ง๋ ๋ค. --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/salesServlet-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <!-- /sales๋ก ์์ํ๋ url ์์ฒญ์ ๋ฐ์ salesServlet์์ ์ฒ๋ฆฌํ๋ค. --> <servlet-mapping> <servlet-name>salesServlet</servlet-name> <url-pattern>/sales</url-pattern> </servlet-mapping>
์คํ๋ง ๋ถํธ๋ appliation.yml , application.propertiesํ์ผ์ server.servlet.context-path ์ต์ ์ผ๋ก ์ง์ ํ ์ ์๋ค.
-
DispatcherServlet์ ๊ฐ๋ก์ฑ ์ ๋ณด๋ฅผ HandlerMapping ์๊ฒ ๋ณด๋ด ํด๋น ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๋ Controller๋ฅผ ์ฐพ์๋ธ๋ค. HandlerMapping์ด ์ปจํธ๋กค๋ฌ๋ฅผ ์ฐพ์๋ด๋ ์ ๋ต์ BeanNamUrlHandlerMapping๊ณผ DefaultAnnotationHandlerMapping์ด ๊ธฐ๋ณธ ์ ๋ต์ด๋ค.
- DefaultAnnotationHandlerMapping : @RequestMapping ์ด๋ผ๋ ์ ๋ ธํ ์ด์ ์ ์ปจํธ๋กค๋ฌ ํด๋์ค๋ ๋ฉ์๋์ ์ง์ ๋ถ์ฌํ๊ณ ์ด๋ฅผ ์ด์ฉํด ๋งคํํ๋ ์ ๋ต์ด๋ค.
- BeanNameUrlHandlerMapping : ๋น ์ ์ ํ๊ทธ์์ name attribute์ ์ ์ธ๋ URL๊ณผ class attribute์ ์ ์๋ Controller๋ฅผ ๋งคํํ๋ ๋ฐฉ์์ผ๋ก ๋์ํ๋ค.
- ControllerClassNameHandlerMapping : Controller์ ํด๋์ค ์ด๋ฆ์ค suffix์ธ Controller๋ฅผ ์ ๊ฑฐํ ๋๋จธ์ง ์ด๋ฆ์ ์๋ฌธ์๋ก url mappingํ๋ค.
- SimpleUrlHandlerMapping : Ant-Style ํจํด ๋งค์นญ์ ์ง์ํ๋ฉฐ, ํ๋์ Controller์ ์ฌ๋ฌ URL์ mapping ํ ์ ์๋ค.
-
์ปจํธ๋กค๋ฌ ์์ ์ํ
-
์ปจํธ๋กค๋ฌ๋ ์์ฒญ์ ์๋ต๋ฐ์ View์ ์ด๋ฆ์ ๋ฆฌํดํ๊ฒ ๋๋ค. ๊ทธ๋ View ์ด๋ฆ์ ViewResolver๊ฐ ๋จผ์ ๋ฐ์ ํด๋นํ๋ View๊ฐ ์กด์ฌํ๋์ง ๊ฒ์ํ๋ค.
-
์ปจํธ๋กค๋ฌ์์ ๋ณด๋ด์จ View ์ด๋ฆ์ ํ ๋๋ก ์ฒ๋ฆฌ View๋ฅผ ๊ฒ์ํ๋ค.
-
์ด ๊ฒฐ๊ณผ๋ฅผ ๋ค์ DispatcherServlet ์๊ฒ ๋ณด๋ธ๋ค.
-
DispatcherServlet์ ์ต์ข ๊ฒฐ๊ณผ๋ฅผ ํด๋ผ์ด์ธํธ์ ์ ์กํ๋ค.
Q4. filter์ interceptor, aop์ ์ํ ์์ ์ dispatcherServlet๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ช ํ์์ค
- filter : dispatcherServlet ์ด์ ๊ณผ ์ดํ์ ๋์
- interceptor : dispatcherServlet๊ณผ ์ปจํธ๋กค๋ฌ ์ฌ์ด์ ๋์
- aop : interceptor์ ์ปจํธ๋กค๋ฌ ์ฌ์ด์ ๋์
-
-
JPA Persistence๋?
์์์ฑ ์ปจํ ์คํธ๋?
- Server side์ Database ์ฌ์ด์ ์ํฐํฐ๋ฅผ ์ ์ฅํ๋ ๋ ผ๋ฆฌ์ ์ธ ์์ญ์ด๋ผ๊ณ ํ ์ ์๋ค. ์ํฐํฐ ๋งค๋์ ๋ก ์ํฐํฐ๋ฅผ ์ ์ฅํ๊ฑฐ๋ ์กฐํํ๋ฉด ์ํฐํฐ ๋งค๋์ ๋ ์์์ฑ ์ปจํ ์คํธ์ ์ํฐํฐ๋ฅผ ๋ณด๊ดํ๊ณ ๊ด๋ฆฌํ๋ค.
- ์์์ฑ ์ปจํ ์คํธ๋ ์ํฐํฐ ๋งค๋์ (Session)๋ฅผ ์์ฑํ ๋ ํ๋ ๋ง๋ค์ด์ง๋ค. ๊ทธ๋ฆฌ๊ณ ์ํฐํฐ ๋งค๋์ (Session)์ ํตํด์ ์์์ฑ ์ปจํ ์คํธ์ ์ ๊ทผํ ์ ์๊ณ ์์์ฑ ์ปจํ ์คํธ๋ฅผ ๊ด๋ฆฌํ ์ ์๋ค.
์์์ฑ ์ปจํ ์คํธ๊ฐ ์ํฐํฐ๋ฅผ ๊ด๋ฆฌํ๋ฉด ์ป๊ฒ๋๋ ์ฅ์
-
1์ฐจ ์บ์
- Map ๊ฐ์ฒด๋ก ์ ์ฅ : ์ํฐํฐ๋ฅผ ์๋ณ์ ๊ฐ(@Id ๋งตํ)์ผ๋ก ๊ตฌ๋ถํ๋ค. Key-value๋ก ๊ด๋ฆฌํ๋๋ฐ ์ด๋ key ๊ฐ์ด @Id ๊ฐ์ด ๋๋ค.
- ์๋ณ์ ๊ฐ ํ์ : ์์์ํ์ ์ํฐํฐ๋ ๋ฐ๋์ ์๋ณ์ ๊ฐ์ด ์์ด์ผ ํ๋ค.
- OSIV๋ฅผ ์ฌ์ฉํ์ฌ ์์์ฑ ์ปจํ ์คํธ์ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ๋ค.
- ํ์ด๋ฒ๋ค์ดํธ๊ฐ ์ง์ํ๋ ์บ์๋ ํฌ๊ฒ 3๊ฐ์ง๊ฐ ์๋ค.
- ์ํฐํฐ ์บ์ : ์ํฐํฐ ๋จ์๋ก ์บ์ํ๋ค. ์๋ณ์๋ก ์ํฐํฐ๋ฅผ ์กฐํํ๊ฑฐ๋ ์ปฌ๋ ์ ์ด ์๋ ์ฐ๊ด๋ ์ํฐํฐ๋ฅผ ๋ก๋ฉํ ๋ ์ฌ์ฉํ๋ค.
- ์ปฌ๋ ์
์บ์ : ์ํฐํฐ์ ์ฐ๊ด๋ ์ปฌ๋ ์
์ ์บ์ํ๋ค. ์ปฌ๋ ์
์ด ์ํฐํฐ๋ฅผ ๋ด๊ณ ์์ผ๋ฉด ์๋ณ์ ๊ฐ๋ง ์บ์ํ๋ค. (ํ์ด๋ฒ๋ค์ดํธ ๊ธฐ๋ฅ)
- ๋ฌธ์ ๋ ์ฟผ๋ฆฌ ์บ์๋ ์ปฌ๋ ์
์บ์๋ง ์ฌ์ฉํ๊ณ ๋์ ์ํฐํฐ์ ์ํฐํฐ ์บ์๋ฅผ ์ ์ฉํ์ง ์์ผ๋ฉด ์ฑ๋ฅ์ ์ฌ๊ฐํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
- โselect m from Member mโ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋๋ฐ ์ฟผ๋ฆฌ ์บ์๊ฐ ์ ์ฉ๋์ด ์๋ค. ๊ฒฐ๊ณผ ์งํฉ์ 100๊ฑด์ด๋ค.
- ๊ฒฐ๊ณผ ์งํฉ์๋ ์๋ณ์๋ง ์์ผ๋ฏ๋ก ํ ๊ฑด์ฉ ์ํฐํฐ ์บ์ ์์ญ์์ ์กฐํํ๋ค.
- Member ์ํฐํฐ๋ ์ํฐํฐ ์บ์๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ฏ๋ก ํ ๊ฑด์ฉ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์กฐํํ๋ค.
- ๊ฒฐ๊ตญ 100๊ฑด์ SQL์ด ์คํ๋๋ค.
- ๋ฌธ์ ๋ ์ฟผ๋ฆฌ ์บ์๋ ์ปฌ๋ ์
์บ์๋ง ์ฌ์ฉํ๊ณ ๋์ ์ํฐํฐ์ ์ํฐํฐ ์บ์๋ฅผ ์ ์ฉํ์ง ์์ผ๋ฉด ์ฑ๋ฅ์ ์ฌ๊ฐํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
- ์ฟผ๋ฆฌ ์บ์ : ์ฟผ๋ฆฌ์ ํ๋ผ๋ฏธํฐ ์ ๋ณด๋ฅผ ํค๋ก ์ฌ์ฉํด์ ์บ์ํ๋ค. ๊ฒฐ๊ณผ๊ฐ ์ํฐํฐ๋ฉด ์๋ณ์ ๊ฐ๋ง ์บ์ํ๋ค. (ํ์ด๋ฒ๋ค์ดํธ ๊ธฐ๋ฅ)
-
๋์ผ์ฑ ๋ณด์ฅ
- ๋์ผํ ๊ฐ์ฒด ๋ฐํ : Collection์์ ๊ฐ์ฒด๋ฅผ ๋นผ์ค๋ฏ์ด ๊ฐ์ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๊ฒ ๋๋ฉด ์๋ก์ด ๊ฐ์ฒด๊ฐ ๋์ค๋ ๊ฒ์ด ์๋๋ผ ๋์ผํ ๊ฐ์ฒด๊ฐ ๋ฐํ๋๋ค.
-
๋ณ๊ฒฝ ๊ฐ์ง
- ์๋ Update : ์์์ฑ ์ํ์ ๊ฐ์ฒด๋ ๊ฐ์ฒด์ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ์ด ๋๋ฉด, ์๋ update ๋๋ค.
- EntityManager์์ flush๊ฐ ๋๊ณ , commit์ด ๋ฉ๋๋ค.
-
- flush๊ฐ ๋๋ ์์
-
- ๊ฐ์ Flush : EntityManager.flush()
-
- ํธ๋์ญ์ ์ข ๋ฃ์ : ์์์ฑ ์ปจํ ์คํธ๋ ํธ๋์ญ์ ๋ฒ์๋ก ๋ง๋ค์ด์ง๊ธฐ ๋๋ฌธ์ด๋ค.
-
- JPQL ์ฟผ๋ฆฌ ์คํ : JPQL์ ์ค์ Database side์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ๋๋ฌธ์ ๋๊ธฐํ๋ฅผ ์ํด JPQL ์ฟผ๋ฆฌ๊ฐ ์คํ ์ ์ flush ๋๋ค.
-
- flush๊ฐ ๋๋ ์์
-
ํธ๋์ญ์ ์ผ๋ก ์ธํ ์ฐ๊ธฐ ์ง์ฐ
- ์ฐ๊ธฐ ์ง์ฐ : ์์์ฑ ์ปจํ ์คํธ๋ ํธ๋์ญ์ ๋ฒ์ ์์์ ๋์ํ๋ค. ๊ทธ๋์ ํธ๋์ญ์ ์ด ๋๋์ผ Commit์ด ์ด๋ฃจ์ด์ง๊ณ ๋ฐ์๋๋ค.
-
Lazy ๋ก๋ฉ
- ์ํฐํฐ์ ๊ด๊ณ๊ฐ ๋งบ์ด์ง ์ํฐํฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ค.
- ์ฑ๋ฅ์ ํ์ ์์ธ์ด ๋ ์๋ ์๋ค.
-
JPA Persistence๋?
-
- Infra/์ด์(์ด๊ฒฝํฌ)
-
jwt๋ ๋ฌด์์ด๋ฉฐ, ๊ตฌ์ฑ์ ์ด๋ป๊ฒ ๋์ด ์๊ณ , oauth์ ์ฐจ์ด๋?
JWT๋ ์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ ์ ๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋ HTTP Request Header์ JSON ํ ํฐ์ ๋ฃ์ ํ ์๋ฒ๋ ๋ณ๋์ ์ธ์ฆ ๊ณผ์ ์์ด ํค๋์ ํฌํจ๋์ด ์๋ JWT ์ ๋ณด๋ฅผ ํตํด ์ธ์ฆํ๋ค.
JWT๋ฅผ ์ ์ฌ์ฉํ ๊น?
- ๋ณด์ ์ด์: ์ฌ์ฉ์๊ฐ ์์ ์ ๋น๋ฐ ๊ฐ์ผ๋ก ์๋ฒ์ ๋ก๊ทธ์ธ ํ๊ฒ ๋๋ฉด, ์๋ฒ๋ JWT๋ฅผ ๋ฆฌํดํฉ๋๋ค. token์ ์ธ์ฆ ๊ฐ์ผ๋ก ์ฌ์ฉํ๊ฒ ๋๋ฉด ๊ธฐ์กด ์ฟ ํค/์ธ์ ์ ์ฌ์ฉํ๋ ๋ฐฉ์๋ณด๋ค ๋ง์ ๋ณด์ ์ด์๋ฅผ ๋ง์ ์ ์์ต๋๋ค. ์๋ฒ๋ GUI๋ก๋ถํฐ ๋ฐ์ JWT๊ฐ ์ ํจํ ๊ฒฝ์ฐ, resouce๋ฅผ ์ฌ์ฉํ๋๋ก ํ์ฉํฉ๋๋ค. ๋ํ JWT๋ ์ฟ ํค๋ฅผ ์ฌ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์, Cross-Origin Resource Sharing (CORS) ์ด์๊ฐ ๋ฐ์ํ์ง ์์ต๋๋ค.
- ๋ฐ์ดํฐ ์ฉ๋: JWT๋ ๊ธฐ์กด์ XML๋ณด๋ค ๋ ๋ณต์กํ๊ณ ์ธ์ฝ๋ฉ ๋ ์ฌ์ด์ฆ๊ฐ ์์ต๋๋ค. ๋ฐ๋ผ์ HTTP์ HTML ํ๊ฒฝ์์ ์ฌ์ฉํ๊ธฐ ์ข์ต๋๋ค.
- ์ฌ์ฉ์ฑ: JSON parser๋ ๋๋ถ๋ถ์ ํ๋ก๊ทธ๋๋ฐ์ด ์ง์ํ๊ธฐ ๋๋ฌธ์ XML์ ์ฌ์ฉํ๋ SAML ๋ณด๋ค ๋ง๋ค๊ธฐ ์ฝ์ต๋๋ค.
ํ ํฐ ๊ธฐ๋ฐ์ ์ธ์ฆ ์์คํ ์ ์ฒ์ ์ ํ ์ฌ๋์ด๋ผ๋ฉด ์ ๋ ๊ฐ์ง ๊ฐ๋ ์ด ํท๊ฐ๋ฆด ์ ์์ต๋๋ค. ๋จผ์ , ์ ๋ต๋ถํฐ ๋งํ์๋ฉด JWT๋ ํ ํฐ ์ ํ์ด๊ณ OAuth๋ ํ ํฐ์ ๋ฐ๊ธํ๊ณ ์ธ์ฆํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํ๋ ์ผ์ข ์ ํ๋ ์์ํฌ์ ๋๋ค. ๊ธฐ์กด์ /outh/token endpoint์ ์ํด ๋ฐ๊ธ๋๋ ๋ชจ๋ ํ ํฐ์ ์ผ์ข ์ OAuth ํ๋ ์์ํฌ์ ์ํด ๊ด๋ฆฌ๋๋ค๊ณ ๋ณผ ์ ์์ต๋๋ค.
OAuth๋ Open Authorization, Open Authentication ๋ปํ๋ ๊ฒ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ (ํ์ด์ค๋ถ,๊ตฌ๊ธ,ํธ์ํฐ)(Service Provider)์ ์ ์ ์ ๋น๋ฐ๋ฒํธ๋ฅผ Third party์ฑ์ ์ ๊ณต ์์ด ์ธ์ฆ,์ธ๊ฐ๋ฅผ ํ ์ ์๋ ์คํ ์คํ ๋ค๋ ํ๋กํ ์ฝ์ด๋ค.
OAuth ์ธ์ฆ์ ํตํด ์ ํ๋ฆฌ์ผ์ด์ API๋ฅผ ์ ์ ๋์ ์ ์ ๊ทผํ ์ ์๋ ๊ถํ์ ์ป์ ์ ์๋ค. OAuth๊ฐ ์ฌ์ฉ๋๊ธฐ ์ ์๋ ์ธ๋ถ ์ฌ์ดํธ์ ์ธ์ฆ๊ธฐ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฐ๋ํ ๋ ์ธ์ฆ๋ฐฉ์์ ํ์ค์ด ์์๊ธฐ ๋๋ฌธ์ ๊ธฐ์กด์ ๊ธฐ๋ณธ์ธ์ฆ์ธ ์์ด๋์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ฌ์ฉํ์๋๋ฐ, ์ด๋ ๋ณด์์ ์ทจ์ฝํ ๊ตฌ์กฐ์๋ค. ์ ์ ์ ๋น๋ฐ๋ฒํธ๊ฐ ๋ ธ์ถ๋ ๊ฐ๋ง์ฑ์ด ํฌ๊ธฐ ๋๋ฌธ์ด๋ค
์ถ์ฒ:
https://tristan91.tistory.com/499
[๊ฐ๋ฐ๋ชจ์์ง]
JWT ๋ . ์ ๊ตฌ๋ถ์๋ก 3๊ฐ์ง์ ๋ฌธ์์ด๋ก ๋์ด์์ต๋๋ค. ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ์ด ์ด๋ฃจ์ด์ ธ์์ต๋๋ค:
1. Header typ: ํ ํฐ์ ํ์ ์ ์ง์ ํฉ๋๋ค. ๋ฐ๋ก JWT ์ด์ฃ .
alg: ํด์ฑ ์๊ณ ๋ฆฌ์ฆ์ ์ง์ ํฉ๋๋ค. ํด์ฑ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก๋ ๋ณดํต HMAC SHA256 ํน์ RSA ๊ฐ ์ฌ์ฉ๋๋ฉฐ, ์ด ์๊ณ ๋ฆฌ์ฆ์, ํ ํฐ์ ๊ฒ์ฆ ํ ๋ ์ฌ์ฉ๋๋ signature ๋ถ๋ถ์์ ์ฌ์ฉ๋ฉ๋๋ค.
2. Payload
ํ ํฐ์ ๋ด์ ์ ๋ณด๊ฐ ๋ค์ด์์ต๋๋ค. ์ฌ๊ธฐ์ ๋ด๋ ์ ๋ณด์ ํ โ์กฐ๊ฐโ ์ ํด๋ ์(claim) ์ด๋ผ๊ณ ๋ถ๋ฅด๊ณ , ์ด๋ name / value ์ ํ ์์ผ๋ก ์ด๋ค์ ธ์์ต๋๋ค. ํ ํฐ์๋ ์ฌ๋ฌ๊ฐ์ ํด๋ ์ ๋ค์ ๋ฃ์ ์ ์์ต๋๋ค.
ํด๋ ์ ์ ์ข ๋ฅ๋ ๋ค์๊ณผ ๊ฐ์ด ํฌ๊ฒ ์ธ ๋ถ๋ฅ๋ก ๋๋์ด์ ธ์์ต๋๋ค:
๋ฑ๋ก๋ (registered) ํด๋ ์,๊ณต๊ฐ (public) ํด๋ ์,๋น๊ณต๊ฐ (private) ํด๋ ์
- ์๋ช (signature)์ด ์๋ช ์ ํค๋์ ์ธ์ฝ๋ฉ๊ฐ๊ณผ, ์ ๋ณด์ ์ธ์ฝ๋ฉ๊ฐ์ ํฉ์นํ ์ฃผ์ด์ง ๋น๋ฐํค๋ก ํด์ฌ๋ฅผ ํ์ฌ ์์ฑํฉ๋๋ค.
-
์จํ๋ก๋ฏธ์ค ํ๊ฒฝ๊ณผ ํด๋ผ์ฐ๋ ํ๊ฒฝ์ ์ฐจ์ด ๋ฐ ์ฅ๋จ์
ํ๋ ๋ฏธ์ค(On-premise)๋ ์ํํธ์จ์ด ๋ฑ ์๋ฃจ์ ์ ํด๋ผ์ฐ๋ ๊ฐ์ด ์๊ฒฉ ํ๊ฒฝ์ด ์๋ ์์ฒด์ ์ผ๋ก ๋ณด์ ํ ์ ์ฐ์ค ์๋ฒ์ ์ง์ ์ค์นํด ์ด์ํ๋ ๋ฐฉ์์ ๋งํ๋ค.
IT ์ธํ๋ผ๊ฐ ์ ์ฐจ ๋ณต์กํด์ง๋ฉด์ ๊ธฐ์ ์ด ๊ด๋ฆฌํด์ผ ํ๋ ๋คํธ์ํฌ ํธ๋ํฝ์ ํฌ๊ฒ ๊ธ์ฆํ๊ณ ์๋ค.์ด์ฒ๋ผ ํ๊ฒฝ์ด ๋ณต์กํ๊ณ ์ง๋ฅํ๋๋ฉด์ IT์ธํ๋ผ ๊ด๋ฆฌ๋ ์ ์ฐจ ์ด๋ ค์์ง๊ณ , ๋น์ฉ์ ์ง์์ ์ผ๋ก ๋์ด๋๋ ๋นํจ์จ์ ์ธ ํ๊ฒฝ์ด ๋๊ณ ์๋ค. ๋ณด์์ด ์ค์ํ ์์ ์์ IT ์ธํ๋ผ๊ฐ ์ ์ฐจ ๋ณต์กํด์ง๋ฉด์ ๋คํธ์ํฌ ํธ๋ํฝ์ ๋ํ ๋ชจ๋ํฐ๋ง๊ณผ ์ด๋ฅผ ๋ถ์ํ ๊ด๋ฆฌ ์๋ฃจ์ ์ ๋ํ ์ง์์ ์ธ ํฌ์๊ฐ ํ์ํด์ง๋ ์ํฉ์ด๋ค. ๊ธฐ์กด์ ์จํ๋ ๋ฏธ์ค(On-premise) ๊ธฐ์ ๋ค๋ก์๋ ์ด๋ฌํ ๋ณต์ก์ฑ๊ณผ ๋น์ฉ์ ์ฆ๊ฐ๋ ๋ฐ๊ฐ์ง๋ง์ ์์ ๊ฒ์ด๋ค.
์จํ๋ ๋ฏธ์ค(On-premise) ๊ธฐ์ ๋ค์ IT ์ธํ๋ผ์ ํ์ถฉ๊ณผ ์ปดํจํ ํ์๋ฐ ์ ์ฅ๋ฅ๋ ฅ ํฅ์์ ๋ํ ๋ถ๋ด๊ฐ๊ณผ ๊ณ ๋ํ๋๊ณ ์ง๋ฅํ๋๋ ํต์ปค๋ค๋ก๋ถํฐ ๊ธฐ์ ์์ฐ์ ๋ณดํธํ๊ธฐ ์ํด์ ๋์์์ด ๋คํธ์ํฌ๋ฅผ ๋ชจ๋ํฐ๋งํด์ผ ํ๊ณ ์ด๋ฅผ ๋ถ์ํ ๊ณ ์ฑ๋ฅ์ ๊ด๋ฆฌ ์๋ฃจ์ ์ ๊ตฌ์ ํด์ผ ํ๋ค. ์ด๋ ๊ฒฐ์ฝ ๊ธฐ์ ์๊ฒ ์ฆ๊ฑฐ์ด ์ผ์ ์๋๋ค.ํด๋ผ์ฐ๋๋ ๊ธฐ์ ์ ์ด๋ฐ ๋ถ๋ด๊ฐ์ ์ค์ผ์ ์๋ ๋์์ผ๋ก ๋ ์ค๋ฅธ์ง ์ค๋์ด๋ค. ์ฅ์ ๋ค์ ๊ฐ๋ตํ๊ฒ ๋์ด ํด ๋ณด์๋ฉด
โถ ๊ฐ์์ค๋ฌ์ด ํ๊ฒฝ ๋ณํ์ ์ ์ํ๊ณ ํ๋ ฅ์ ์ผ๋ก ๋์ํ ์ ์๋ค.โถ IT ์ธํ๋ผ ์ด์์ ๋ํ ๋ถ๋ด์์ ๋ฒ์ด๋ ๊ธฐ์ ์ ํต์ฌ ์ ๋ฌด์ ์ญ๋์ ์ง์คํ ์ ์๋ค.โถ ํด๋ผ์ฐ๋๋ IT ํฌ์๋น์ฉ(CAPEX)์ ์ ๊ฐํ๋ค.
์ค์ ๋ก ์จํ๋ ๋ฏธ์ค(On-premise) ํ๊ฒฝ์ ํด๋ผ์ฐ๋(Cloud) ํ๊ฒฝ์ผ๋ก ๋ฐ๊พผ ๊ธฐ์ ๋ค์ด ๋์ด๋๋ฉด์ ์ฑ๊ณต์ฌ๋ก๋ค๋ ์ ์ฐจ ๋์ด๋๊ณ ์๋ ์ถ์ธ์ด๋ค.
-