Skip to content

๐ŸŒˆ์ฒœ์žฌ๊ต์œก ํ’€์Šคํƒ JAVA ๊ณผ์ • 2๊ธฐ Spring Framework ๐ŸŒˆ

License

Notifications You must be signed in to change notification settings

RosieOh/SpringFramework_Study

Repository files navigation

01. Spring Framework ๊ฐœ์š”


01-01. Spring ์—ญ์‚ฌ

  • EJB๋ฅผ ์ฃผ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ์‚ฌ์šฉํ•  ๋•Œ ๋ถˆํŽธํ–ˆ๋˜ ์ ๋“ค(๋ฌด๊ฑฐ์›€, ๋”ฐ๋ผ์•ผ ํ•  ์ŠคํŽ™๋“ค์ด ๋ณต์žกํ•จ)์„ ํ•ด์†Œํ•˜๊ธฐ ์œ„ํ•ด ํƒ„์ƒํ•จ
  • 2002๋…„ ๋กœ๋“œ์กด์Šจ์ด ์ถœํŒํ•œ ๋„์„œ Expert One-on-One J2EE Design and Development์— ์„ ๋ณด์ธ ์ฝ”๋“œ๊ฐ€ ํ˜„์žฌ Spring์˜ ๊ทผ๊ฐ„์ด ๋จ
  • ์ด ๋„์„œ๋ฅผ ์ฝ์€ ๊ฐœ๋ฐœ์ž๋“ค์ด '์ฝ”๋“œ๊ฐ€ ์ฑ…์œผ๋กœ๋งŒ ์กด์žฌํ•˜๊ธฐ์—๋Š” ๋„ˆ๋ฌด ์•„๊น๋‹ค'๋ผ๋ฉฐ ๋กœ๋“œ ์กด์Šจ์˜ ํ—ˆ๊ฐ€๋ฅผ ๋ฐ›์€ ๋’ค ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ๋ฐœ์ „์‹œํ‚ด
  • 2003๋…„ 6์›” Apache 2.0 License๋กœ ๊ณต๊ฐœ๋จ
  • 2004๋…„์— 1.0v์ด ๋ฐฐํฌ๋จ

01-02. Spring Framework๋ž€?

  • ์ž๋ฐ”, ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๊ฐœ๋ฐœ, ์˜คํ”ˆ์†Œ์Šค, light-weigth "์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋ ˆ์ž„์›Œํฌ"์ด๋‹ค.
  • ํŠน์ • ๊ณ„์ธต์ด๋‚˜ ๊ธฐ์ˆ , ์—…๋ฌด ๋ถ„์•ผ์— ๊ตญํ•œ๋˜์ง€ ์•Š๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ „ ์˜์—ญ์„ ํฌ๊ด„ํ•˜๋Š” ๋ฒ”์šฉ์ ์ธ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋งํ•จ.
  • ๊ต‰์žฅํžˆ ๋ฒ”์šฉ์ ์ด๊ณ  ๋‹ค์–‘ํ•œ ๋ถ„์•ผ์—์„œ ํ™œ์šฉํ•˜๊ณ  ์žˆ์ง€๋งŒ, ๋ชจ๋‘ ๋‹ค ์•Œ์•„์•ผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹Œ ๋งŒํผ ๊ธฐ๋ณธ์— ์ถฉ์‹คํ•ด์„œ ํ•™์Šตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

1) ๊ฒฝ๋Ÿ‰๊ธ‰ ํ”„๋ ˆ์ž„์›Œํฌ

  • ๋‹จ์ˆœํ•œ ์›น ์ปจํ…Œ์ด๋„ˆ์—์„œ๋„ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๊ฐœ๋ฐœ์˜ ๊ณ ๊ธ‰๊ธฐ์ˆ ์„ ๋Œ€๋ถ€๋ถ„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • EJB์— ๋น„ํ•ด ๊ฒฝ๋Ÿ‰๊ธ‰์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ์ผ๋ฐ˜ ์ž๋ฐ” ๊ฐ์ฒด๋งŒ์„ ์‚ฌ์šฉํ•˜์—ฌ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰์˜ ๊ณ ๊ธ‰ ๊ธฐ์ˆ ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2) ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๊ฐœ๋ฐœ ์šฉ์ด

  • ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ณต์žกํ•˜๊ณ  ์‹ค์ˆ˜ํ•˜๊ธฐ ์‰ฌ์šด Low Level์— ๋งŽ์ด ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์œผ๋ฉด์„œ Business Logic ๊ฐœ๋ฐœ์— ์ „๋…ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค๋‹ˆ๋‹ค.

3) ์˜คํ”ˆ์†Œ์Šค

  • Spring์€ OpenSource ๋กœ์„œ ๋ˆ„๊ตฌ๋‚˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ, ์•„๋ฌด๋‚˜ ์ž˜ ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋ฉฐ, ๋ฌด๋ฃŒ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๋‹จ์ ์„ ๊ทน๋ณตํ•˜๊ณ , ์žฅ์ ์„ ๊ทน๋Œ€ํ™”ํ•˜์—ฌ ์‚ฌ์šฉํ•˜์—ฌํ•˜์—ฌ ํ•ฉ๋‹ˆ๋‹ค.

01-03. Spring Framework ํŠน์ง•

1) ์ปจํ…Œ์ด๋„ˆ ์ œ๊ณต

  • Spring ์ปจํ…Œ์ด๋„ˆ(Container)๋Š” Java ๊ฐ์ฒด์˜ Life Cycle์„ ๊ด€๋ฆฌํ•˜๋ฉฐ, Spring ์ปจํ…Œ์ด๋„ˆ(Container)๋กœ๋ถ€ํ„ฐ ํ•„์š”ํ•œ ๊ฐ์ฒด๋ฅผ ๊ฐ€์ ธ์™€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2) DI(Dependency Injection) ์ง€์›

  • Spring์€ ์„ค์ • ํŒŒ์ผ์ด๋‚˜ ์–ด๋…ธํ…Œ์ด์…˜(Annotation)์„ ํ†ตํ•ด์„œ ๊ฐ์ฒด ๊ฐ„์˜ ์˜์กด๊ด€๊ณ„๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

3) AOP(Aspect Oriented Programming) ์ง€์›

  • Spring์€ ํŠธ๋žœ์žญ์…˜(Transaction)์ด๋‚˜ ๋กœ๊น…(Logging), ๋ณด์•ˆ(Security)๊ณผ ๊ฐ™์ด ๊ณตํ†ต์ ์œผ๋กœ ํ•„์š”๋กœ ํ•˜๋Š” ๋ชจ๋“ˆ๋“ค์„ ์‹ค์ œ ํ•ต์‹ฌ ๋ชจ๋“ˆ์—์„œ ๋ถ„๋ฆฌํ•ด์„œ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4) POJO(Plain Old Java Object) ์ง€์›

  • Sring ์ปจํ…Œ์ด๋„ˆ(Container)์— ์ €์žฅ๋˜๋Š” Java๊ฐ์ฒด๋Š” ํŠน์ •ํ•œ ์ธํ„ฐํŽ˜์ด์Šค(Interface)๋ฅผ ๊ตฌํ˜„ํ•˜๊ฑฐ๋‚˜, ํŠน์ • ํด๋ž˜์Šค(Class)๋ฅผ ์ƒ์†๋ฐ›์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.

5) ํŠธ๋žœ์žญ์…˜(Transaction) ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ์ผ๊ด€๋œ ๋ฐฉ๋ฒ•์„ ์ง€์›

  • JDBC(Java DataBase Connectivity), JTA(Java Transaction API) ๋“ฑ ์–ด๋–ค ํŠธ๋žœ์žญ์…˜์„ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ ์„ค์ •(Configuration)์„ ํ†ตํ•ด ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•˜๋ฏ€๋กœ ํŠธ๋žœ์žญ์…˜ ๊ตฌํ˜„์— ์ƒ๊ด€์—†์ด ๋™์ผํ•œ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

6) ์˜์†์„ฑ(Persistence)๊ณผ ๊ด€๋ จ๋œ ๋‹ค์–‘ํ•œ API ์ง€์›

  • Spring์€ Mybatis, Hibernate ๋“ฑ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ORM(Object Relational Mapping) ํ”„๋ ˆ์ž„์›Œํฌ๋“ค๊ณผ์˜ ์—ฐ๋™ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

