Springboot (22) ์ธ๋ค์ผํ ๋ฆฌ์คํธํ [spring boot] HATEOAS ๊ฐ๋จํ๊ฒ ์ฌ์ฉํด๋ณด๊ธฐ HATEOAS ๋? Hypermedia As The Engine Of Application State ์ ์ฝ์์ด๋ค. rest API์์, ์๋ฒ๋ ํ์ฌ ๋ฆฌ์์ค์ ์ฐ๊ด๋ ๋งํฌ ์ ๋ณด๋ฅผ ํด๋ผ์ด์ธํธ์๊ฒ ์ ๊ณตํ๋ค. ํด๋ผ์ด์ธํธ๋ ์ฐ๊ด๋ ๋งํฌ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ๋ฆฌ์์ค์ ์ ๊ทผํ๋ค. ์ฐ๊ด๋ ๋งํฌ ์ ๋ณด: Relation Hypertext Reference; HATEOAS ๊ฐ๋จํ๊ฒ ์ฌ์ฉํด๋ณด๊ธฐ spring-boot-starter-hateoas ์์กด์ฑ ์ถ๊ฐ org.springframework.boot spring-boot-starter-hateoas Entity ์์ฑ @Getter @Setter @noargsconstructor public class Hello { private String prefix; private Strin.. [spring boot] ์์ฃผ ๊ฐ๋จํ๊ฒ Thymeleaf ์ฌ์ฉํด๋ณด๊ธฐ ํ ํ๋ฆฟ ์์ง์ด๋? ํ ํ๋ฆฟ ์์๊ณผ ํน์ ๋ฐ์ดํฐ ๋ชจ๋ธ์ ๋ฐ๋ฅธ ์ ๋ ฅ ์๋ฃ๋ฅผ ๊ฒฐํฉํ์ฌ ์ํ๋ ๊ฒฐ๊ณผ ๋ฌธ์๋ฅผ ์ถ๋ ฅํ๋ ์ํํธ์จ์ด(๋๋ ์ปดํฌ๋ํธ)๋ฅผ ๋งํ๋ค. ์ฃผ๋ก View๋ฅผ ๋ง๋ค ๋ ์ฌ์ฉํ๋ค. ๋์ ์ปจํ ์ธ ๋ฅผ ์์ฑํด์ ์ ๊ณตํด์ผํ ๋ ํ ํ๋ฆฟ ์์ง์ ์ ์ฉํ๊ฒ ์ฌ์ฉํ ์ ์๋ค. Code Generation / Email Template ๋ฑ์ ์ฌ์ฉ๋๋ค. ์คํ๋ง ๋ถํธ๊ฐ ์๋ ์ค์ ์ ์ง์ํ๋ ํ ํ๋ฆฟ ์์ง FreeMarker Groovy Thymeleaf (์ถ์ฒ) ใ ก> ๋น๊ต์ ์ต๊ทผ์ ๋ง๋ค์ด์ง ํ ํ๋ฆฟ ์์ง์ด๋ค. Mustache JSP๋ฅผ ๊ถ์ฅํ์ง ์๋ ์ด์ spring boot๊ฐ ์งํฅํ๋ ๋ฐ๋ฅผ ์ถฉ์กฑ์ํค๊ธฐ ๋ชปํ๋ค. spring boot๋ ๋ ๋ฆฝ์ ์ผ๋ก ์คํ๊ฐ๋ฅํ embeded tomcat์ผ๋ก application์ ์ฝ๊ณ ๋น ๋ฅด๊ฒ ๋ง๋ค์ด ๋ฐฐํฌ.. [spring boot] index.html, favicon ์ฐ์ปด ํ์ด์ง application์ root๋ก ์์ฒญํ์ ๋ ๋ณด์ฌ์ฃผ๋ ํ์ด์ง์ด๋ค. 1. ๊ธฐ๋ณธ ๋ฆฌ์์ค ์์น์์ index.html ์ฐพ์ ๋ณด๊ณ ์์ผ๋ฉด ์ ๊ณตํ๊ณ 2. index.ํ ํ๋ฆฟ ์ฐพ์ ๋ณด๊ณ ์์ผ๋ฉด ์ ๊ณตํ๊ณ 3. ๋ ๋ค ์์ผ๋ฉด ์๋ฌ ํ์ด์ง๋ฅผ ๋ณด๋ด์ค๋ค. favicon ๋ธ๋ผ์ฐ์ ์ฐฝ ์ ๋ชฉ ์์ ์์ด์ฝ์ ์๋ฏธํ๋ค. favicon.ico ์ด๋ฆ์ผ๋ก ํด๋์ ์ถ๊ฐํ๋ค. ์ฝ๊ฒ favicon ๋ง๋ค๊ธฐ ์ฌ์ดํธ: https://favicon.io/ favicon์ด ์ ์ฉ์ด ๋์ง ์์ ๋๋ "๊ฐ๋ ฅํ ์๋ก๊ณ ์นจ(control + shift + R)"์ ํด๋ณด์ ! ! ! ๋๋ resources/static/ ์ ์ ์ฅํด๋์๋ค. ๋ด๊ฐ ์ ์ฉํ ๋ชจ์ต์ด๋ค. [spring boot] WebJars ์ค jquery ์ถ๊ฐํด๋ณด๊ธฐ WebJars๋? ํด๋ผ์ด์ธํธ์์ ์ฌ์ฉํ๋ ์น๋ผ์ด๋ธ๋ฌ๋ฆฌ(jquery, bootstrap, React.js, Vue.js, Angular ๋ฑ) ๋ฅผ *JAR* ํ์ผ ์์ ํจํค์งํ ๊ฒ์ด๋ค. ์คํ๋ง ๋ถํธ๋ WebJars์ ๋ํ ๊ธฐ๋ณธ mapping์ ์ ๊ณตํ๋ค. ์ฝ๊ฒ ๋งํด WebJars๋ฅผ ์ถ๊ฐํ ์ ์๋ค. mvn repository์ ์ฌ๋ผ์์๊ธฐ ๋๋ฌธ์ ๊ฒ์ํด์ pom.xml์ ์ถ๊ฐํ๊ณ ์ธ ์ ์๋ค. org.webjars.bower jquery 3.5.1 ๋ฒ์ ์๋ตํ๊ณ ์ฌ์ฉํ๋ ค๋ฉด webjars-locator-core ์์กด์ฑ ์ถ๊ฐํ๋ฉด ๋๋ค. org.webjars webjars-locator-core 0.46 [spring boot] ์ ์ ๋ฆฌ์์ค ์ง์ ์ ์ ๋ฆฌ์์ค๋? ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์์ฒญ์ด ๋ค์ด์์ ๋, ๋ฆฌ์์ค๊ฐ ์ด๋ฏธ ๋ง๋ค์ด์ ธ ์์ด์ ๊ทธ๋๋ก ๋ณด๋ด์ฃผ๋ฉด ๋๋ ๊ฒฝ์ฐ๋ฅผ ๋งํ๋ค. ๊ธฐ๋ณธ ๋ฆฌ์์ค ์์น “/**”์ด mapping์ ์ํด ์๋์ 4๊ฐ์ง ํด๋์ ์์ค์ ์ฐ๊ฒฐ์ด ๋๋ค. classpath:/static classpath:/public classpath:/resources/ classpath:/META-INF/resources ์์) /hello.html => /static/hello.html ๋งตํ ์ค์ ๋ณ๊ฒฝ ๊ฐ๋ฅ spring.mvc.static-path-pattern ์์) spring.mvc.static-path-pattern: /static/** => http://localhost:8080/static/hello.html ๋ฆฌ์์ค ์ฐพ์ ์์น ์ถ๊ฐ ๊ฐ๋ฅ We.. [spring boot] HttpMessageConverters HttpMessageConverters HTTP ์์ฒญ ๋ณธ๋ฌธ์ ๊ฐ์ฒด๋ก ๋ณ๊ฒฝํ๊ฑฐ๋, ๊ฐ์ฒด๋ฅผ HTTP ์๋ต ๋ณธ๋ฌธ์ผ๋ก ๋ณ๊ฒฝํ ๋ ์ฌ์ฉํ๋ค. ์คํ๋ง ํ๋ ์์ํฌ์์ ์ ๊ณตํ๋ ์ธํฐํ์ด์ค์ด๊ณ , ์คํ๋ง mvc์ ์ผ๋ถ๋ถ์ด๋ค. ์์) ์ปจํ ์ธ ํ์ ์ด json์ธ ์์ฒญ์ด ๋ค์ด์๋ค๋ฉด json message converter๊ฐ User๋ผ๋ ๊ฐ์ฒด๋ก ๋ณํํด์ค๋ค. {“username”:”keesun”, “password”:”123”} User ๋ฆฌํด ํ์ ์ด String์ด๋ฉด String message converter๊ฐ ์ฌ์ฉ์ด ๋๋ค. @ReuqestBody ์ @ResponseBody๋ฅผ ํตํด ์ง์ ํ ์ ์๋ค. @Controller public class UserController2 { @GetMapping("/hello") public @Re.. [spring boot] Test ์์กด์ฑ์ ํ์ธํ์ spring-boot-starter-test๊ฐ test ๊ธฐ๋ฅ์ ํด์ค๋ค. scope์ test๋ก ์ง์ ํ๋ฉด ๋๋ค. org.springframework.boot spring-boot-starter-test test test ๋ง๋ค๊ธฐ ๋จ์ถํค: Alt+Insert @SpringBootTest @SpringBootTest๋ Spring main application, ์ฆ @SpringBootApplication์ ์ฐพ์๊ฐ์ ์ดํ์ ๋ชจ๋ ๋น์ ์ค์บํ๊ณ test์ฉ application์ ๋ฑ๋กํ๋ค. ์ด๋ง์ด๋งํ ํตํฉํ ์คํธ์ธ ๊ฒ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฐ์ ๋์ค์ง๋ง, MockBean๋ง ๊ต์ฒดํด์ค๋ค. ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ํ ์คํธ ํํ๋ ์๋์ ๊ฐ๋ค. import org.junit.runner.RunWith; import org.s.. [spring boot] ๋ก๊ฑฐ๋ฅผ Log4j2๋ก ๋ณ๊ฒฝํ๊ธฐ docs.spring.io/spring-boot/docs/current/reference/html/howto-logging.html#howto-configure-log4j-for-logging “How-to” Guides Spring Boot has no mandatory logging dependency, except for the Commons Logging API, which is typically provided by Spring Framework’s spring-jcl module. To use Logback, you need to include it and spring-jcl on the classpath. The recommended way to do th docs.spring.io org... [spring boot] logging ์ปค์คํฐ๋ง์ด์ง https://docs.spring.io/spring-boot/docs/current/reference/html/howto-logging.html “How-to” Guides Spring Boot has no mandatory logging dependency, except for the Commons Logging API, which is typically provided by Spring Framework’s spring-jcl module. To use Logback, you need to include it and spring-jcl on the classpath. The recommended way to do th docs.spring.io Customize log file Logback: ํ์ผ.. [spring boot] logging ๊ธฐ๋ณธ ์ค์ log: (ํ๋์ฌ) ์ผ์ง์ ๊ธฐ๋กํ๋ค (๋ง์ง๋ง ํ์ดํ) JUL(java util logging)์ SLF4j API๋ก ๋ณด๋ธ๋ค. (์ค๊ฐ ํ์ดํ) Log4J๋ SLF4j API๋ก ๋ณด๋ธ๋ค. (์ฒ์ ํ์ดํ) Logback์ด SLF4j์ ๊ตฌํ์ฒด์ด๋ค. Commons Logging, SLF4j๋ ์ค์ ๋ก๊น ์ ํ๋ ์ ๋ค์ด ์๋๋ผ ๋ก๊ฑฐ API๋ฅผ ์ถ์ํํด๋ interface ์ด๋ค. ์คํ๋ง ๋ถํธ๋ ๊ธฐ๋ณธ์ ์ผ๋ก Commons Logging์ ์ฌ์ฉํ๋๋ฐ ๊ฒฐ๊ตญ SLF4j์ ์ฌ์ฉํ๊ณ , SLF4j๋ ๊ตฌํ์ฒด์ธ Logback์ ์ฌ์ฉํ์ฌ ๋ก๊น (๊ธฐ๋ก)์ ํ๋ค. ์ต์ข ์ ์ผ๋ก Logback์ ์ด๋ค. ์คํ๋ง ๋ถํธ ๋ก๊น ์ ๊ธฐ๋ณธ ํฌ๋งท ๋ ์ง ์๊ฐ / ๋ก๊ทธ ๋ ๋ฒจ / PID / Thread ์ด๋ฆ / full package๊ฒฝ๋ก.class์ด๋ฆ / ๋ฉ์ธ์ง ๋๋ฒ๊น .. @Profile Spring Framework์์ ์ ๊ณตํด์ฃผ๋ ๊ธฐ๋ฅ์ด๋ค. ํน์ ํ ํ๋ก ํ์ผ์์๋ง ํน์ ํ ๋น์ ๋ฑ๋กํ๊ณ ์ถ๋ค๊ฑฐ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋์์ ํน์ ํ ํ๋กํ์ผ์์ ๋น ์ค์ ์ ๋ค๋ฅด๊ฒ ํ๊ณ ์ถ์ ๋ ์ด๋ค. @Profile @Profile("prod") // ์ค์ ํ์ผ ์์ฒด๊ฐ "prod"๋ผ๋ ํ๋กํ์ผ์ผ ๋ ์ฌ์ฉ๋๋ค. ๊ทธ๋ฌ๋๊น ๋น์ฐํ hello ๋น๋ ๋ชป์ด๋ค. @Configuration public class BaseConfiguration { @Bean public String hello(){ return "hello"; } } @Profile("test") // ์ค์ ํ์ผ ์์ฒด๊ฐ "test"๋ผ๋ ํ๋กํ์ผ์ผ ๋ ์ฌ์ฉ๋๋ค. @Configuration public class TestConfiguration { @Bean publi.. [spring boot] ์ธ๋ถ ์ค์ https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-external-config ์ธ๋ถ ์ค์ ์ด๋? ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉํ๋ ์ฌ๋ฌ ์ค์ ๊ฐ๋ค์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ ๋ฐ์๋ค๊ฐ ์ ์ํ ์ ์๋ ๊ธฐ๋ฅ application.properties ๊ฐ์ฅ ์ค์ํ ์ค์ ํ์ผ์ application.properties ํ์ผ์ด๋ค. spring boot๊ฐ ์๋์ผ๋ก ๋ก๋ฉํ๋ ํ์ผ ์ด๋ฆ์ผ๋ก, ๊ท์ฝ(convention)์ด๋ค. key value ํํ๋ก ์ ์ํ๋ค. ๋ค ๋ฌธ์์ด์ด๋ค. springboot intializr ์ ์๋์ผ๋ก ์์ฑ๋๋ ํ์ผ๋ก, ๋ฐ์ ์ฐ์ ์์์์ 15์์์ ํด๋นํ๋ค. Spring Boot์ ์ธ๋ถ ์ค์ ์ข ๋ฅ propertie.. SpringApplication Spring Initializr๋ฅผ ์ฌ์ฉํ๋ฉด ์์ฑ๋๋ Application ํด๋์ค @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ์ปค์คํฐ๋ง์ด์ง ํ๊ณ ์ถ๋ค๋ฉด ๋ก์ปฌ ์ธ์คํด์ค๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค. SpringApplication app = new SpringApplication(Application.class); @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication app.. ์คํ๋ง๋ถํธ, ๋ ๋ฆฝ์ ์ผ๋ก ์คํ ๊ฐ๋ฅํ JAR “๋ ๋ฆฝ์ ์ผ๋ก ์คํ๊ฐ๋ฅํ ์ ํ๋ฆฌ์ผ์ด์ ”์ด ์คํ๋ง๋ถํธ์ ์ฃผ์ํ ๋ชฉ์ ์ค ํ๋์ด๋ค. org.springframework.boot spring-boot-maven-plugin pom.xml์ spring-boot-maven-plugin์ด ํด์ฃผ๋ ์ผ์ด ๋ฐ๋ก ํจํค์ง์ด๋ค. jar ์์ jar ํ์ผ๋ค์ ๊ทธ๋๋ก ๋ฌถ์ด๋ ์ ์๋๋ก ์ง์ํด์ ํ๋์ jar ํ์ผ๋ก ํ๋ก์ ํธ๋ฅผ ํจํค์งํ ์ ์๋ค. ๋ชจ๋ mvn ๋ช ๋ น์ด๋ ํ๋ก์ ํธ์ ํ ๋๋ ํ ๋ฆฌ์์ ์คํํ๋ฉด ๋๋ค. ์๋๋ ๋ํ์ ์ผ๋ก ์ฐ์ด๋ ๋ช ๋ น์ด๋ค์ด๋ค. mvn clean mvn package ใ ก> ์คํ ๊ฐ๋ฅํ JAR ํ์ผ “ํ๋๊ฐ" ์์ฑ๋๋ค. mvn clean package ใ ก> ํ ๋ฒ์ ์คํํ ์๋ ์๋ค. mvn package -DskipTests ใ ก> test๋ ๊ฑด๋๋ด๋ค. jav.. ์คํ๋ง ๋ถํธ ํฌํธ ๋ฒํธ ๋ณ๊ฒฝ, ๋๋คํฌํธ, ํฌํธ ๋ฒํธ ํ์ธํ๊ธฐ ํฌํธ ๋ฒํธ ๋ณ๊ฒฝํ๊ธฐ server.port=7070 ๋๋ค ํฌํธ๋ก ๋ณ๊ฒฝํ๊ธฐ server.port=0 eventListener๋ก ํฌํธ ๋ฒํธ ํ์ธํ๊ธฐ ServletWebServerInitializedEvent๋ ์น์๋ฒ๊ฐ ์ด๊ธฐํ, ์์ฑ์ด ๋๋ฉด ํธ์ถ๋๋ eventListener์ด๋ค. ์๋ธ๋ฆฟ ์ ํ๋ฆฌ์ผ์ด์ ใ ก> ์น ์๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ด๊ธฐ ๋๋ฌธ์ ์น ์๋ฒ๋ฅผ ์ ์ ์๋ค. package com.jueun.demo; import org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext; import org.springframework.boot.web.servlet.context.ServletWebServerInitializedEvent; i.. ์คํ๋ง ๋ถํธ์ ๋ด์ฅ๋ tomcat ์๋ฒ ๋ณ๊ฒฝํ๋ ๋ฒ ๋ด์ฅ๋ ํฐ์บฃ ๋ง๊ณ ๋ค๋ฅธ ์๋ฒ๋ก ๋ณ๊ฒฝํด๋ณด์. jetty๋ก ๋ณ๊ฒฝ jetty๋ฅผ ์ฐ๊ณ ์ถ๋ค๋ฉด spring-boot-starter-web์ ๋ด์ฅ๋์ด tomcat๋ฅผ ์ ์ธ์ํค๊ณ jettyspring-boot-starter-jetty๋ฅผ ์ถ๊ฐํ๋ฉด ๋๋ค. org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-tomcat org.springframework.boot spring-boot-starter-jetty undertow๋ก ๋ณ๊ฒฝ undertow๋ฅผ ์ฐ๊ณ ์ถ๋ค๋ฉด spring-boot-starter-undertow๋ฅผ ์ถ๊ฐํ๋ฉด ๋๊ฒ ๋ค. org.springframework.boot spring-boot-starter.. ์คํ๋ง ๋ถํธ์ ๋ด์ฅ ์น ์๋ฒ(๋ ์๋ฐํ ๋งํ๋ฉด WAS)์ ๋ํ์ฌ ์คํ๋ง ๋ถํธ๋ ์๋ฒ๊ฐ ์๋๋ค. ์น ์๋ฒ๊ฐ ์๋ ํํ๋ก ์คํํ๋ ๋ฒ ๋ฐฉ๋ฒ 1 ์คํ๋ง๋ถํธ ํ๋ก์ ํธ์์ main ๋ฉ์๋์ ์๋์ ๊ฐ์ด ์์ฑํ๋ฉด ๋๋ค. SpringApplication application = new SpringApplication(Application.class); application.setWebApplicationType(WebApplicationType.NONE); application.run(args); ํ๋ฉด ์น ์๋ฒ๊ฐ ์๋ ํํ๋ก ์คํํ ์ ์๋ค. ๋ฐฉ๋ฒ 2 ๋๋ main ๋ฉ์๋๋ ์๋๋๋ก ๋๊ณ resources > application.properties ํ์ผ์ ์๋์ ๊ฐ์ด ์์ฑํด๋ณด์ spring.main.web-application.type=none "ํฐ์บฃ ๊ฐ์ฒด ์์ฑํด์ ํฌํธ๋ฒํธ ์ค.. ์คํ๋ง ๋ถํธ์ Auto Configuration ์ง์ ๊ตฌํํด๋ณด๊ธฐ "Xxx-Spring-Boot-Starter" ์๋ ์ค์ ์ ์ง์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ด๋ค. jueun-spring-boot-starter ๊ตฌํํ๊ธฐ 1. maven ํ๋ก์ ํธ ์์ฑ, ์์กด์ฑ ์ถ๊ฐ 4.0.0 com.jueun jueun-spring-boot-starter 1.0-SNAPSHOT org.springframework.boot spring-boot-autoconfigure org.springframework.boot spring-boot-autoconfigure-processor true org.springframework.boot spring-boot-dependencies 2.0.3.RELEASE pom import 2. DTO(VO) ์์ฑ package com.jueun; public class Ho.. ์คํ๋ง ๋ถํธ ์๋์ค์ ๊ฐ๋จํ๊ฒ ์ดํดํ๊ธฐ bean์ 2๋จ๊ณ๋ก ๋๋ ์ ์ฝํ๋ค. @SpringBootApplication ์์ @ComponentScan์ @EnableAutoConfiguration์ด ์จ์ด์๋ค. 1๋จ๊ณ: @ComponentScan @ComponentScan์ ์คํ๋ง ํ๋ ์์ํฌ๊ฐ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ด๋ค. ํน์ ํจํค์ง ์ดํ์ ์๋ ๋ชจ๋ ํด๋์ค๋ฅผ ์ํํ๋ฉด์ ๊ทธ ์์ @Configuration, @Component, @Repository, @Service, @Controller, @RestController ๊ฐ์ ์ ๋ ธํ ์ด์ ์ด ๋ถ์ ํด๋์ค๋ฅผ ๋น์ผ๋ก ๋ฑ๋กํด์ค๋ค. 2๋จ๊ณ: @EnableAutoConfiguration org.springframework.boot.autoconfigure.EnableAutoConfiguration @EnableAuto.. Springboot ์์กด์ฑ ๊ด๋ฆฌ์ ๋ํ์ฌ *1 spring-boot-starter-parent์ ๋ถ๋ชจ๋ spring-boot-dependencies์ธ๋ฐ ์ฌ๊ธฐ์ ์ฌ์ง๊ณผ ๊ฐ์ด properties๋ก ๋ฒ์ ์ด ๋ช ์๋์ด ์๋ค. spring-boot-dependencies ํ์ผ์ ์ปจํธ๋กค์ ๋๋ฅด๊ณ ํด๋ฆญํ๋ฉด ๋ค์ด๊ฐ ์ ์๋ค. ๋ฐ๊พธ๊ณ ์ถ์ผ๋ฉด properties์ ์ถ๊ฐํ๋ฉด ๋๋ค. 5.0.6.RELEASE *2 ์์กด์ฑ ์ถ๊ฐ ์ intelliJ ์์ ์ฌ์ง๊ณผ ๊ฐ์ด ํ์๊ฐ ๋จ๋ ๊ฒ์ ๋ฒ์ ๊ด๋ฆฌ๋ฅผ ํด์ฃผ๊ณ ์์ผ๋ฏ๋ก ๋ฒ์ ์ ๋ช ์ํ์ง ์์๋ ๋๋ค๋ ๊ฒ์ด๋ค. ํ์ง๋ง ๋ฒ์ ์ ๋ช ์ํ๋ ๊ฒ์ ๊ถ์ฅํ๋ค๊ณ ํ๋ค. *3 maven ์์กด์ฑ์ ๊ฒ์ํ๊ณ ์ถ์ ๋, https://mvnrepository.com/ ์์ ๊ฒ์ํ๋ฉด ๋๋ค. *4 spring-boot-starter-parent๊ฐ ์ง์ ํด์ฃผ.. ์ด์ 1 2 ๋ค์