๋๊ธฐ๋ถ์ ๋์์ผ๋ก ์ฒ์์ผ๋ก Interceptor ๋ฅผ ์ ์ฉํด๋ณด์์ ๋์ค์ ์ฌ์ฉํ ์ผ์ด ์์ ๋ ์ฐพ์๋ณด๋ ค๊ณ ์จ๋ด
๋๋ค! ์๋์ ๊ฐ์ Controller ์ Header ์์ ์ธ์ฆ์ ์ํ ๊ฐ์ ๋ฐ์์ผ์ง๋ง ์ ๊ทผํ ์ ์๋๋ก ์ค์ ํ๊ฒ ์ต๋๋ค! @RestController @RequestMapping("/orders") @RequiredArgsConstructor public class OrdersController { private final OrdersService ordersService; @Auth(type = ApiServiceType.HOMEPAGE) @GetMapping public ResponseEntity getOrders( @RequestParam(required = false) String sear..
๐ WEB/Spring
์์ฃผ ๊ธฐ๋ณธ์ ์ธ ์ฝ๋๊น์ง ๋ชจ๋ ์์ต๋๋ค.. ์๋๋ฉด... ์ ๋ ๊ธฐ์ ๋ธ๋ก๊ทธ๋ค์ ๋ณด๋ฉด์ ๋น ์ ธ์๋ ๋ถ๋ถ์ ๋ณด๋ฉด ๋๊ฐ์ ์ด๋ณด๋ ์ด์ฉ๋ผ๊ณ ํ๋ฉฐ ์ฌํผํ๊ธฐ ๋๋ฌธ์,,, ์ฌ์ค Security์ ์ฌ๋ฌ๊ฐ์ง Filter๋ฅผ ์ฌ์ฉํ์ฌ JWT ๋ฐฉ์์ ์ด์ฉํ๋๊ฒ ๋ง์ง๋ง ํ๋ก์ ํธ ํฌ๊ธฐ,, ๊ธฐ๊ฐ์ ๋ถํ์ํ๋ค ํ๋จํ๊ฒ ๋์ด์ JWT ๋ง์ ์ฌ์ฉํ์ฌ ๊ตฌํํ์๋ค. ๋์ค์ Security๋ ๊ฐ์ด ๊ตฌํํ์ฌ ์ฌ๋ฆฌ๋๋ก ํ๊ฒ ์! ์ด๋ฒ์๋ git์ ์ฌ๋ ค ์ฝ๋๊น์ง ๊ณต์ ํ๊ธฐ๋ก ํ๋ค! ์ฒ์๋ณด๋ฉด ์ฝ๊ฐ ๋ณต์กํ๋ค๊ณ ์๊ฐ๋๊ณ ๋๋ํ ๊ทธ๋ฌ๋ค ใ
ใ
,, (๋ถ๋๋ฌ์ด) ๊ตฌํ์ฝ๋๋ฅผ ๋ณด๋ฉด์ ์ดํดํ๊ณ ํน์ ์ด์ํ๊ณณ์ PRํด์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค...(๊ฐ์ ,,) git ์ฃผ์ (์ค๋ฌด์์ ์ค์ ๋ก ์ฌ์ฉํ๋ฉด์ ์์ ํ๊ณ ์์ต๋๋ค ~!) git clone https://github.com/ae..
๊ตฌ์กฐ ๊ตฌ์กฐ๋ฅผ ๋ณด๋ฉด resources์ ๊ฐ์ ๊ฒฝ๋ก์ webapp์ ๋ง๋ค์ด ์ฃผ์๋ฉด ๋ฉ๋๋ค. ์์ WEB-INF๋ ๋๊ฐ์ด ๋ง๋ค์ด์ฃผ์๊ณ application.yml์ ์ค์ ์ ๋ฐ๋ผ ์์ ์๋ ํด๋ ์ด๋ฆ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. application.yml spring: mvc: view: prefix: /WEB-INF/jsp/ suffix: .jsp build.gradle // JSTL implementation 'javax.servlet:jstl:1.2' // JASPER implementation 'org.apache.tomcat.embed:tomcat-embed-jasper' springboot์์ jps๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ์ธ์ฅํฐ์บฃ์ ์์กด์ฑ์ผ๋ก ์ถ๊ฐํด์ค๋๋ค. jsp๋ ๊ทนํ์ด๋ jstl๋ ์ถ๊ฐํด์ค๋๋ค. ๊ธฐ๋ณธ ํฌํ๋ฆฟ ..
๋ฉด์ ๋ณด๊ธฐ ์ํด ๊ณผ์ ๋ฅผ ํด์ผ ํ๋ค. ํ๋ก์ ํธ๋ฅผ ํ์ผ์ ๋ฐ์๋๋ฐ ๊ณ์ ๊ตฌํํด์ค๋ ๊ตฌ์กฐ์๋ ๋ง์ด ๋ฌ๋ผ์ ์๊ฐ์ ๋ง์ด ์ผ๋ค. ํ์ง๋ง ์ญ์๋ ์ธํฐ๋ท์ ์์ธํ ๋ณด๊ณ ์์ฒญ๋ ์ํ์ฐฉ์ค๋ฅผ ํ ํ์ ์ ์ํ ์ ์์๋ค. ์ธ์ ๋ค์ ์ธ ์ ์์์ง ๋ชฐ๋ผ ๊ธฐ๋กํด ๋๊ธฐ๋ก ํ๋ค. Mapper์ SQL ID์ Mapper Interface์ ๋ฉ์๋๋ช
๊ณผ ์ ํํ ๋งค์นญํด์ค๋ค๋ฉด ์๋ฐ์์ ๋ฉ์๋๋ฅผ ํธ์ถํ๊ธฐ ๋๋ฌธ์ ์คํ์ ๋ํ ๊ฑฑ์ ์ด ์๋ค. ๊ฐ๋ฐ์ ๋ฐฐ์ฐ๋ฉด์ ์ฐ๋ ๊ตฌ์กฐ๋ ๋์ถฉ ์ด๋ฐ์์ด์๋ค. ๊ทธ๋ฌ๋ ์ด๋ฒ์ ๋ฐ์ ๊ณผ์ ๋ Mapper Interface, Service class, sql.xml ์ด๋ ๊ฒ 3๊ฐ์ง๋ก ์์๋ค. ์ฒ์ ๋ณธ ๊ตฌ์กฐ 1.propertis์์ ์๋ฆฌ์์ค๋ฅผ ์ด์ฉํด sql์์ dto๋ก ์ฐ๊ฒฐํด์ฃผ๋ ๊ฒ์ annotation์ ์ฌ์ฉํ๋ฉด ์์ฃผ ๊ฐ๋จํ..
ํน์ง ? - Spring Web MVC Framework๋ JAVA1.5๋ถํฐ Annotation์ ์ง์ํฉ๋๋ค. - xml์ค์ ์ด ๋๋ฌด ๊ธธ์ด์ง์ ๋ฐ๋ผ ๊ทธ ๋์์ผ๋ก ๋ํ๋ฌ๋ค. - ๊ธฐ๋ณธ์ ์ผ๋ก๋ ํ์ฑํ๋์ง ์๊ธฐ ๋๋ฌธ์ xml์์ ํ์ฑํ ์์
์ด ํ์ํ๋ค. ์ฅ์ ? - ์ค์ ์ด ๊ฐํธํด ์ง, view ํ์ด์ง์ ๊ฐ์ฒด ๋๋ ๋ฉ์๋์ ๋งตํ์ด ๋ช
ํํด ์ง. Annotation์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ์ค์ ์ด ํ์ํฉ๋๋ค. 3๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. 1) CommonAnnotationBeanPostProcessor์ ํด๋์ค ์ค์ ํ์ผ์ ๋น๊ฐ์ฒด๋ก ๋ฑ๋กํ์ฌ ์ด๋
ธํ
์ด์
์ผ๋ก ์ฌ์ฉ 2) ํ๊ทธ ์ฌ์ฉ : ์ด๋ฏธ ๋ฑ๋ก๋ ๋น๋ค์ ์ด๋
ธํ
์ด์
์ ํ์ฑํ 3) : ํน์ ํจํค์ง ์์ ํด๋์ค๋ค์ ์ค์บํ๊ณ , Annotation์ ํ์ธ ํ bean ์ธ์คํด์ค๋ฅผ ์์ฑ - ์คํ
..
Servlet์์ 1:1mapping์ ๋ณด์ํด์ ์๋์ผ๋ก ๋ถ๊ธฐ, ์๋์ผ๋ก ์์ฑํ๋ฉด ์ด๋์ด ๊ฐ๋ฅํฉ๋๋ค. ์ฌ๊ธฐ์ ์ด Controller๋ ๋ค์ํ ์์ฒญ์ ์ ์ดํ์ฌ J2EE Pattern: frontController ๋ผ๊ณ ํฉ๋๋ค. Business Layer์์ handler mapper๋ฅผ ์๊ณ ๊ทธ๋ฆฌ์ง ์์๋๋ฐ ์์๋์ด์ผ ํฉ๋๋ค. Handler Mapping : dispatcherSevlet์ผ๋ก ๋ฐ์ ์์ฒญ -> Controller ๋ณด๋-> ์์ฒญ์ด ์ด๋ค ๋งคํ์ธ์ง ๊ทธ ๋ฐฉ๋ฒ์ ์ ํด์ฃผ๋ ํด๋์ค ์
๋๋ค. Spring 3๋ ์๋์๋ฆฌ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค. 1. DI/IoC - Bean Spring ์ฌ์ฉํ ์ ์๋๋ก ๋ฑ๋ก - Life-Cycle์ ๋ฐ๋ผ๊ฐ์ง ์๊ณ ์ฌ์ฉ POJO๋ฅผ Spring beanํน์ @Annotation์..
Spring FrameWork๋ฅผ ์ค๋ช
ํ๊ธฐ ์ Servlet์ ๋จผ์ ์ค๋ช
ํ๊ฒ ์ต๋๋ค. Servlet์ด๋ผ ํ๋ฉด 3๊ฐ์ง๋ฅผ ์์๋๋ฉด ์ข์์. Url-Mapping, Hierarchy, Life-cycle์
๋๋ค. ํ๋์ฉ ์์๋ณผ๊ฒ์! Url-Mapping 1:1 servlet-mapping ๋ธ๋ผ์ฐ์ ์์ ws์ ์์ฒญํ๋ ์ฃผ์์ ํด๋น ์ฃผ์์ ์ฒ๋ฆฌ ๋ก์ง์ 1:1 ๋งคํํ๋ค ๋ฌธ์ : ๋๋ฌด ๋ง์ mapping์ผ๋ก ์ฝ๋๊ฐ ๋ณต์กํด์ง๋ค. Life-Cycle (์๋ช
์ฃผ๊ธฐ) HttpServlet -> OCP(Open Closed Programming) ์ด๊ธฐํ -> ์๋น์ค -> ์ข
๋ฃ init() service() distroy() doGet() doPost() doDelete() Hierarchy ๊ณ์ธต๊ตฌ์กฐ HttpServelt์ ์์๋ฐ์ ..
Hyper ํ๋ก์ ํธ๋ฅผ ํ๋ฉด์ ๊ณผ์ ์ค ์ด๋ ค์ํ๋ ํ์ผ ์
๋ก๋์ ๋ํด์ ๋ค์ ๊ณต๋ถํ๊ฒ ๋์๋ค. commons-fileupload๋ฅผ ์ฌ์ฉํ์๊ณ pom.xml์ ์ถ๊ฐํด์ค์ผ ํ๋ค. Ajax๋ก ๊ตฌํํด์ผ ํ๋ Controller์ @ResponseBody๋ฅผ ๋ถ์ฌ์ค์ผ ํ๋ค ์ด๊ฑฐ ๋ํ ์ฌ์ฉํ๋ ค๋ฉด pom.xml์ jackson-mapper๋ฅผ ์ถ๊ฐํด์ค์ผ ํ๋ค. pom.xml์ ์ถ๊ฐํด์ผ ํ ๊ฒ. (mvnrepository.com) 1. commons-fileupload 2. jackson-mapper ์ ์ผ ๋จผ์ ํ์ผ ์
๋ก๋๋ฅผ ๊ตฌํ ํ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ํ๊ฒ ๋ค. 1. spring ํด๋์์ xxx-context.xml ์ ํ์ผ ๋ฆฌ์กธ๋ฒ๋ฅผ ์ง์ ํด์ค์ผ ํ๋ค. + application / servlet -context์ ์ฐจ์ด ๋๋ณด๊ธฐ ์ด ๋ ..
1.ํฐ์บฃ ์ธ์
์ ์ฌ์ฉํ๋ค. - ๊ธฐ๋ณธ ์ ํ๋๋ ๋ฐฉ์์ด๋ค. - WAS์ ์ ์ฅ๋๋๋ฐ 2๋์ด์์ WAS๋ก ๊ตฌ๋๋๋ ํ๊ฒฝ์์๋ ์ถ๊ฐ ์ค์ ์ด ํ์ํ๋ค. 2.MySQL๊ณผ ๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ธ์
์ ์ฅ์๋ก ์ฌ์ฉํ๋ค. - ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ด๋ค. - ๋ก๊ทธ์ธ ์์ฒญ์ DB IO๊ฐ ๋ฐ์ํ ์ ์๋ค. 3.Redis ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ DB๋ฅผ ์ธ์
์ ์ฅ์๋ก ์ด์ฉํ๋ค. ์ฌ์ฉ๋ฃ๋ฅผ ์ง๋ถํด์ผํ๋ค! ์๋น์ค๊ฐ ์ปค์ง๋ ๊ณ ๋ ค! 'org.spirngframework.session:spring-session-jdbc' ๋ฅผ gradle์ ๋ฑ๋กํด์ฃผ๊ณ application.prorperties์ spring.session.store-type=jdbc ๋ง ๋ฑ๋กํ์ฃผ๋ฉด jpa๊ฐ ์ธ์
ํ
์ด๋ธ์ ์๋์ผ๋ก ์์ฑํ์ฌ ์ธ์
์ ์ฅ์๊ฐ ์ง์ ๋๋ค!
์คํ๋ง ์ํ๋ฆฌํฐ๋ ๋ง๊ฐํ ์ธ์ฆ๊ณผ ์ธ๊ฐ ๊ธฐ๋ฅ์ ๊ฐ์ง ์คํ๋ง ํ๋ ์์ํฌ์ด๋ค. ์ธ์ฆ์ด๋, ๋ณดํธ๋ ๋ฆฌ์์ค์ ์ ๊ทผํ ๋์์ ๋ํด ๋๊ตฌ์ธ์ง, ์์
์ ์ํํด๋ ๋๋์ง ํ์ธํ๋ ๊ณผ์ ์ด๋ค. ์ธ๊ฐ๋, ์ธ์ฆ ์ดํ์ ํด๋น ๋ฆฌ์์ค์ ๋ํด ์ ๊ทผ ๊ฐ๋ฅํ ๊ถํ์ ๊ฐ์ง๊ณ ์๋์ง ํ์ธํ๋ ๊ณผ์ ์ด๋ค. ๋ณด์๊ณผ ๊ด๋ จํด์ ์ฒด๊ณ์ ์ผ๋ก ๋ง์ ์ต์
์ ์ ๊ณตํด์ฃผ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ์๊ฐ ์ผ์ผ์ด ๋ณด์ ๊ด๋ จ ๋ก์ง์ ์์ฑํ์ง ์์๋ ๋๋ค. ๊ตฌ๊ธ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ ๊ตฌํํด๋ณด์! https://console.cloud.google.com/ ๋ก ์ ์ํด์ ์๋ก์ด ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ค. ํ๋ก์ ํธ๋ฅผ ์ ํํ ํ API ๋ฐ ์๋น์ค -> ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด OAuth ํด๋ผ์ด์ธํธ ID ํด๋ฆญ! ๋์ ํ๋ฉด ์ค ์ธ๋ถ/๋ด๋ถ๊ฐ ์๋๋ฐ ์ธ๋ถ๋ฅผ ํด๋ฆญํ๋ค. ์ ํ๋ฆฌ์ผ์ด์
์ด๋ฆ : ์ฌ์ฉ์์๊ฒ ๋
ธ์ถ๋ ์ ํ๋ฆฌ์ผ์ด..
๊ต์ก๊ณผ์ ๋์ ์ธ์ ๋ง๋ค์ด์ก๋์ง, ์ธ์ ์์ ๋์๋์ง์ ๋ฐ๋ฅธ ์ ์ง๋ณด์ ์ค์์ฑ์ ๋ฐฐ์ฐ์ง ๋ชปํ๋ค. ์ด์ ๋ชจ๋ธ๋งํ ๋ ๊ณ ๋ คํด์ ์ง์ผ๊ฒ ๊ตฐ... ๊ฐ์ ๋ด์ฉ์ธ๋ฐ ๋งค๋ฒ DB์ insert/update์ ํ๊ธฐ์๋ ์ฝ๋๊ฐ ์ฌ๊ธฐ์ ๊ธฐ ๋ค์ด๊ฐ๊ฒ ๋๋๊น ์์ฑ๋ ๋ ๊ฐ์ด ์์ฑ๋๋ฉด ํธ๋ฆฌํ๋ค! domain ํด๋์ BaseTimeEntityํด๋์ค๋ฅผ ๋ง๋ค์ด์ฃผ๊ณ ๋ชจ๋ Entity์ ์์ ํด๋์ค๊ฐ ๋๊ฒ ํ๋ฉด ๋๋ค. 1. @MappedSpuerclass ๋ฅผ ์ด์ฉํ๋ฉด JPA Entityํด๋์ค๋ค์ด BaseTimeEntity๋ฅผ ์์ํ ๊ฒฝ์ฐ ํ๋๋ค๋ ์ปฌ๋ผ์ผ๋ก ์ธ์ํ๋๋ก ํ๋ค. 2. @EntityListeners(AuditingEntityListener.class)๋ก ํด๋น ํด๋์ค์ Auditing๊ธฐ๋ฅ์ ํฌํจํ๋ค. 3. @CreatedDate priva..