01-04. Spring Framework ์ฃผ์š” ๋ชจ๋“ˆ ๊ตฌ์„ฑ

Spring Framework ์ฃผ์š” ๋ชจ๋“ˆ ๊ตฌ์„ฑ

1) Data Access/Integration(๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๋ฐ ํ†ตํ•ฉ)

JDBC(Java DataBase Connectivity) : Java ๊ธฐ๋ฐ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ ๋ฐ ์—…๋ฐ์ดํŠธํ•˜๊ฑฐ๋‚˜, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ Java์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์ž๋ฐ” API์ž…๋‹ˆ๋‹ค.

ORM(Object Relational Mpping) : ๊ฐ์ฒด์™€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ž๋™์œผ๋กœ ๋งคํ•‘(์—ฐ๊ฒฐ)ํ•ด์ฃผ๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

OXM(Object-XML Mapping) : XML๊ณผ ์ž๋ฐ”(Java) ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋งคํ•‘ํ•ด์„œ ์ƒํ˜ธ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค.

JMS(Java Message Service) : ์‚ฌ๋žŒ์ด ์•„๋‹Œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์†Œ๋น„ํ•˜๋Š” ์š”์ฒญ, ๋ณด๊ณ ์„œ, ์ด๋ฒคํŠธ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ์ž‘์„ฑ, ์ „์†ก ์ˆ˜์‹  ๋ฐ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๋ฉ”์‹œ์ง• ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

Transactions : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์—ฌ๋Ÿฌ ์š”์ฒญ์ด ํ•œ ๊บผ๋ฒˆ์— ์ฒ˜๋ฆฌ๊ฐ€ ๋˜์–ด์•ผ ํ•˜๋Š” ํŠธ๋žœ์žญ์…˜(Transaction)์ด ์ •์˜๋˜๊ณ , ๊ตฌํ˜„๋  ์ˆ˜ ์žˆ๋„๋ก ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.


2) Web

  • Websocket : HTTP ํ†ต์‹ ์˜ ๋‹จ์ ์ธ ๋‹จ๋ฐฉํ–ฅ ํ†ต์‹ ์„ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ์›น ์†Œ์ผ“์„ ํ™œ์šฉํ•˜์—ฌ ๋ฐ˜ ์˜๊ตฌ์ ์ธ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • Servlet : MVC ์ฒ˜๋ฆฌ ํŒจํ„ด์—์„œ Controller์— ํ•ด๋‹นํ•˜๋Š” ์š”์ฒญ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ ์ž‘์—…์ด ์ง„ํ–‰๋˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
  • Web : JSP(Java Server Page)์— ์†ํ•˜๋Š” Expression, Directive, Declaration, Expression Language, Java Standard Tag Library ๋“ฑ์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์›น ๋ชจ๋“ˆ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • Portlet : ํฌํ„ธ ํŽ˜์ด์ง€๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์›น ์ปดํฌ๋„ŒํŠธ(Web Component)๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, ๋˜ํ•œ, MVC ์ฒ˜๋ฆฌ ํŒจํ„ด์—์„œ View ์†ํ•˜๋Š” ๊ณณ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜์—ฌ ๋ณด๋‚ด ์งˆ ์ˆ˜ ์žˆ๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

3) Core Container

  • ์ฃผ์š”ํ•œ ๊ฐ์ฒด๋“ค(Bean)์„ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ์•„์ฃผ ์ค‘์š”ํ•œ ๋ชจ๋“ˆ
  • Beans : ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๋Š” ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์†Œํ”„ํŠธ์›จ์–ด ์ปดํฌ๋„ŒํŠธ๋กœ์„œ ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋กœ ๋ถ€ํ„ฐ ์–ป์–ด์ง„ ๊ฐ์ฒด์ด๋ฉฐ, ์ฃผ์ž…(Inject)์˜ ๋Œ€์ƒ์ž…๋‹ˆ๋‹ค. XML์˜ bean ํƒœ๊ทธ๋‚˜ @Configuration ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ์„ค์ •๋˜๋Š” ์ฃผ์ž… ์„ค์ • ํด๋ž˜์Šค์—์„œ @Bean ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.
  • Core : ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๊ทผ๊ฐ„์ด ๋˜๋Š” ์š”์†Œ๋กœ IoC(Invert Of Control) ๋˜๋Š” DI(Dependency Injection)๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๋Š” ์š”์†Œ์ž…๋‹ˆ๋‹ค.
  • Context : ์—ฌ๋Ÿฌ Bean์„ ๊ด€๋ จ์žˆ๋Š” ์š”์†Œ๋กœ ๊ฐ ๊ฐ ๋ถ„๋ฆฌํ•˜์—ฌ ํ•˜๋‚˜์˜ XML ํŒŒ์ผ๋กœ ๊ตฌ์„ฑ๋  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์š”์†Œ์ž…๋‹ˆ๋‹ค.
  • SpEL : Spring Expresion Language์˜ ์•ฝ์ž๋กœ ๋Ÿฐํƒ€์ž„(์‹คํ–‰) ์‹œ ๊ฐ์ฒด ๊ทธ๋ž˜ํ”„ ์ฟผ๋ฆฌ ๋ฐ ์กฐ์ž‘์„ ์ง€์›ํ•˜๋Š” ํ‘œํ˜„ ์–ธ์–ด๋กœ์„œ #{ํ‘œํ˜„์‹} ์ด๋‚˜ ${ํ‘œํ˜„์‹} ์œผ๋กœ๋œ ํŒŒ๋ผ๋ฏธํ„ฐ๋‚˜ ์—ฐ์‚ฐ์‹, ๋น„๊ต์‹ ๋“ฑ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•์Šต๋‹ˆ๋‹ค.

4) Test

  • JUnit ๋ฐ Spring Test ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • JUnit์€ @Test, @Ignore, @Before, @After, @BeforeClass, @AfterClass ๋“ฑ์˜ ์–ด๋…ธํ…Œ์ด์…˜์„ ํ™œ์šฉํ•œ assert ๋ฉ”์„œ๋“œ๋กœ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์„ ๊ตฌ์„ฑ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • Spring Test๋Š” @RunWith, @ContextConfiguration, @Autowired ์–ด๋…ธํ…Œ์ด์…˜์„ ํ™œ์šฉํ•˜์—ฌ ๋ณ„๋„์˜ ์ปจํ…์ŠคํŠธ ์—†์ด๋„ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

5) Spring Object

  • AOP(Aspect-Oriented Programming) : ๊ณตํ†ต์ ์œผ๋กœ ์ ์šฉ์ด ๋˜์–ด์•ผ ํ•˜๋Š” ๋ถ€๋ถ„์ด ์—ฌ๋Ÿฌ ๊ตฐ๋ฐ์— ํฉ์–ด์ ธ ์žˆ์„ ๊ฒฝ์šฐ ์‚ฌ์šฉ์‹œ๊ธฐ(Jointpoint)๊ฐ€ ๋˜์—ˆ์„ ๊ฒฝ์šฐ ๋Œ€๋น„ํ•ด ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์‹œ๊ธฐ(Jointpoint)๋ฅผ ์ •๊ทœ ํ‘œํ˜„์‹์ธ ํฌ์ธํŠธ์ปท(Pointcut)์œผ๋กœ ๋งŒ๋“ค์–ด ๊ฐ ๊ฐ์˜ ๋Œ€์ƒ ํด๋ž˜์Šค์— ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ์—ฐ๊ฒฐํ•˜์—ฌ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋กœ ๋งŒ๋“œ๋Š”๋ฐ ์ด๋ฅผ ์œ„๋น™(Weaving)์ด๋ผ ํ•˜๊ณ , ์œ„๋น™(Weaving) ๋œ ๊ฒƒ์„ ๋™์ž‘๋˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋•Œ ์œ„๋น™(Weaving)๋œ ๋™์ž‘์„ ์–ด๋“œ๋ฐ”์ด์Šค(Advice)๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
  • Aspects : ๋ณดํ†ต AspectJ์— ์˜ํ•œ ๊ด€์ ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์˜๋ฏธํ•˜๋ฉฐ, Spring AOP๋Š” ๊ณตํ†ต์ ์ธ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ„๋‹จํžˆ ๊ตฌํ˜„ํ•˜๊ณ , Spring Container์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๋Š” Bean์—๋งŒ ์ ์šฉํ•˜์ง€๋งŒ, Aspects๋Š” Spring AOP๋ณด๋‹ค ๊ฐ•๋ ฅํ•˜๊ณ , ์™„์ „์ฒด๋ฅผ ๋ณ„๋„๋กœ ๊ตฌ์„ฑํ•˜์—ฌ ์ง„ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์ด ๋ณต์žกํ•ด์ง‘๋‹ˆ๋‹ค.
  • Instrumentation : ๋นˆ์˜ ์ƒ๋ช…์ฃผ๊ธฐ์™€ ์„ค์ • ๊ทธ๋ฆฌ๊ณ  ์ฒ˜๋ฆฌ๋ฐฉ๋ฒ•์„ ๊ด€๋ฆฌํ•˜๋Š” ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์ž…๋‹ˆ๋‹ค.
  • Messaging : ์‹œ์Šคํ…œ์˜ ๊ตฌ์„ฑ ์š”์†Œ ๊ฐ„์— ๋ฉ”์‹œ์ง•์„ ์ง€์›ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ์š”์†Œ์ž…๋‹ˆ๋‹ค.

