๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ

(135)
Advice ๋™์ž‘ ์‹œ์  ์Šคํ”„๋ง์—์„œ๋Š” ๋‹ค์„ฏ ๊ฐ€์ง€์˜ ๋™์ž‘ ์‹œ์ ์„ ์ œ๊ณตํ•œ๋‹ค. ์–ด๋“œ๋ฐ”์ด์Šค ๋ฉ”์†Œ๋“œ์˜ ๋™์ž‘ ์‹œ์ ์€ ์—˜๋ฆฌ๋จผํŠธ ํ•˜์œ„์— ๊ฐ๊ฐ , , , , ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ง€์ •ํ•œ๋‹ค. 1. ํฌ์ธํŠธ์ปท์œผ๋กœ ์ง€์ •๋œ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ์‹œ ๋ฉ”์†Œ๋“œ๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „์— ์ฒ˜๋ฆฌํ•  ๋‚ด์šฉ๋“ค์„ ๊ธฐ์ˆ ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค. package com.springbook.biz.common; public class BeforeAdvice { public void beforeLog(){ System.out.println("[์‚ฌ์ „ ์ฒ˜๋ฆฌ] ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ˆ˜ํ–‰ ์ „ ๋™์ž‘"); } } 2. ํฌ์ธํŠธ์ปท์œผ๋กœ ์ง€์ •๋œ ๋ฉ”์†Œ๋“œ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋˜๊ณ  ๋‚˜์„œ ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ์‚ฌํ›„ ์ฒ˜๋ฆฌ ๋กœ์ง์„ ์ถ”๊ฐ€ํ•  ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. package com.springbook.biz.common; public clas..
ํฌ์ธํŠธ์ปท ํ‘œํ˜„์‹ 1) ๋ฆฌํ„ดํƒ€์ž… ์ง€์ • ๋ฆฌํ„ดํƒ€์ž… ์ง€์ •์—์„œ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ•์€ '*'์บ๋ฆญํ„ฐ๋ฅผ ์ด์šฉํ•œ๋‹ค. ํ‘œํ˜„์‹ ์„ค๋ช… * ๋ชจ๋“  ๋ฆฌํ„ดํƒ€์ž… ํ—ˆ์šฉ void ๋ฆฌํ„ดํƒ€์ž…์ด void์ธ ๋ฉ”์†Œ๋“œ ์„ ํƒ !void ๋ฆฌํ„ดํƒ€์ž…์ด void๊ฐ€ ์•„๋‹Œ ๋ฉ”์†Œ๋“œ ์„ ํƒ 2) ํŒจํ‚ค์ง€ ์ง€์ • ํŒจํ‚ค์ง€ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•  ๋•Œ๋Š” '*', '..'์บ๋ฆญํ„ฐ๋ฅผ ์ด์šฉํ•œ๋‹ค. ํ‘œํ˜„์‹ ์„ค๋ช… com.springbook.biz ์ •ํ™•ํ•˜๊ฒŒ com.springbook.biz ํŒจํ‚ค์ง€๋งŒ ์„ ํƒ com.springbook.biz.. com.springbook.biz ํŒจํ‚ค์ง€๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ชจ๋“  ํŒจํ‚ค์ง€ ์„ ํƒ com.springbook..impl com.springbook ํŒจํ‚ค์ง€๋กœ ์‹œ์ž‘ํ•˜๋ฉด์„œ ๋งˆ์ง€๋ง‰ ํŒจํ‚ค์ง€ ์ด๋ฆ„์ด impl๋กœ ๋๋‚˜๋Š” ํŒจํ‚ค์ง€ ์„ ํƒ 3) ํด๋ž˜์Šค ์ง€์ • ํด๋ž˜์Šค ์ด๋ฆ„์„ ์ง€์ •ํ•  ๋•Œ๋Š” '*', '+' ์บ๋ฆญํ„ฐ๋ฅผ ์ง€..
AOP ์—˜๋ฆฌ๋จผํŠธ : AOP ์„ค์ •์˜ ๋ฃจํŠธ ์—˜๋ฆฌ๋จผํŠธ. ํ•˜์œ„ ์—˜๋ฆฌ๋จผํŠธ๋กœ , ๊ฐ€ ์žˆ๋‹ค. : ํฌ์ธํŠธ์ปท์„ ์ง€์ •ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค. ์—ฌ๋Ÿฌ ๊ฐœ ์ •์˜ํ•  ์ˆ˜ ์žˆ์œผ๋‚˜, ๊ฐ๊ฐ ์œ ์ผํ•œ ์•„์ด๋””๋ฅผ ํ• ๋‹นํ•ด์•ผ ํ•œ๋‹ค. : ํ•ต์‹ฌ ๊ด€์‹ฌ์— ํ•ด๋‹นํ•˜๋Š” ํฌ์ธํŠธ์ปท ๋ฉ”์†Œ๋“œ์™€ ํšก๋‹จ ๊ด€์‹ฌ์— ํ•ด๋‹นํ•˜๋Š” ์–ด๋“œ๋ฐ”์ด์Šค ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฒฐํ•ฉํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค. public class LogAdvice{ public void printLog(){ System.out.println("[๊ณตํ†ต ๋กœ๊ทธ] ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ˆ˜ํ–‰ ์ „ ๋™์ž‘"); } } ์œ„์˜ ์ฝ”๋“œ๋ฅผ ํ•ด์„ํ•˜๋ฉด, getPointcut์œผ๋กœ ์„ค์ •ํ•œ ํฌ์ธํŠธ์ปท ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ log๋ผ๋Š” ์–ด๋“œ๋ฐ”์ด์Šค ๊ฐ์ฒด์˜ printLog()๊ฐ€ ์‹คํ–‰๋˜๊ณ  ์ด๋•Œ printLog() ๋ฉ”์†Œ๋“œ ๋™์ž‘ ์‹œ์ ์ด ๋ผ๋Š” ๋‚ด์šฉ์˜ ์„ค์ •์ด๋‹ค. : aspect์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ํ•˜๋‚˜, Advi..
AOP ์šฉ์–ด 1. Joinpoint ์กฐ์ธ ํฌ์ธํŠธ๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ˜ธ์ถœํ•˜๋Š” ๋ชจ๋“  ๋น„์ฆˆ๋‹ˆ์Šค method๋กœ์„œ, BoardServiceImpl์ด๋‚˜ UserServiceImpl ํด๋ž˜์Šค์˜ ๋ชจ๋“  method๋ฅผ ์กฐ์ธํฌ์ธํŠธ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. 2. Pointcut ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ˜ธ์ถœํ•˜๋Š” ๋ชจ๋“  ๋น„์ฆˆ๋‹ˆ์Šค method๊ฐ€ ์กฐ์ธํฌ์ธํŠธ๋ผ๋ฉด, ํฌ์ธํŠธ์ปท์€ ํ•„ํ„ฐ๋ง๋œ ์กฐ์ธํฌ์ธํŠธ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. 3. Advice ํšก๋‹จ ๊ด€์‹ฌ์— ํ•ด๋‹นํ•˜๋Š” ๊ณตํ†ต ๊ธฐ๋Šฅ์˜ ์ฝ”๋“œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ๋…๋ฆฝ๋œ ํด๋ž˜์Šค์˜ method๋กœ ์ž‘์„ฑ๋œ๋‹ค. ์–ด๋“œ๋ฐ”์ด์Šค๋กœ ๊ตฌํ˜„๋œ method๊ฐ€ ์–ธ์ œ ๋™์ž‘ํ• ์ง€ ์Šคํ”„๋ง ์„ค์ • ํŒŒ์ผ์„ ํ†ตํ•ด์„œ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋™์ž‘ ์‹œ์ ์€ 5๊ฐ€์ง€๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. before after after-returning after-throwing around 4. Weaving ํฌ์ธํŠธ์ปท์œผ๋กœ ์ง€..
AOP ์„ค์ •ํ•˜๊ธฐ 1. pom.xml ์ค‘ AOP ๊ด€๋ จ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ถ”๊ฐ€ org.aspectj aspectjrt ${org.aspectj-version} org.aspectj aspectjweaver 1.8.8 2. applicationContext.xml์— aop ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์ถ”๊ฐ€
AOP๋ž€? AOP: Aspect Oriented Programming; ๋น„์ฆˆ๋‹ˆ์Šค ์ปดํฌ๋„ŒํŠธ ๊ฐœ๋ฐœ์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋‘ ๊ฐ€์ง€ ์›์น™์€ ๋‚ฎ์€ ๊ฒฐํ•ฉ๋„์™€ ๋†’์€ ์‘์ง‘๋„๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. IoC๋Š” ๋‚ฎ์€ ๊ฒฐํ•ฉ๋„์™€ ๊ด€๋ จ๋œ ๊ธฐ๋Šฅ์ด๊ณ , AOP๋Š” ์‘์ง‘๋„์™€ ๊ด€๋ จ๋œ ๊ธฐ๋Šฅ์ด๋‹ค. AOP๋Š” ๋ถ€๊ฐ€์ ์ธ ๊ณตํ†ต ์ฝ”๋“œ๋“ค์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ์ฃผ๋ชฉํ•œ๋‹ค. ์Šคํ”„๋ง์˜ AOP๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ•ต์‹ฌ ๊ด€์‹ฌ์— ํ•ด๋‹นํ•˜๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ, ํšก๋‹จ ๊ด€์‹ฌ์— ํ•ด๋‹นํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ์‹คํ–‰ํžˆ์ค€๋‹ค. ์ด๋•Œ, ํ•ต์‹ฌ ๊ด€์‹ฌ ๋ฉ”์†Œ๋“œ์™€ ํšก๋‹จ ๊ด€์‹ฌ ๋ฉ”์†Œ๋“œ ์‚ฌ์ด์—์„œ ์†Œ์Šค์ƒ์˜ ๊ฒฐํ•ฉ์€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.
[์—๋Ÿฌ] "useSSL" ์—”ํ‹ฐํ‹ฐ์— ๋Œ€ํ•œ ์ฐธ์กฐ๋Š” ';' ๊ตฌ๋ถ„์ž๋กœ ๋๋‚˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์—๋Ÿฌ๋ฅผ ๊ณ ์น˜๋ ค๋ฉด & ๊ธฐํ˜ธ๋ฅผ &๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด ๋œ๋‹ค. intelliJ๋ฅผ ์“ฐ๊ณ ์žˆ๋‹ค๋ฉด ๋ถ„๋ช… ๋นจ๊ฐ„ ์ค„๋กœ ์˜ค๋ฅ˜๋ฅผ ๋‚˜ํƒ€๋‚ด์ฃผ๊ณ  ์žˆ์„ํ…Œ๋‹ค.
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๊ฐ€ ์ง€์ •ํ•ด์ฃผ..
intelliJ 'org.springframework.boot:spring-boot-starter-web:2.4.1' not found intelliJ 'org.springframework.boot:spring-boot-starter-web:2.4.1' not found ์ด ์—๋Ÿฌ๊ฐ€ ๋‚œ๋‹ค๋ฉด, ์บ์‹œ๋ฅผ ์‚ญ์ œํ•˜๊ณ  ์žฌ์‹œ์ž‘ ์‹œ ๋‹ค์‹œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋‹ค์šด๋ฐ›์•„๋ด…์‹œ๋‹ค!
IntelliJ ์Šคํ”„๋ง ๋ถ€ํŠธ ํ”„๋กœ์ ํŠธ ์‹œ์ž‘ํ•˜๊ธฐ 1. ์Šคํ”„๋ง ๋ถ€ํŠธ ํ”„๋กœ์ ํŠธ ๋งŒ๋“ค๊ธฐ ๋ฐฉ๋ฒ• 1: IntelliJ์˜ Spring Initializer ์‚ฌ์šฉํ•˜๊ธฐ ๋ฐฉ๋ฒ• 2: maven์œผ๋กœ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ํ›„ ์ง์ ‘ ์ž‘์„ฑํ•˜๊ธฐ [pom.xml ์ค‘ ๋‚ด์šฉ ์ถ”๊ฐ€] org.springframework.boot spring-boot-starter-parent 2.4.1 org.springframework.boot spring-boot-starter-web ๊ณต์‹ ๋ฌธ์„œ์—์„œ ์œ ์ผํ•˜๊ฒŒ ์œ„์น˜๋ฅผ ์ถ”์ฒœํ•˜๋Š” ํŒŒ์ผ์ด๋ผ๊ณ  ํ•œ๋‹ค. package com.jueun.create; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @Spr..
2021๋…„ 1์›”~2์›”์˜ ๊ธฐ๋ก ๐Ÿฐ 2021.01.01 ๐Ÿฐ 2021.01.11 ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ƒ๊ฐ ์ง„๋„๊ฐ€ ๊ฒฐ์ฝ” ๋น ๋ฅด์ง„ ์•Š์ง€๋งŒ ๋Œ€์‹  ํ™•์‹คํ•˜๊ฒŒ ๊ณต๋ถ€ํ•˜๋Š” ๊ฒƒ ๊ฐ™์•„์„œ ๋งŒ์กฑ๊ฐ์ด ํฌ๋‹ค. tistory์—๋„ ์—ด์‹ฌํžˆ ์˜ฌ๋ฆฌ๊ณ  github์—๋„ ๋ฐฐ์šด ๋‚ด์šฉ์˜ ๋‚ด์šฉ์„ ์ปค๋ฐ‹๋ฉ”์„ธ์ง€๋กœ ์‹ ์ค‘ํ•˜๊ฒŒ ์ž‘์„ฑํ•ด์„œ ์˜ฌ๋ ค๋‘”๋‹ค. ๋‚ด๊ฐ€ ๋‚˜์ค‘์— ์ฐพ์•„๋ณด๋ ค๋Š” ์šฉ๋„๊ฐ€ ์ผ๋‹จ ๋จผ์ €์ด๋‹ค. ๋ฐฑ์—”๋“œ ์ฒซ ํ˜‘์—… ๊ฐœ๋ฐœ์˜ ์„œ๋ง‰์ด ์˜ฌ๋ž๋‹ค. ๊ฐœ์ธ์ ์œผ๋กœ ๋ง๋„ ์•ˆ๋˜๋Š” ํ”„๋กœ์ ํŠธ์— ์ฐธ์—ฌํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค..... ์‚ฌ์‹ค ์ด ํ”„๋กœ์ ํŠธ ํŒ€์˜ ๋ฉค๋ฒ„์ด์‹  ๋ถ„์˜ ๊ฐœ์ธ ๋ธ”๋กœ๊ทธ๋ฅผ ์ •๋ง ์šฐ์—ฐํžˆ ๋ณด๊ณ  ๋‚˜์„œ (์ฃผ๋ณ€ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ๋„ ๋งํฌ๋ฅผ ๋ณด๋‚ด์ค„ ์ •๋„๋กœ ํ•ด๋ณด๊ณ  ์‹ถ์—ˆ๋‹ค !) ๊ฐœ์ธ์ ์œผ๋กœ๋ผ๋„ ๋น„์Šทํ•œ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•ด๋ณด๋ ค๊ณ  ํ–ˆ์—ˆ๋Š”๋ฐ ๋„ˆ๋ฌด ์‹ ๊ธฐํ•˜๊ณ , ๊ฐ์‚ฌํ•˜๊ฒŒ๋„ ์—ฐ๋ฝ์ด ๋‹ฟ์•˜๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์‚ฌ์‹ค ์•„์ง ํ”„๋กœ์ ํŠธ์— ๋ฐ”๋กœ ํˆฌ์ž…๋  ์ •๋„์˜ ์ง€์‹์ด ์ „ํ˜€ ์•„๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋‚˜๋ฅผ ..
IntelliJ ๋„ค์ž„์ŠคํŽ˜์ด์Šค(xmlns) ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ• eclipse์˜ ๊ฒฝ์šฐ sts๋กœ ์‰ฝ๊ฒŒ ๋„ค์ž„์ŠคํŽ˜์ด์Šค(namespace)๊ฐ€ ์ถ”๊ฐ€๊ฐ€ ๊ฐ€๋Šฅํ•œ๋ฐ, intelliJ์—์„œ๋Š” ์‰ฝ๊ฒŒ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ์ง€ ๋ชปํ•ด์„œ ํ•œ์ฐธ์„ ํ—ค๋งธ์—ˆ๋‹ค. ํ•œ๊ธ€ ๊ฒ€์ƒ‰์œผ๋กœ๋Š” ์ฐพ์„ ์ˆ˜ ์—†์–ด์„œ ์˜์–ด๋กœ ๊ฒ€์ƒ‰ํ•œ ํ›„์— ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. ๋ณ„๋„์˜ ์ฐฝ ์—†์ด ์ผ๋‹จ ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์“ฐ๊ณ  ์žˆ์œผ๋ฉด intelliJ๊ฐ€ ์ถ”์ฒœ์„ ํ•ด์ฃผ๊ณ  ํ™”์‚ดํ‘œ ๋ฐ‘์œผ๋กœ ์ด๋™ํ•ด์„œ ์—”ํ„ฐ๋ฅผ ์น˜๋ฉด ๋ฐ”๋กœ ์ถ”๊ฐ€๊ฐ€ ๋œ๋‹ค. ์˜ˆ์‹œ๋กœ ์— ๊ด€ํ•œ xmlns:context๋ฅผ ์ถ”๊ฐ€ํ•ด๋ณด์•˜๋‹ค. ํˆด์ด ์ง„์งœ ๋˜‘๋˜‘ํ•˜๋‹ค.
๋น„์ฆˆ๋‹ˆ์Šค ์ปดํฌ๋„ŒํŠธ ์‹ค์Šต Spring Quick Start(์ฑ…)์˜ Day1 class06~07 ์‹ค์Šต์„ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๊ธฐ๋กํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. ์‹ค์Šต ์ฝ”๋“œ๋Š” ์—ฌ๊ธฐ์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. MySQL๋กœ db๋ฅผ ๋ฐ”๊พธ๋ฉด์„œ ๊ธฐ์กด ์ฑ…์˜ ์‹ค์Šต์—์„œ ๋ณ€๊ฒฝํ•œ ๋ถ€๋ถ„ dependency mysql mysql-connector-java ${mysql.version} table ์ƒ์„ฑ CREATE TABLE BOARD ( SEQ INTEGER(5) PRIMARY KEY, TITLE VARCHAR(200), WRITER VARCHAR(20), CONTENT VARCHAR(2000), REGDATE datetime default CURRENT_TIMESTAMP, CNT INTEGER(5) default 0 ); SQL๋ฌธ private final String BOARD_I..