01-05. Spring Framework ์˜ ๊ฐœ๋ฐœํ™˜๊ฒฝ ์„ค์ •

1) Open JDK ์„ค์น˜

https://www.azul.com/downloads/?package=jdk#zulu

์œ„ ์‚ฌ์ดํŠธ์— ์ ‘์†ํ•˜์—ฌ Open JDK 17 ๋ฒ„์ „์˜ Windows x86 64-bit์šฉ์œผ๋กœ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์€ ํ›„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

OpenJDK 17 ์„ค์น˜

2) ์ธํ…”๋ฆฌ์ œ์ด ์„ค์น˜

https://www.jetbrains.com/ko-kr/idea/download/?section=windows

์œ„ ์‚ฌ์ดํŠธ์— ์ ‘์†ํ•˜์—ฌ ์ธํ…”๋ฆฌ ์ œ์ด๋ฅผ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์•„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

์ธํ…”๋ฆฌ์ œ์ด ์„ค์น˜

3) ์ธํ…”๋ฆฌ์ œ์ด ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

3-1) ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

์ธํ…”๋ฆฌ์ œ์ด ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

3-2) ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ ์„ค์ •

์ธํ…”๋ฆฌ์ œ์ด ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ๋ฐ ์„ค์ •

3-3) ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋กœ๋”ฉ ์„ค์ •

์ธํ…”๋ฆฌ์ œ์ด ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

์ธํ…”๋ฆฌ์ œ์ด ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ ์„ค์ •

3-4) D:\kim\springStudy\study1\pom.xml ๊ธฐ๋ณธ ์„ค์ •

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>kr.co.study</groupId>
  <artifactId>study</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>study Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <properties>
    <java-version>17</java-version>
    <org.springframework-version>5.3.20</org.springframework-version>
    <org.aspectj-version>1.9.0</org.aspectj-version>
    <org.slf4j-version>2.0.0</org.slf4j-version>
  </properties>
  <dependencies>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${org.springframework-version}</version>
      <exclusions>
        <exclusion>
          <groupId>commons-logging</groupId>
          <artifactId>commons-logging</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${org.springframework-version}</version>
    </dependency>

    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjrt</artifactId>
      <version>1.9.0</version>
    </dependency>

     </dependencies>
  <build>
    <finalName>study1</finalName>
    <plugins>
      <plugin>
        <artifactId>maven-eclipse-plugin</artifactId>
        <version>2.9</version>
        <configuration>
          <additionalProjectnatures>
            <projectnature>org.springframework.ide.eclipse.core.springnature</projectnature>
          </additionalProjectnatures>
          <additionalBuildcommands>
            <buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand>
          </additionalBuildcommands>
          <downloadSources>true</downloadSources>
          <downloadJavadocs>true</downloadJavadocs>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.5.1</version>
        <configuration>
          <source>17</source>
          <target>17</target>
          <compilerArgument>-Xlint:all</compilerArgument>
          <showWarnings>true</showWarnings>
          <showDeprecation>true</showDeprecation>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.2.1</version>
        <configuration>
          <mainClass>org.test.int1.Main</mainClass>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

3-5) ํ†ฐ์บฃ ์„œ๋ฒ„ ๋‹ค์šด๋กœ๋“œ

์ธํ…”๋ฆฌ์ œ์ด ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ ์„ค์ •

์ธํ…”๋ฆฌ์ œ์ด ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ ์„ค์ •

์ธํ…”๋ฆฌ์ œ์ด ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ ์„ค์ •

3-5) ํ†ฐ์บฃ ์„œ๋ฒ„ ์„ค์ • ๋ฐ ์‹คํ–‰

์ธํ…”๋ฆฌ์ œ์ด ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ ์„ค์ •

์ธํ…”๋ฆฌ์ œ์ด ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ ์„ค์ •

์ธํ…”๋ฆฌ์ œ์ด ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ ์„ค์ •

์ธํ…”๋ฆฌ์ œ์ด ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ ์„ค์ •

์ธํ…”๋ฆฌ์ œ์ด ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ ์„ค์ •

์ธํ…”๋ฆฌ์ œ์ด ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ ์„ค์ •

์ธํ…”๋ฆฌ์ œ์ด ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ ์„ค์ •

์ธํ…”๋ฆฌ์ œ์ด ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ ์„ค์ •

์ธํ…”๋ฆฌ์ œ์ด ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ ์„ค์ •

์ธํ…”๋ฆฌ์ œ์ด ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ ์„ค์ •

์ธํ…”๋ฆฌ์ œ์ด ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ ์„ค์ •

์ธํ…”๋ฆฌ์ œ์ด ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ ์„ค์ •

์ธํ…”๋ฆฌ์ œ์ด ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ ์„ค์ •



02. Spring Framework ์„ค์ •

02-1. ์˜์กด์„ฑ ์„ค์ •

D:\kim\springStudy\study2\pom.xml ์„ค์ •

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.study2</groupId>
  <artifactId>study2</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>study2 Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <properties>
    <java-version>17</java-version>
    <org.springframework-version>5.3.20</org.springframework-version>
    <org.slf4j-version>2.0.0</org.slf4j-version>
  </properties>
  <dependencies>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${org.springframework-version}</version>
      <exclusions>
        <exclusion>
          <groupId>commons-logging</groupId>
          <artifactId>commons-logging</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${org.springframework-version}</version>
    </dependency>
    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjrt</artifactId>
      <version>1.9.0</version>
    </dependency>

    <!-- slf4j and log4j -->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>${org.slf4j-version}</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>jcl-over-slf4j</artifactId>
      <version>${org.slf4j-version}</version>
      <scope>runtime</scope>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>${org.slf4j-version}</version>
      <scope>runtime</scope>
    </dependency>
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.15</version>
      <exclusions>
        <exclusion>
          <groupId>javax.mail</groupId>
          <artifactId>mail</artifactId>
        </exclusion>
        <exclusion>
          <groupId>javax.jms</groupId>
          <artifactId>jms</artifactId>
        </exclusion>
        <exclusion>
          <groupId>com.sun.jdmk</groupId>
          <artifactId>jmxtools</artifactId>
        </exclusion>
        <exclusion>
          <groupId>com.sun.jmx</groupId>
          <artifactId>jmxri</artifactId>
        </exclusion>
      </exclusions>
      <scope>runtime</scope>
    </dependency>

    <!-- ์˜์กด์„ฑ ์ฃผ์ž… ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ - @Inject -->
    <dependency>
      <groupId>javax.inject</groupId>
      <artifactId>javax.inject</artifactId>
      <version>1</version>
    </dependency>

    <!-- ์„œ๋ธ”๋ฆฟ(servlet-api 2.5, jsp-api 2.1, jstl 1.2) -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.5</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.1</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>

    <!-- ํ…Œ์ŠคํŠธ ๋„๊ตฌ(junit 4.13, spring-test 5.3.20)   -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.13</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>${org.springframework-version}</version>
    </dependency>

    <!-- maven build tool(3.2.1) -->
    <dependency>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-archetype-plugin</artifactId>
      <version>3.2.1</version>
    </dependency>

    <!-- lombok(1.18.22)-->
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.22</version>
    </dependency>

    <!-- DB ๋กœ๊ทธ(log4jdbc-log4j2 1.16) -->
    <dependency>
      <groupId>org.bgee.log4jdbc-log4j2</groupId>
      <artifactId>log4jdbc-log4j2</artifactId>
      <version>1.16</version>
    </dependency>

    <!-- ์Šคํ”„๋ง jdbc(5.3.20)-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>${org.springframework-version}</version>
    </dependency>

    <!-- DBMS Common Library(1.4) -->
    <dependency>
      <groupId>commons-dbcp</groupId>
      <artifactId>commons-dbcp</artifactId>
      <version>1.4</version>
    </dependency>

    <!-- ๋งˆ๋ฆฌ์•„DB ์—ฐ๊ฒฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(3.1.4) -->
    <dependency>
      <groupId>org.mariadb.jdbc</groupId>
      <artifactId>mariadb-java-client</artifactId>
      <version>3.1.4</version>
    </dependency>

    <!-- ์Šคํ”„๋ง ํŠธ๋žœ์žญ์…˜ ๋„๊ตฌ(5.3.20) -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>${org.springframework-version}</version>
    </dependency>

    <!-- mybatis ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ - mybatis 3.4.0 -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.4.0</version>
    </dependency>

    <!-- mybatis-spring 1.3.2 -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>1.3.2</version>
    </dependency>

    <!-- ๊ตฌ๊ธ€ JSON : gson 2.7 -->
    <dependency>
      <groupId>com.google.code.gson</groupId>
      <artifactId>gson</artifactId>
      <version>2.7</version>
    </dependency>

    <!-- ์›น ํฌ๋กค๋ง ๋„๊ตฌ jsoup 1.12.1 -->
    <dependency>
      <groupId>org.jsoup</groupId>
      <artifactId>jsoup</artifactId>
      <version>1.12.1</version>
    </dependency>

    <!-- ๋ฒ”์šฉ json(20200518) -->
    <dependency>
      <groupId>org.json</groupId>
      <artifactId>json</artifactId>
      <version>20200518</version>
    </dependency>

    <!-- ์‹ฌํ”Œ json(0.4) -->
    <dependency>
      <groupId>org.apache.clerezza.ext</groupId>
      <artifactId>org.json.simple</artifactId>
      <version>0.4</version>
    </dependency>

    <!-- jackson library(json to xml) 2.9.4-->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.4</version>
    </dependency>

    <!-- jackson mapper(1.9.13) -->
    <dependency>
      <groupId>org.codehaus.jackson</groupId>
      <artifactId>jackson-mapper-asl</artifactId>
      <version>1.9.13</version>
    </dependency>

    <!-- ์Šคํ”„๋ง ์•”ํ˜ธํ™” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ -->
    <dependency>
      <groupId>org.springframework.security</groupId>
      <artifactId>spring-security-core</artifactId>
      <version>5.4.0</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.security</groupId>
      <artifactId>spring-security-web</artifactId>
      <version>5.4.0</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.security</groupId>
      <artifactId>spring-security-config</artifactId>
      <version>5.4.0</version>
    </dependency>

    <!-- ํŒŒ์ผ ์ฒจ๋ถ€ ๋ฐ ์—…๋กœ๋“œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ commons-fileupload 1.3.2, commons-io 2.4  -->
    <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.3.2</version>
    </dependency>
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.4</version>
    </dependency>

    <!--  ์ด๋ฏธ์ง€ ํŽธ์ง‘ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ imgscalr-lib 4.0 -->
    <dependency>
      <groupId>org.imgscalr</groupId>
      <artifactId>imgscalr-lib</artifactId>
      <version>4.0</version>
    </dependency>

    <!-- ์ž๋ฐ” ์ด๋ฉ”์ผ ๊ธฐ๋ณธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ javax.mail-api 1.4.7 -->
    <dependency>
      <groupId>javax.mail</groupId>
      <artifactId>javax.mail-api</artifactId>
      <version>1.4.7</version>
    </dependency>

    <!-- ์ด๋ฉ”์ผ ๋ฐ ์ž์›์— ๋Œ€ํ•œ ์™ธ๋ถ€ ์†ก์ถœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ spring-context-support ์Šคํ”„๋งmvc ๋ฒ„์ „๊ณผ ๋™์ผ -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context-support</artifactId>
      <version>${org.springframework-version}</version>
    </dependency>

    <!-- java์˜ validation ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ validation-api 2.0.1.Final -->
    <dependency>
      <groupId>javax.validation</groupId>
      <artifactId>validation-api</artifactId>
      <version>2.0.1.Final</version>
    </dependency>

    <!-- ํผ ๊ฒ€์ฆ์„ ์• ๋…ธํ…Œ์ด์…˜์œผ๋กœ ๊ฒ€์ฆํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ hibernate-annotations 3.5.6-Final -->
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-annotations</artifactId>
      <version>3.5.6-Final</version>
    </dependency>

    <!-- hibernate Validator ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ hibernate-validator 6.0.8.Final, jaxb-api 2.3.0 -->
    <dependency>
      <groupId>org.hibernate.validator</groupId>
      <artifactId>hibernate-validator</artifactId>
      <version>6.0.8.Final</version>
    </dependency>
    <dependency>
      <groupId>javax.xml.bind</groupId>
      <artifactId>jaxb-api</artifactId>
      <version>2.3.0</version>
    </dependency>
    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter</artifactId>
      <version>RELEASE</version>
      <scope>compile</scope>
    </dependency>

    <!-- ์• ๋…ธํ…Œ์ด์…˜ ์„ค์ • api ์ถ”๊ฐ€ -->
    <dependency>
      <groupId>javax.annotation</groupId>
      <artifactId>javax.annotation-api</artifactId>
      <version>1.3.2</version>
    </dependency>

    <!-- ์Œ๋ ฅ ๋‹ฌ๋ ฅ -->
    <dependency>
      <groupId>com.ibm.icu</groupId>
      <artifactId>icu4j</artifactId>
      <version>4.0.1</version>
    </dependency>

  </dependencies>
  <build>
    <finalName>study2</finalName>
    <plugins>
      <plugin>
        <artifactId>maven-eclipse-plugin</artifactId>
        <version>2.9</version>
        <configuration>
          <additionalProjectnatures>
            <projectnature>org.springframework.ide.eclipse.core.springnature</projectnature>
          </additionalProjectnatures>
          <additionalBuildcommands>
            <buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand>
          </additionalBuildcommands>
          <downloadSources>true</downloadSources>
          <downloadJavadocs>true</downloadJavadocs>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.5.1</version>
        <configuration>
          <source>17</source>
          <target>17</target>
          <compilerArgument>-Xlint:all</compilerArgument>
          <showWarnings>true</showWarnings>
          <showDeprecation>true</showDeprecation>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.2.1</version>
        <configuration>
          <mainClass>org.test.int1.Main</mainClass>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

02-2. ์›น ์„ค์ •

D:\kim\springStudy\study2\src\main\webapp\WEB-INF\web.xml ์˜ ์„ค์ •

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <display-name>Study2 Web Application</display-name>

  <!-- ๋นˆ ์„ค์ • ํŒŒ์ผ ๋“ฑ๋ก : applicationContext.xml ์ง€์ • -->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/applicationContext.xml</param-value>
  </context-param>

  <!-- ๋ชจ๋“  ์„œ๋ธ”๋ฆฟ๊ณผ ํ•„ํ„ฐ๊ฐ€ ๊ณต์œ ํ•˜๋Š” Context Spring ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ -->
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

  <!-- ๋‚ด๋ถ€ ์›น ๊ด€๋ จ ์ฒ˜๋ฆฌ ์ž‘์—… ์„ค์ • ํŒŒ์ผ ๋“ฑ๋ก : dispatcher-servlet.xml ์ง€์ • -->
  <!-- ์•”ํ˜ธํ™” ์ฒ˜๋ฆฌ ์„ค์ • ํŒŒ์ผ ๋“ฑ๋ก : spring-security.xml ์ง€์ • -->
  <servlet>
    <servlet-name>appServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>
        /WEB-INF/dispatcher-servlet.xml
        /WEB-INF/spring-security.xml
      </param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>appServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

  <!-- ํ•œ๊ธ€ ๊นจ์ง ๋ฐฉ์ง€ -->
  <filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>



02-3. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋นˆ ๋“ฑ๋ก ๋ฐ ์„ค์ •

D:\kim\springStudy\study2\src\main\webapp\WEB-INF\applicationContext.xml

1) applicationContext.xml ์ƒ์„ฑ

  • D:\kim\springStudy\study2\src\main\webapp\WEB-INF ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ ์„ ๋ˆ„๋ฅด๊ณ  ๋‚˜์˜ค๋Š” ๋ฉ”๋‰ด์—์„œ [New]-[File] ์„ ์„ ํƒํ•˜๊ณ , ์ž…๋ ฅ ๋ž€์— applicationContext.xml์„ ์ž…๋ ฅํ•˜๊ณ , Enter๋ฅผ ์นฉ๋‹ˆ๋‹ค.

applicationContext.xml ํŒŒ์ผ ์ถ”๊ฐ€

applicationContext.xml ํŒŒ์ผ ์ถ”๊ฐ€


2) applicationContext.xml ์ž‘์„ฑ

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:jdbc="http://www.springframework.org/schema/jdbc"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.3.xsd
		http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd
		http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">

<!-- applicationContext : ๋นˆ์„ ์„ค์ •ํ•˜๋Š” ํŒŒ์ผ๋กœ ์™ธ๋ถ€ ์ž์›๊ณผ ์—ฐ๋™ํ•˜๋Š” ๋ถ€๋ถ„์„ ์„ค์ • -->

    <!-- ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค์ • -->
    <!-- spring-jdbc-5.3.20.jar ์•ˆ์˜ ๋“œ๋ผ์ด๋ฒ„๋งค๋‹ˆ์ € ์—ฐ๊ฒฐ -->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
        <property name="driverClass" value="org.mariadb.jdbc.Driver"/>
        <property name="url" value="jdbc:mariadb://localhost:3306/haebeop"/>
        <property name="username" value="root"/>
        <property name="password" value="1234"/>
    </bean>

    <!-- sql์„ ๋Œ€์‹ ํ•  my-batis ์„ค์ • : mybatis-spring-1.3.2.jar์˜ ์„ธ์…˜ํŒฉํ† ๋ฆฌ๋นˆํด๋ž˜์Šค ์—ฐ๊ฒฐ -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="configLocation" value="classpath:/mybatis-config.xml"/>
        <property name="mapperLocations" value="classpath*:/mappers/**/*Mapper.xml"/>
    </bean>

    <!-- SqlSession ๊ฐ์ฒด ์ฃผ์ž… -->
    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate" destroy-method="clearCache">
        <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"/>
    </bean>

    <!-- ํŠธ๋žœ์žญ์…˜ ๋ฐ DB ํŒจํ‚ค์ง€ ๋ฐฉ์•ˆ ๋ฐ ๊ฐ ์ข… ๋กœ๊น…๊ณผ ๋ณด์•ˆ ์„ค์ • -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <context:annotation-config/>

    <!-- @Transactional ์–ด๋…ธํ…Œ์ด์…˜ ์ฒ˜๋ฆฌ -->
    <tx:annotation-driven transaction-manager="transactionManager"/>


</beans>

02-4. ๋งตํผ ๋“ฑ๋ก ๋ฐ ์„ค์ •

1) mybatis-config.xml ํŒŒ์ผ ์ƒ์„ฑ

D:\kim\springStudy\study2\src\main\resources ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ ์„ ๋ˆ„๋ฅด๊ณ  ๋‚˜์˜ค๋Š” ๋ฉ”๋‰ด์—์„œ [New]-[File] ์„ ์„ ํƒํ•˜๊ณ , ์ž…๋ ฅ ๋ž€์— mybatis-config.xml์„ ์ž…๋ ฅํ•˜๊ณ , Enter๋ฅผ ์นฉ๋‹ˆ๋‹ค.

mybatis-config.xml ํŒŒ์ผ ์ถ”๊ฐ€

mybatis-config.xml ํŒŒ์ผ ์ƒ์„ฑ


2) mybatis-config.xml ํŒŒ์ผ ์ž‘์„ฑ

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC
        "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <typeAliases>
        <package name="kr.ed.haebeop" />
    </typeAliases>
</configuration>

3) mappers ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ ๋ฐ ํŒŒ์ผ ์ž‘์„ฑ

  • D:\kim\springStudy\study2\src\main\resources ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ ์„ ๋ˆ„๋ฅด๊ณ  ๋‚˜์˜ค๋Š” ๋ฉ”๋‰ด์—์„œ [New]-[Directory] ๋ฅผ ์„ ํƒํ•˜๊ณ , ์ž…๋ ฅ ๋ž€์— mappers์„ ์ž…๋ ฅํ•˜๊ณ , Enter๋ฅผ ์นฉ๋‹ˆ๋‹ค.

mappers ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ

mappers ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ

  • D:\kim\springStudy\study2\src\main\resources\mappers ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ ์„ ๋ˆ„๋ฅด๊ณ  ๋‚˜์˜ค๋Š” ๋ฉ”๋‰ด์—์„œ [New]-[File] ์„ ์„ ํƒํ•˜๊ณ , ์ž…๋ ฅ ๋ž€์— testMapper.xml์„ ์ž…๋ ฅํ•˜๊ณ , Enter๋ฅผ ์นฉ๋‹ˆ๋‹ค.

testMapper.xml ํŒŒ์ผ ์ƒ์„ฑ

testMapper.xml ํŒŒ์ผ ์ƒ์„ฑ

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="test">
    <select id="testSelectList" resultType="kr.ed.haebeop.domain.test">
        select * from test
    </select>
</mapper>



02-5. ์„œ๋ธ”๋ฆฟ ๋“ฑ๋ก ๋ฐ ์„ค์ •

1) ์„œ๋ธ”๋ฆฟ ๋””์ŠคํŒจ์ฒ˜ ์ž‘์„ฑ - dispatcher-servlet.xml ์ž‘์„ฑ

  • D:\kim\springStudy\study2\src\main\webapp\WEB-INF ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ ์„ ๋ˆ„๋ฅด๊ณ  ๋‚˜์˜ค๋Š” ๋ฉ”๋‰ด์—์„œ [New]-[File] ๋ฅผ ์„ ํƒํ•˜๊ณ , ์ž…๋ ฅ ๋ž€์— dispatcher-servlet.xml์„ ์ž…๋ ฅํ•˜๊ณ , Enter๋ฅผ ์นฉ๋‹ˆ๋‹ค.

dispatcher-servlet.xml ํŒŒ์ผ ์ƒ์„ฑ

dispatcher-servlet.xml ํŒŒ์ผ ์ƒ์„ฑ

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns:beans="http://www.springframework.org/schema/beans"
             xmlns:context="http://www.springframework.org/schema/context"
             xsi:schemaLocation="http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd
		http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

    <!-- dispatcher-servlet.xml : ๋‚ด๋ถ€ ์›น ์ ‘๊ทผ ๋ฐ ์ฒ˜๋ฆฌ ์ž‘์—… ์„ค์ • ํŒŒ์ผ -->

    <!--  ์ ‘๊ทผ ์ž์›์— ๋Œ€ํ•œ ๊ถŒํ•œ ์„ค์ • -->
    <resources mapping="/resources/**" location="/resources/" />
    <resources mapping="/data/**" location="/data/" />
    <resources mapping="/admin/**" location="/WEB-INF/views/admin" />
    <resources mapping="/board/**" location="/WEB-INF/views/board" />
    <resources mapping="/check/**" location="/WEB-INF/views/check" />
    <resources mapping="/guestbook/**" location="/WEB-INF/views/guestbook" />
    <resources mapping="/free/**" location="/WEB-INF/views/free" />
    <resources mapping="/include/**" location="/WEB-INF/views/include" />
    <resources mapping="/member/**" location="/WEB-INF/views/member" />
    <resources mapping="/notice/**" location="/WEB-INF/views/notice" />
    <resources mapping="/qna/**" location="/WEB-INF/views/qna" />
    <resources mapping="/reservation/**" location="/WEB-INF/views/reservation" />
    <resources mapping="/util/**" location="/WEB-INF/views/util" />
    <resources mapping="/sample/**" location="/WEB-INF/views/sample" />
    <resources mapping="/sample2/**" location="/WEB-INF/views/sample2" />
    <resources mapping="/test/**" location="/WEB-INF/views/test" />
    <resources mapping="/error/**" location="/WEB-INF/views/error" />

    <!-- ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ๋˜์ง„ URL : /notice/noticeList -->
    <!-- ์‹ค์ œ ์กด์žฌํ•˜๋Š” URL : /WEB-INF/views/notice/noticeList.jsp -->
    <!-- ์•ž(prefix)์˜ /WEB-INF/views, ๋’ค(suffix)์˜ .jsp  -->
    <!-- ๋ฆฌ์กธ๋ฒ„์— ๋Œ€ํ•œ ์ ‘๋‘์‚ฌ์™€ ์ ‘๋ฏธ์‚ฌ ์„ค์ • -->
    <beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <beans:property name="prefix" value="/WEB-INF/views" />
        <beans:property name="suffix" value=".jsp" />
    </beans:bean>

    <!-- ๋ฉ€ํ‹ฐํŒŒํŠธ ๋ฆฌ์กธ๋ฒ„ ์„ค์ • -->
    <beans:bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <beans:property name="defaultEncoding" value="UTF-8"/> <!-- ๊ธฐ๋ณธ ์ธ์ฝ”๋”ฉ -->
        <beans:property name="maxUploadSize" value="52428800"/> <!-- ํŒŒ์ผ ์‚ฌ์ด์ฆˆ : 50MB -->
        <beans:property name="maxInMemorySize" value="1048576"/> <!-- ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์ด์ฆˆ : 1MB -->
    </beans:bean>

    <!-- ๋ฉ€ํ‹ฐํŒŒํŠธ ์—…๋กœ๋“œ ๋””๋ ‰ํ† ๋ฆฌ ์ง€์ • -->
    <beans:bean id="uploadPath" class="java.lang.String">
        <beans:constructor-arg value="D:\kim\springStudy\study2\src\main\webapp\resources\upload" />
    </beans:bean>

    <!-- ๊ธฐ๋ณธ ๋ฉ”์ธ ํŒจํ‚ค์ง€ ๋ฐ ์ปจํŠธ๋กค๋Ÿฌ ํŒจํ‚ค์ง€ ์„ค์ • -->
    <context:component-scan base-package="kr.ed.haebeop.controller" />
    <annotation-driven />


    <!-- ์ธํ„ฐ์…‰ํ„ฐ : ๊ธ€์“ฐ๊ธฐ์™€ ๊ฐ™์€ ํšŒ์›๊ถŒํ•œ์„ ๊ฐ€์ง„ ๊ฒฝ์šฐ๋Š” ๋ฐ˜๋“œ์‹œ ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋ฅผ ๊ฑฐ์ณ์„œ ์‹œ๋„ํ•  ๊ฒƒ  -->
    <!-- <beans:bean id="sampleIntercepter" class="kr.co.teaspoon.util.SampleInterceptor" />
    <beans:bean id="adminIntercepter" class="kr.co.teaspoon.util.AdminInterceptor" />
    <interceptors>
        <interceptor>
            <mapping path="/free/**"/>
            <beans:ref bean="sampleIntercepter" />
        </interceptor>
        <interceptor>
            <mapping path="/admin/**"/>
            <beans:ref bean="adminIntercepter" />
        </interceptor>
    </interceptors> -->
    <!-- free ๋””๋ ‰ํ† ๋ฆฌ์˜ view(.jsp)๋ฅผ ์ ‘๊ทผํ•˜๋ ค๋ฉด SampleInterceptor ํด๋ž˜์Šค์—
    ์ œ์‹œํ•œ ์กฐ๊ฑด์ด ๋งž์œผ๋ฉด ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•จ -->
    <!-- admin ๋””๋ ‰ํ† ๋ฆฌ์˜ view(.jsp)๋ฅผ ์ ‘๊ทผํ•˜๋ ค๋ฉด AdminInterceptor ํด๋ž˜์Šค์—
    ์ œ์‹œํ•œ ์กฐ๊ฑด์ด ๋งž์œผ๋ฉด ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•จ -->
</beans:beans>

2) ์„œ๋ธ”๋ฆฟ ํ”ผ์ŠคํŒจ์ฒ˜์—์„œ ์„ค์ •ํ•œ ์ ‘๊ทผ ์ž์›์— ๋Œ€ํ•œ ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ

  • D:\kim\springStudy\study2\src\main\webapp\WEB-INF ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ ์„ ๋ˆ„๋ฅด๊ณ  ๋‚˜์˜ค๋Š” ๋ฉ”๋‰ด์—์„œ [New]-[Directory] ๋ฅผ ์„ ํƒํ•˜๊ณ , ์ž…๋ ฅ ๋ž€์— views๋ฅผ ์ž…๋ ฅํ•˜๊ณ , Enter๋ฅผ ์นฉ๋‹ˆ๋‹ค.

  • D:\kim\springStudy\study2\src\main\webapp\WEB-INF\views ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ ์„ ๋ˆ„๋ฅด๊ณ  ๋‚˜์˜ค๋Š” ๋ฉ”๋‰ด์—์„œ [New]-[Directory] ๋ฅผ ์„ ํƒํ•˜๊ณ , ์ž…๋ ฅ ๋ž€์— admin๋ฅผ ์ž…๋ ฅํ•˜๊ณ , Enter๋ฅผ ์นฉ๋‹ˆ๋‹ค.

  • ์œ„์™€ ๊ฐ™์ด views ๋””๋ ‰ํ† ๋ฆฌ ์•ˆ์— board, check, guestbook, free, qna, include, member, notice, reservation, util, test, error ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  • D:\kim\springStudy\study2\src\main\webapp ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๊ณ  ๋‚˜์˜ค๋Š” ๋ฉ”๋‰ด์—์„œ [New]-[Directory] ๋ฅผ ์„ ํƒํ•˜๊ณ , ์ž…๋ ฅ ๋ž€์— resource๋ฅผ ์ž…๋ ฅํ•˜๊ณ , Enter๋ฅผ ์นฉ๋‹ˆ๋‹ค.

  • ์œ„์™€ ๊ฐ™์ด webapp ๋””๋ ‰ํ† ๋ฆฌ ์•ˆ์— data ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

dispatcher-servlet.xml ํŒŒ์ผ ์ƒ์„ฑ



02-6. ๋กœ๊ทธ ์ถœ๋ ฅ ๋ฐ ๋ฐฑ์—… ์„ค์ •

1) log4j.xml ์ƒ์„ฑ ๋ฐ ์ž‘์„ฑ

  • D:\kim\springStudy\study2\src\main\resources ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๊ณ  ๋‚˜์˜ค๋Š” ๋ฉ”๋‰ด์—์„œ [New]-[File] ๋ฅผ ์„ ํƒํ•˜๊ณ , ์ž…๋ ฅ ๋ž€์— log4j.xml์„ ์ž…๋ ฅํ•˜๊ณ , Enter๋ฅผ ์นฉ๋‹ˆ๋‹ค.

log4j.xml ์ž‘์„ฑ

log4j.xml ์ž‘์„ฑ

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd">
<log4j:configuration>
    <!-- Appenders -->
    <appender name="console" class="org.apache.log4j.ConsoleAppender">
        <param name="Target" value="System.out" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p: %c - %m%n" />
        </layout>
    </appender>

    <logger name="kr.ed.haebeop.controller">
        <level value="info" />
    </logger>

    <logger name="kr.ed.haebeop.domain">
        <level value="info" />
    </logger>

    <logger name="kr.ed.haebeop.persistence">
        <level value="info" />
    </logger>

    <logger name="kr.ed.haebeop.repository">
        <level value="info" />
    </logger>

    <logger name="kr.ed.haebeop.service">
        <level value="info" />
    </logger>

    <logger name="kr.ed.haebeop.util">
        <level value="info" />
    </logger>

    <logger name="kr.ed.haebeop.test">
        <level value="info" />
    </logger>

    <logger name="kr.ed.haebeop">
        <level value="info" />
    </logger>

    <logger name="org.springframework.core">
        <level value="info" />
    </logger>
    <logger name="org.springframework.beans">
        <level value="info" />
    </logger>
    <logger name="org.springframework.context">
        <level value="info" />
    </logger>
    <logger name="org.springframework.web">
        <level value="info" />
    </logger>

    <root>
        <priority value="warn"/>
        <appender-ref ref="console"/>
    </root>
</log4j:configuration>

2) ๊ด€๋ จ ํŒจํ‚ค์ง€ ์ƒ์„ฑ

  • D:\kim\springStudy\study2\src\main ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๊ณ  ๋‚˜์˜ค๋Š” ๋ฉ”๋‰ด์—์„œ [New]-[Directory] ๋ฅผ ์„ ํƒํ•˜๊ณ , ์ž…๋ ฅ ๋ž€์— java๋ฅผ ์ž…๋ ฅํ•˜๊ณ , Enter๋ฅผ ์นฉ๋‹ˆ๋‹ค.

  • D:\kim\springStudy\study2\src\main\java ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๊ณ  ๋‚˜์˜ค๋Š” ๋ฉ”๋‰ด์—์„œ [New]-[Package] ๋ฅผ ์„ ํƒํ•˜์—ฌ ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด log4j.xml์—์„œ ์ง€์ •ํ•œ ํŒจํ‚ค์ง€๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๊ด€๋ จ ํŒจํ‚ค์ง€ ์ž‘์„ฑ


3) ๋กœ๊ทธ ๋ฐฑ์—… ํŒŒ์ผ ์ž‘์„ฑ - logback.xml ์ž‘์„ฑ

  • D:\kim\springStudy\study2\src\main\resources ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๊ณ  ๋‚˜์˜ค๋Š” ๋ฉ”๋‰ด์—์„œ [New]-[File] ๋ฅผ ์„ ํƒํ•˜๊ณ , ์ž…๋ ฅ ๋ž€์— logback.xml์„ ์ž…๋ ฅํ•˜๊ณ , Enter๋ฅผ ์นฉ๋‹ˆ๋‹ค.

logback.xml ์ž‘์„ฑ

logback.xml ์ž‘์„ฑ

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <logger name="jdbc.sqlonly" level="DEBUG" />
    <logger name="jdbc.sqltiming" level="INFO" />
    <logger name="jdbc.audit" level="WARN" />
    <logger name="jdbc.resultset" level="ERROR" />
    <logger name="jdbc.resultsettable" level="ERROR" />
    <logger name="jdbc.connection" level="INFO" />

    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-4level [%logger.%method:%line]-
                %msg%n</pattern>
        </layout>
    </appender>

    <appender name="LOGFILE"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>/WEB-INF/logback.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>logback.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 30์ผ ์ง€๋‚œ ํŒŒ์ผ์€ ์‚ญ์ œํ•œ๋‹ค. -->
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-4level [%logger.%method:%line]
                - %msg %n</pattern>
        </encoder>
    </appender>

    <!-- ๋กœ๊ทธ์˜ ๋ ˆ๋ฒจ( ์ง€์ •๋œ ๋กœ๊ทธ ๋ ˆ๋ฒจ ์ด์ƒ๋งŒ ์ˆ˜์ง‘ ) : DEBUG < INFO < WARN < ERROR < FATAL -->
    <logger name="myweb" additivity="false">
        <level value="INFO" />
        <appender-ref ref="LOGFILE" />
        <appender-ref ref="CONSOLE" />
    </logger>

    <root>
        <level value="INFO" />
        <appender-ref ref="CONSOLE" />
    </root>
</configuration>

4) ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋กœ๊ทธ ํŒŒ์ผ ์ž‘์„ฑ - log4jdbc.log4j2.properties ์ž‘์„ฑ

  • D:\kim\springStudy\study2\src\main\resources ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๊ณ  ๋‚˜์˜ค๋Š” ๋ฉ”๋‰ด์—์„œ [New]-[File] ๋ฅผ ์„ ํƒํ•˜๊ณ , ์ž…๋ ฅ ๋ž€์— log4jdbc.log4j2.properties๋ฅผ ์ž…๋ ฅํ•˜๊ณ , Enter๋ฅผ ์นฉ๋‹ˆ๋‹ค.

log4jdbc.log4j2.properties ์ž‘์„ฑ

log4jdbc.log4j2.properties ์ž‘์„ฑ

log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator



02-7. ์•”ํ˜ธํ™” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์—ฐ๊ฒฐ - spring-security.xml ํŒŒ์ผ ์ž‘์„ฑ

  • D:\kim\springStudy\study2\src\main\webapp\WEB-INF ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๊ณ  ๋‚˜์˜ค๋Š” ๋ฉ”๋‰ด์—์„œ [New]-[File] ๋ฅผ ์„ ํƒํ•˜๊ณ , ์ž…๋ ฅ ๋ž€์— spring-security.xml์„ ์ž…๋ ฅํ•˜๊ณ , Enter๋ฅผ ์นฉ๋‹ˆ๋‹ค.

spring-security.xml ํŒŒ์ผ ์ž‘์„ฑ

spring-security.xml ํŒŒ์ผ ์ž‘์„ฑ

02-8. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค์ •

  • ๋งˆ๋ฆฌ์•„DB ์˜ GUI ๋„๊ตฌ์ธ HeidiSQL์„ ์‹คํ–‰ํ•˜๊ณ , ์ ‘์†ํ•œ ํ›„ ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ํ…Œ์ŠคํŠธ์šฉ ํ…Œ์ด๋ธ”์„ ์ž‘์„ฑํ•œ ํ›„ ๋”๋ฏธ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
CREATE DATABASE haebeop;

USE haebeop;

CREATE TABLE test(num INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(100) NOT NULL);

INSERT INTO test VALUES (DEFAULT, 'ํ…Œ์ŠคํŠธ์ œ๋ชฉ1');
INSERT INTO test VALUES (DEFAULT, 'ํ…Œ์ŠคํŠธ์ œ๋ชฉ2');
INSERT INTO test VALUES (DEFAULT, 'ํ…Œ์ŠคํŠธ์ œ๋ชฉ3');
INSERT INTO test VALUES (DEFAULT, 'ํ…Œ์ŠคํŠธ์ œ๋ชฉ4');
INSERT INTO test VALUES (DEFAULT, 'ํ…Œ์ŠคํŠธ์ œ๋ชฉ5');

SELECT * from test;



02-9. ๋„๋ฉ”์ธ(dto) ์ƒ์„ฑ

  • D:\kim\springStudy\study2\src\main\java\kr\ed\haebeop\domain ํŒจํ‚ค์ง€ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๊ณ  ๋‚˜์˜ค๋Š” ๋ฉ”๋‰ด์—์„œ [New]-[Java Class] ๋ฅผ ์„ ํƒํ•˜๊ณ , ์ž…๋ ฅ ๋ž€์— Test๋ฅผ ์ž…๋ ฅํ•˜๊ณ , Enter๋ฅผ ์นฉ๋‹ˆ๋‹ค.

Test ํด๋ž˜์Šค ์ž‘์„ฑ

Test ํด๋ž˜์Šค ์ž‘์„ฑ

package kr.ed.heabeop.domain;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Test {
    private int num;
    private String title;
}



03. Spring Framework MVC ํŒจํ„ด ๊ตฌํ˜„๊ณผ DI ๋ฐ IoC ๊ตฌํ˜„

03-1. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ” ๋งŒ๋“ค๊ธฐ

1) ๋งˆ๋ฆฌ์•„DB ๋‹ค์šด๋กœ๋“œ ๋ฐ ์„ค์น˜

https://mariadb.org/download/?t=mariadb&p=mariadb&r=11.0.3&os=windows&cpu=x86_64&pkg=msi&m=blendbyte

๋งˆ๋ฆฌ์•„DB ๋‹ค์šด๋กœ๋“œ

2) HeidiSQL ๋‹ค์šด๋กœ๋“œ ๋ฐ ์„ค์น˜

https://www.heidisql.com/download.php

Test ํด๋ž˜์Šค ์ž‘์„ฑ


03-2. Spring Framework MVC Domain ์ž‘์„ฑ

1) domain ํŒจํ‚ค์ง€ ์ƒ์„ฑ

2) TestVO.java (ํด๋ž˜์Šค) ์ƒ์„ฑ

package kr.ed.haebeop.domain;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class TestVO {
    private int num;
    private String title;
}

03-3. Spring Framework MVC Mapper ์ž‘์„ฑ

1) testMapper.xml์— ์ƒˆ๋กœ์šด ๋ฌธ์žฅ ๋“ฑ๋ก


03-4. Spring Framework MVC Repository ๊ตฌํ˜„

1) repository ํŒจํ‚ค์ง€ ์ƒ์„ฑ

2) TestRepository.java (์ธํ„ฐํŽ˜์ด์Šค) ์ถ”์ƒ์ฒด ์ƒ์„ฑ

package kr.ed.haebeop.repository;

import kr.ed.haebeop.domain.TestVO;

import java.util.List;

public interface TestRepository {
    public List<TestVO> testList() throws Exception;
}

3) TestRepositoryImpl.java (ํด๋ž˜์Šค) ๊ตฌํ˜„์ฒด ์ƒ์„ฑ

package kr.ed.haebeop.repository;
import kr.ed.haebeop.domain.TestVO;
import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public class TestRepositoryImpl implements TestRepository {

    @Autowired
    private SqlSession sqlSession;

    @Override
    public List<TestVO> testList() throws Exception {
        return sqlSession.selectList("test.testList");
    }
}

03-5. Spring Framework MVC Service ๊ตฌํ˜„

1) service ํŒจํ‚ค์ง€ ์ƒ์„ฑ

2) TestService.java (์ธํ„ฐํŽ˜์ด์Šค) ์ถ”์ƒ์ฒด ์ƒ์„ฑ

package kr.ed.haebeop.service;
import kr.ed.haebeop.domain.TestVO;
import java.util.List;

public interface TestService {
    public List<TestVO> testList() throws Exception;
}

3) TestServiceImpl.java (ํด๋ž˜์Šค) ๊ตฌํ˜„์ฒด ์ƒ์„ฑ

package kr.ed.haebeop.service;

import kr.ed.haebeop.domain.TestVO;
import kr.ed.haebeop.repository.TestRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class TestServiceImpl implements TestService {

    @Autowired
    private TestRepository testRepository2;

    @Override
    public List<TestVO> testList() throws Exception {
        return testRepository2.testList();
    }
}

03-6. Spring Framework MVC Bean ์„ค์ • ๋ฐ ์ถ”๊ฐ€

1) ApplicationConfig.java์— TestVO์— ๋Œ€ํ•œ Repository ๋ฐ Service ๋นˆ(Bean) ์ฃผ์ž…

package kr.ed.haebeop.config;

import kr.ed.haebeop.repository.TestRepository;
import kr.ed.haebeop.repository.TestRepositoryImpl;
import kr.ed.haebeop.service.TestService;
import kr.ed.haebeop.service.TestServiceImpl;
import kr.ed.haebeop.test.transaction.TransactionRepository;
import kr.ed.haebeop.test.transaction.TransactionService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;

@Configuration
@ComponentScan(basePackages = "kr.ed.haebeop")
public class ApplicationConfig {
    @Bean
    public TestService testService3(){
        return new TestServiceImpl();
    }

    @Bean
    public TestRepository testRepository3(){
        return new TestRepositoryImpl();
    }

    @Bean
    public TransactionRepository tranRepository() { return new TransactionRepository(); }

    @Bean
    public TransactionService tranService() { return new TransactionService(); }
}

03-7. Spring Framework MVC View(jsp) ๊ตฌํ˜„

1) testLisp.jsp ์ž‘์„ฑ

<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"  %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="fn" uri = "http://java.sun.com/jsp/jstl/functions"%>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Title</title>
</head>
<body>
<c:forEach var="test" items="${testList}">
    <p>${test.num}</p>
    <p>${test.title}</p>
    <hr>
</c:forEach>
</body>
</html>

03-8. applicationContext.xml์— Bean์„ ๋“ฑ๋กํ•˜๊ณ , ์ฃผ์ž… ๋ฐ ๊ตฌํ˜„ํ•˜๊ธฐ

  ... ์ค‘๋žต ...
    <!-- ํŠธ๋žœ์žญ์…˜ ๋ฐ DB ํŒจํ‚ค์ง€ ๋ฐฉ์•ˆ ๋ฐ ๊ฐ ์ข… ๋กœ๊น…๊ณผ ๋ณด์•ˆ ์„ค์ • -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <context:annotation-config/>
    <bean id="testService" class="kr.ed.haebeop.service.TestServiceImpl" />
    <bean id="testRepository" class="kr.ed.haebeop.repository.TestRepositoryImpl" />

    <!-- @Transactional ์–ด๋…ธํ…Œ์ด์…˜ ์ฒ˜๋ฆฌ -->
    <tx:annotation-driven transaction-manager="transactionManager"/>
... ์ค‘๋žต ...    

03-9. ๋ณ„๋„์˜ GenericXmlApplicationContext.xml์— Bean์„ ๋“ฑ๋กํ•˜๊ณ , ์ฃผ์ž… ๋ฐ ๊ตฌํ˜„ํ•˜๊ธฐ

03-10. @Configuration ์–ด๋…ธํ…Œ์ด์…˜์„ ํ™œ์šฉํ•œ ์ž๋ฐ” Confirurer๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ฃผ์ž… ๋ฐ ๊ตฌํ˜„ํ•˜๊ธฐ

03-11. ์ฃผ์ž…๊ณผ ๊ด€๋ จํ•œ ์–ด๋…ธํ…Œ์ด์…˜




04. Spring Framework ์˜ AOP(๊ด€์ ์ง€ํ–ฅํ˜•) ๊ตฌํ˜„

04-1. Spring Framework ์—์„œ์˜ ๊ด€์ ์ง€ํ–ฅํ˜•์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ์ž๋ฐ” ๋””์ž์ธ ํŒจํ„ด

04-2. Spring Framework AOP๋ฅผ ํ™œ์šฉํ•œ ๊ด€์ ์ง€ํ–ฅํ˜• ๊ตฌํ˜„

04-3. ํŠธ๋žœ์žญ์…˜ ๊ณ ๋ฆฝ์„ฑ ๋ ˆ๋ฒจ์˜ Sql ์‹ค์Šต

04-4. Service ๋ฐ Repository์—์„œ ํŠธ๋žœ์žญ์…˜์˜ ๊ตฌํ˜„ ์‹ค์Šต




05. json๊ณผ Api

05-1. ๋ฐ์ดํ„ฐ ์ฃผ๊ณ  ๋ฐ›๋Š” ์—ฌ๋Ÿฌ ์–ด๋…ธํ…Œ์ด์…˜

05-2. ํผ ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ

05-3. json ๊ตฌํ˜„

05-4. ajax ๊ตฌํ˜„

05-5. api ๊ตฌํ˜„




06. Spring Security ์•”ํ˜ธํ™”

07. ์ธํ„ฐ์…‰ํ„ฐ์™€ ๋กœ๊ทธ์ธ ์ฒ˜๋ฆฌ

08. Multipart์™€ FileUpload ๊ธฐ๋Šฅ ๊ตฌํ˜„

09. ์—ฌ๋Ÿฌ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ ๊ตฌํ˜„

About

๐ŸŒˆ์ฒœ์žฌ๊ต์œก ํ’€์Šคํƒ JAVA ๊ณผ์ • 2๊ธฐ Spring Framework ๐ŸŒˆ

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages