[Spring] SPRINGFRAMEWORK OUTLINE & SETTING

์„ฑ์žฅ์ผ๊ธฐยท2024๋…„ 8์›” 12์ผ

[SWCAMP] SPRING

๋ชฉ๋ก ๋ณด๊ธฐ
1/6

๐Ÿ’ก ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์ž๋ฐ” ํ”Œ๋žซํผ์„ ์œ„ํ•œ ์˜คํ”ˆ ์†Œ์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ์„œ ๊ฐ„๋‹จํžˆ ์Šคํ”„๋ง์ด๋ผ๊ณ ๋„ ํ•œ๋‹ค.
๋™์ ์ธ ์›น ์‚ฌ์ดํŠธ๋ฅผ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•œ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค.
๋˜ํ•œ ๋Œ€ํ•œ๋ฏผ๊ตญ ๊ณต๊ณต๊ธฐ๊ด€์˜ ์›น ์„œ๋น„์Šค ๊ฐœ๋ฐœ ์‹œ ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•˜๊ณ  ์žˆ๋Š” ์ „์ž์ •๋ถ€ ํ‘œ์ค€ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ๋กœ์„œ ์“ฐ์ด๊ณ  ์žˆ๋‹ค.

Spring ๊ณต์‹ ์‚ฌ์ดํŠธ

SpringFramework์˜ ํŠน์ง•

  • ์˜คํ”ˆ ์†Œ์Šค์ด๋‹ค.
    • Home
    • ๋‹ค์–‘ํ•œ ์‹ค์ œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ง€์†์ ์ธ ํ”ผ๋“œ๋ฐฑ์„ ์ œ๊ณตํ•˜๋Š” ํฌ๊ณ  ํ™œ๋™์ ์ธ ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ์žˆ์–ด ์˜ค๋žœ ์‹œ๊ฐ„์— ๊ฑธ์ณ ์„ฑ๊ณต์ ์œผ๋กœ ์ง„ํ™”ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜์—ˆ๋‹ค.
  • Java ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์š”๊ตฌ ์‚ฌํ•ญ์— ๋”ฐ๋ผ ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜์˜ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์—ฐ์„ฑ๊ณผ ํ•จ๊ป˜ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํ™˜๊ฒฝ์—์„œ Java ์–ธ์–ด๋ฅผ ์ˆ˜์šฉํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ์„ ์ œ๊ณตํ•œ๋‹ค.
  • ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๊ธฐ๋ณธ ์›์น™์— ์ถฉ์‹คํ•˜๋‹ค.
    • ๊ฐ•๋ ฅํ•œ ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•œ๋‹ค.
    • ์œ ์—ฐ์„ฑ์„ ์ˆ˜์šฉํ•˜๋ฉฐ ์ž‘์—… ์ˆ˜ํ–‰ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๋…์„ ์ ์ด์ง€ ์•Š๋‹ค. ๋‹ค์–‘ํ•œ ๊ด€์ ์—์„œ ๋‹ค์–‘ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ง€์›ํ•œ๋‹ค.
    • ๋ชจ๋“  ์ˆ˜์ค€์—์„œ ์„ ํƒ๊ถŒ์„ ์ œ๊ณตํ•œ๋‹ค. Spring์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ€๋Šฅํ•œ ํ•œ ๋Šฆ๊ฒŒ ๋””์ž์ธ ๊ฒฐ์ •์„ ์—ฐ๊ธฐํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ๊ตฌ์„ฑ์„ ํ†ตํ•ด ์ง€์†์„ฑ ๊ณต๊ธ‰์ž๋ฅผ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์˜๋ฏธ ์žˆ๊ณ  ์ตœ์‹ ์ด๋ฉฐ ์ •ํ™•ํ•œ javadoc์„ ๊ฐ•์กฐํ•œ๋‹ค. ํŒจํ‚ค์ง€ ๊ฐ„์˜ ์ˆœํ™˜ ์ข…์†์„ฑ์ด ์—†๋Š” ๊นจ๋—ํ•œ ์ฝ”๋“œ ๊ตฌ์กฐ๋ฅผ ์ฃผ์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ทน์†Œ์ˆ˜์˜ ํ”„๋กœ์ ํŠธ ์ค‘ ํ•˜๋‚˜์ด๋‹ค.

SpringFramework ๊ตฌ์„ฑ ๋ชจ๋“ˆ

https://docs.spring.io/spring-framework/docs/5.0.0.M5/spring-framework-reference/html/overview.html#overview-modules

Spring Core Container

๐Ÿ’ก Spring Core Container ๋Š” ์Šคํ”„๋ง์—์„œ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ด๋ฉฐ ์ค‘์š”ํ•œ ๋ชจ๋“ˆ ์ค‘ ํ•˜๋‚˜์ด๋‹ค. ์ด ๋ชจ๋“ˆ์€ ์Šคํ”„๋ง์—์„œ ๊ฐ์ฒด์˜ ์ƒ์„ฑ๊ณผ ๊ด€๋ฆฌ๋ฅผ ๋‹ด๋‹นํ•œ๋‹ค. ์Šคํ”„๋ง์˜ DI(Dependency Injection)๊ณผ IoC(Inversion of Control) ๊ฐœ๋…์ด ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค. ์ด๋ฅผ ์ด์šฉํ•˜์—ฌ ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.

AOP(Aspect Oriented Programming) / Aspects / Instrumentation / Messaging

AOP(Aspect Oriented Programming)

๐Ÿ’ก AOP๋Š” ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ์˜ ์ฝ”๋“œ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋ฒ•์ด๋‹ค. ๊ธฐ์กด์˜ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค. ์Šคํ”„๋ง์—์„œ๋Š” AOP๋ฅผ ์ด์šฉํ•ด ๋กœ๊น…, ํŠธ๋žœ์žญ์…˜, ๋ณด์•ˆ ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

Aspects

  • ๋ณ„๋„์˜ spring-aspects ๋ชจ๋“ˆ์€ AspectJ์™€์˜ ํ†ตํ•ฉ์„ ์ œ๊ณตํ•œ๋‹ค.

Instrumentation

  • Instrumentation์€ ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์˜ ๋™์ž‘์„ ๊ด€์ฐฐํ•˜๊ณ  ์กฐ์ž‘ํ•˜๋Š” ๊ธฐ์ˆ ์ด๋‹ค. ์Šคํ”„๋ง์—์„œ๋Š” Instrumentation์„ ์ด์šฉํ•ด ํด๋ž˜์Šค ๋กœ๋”ฉ, ๋ฉ”์†Œ๋“œ ์‹คํ–‰ ๋“ฑ์˜ ์ž‘์—…์„ ์ถ”์ ํ•˜๊ณ  ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.

Messaging

  • Apache Kafka ๋ฐ RabbitMQ์™€ ๊ฐ™์€ ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค์˜ ํ†ตํ•ฉ์„ ํ†ตํ•ด ๋ฉ”์‹œ์ง• ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ง€์›ํ•œ๋‹ค. ๋ฉ”์‹œ์ง€ ์ฑ„๋„, ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ๊ธฐ ๋ฐ ๋ฉ”์‹œ์ง• ๊ธฐ๋ฐ˜ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์‹œ์ง€ ๋์ ์— ๋Œ€ํ•œ ์ถ”์ƒํ™”๊ฐ€ ํฌํ•จ๋œ๋‹ค. ๋˜ํ•œ ์ด ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ”์‹œ์ง€ ์ฑ„๋„์—์„œ ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์‹ ํ•˜๊ณ  ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์‹œ์ง€ ๊ตฌ๋™ POJO(Plain Old Java Objects)๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

Data Access / Integration

JDBC(JAVA DataBase Connectivity)

๐Ÿ’ก JDBC๋Š” Java์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” API์ด๋‹ค. JDBC๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์„œ๋“œ์™€ ํด๋ž˜์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

ORM(Object Relation Mapping)

๐Ÿ’ก ORM์€ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ์ถ”์ƒํ™”ํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ์ˆ ์ด๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๋Š” ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ๋‹ค๋ฃจ๋ฉด์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค. ORM ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๊ฐ์ฒด์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ„์˜ ๋งคํ•‘์„ ๋‹ด๋‹นํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฟผ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ๋“ฑ์˜ ์ž‘์—…์„ ๋Œ€์‹  ์ˆ˜ํ–‰ํ•œ๋‹ค.

Transaction Management

๐Ÿ’ก ํŠธ๋žœ์žญ์…˜์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ์ž‘์—…์˜ ๋‹จ์œ„์ด๋‹ค. ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ฟผ๋ฆฌ๊ฐ€ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ๋ฌถ์ด๋ฉด, ๋ชจ๋“  ์ฟผ๋ฆฌ๊ฐ€ ์„ฑ๊ณตํ•˜๋ฉด ๋ณ€๊ฒฝ ๋‚ด์šฉ์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฐ˜์˜๋˜๊ณ , ํ•˜๋‚˜๋ผ๋„ ์‹คํŒจํ•˜๋ฉด ๋ณ€๊ฒฝ ๋‚ด์šฉ์ด ์ทจ์†Œ๋œ๋‹ค. ์ด๋Ÿฐ ํŠธ๋žœ์žญ์…˜์„ ๋ณด๋‹ค ์‰ฝ๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์Šคํ”„๋ง์—์„œ๋Š” ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. ์ด๋ฅผ ์ด์šฉํ•˜๋ฉด ์„ ์–ธ์  ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ, ํ”„๋กœ๊ทธ๋žจ์  ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ ๋“ฑ์„ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํŠธ๋žœ์žญ์…˜ ์†์„ฑ์„ XML์ด๋‚˜ ์–ด๋…ธํ…Œ์ด์…˜์„ ์ด์šฉํ•ด ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

OXM(Object XML Mapping)

  • OXM(Object XML Mapping)์€ ์ž๋ฐ” ๊ฐ์ฒด์™€ XML ๋ฌธ์„œ ๊ฐ„์˜ ๋งคํ•‘์„ ์ง€์›ํ•˜๋Š” ๋ชจ๋“ˆ์ด๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” XML ๋ฌธ์„œ๋ฅผ ์ง์ ‘ ์ž‘์„ฑํ•  ํ•„์š” ์—†์ด, ์ž๋ฐ” ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•˜๊ฒŒ XML ๋ฌธ์„œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค.

Java Messaging Service(JMS)

  • Java Messaging Service(JMS)๋Š” ์ž๋ฐ”์—์„œ ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” API์ด๋‹ค. ์ด API๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์—์„œ ๋ฉ”์‹œ์ง€๋ฅผ ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค. JMS๋Š” ๋ฉ”์‹œ์ง€ ์ „์†ก๊ณผ ์ˆ˜์‹ ์„ ์œ„ํ•œ ์ŠคํŽ™๊ณผ ๋ฉ”์‹œ์ง€์˜ ์†์„ฑ์„ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•œ API๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๋Š” ์ชฝ์—์„œ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋ชฉ์ ์ง€๋ฅผ ์ง€์ •ํ•œ ๋‹ค์Œ, JMS Provider๋ฅผ ํ†ตํ•ด ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ธ๋‹ค. ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›๋Š” ์ชฝ์—์„œ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์‹ ํ•˜๊ณ  ์ฒ˜๋ฆฌํ•œ๋‹ค. JMS๋Š” ๋Œ€๋ถ€๋ถ„์˜ ๋ฉ”์‹œ์ง€ ์ง€ํ–ฅ ๋ฏธ๋“ค์›จ์–ด(MOM)์—์„œ ์‚ฌ์šฉ๋œ๋‹ค.

Web

Servlet

๐Ÿ’ก Servlet์€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์—์„œ ์‹คํ–‰๋˜๋Š” ์ž๋ฐ” ํด๋ž˜์Šค์ด๋‹ค. ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ , ์‘๋‹ต์„ ์ƒ์„ฑํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. Servlet์€ JSP(JavaServer Pages)์™€ ํ•จ๊ป˜ Java EE(Java Platform, Enterprise Edition)์˜ Web API๋ฅผ ๊ตฌ์„ฑํ•œ๋‹ค. ์Šคํ”„๋ง์—์„œ๋Š” Servlet API๋ฅผ ์ด์šฉํ•˜์—ฌ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋‹ค.

Web

๐Ÿ’ก Spring Web MVC๋Š” ์Šคํ”„๋ง์—์„œ ์ œ๊ณตํ•˜๋Š” ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ MVC ํŒจํ„ด ๊ตฌํ˜„ ๋ชจ๋“ˆ์ด๋‹ค. ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ๋•Œ, ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ์ฒ˜๋ฆฌํ•˜๋ฉฐ ํŽ˜์ด์ง€ ์ด๋™์„ ๊ด€๋ฆฌํ•˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ, ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ํ™”๋ฉด์— ์ถœ๋ ฅํ•˜๋Š” ๋ทฐ, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ชจ๋ธ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋‹ค. ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ๋ฅผ MVC ํŒจํ„ด์ด๋ผ๊ณ  ํ•œ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์›น ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์ œ๊ณตํ•˜๋Š” MVC ํŒจํ„ด์˜ ๊ตฌํ˜„์ฒด์ด๋ฉฐ, ์Šคํ”„๋ง์—์„œ๋„ ์ด๋ฅผ ์ง€์›ํ•œ๋‹ค. Spring Web MVC๋Š” ์ด๋Ÿฌํ•œ ์ปจํŠธ๋กค๋Ÿฌ, ๋ทฐ, ๋ชจ๋ธ์„ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ฃผ๋ฉฐ, ํŠนํžˆ ์œ ์—ฐํ•œ URL ๋งคํ•‘ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์—ฌ URL๊ณผ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋งคํ•‘์‹œํ‚ค๋Š” ์ž‘์—…์„ ์‰ฝ๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • Spring WebFlux๋Š” ์Šคํ”„๋ง 5์—์„œ ์ถ”๊ฐ€๋œ ๋ชจ๋“ˆ๋กœ, ๋น„๋™๊ธฐ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์„ ์œ„ํ•ด Reactive Streams๋ฅผ ์ง€์›ํ•˜๋Š” ๋ชจ๋“ˆ์ด๋‹ค. ๊ธฐ์กด์˜ Spring Web MVC์™€๋Š” ๋‹ฌ๋ฆฌ, Servlet API์— ์˜์กดํ•˜์ง€ ์•Š๊ณ , Netty, Undertow, Servlet 3.1+ ์ปจํ…Œ์ด๋„ˆ์™€ ๊ฐ™์€ ๋„ค์ดํ‹ฐ๋ธŒ ๋ฆฌ์•กํ‹ฐ๋ธŒ ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋‹ค. Spring WebFlux๋Š” Reactor๋ฅผ ์ด์šฉํ•˜์—ฌ ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ง€์›ํ•˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ๋†’์€ ์ฒ˜๋ฆฌ๋Ÿ‰๊ณผ ํ™•์žฅ์„ฑ์„ ์ œ๊ณตํ•œ๋‹ค.

WebSocket

  • WebSocket์€ HTTP์™€ ๋‹ฌ๋ฆฌ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์„ ์ง€์›ํ•˜๋Š” ํ”„๋กœํ† ์ฝœ์ด๋‹ค. ์ด๋ฅผ ์ด์šฉํ•˜๋ฉด ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๊ฐ„์˜ ์‹ค์‹œ๊ฐ„ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์Šคํ”„๋ง์—์„œ๋Š” ์›น ์†Œ์ผ“์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด Spring Websocket ๋ชจ๋“ˆ์„ ์ œ๊ณตํ•œ๋‹ค. Spring Websocket ๋ชจ๋“ˆ์€ STOMP(Subscribable-Text-Oriented Messaging Protocol) ํ”„๋กœํ† ์ฝœ์„ ์ด์šฉํ•˜์—ฌ WebSocket์„ ๊ตฌํ˜„ํ•œ๋‹ค. STOMP๋Š” WebSocket์„ ์ด์šฉํ•˜์—ฌ ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”์‹œ์ง€ ํ”„๋กœํ† ์ฝœ์ด๋‹ค. Spring Websocket ๋ชจ๋“ˆ์€ ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค์™€ ์—ฐ๋™ํ•˜์—ฌ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ธŒ๋กœ์ปค๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ์ด์šฉํ•˜๋ฉด ๋‹ค์ˆ˜์˜ ์‚ฌ์šฉ์ž ๊ฐ„์˜ ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ…, ๊ฒŒ์ž„ ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

Portlet

  • Portlet์€ ์›น ํŽ˜์ด์ง€๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋ชจ๋“ˆ์ด๋ฉฐ, ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์— ๋”ฐ๋ผ ๋™์ ์œผ๋กœ ๋กœ๋“œ๋œ๋‹ค. Portlet์€ ์ผ๋ฐ˜์ ์ธ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๋‹ฌ๋ฆฌ, ํŠน์ • Portlet ์ปจํ…Œ์ด๋„ˆ์—์„œ ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋ฉฐ, Portlet ์ปจํ…Œ์ด๋„ˆ๋Š” ์›น ์„œ๋ฒ„์—์„œ ๋ถ„๋ฆฌ๋˜์–ด ์‹คํ–‰๋œ๋‹ค. Spring Portlet MVC๋Š” Spring MVC์™€ ๋น„์Šทํ•œ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๋ฉฐ, Portlet ์ปจํ…Œ์ด๋„ˆ์—์„œ ์‹คํ–‰๋˜๋Š” Portlet ์ปจํŠธ๋กค๋Ÿฌ, ๋ทฐ, ๋ชจ๋ธ์„ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋‹ค.

Test

  • spring-test ๋ชจ๋“ˆ์€ JUnit ๋˜๋Š” TestNG๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Spring ๊ตฌ์„ฑ ์š”์†Œ์˜ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ๋ฐ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๋ฅผ ์ง€์›ํ•œ๋‹ค.
    • Spring ApplicationContexts์˜ ์ผ๊ด€๋œ ๋กœ๋”ฉ๊ณผ ํ•ด๋‹น ์ปจํ…์ŠคํŠธ์˜ ์บ์‹ฑ์„ ์ œ๊ณตํ•œ๋‹ค.
    • ์ฝ”๋“œ๋ฅผ ๋ณ„๋„๋กœ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ์˜ ๊ฐœ์ฒด๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

Languages

Groovy ์ง€์›

  • Groovy๋Š” JVM์—์„œ ์‹คํ–‰๋˜๋Š” ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด์ด๋‹ค. Java์™€ ์™„๋ฒฝํ•˜๊ฒŒ ํ˜ธํ™˜๋˜๋ฉฐ, Java์™€ ๊ฐ™์€ ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด์„œ๋„ ๋ณด๋‹ค ๊ฐ„๊ฒฐํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. Groovy๋Š” Gradle ๋“ฑ์˜ ๋นŒ๋“œ ํˆด์—์„œ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜์–ด, Java ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋œ๋‹ค.

Kotlin ์ง€์›

  • Kotlin์€ JVM์—์„œ ์‹คํ–‰๋˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ, ์ž๋ฐ”์™€ ์™„๋ฒฝํ•˜๊ฒŒ ์ƒํ˜ธ์šด์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์ž๋ฐ”๋ณด๋‹ค ๊ฐ„๊ฒฐํ•œ ๋ฌธ๋ฒ•๊ณผ ๋žŒ๋‹ค ํ‘œํ˜„์‹, ๋„ ์•ˆ์ „์„ฑ ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์—ฌ ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค. ์Šคํ”„๋ง์—์„œ๋Š” Kotlin์„ ๊ณต์‹์ ์œผ๋กœ ์ง€์›ํ•˜๋ฉฐ, ์Šคํ”„๋ง ๋ถ€ํŠธ์—์„œ๋„ Kotlin์„ ์ด์šฉํ•œ ๊ฐœ๋ฐœ์„ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.

SpringFramework ๋ฒ„์ „

SpringFramwork์˜ ๋“ฑ์žฅ ๋ฐฐ๊ฒฝ

J2EE(Java 2 Platform, Enterprise Edition)์€ 1999๋…„์— ๋ฐœํ‘œ๋œ ์ž๋ฐ” ๊ธฐ๋ฐ˜์˜ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ํ‘œ์ค€์ด๋‹ค. J2EE๋Š” ๋‹ค์–‘ํ•œ ๊ธฐ์ˆ ๊ณผ API๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์ด๋“ค์„ ์กฐํ•ฉํ•˜์—ฌ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜, ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜, ๋ถ„์‚ฐ ์ปดํ“จํŒ… ๋“ฑ์„ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋‹ค. J2EE๋Š” ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋ฉฐ, EJB(Enterprise JavaBeans)์™€ ๊ฐ™์€ ๊ธฐ์ˆ ์„ ์ด์šฉํ•˜์—ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ J2EE๋Š” ๋งค์šฐ ๋ณต์žกํ•˜๊ณ , ์„œ๋ฒ„ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” ๋†’์€ ์„ฑ๋Šฅ์„ ๋ฐœํœ˜ํ•˜์ง€ ๋ชปํ•˜๋Š” ๋ฌธ์ œ์ ์ด ์žˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ๋Œ€์•ˆ์œผ๋กœ ๋“ฑ์žฅํ•œ ๊ฒƒ์ด Spring์œผ๋กœ, Spring์€ J2EE์˜ ๋ณต์žก์„ฑ์„ ์ค„์ด๊ณ  ๋ณด๋‹ค ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•œ๋‹ค.

SpringFramwork ๋ฒ„์ „

SpringFramework ๋ฒ„์ „์ถœ์‹œ์ผํŠน์ง•
1.02004๋…„๊ฒฝ๋Ÿ‰ ์ปจํ…Œ์ด๋„ˆ, AOP, JDBC ์ถ”์ƒํ™”, ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ ๋“ฑ์˜ ๊ธฐ๋Šฅ ์ œ๊ณต
2.02006๋…„AspectJ ํ†ตํ•ฉ, XML ๋„ค์ž„์ŠคํŽ˜์ด์Šค, ์ž๋ฐ” 5 ์ง€์› ๋“ฑ์˜ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
2.52007๋…„์–ด๋…ธํ…Œ์ด์…˜ ๊ธฐ๋ฐ˜์˜ ๊ตฌ์„ฑ์š”์†Œ ์Šค์บ”, OXM(Object-XML Mapping) ๋ชจ๋“ˆ, JPA(Java Persistence API) ์ง€์› ๋“ฑ์˜ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
3.02009๋…„Java SE 5 ์ด์ƒ ์ง€์›, RESTful ์›น ์„œ๋น„์Šค ์ง€์›, ์ž๋ฐ” ๊ตฌ์„ฑ ์–ด๋…ธํ…Œ์ด์…˜ ๋“ฑ์˜ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
3.12011๋…„์ž๋ฐ” 7 ์ง€์›, ์บ์‹œ ์ถ”์ƒํ™”, ์Šคํ”„๋ง MVC ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ ๋“ฑ์˜ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
3.22012๋…„Java SE 6 ์ด์ƒ ์ง€์›, ์ž๋ฐ” ๊ธฐ๋ฐ˜์˜ ์„ค์ • ํด๋ž˜์Šค ์ง€์›, ํ…Œ์ŠคํŠธ ์ปจํ…์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ ๋“ฑ์˜ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
4.02013๋…„์ž๋ฐ” 8 ์ง€์›, WebSocket, JMS 2.0, HTML5 ์ง€์› ๋“ฑ์˜ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
4.12014๋…„์ž๋ฐ” 8์˜ ๋žŒ๋‹ค ํ‘œํ˜„์‹ ์ง€์›, ์บ์‹œ ์ถ”์ƒํ™” ๊ฐœ์„ , Groovy ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ์„ ์œ„ํ•œ ์Šคํฌ๋ฆฝํŠธ ๋นˆ ๋“ฑ์˜ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
4.22015๋…„์ž๋ฐ” 8์˜ Date-Time API ์ง€์›, HTTP Streaming, WebSocket ๊ฐœ์„  ๋“ฑ์˜ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
4.32016๋…„์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…์ŠคํŠธ ๊ฐœ์„ , ์บ์‹œ ์ถ”์ƒํ™” ๊ฐœ์„ , ๋žŒ๋‹ค ์ง€์› ๊ฐœ์„  ๋“ฑ์˜ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
5.02017๋…„์ž๋ฐ” 8 ์ด์ƒ ์ง€์›, ๋ฆฌ์•กํ‹ฐ๋ธŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ง€์›, Kotlin ์ง€์› ๋“ฑ์˜ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
5.12018๋…„๋ฆฌ์•กํ‹ฐ๋ธŒ ์›น ํด๋ผ์ด์–ธํŠธ, Kotlin ์ฝ”๋ฃจํ‹ด ์ง€์›, Spring MVC ๊ฐœ์„  ๋“ฑ์˜ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
5.22019๋…„๋ฆฌ์•กํ‹ฐ๋ธŒ ํ…Œ์ŠคํŠธ ์ง€์›, ๋กœ๊น… ์‹œ์Šคํ…œ ๊ฐœ์„ , OAuth 2.0 ํด๋ผ์ด์–ธํŠธ ๋“ฑ์˜ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
6.02022๋…„์ž๋ฐ” 17 ์ด์ƒ ์ง€์›, XML ์„ค์ • ์ง€์–‘

์ˆ˜์—… ํ™˜๊ฒฝ ์„ค์ •

Project ์ƒ์„ฑ

Intelli J์—์„œ New Project ์‹คํ–‰

  • Name : ํ”„๋กœ์ ํŠธ๋ช…
  • Location : ์ €์žฅ ๊ฒฝ๋กœ
  • Create Git repository ์ฒดํฌํ•˜๋ฉด ์ž๋™์œผ๋กœ Git Local ์ €์žฅ์†Œ๊ฐ€ ์ƒ์„ฑ ๋œ๋‹ค.
  • Language : Java
  • Build system : Gradle
  • JDK : 11
  • Gradle DSL : Kotlin
  • GroupId : com.ohgiraffers
  • ArtifactId : ํ”„๋กœ์ ํŠธ

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์˜์กด์„ฑ ์ถ”๊ฐ€

Build System

Build System์€ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ํŒจํ‚ค์ง•ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋„๊ตฌ์ด๋‹ค. ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์˜ ์ƒ์‚ฐ์„ฑ๊ณผ ํšจ์œจ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์ž๋™ํ™” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์†Œ์Šค ์ฝ”๋“œ์™€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์˜์กด์„ฑ์„ ์ฒ˜๋ฆฌํ•˜๊ณ , ์ปดํŒŒ์ผ๋Ÿฌ์™€ ๋ง์ปค๋ฅผ ํ˜ธ์ถœํ•˜๋ฉฐ, ํ…Œ์ŠคํŠธ ๋ฐ ๋ฐฐํฌ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค. ๋Œ€ํ‘œ์ ์ธ Build System์œผ๋กœ๋Š” Maven, Gradle ๋“ฑ์ด ์žˆ๋‹ค.

Maven, Gradle

Maven : Java์šฉ Build System์œผ๋กœ, XML ๊ธฐ๋ฐ˜์œผ๋กœ ๋นŒ๋“œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. Maven์€ ์˜์กด์„ฑ ๊ด€๋ฆฌ์™€ ๋นŒ๋“œ ๊ณผ์ •์˜ ํ‘œ์ค€ํ™”๊ฐ€ ์ž˜ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ๋˜ํ•œ, ์ค‘์•™ ์ €์žฅ์†Œ์—์„œ ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ž๋™์œผ๋กœ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์•„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ๋นŒ๋“œ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

Gradle : Java์šฉ Build System์œผ๋กœ, Groovy ๊ธฐ๋ฐ˜์œผ๋กœ ๋นŒ๋“œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. Gradle์€ Maven๋ณด๋‹ค ๋” ๋น ๋ฅด๊ณ , ์œ ์—ฐ์„ฑ์ด ๋†’๋‹ค. ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด๋กœ ์ž‘์„ฑ๋˜์–ด ์žˆ์–ด, ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ์˜ ๊ฐ€๋…์„ฑ์ด ๋†’๊ณ  ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์šฉ์ดํ•˜๋‹ค. ๋นŒ๋“œ ๊ณผ์ •์—์„œ ํ•„์š”ํ•œ ์˜์กด์„ฑ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ฏธ๋ฆฌ ์บ์‹œํ•ด๋‘์–ด ๋นŒ๋“œ ์‹œ๊ฐ„์„ ๋‹จ์ถ•ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • Groovy๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ธ Java๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด์ด๋‹ค. Java์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ JVM(Java Virtual Machine)์—์„œ ๋™์ž‘ํ•˜๋ฉฐ, Java ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. Groovy๋Š” Java์™€ ๋‹ฌ๋ฆฌ ์ข€ ๋” ๊ฐ„๊ฒฐํ•˜๊ณ  ์œ ์—ฐํ•œ ๋ฌธ๋ฒ•์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด, Java๋ณด๋‹ค ์ฝ”๋“œ ์ž‘์„ฑ์ด ๊ฐ„ํŽธํ•˜๋‹ค.
  • Kotlin์€ Java๋ณด๋‹ค ์ฝ”๋“œ ์ž‘์„ฑ์ด ๊ฐ„๊ฒฐํ•˜๊ณ  ์ƒ์‚ฐ์„ฑ์ด ๋†’์œผ๋ฉฐ, Null ์•ˆ์ „์„ฑ์ด ๋†’๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค. Gradle Kotlin์€ Groovy๋‚˜ Java๋กœ ์ž‘์„ฑ๋œ ์Šคํฌ๋ฆฝํŠธ๋ณด๋‹ค ๊ฐ€๋…์„ฑ์ด ๋†’๊ณ  ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์šฉ์ดํ•˜๋‹ค.

Maven Repository ์‚ฌ์šฉํ•˜๊ธฐ

Maven Repository๋Š” Maven Build System์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ €์žฅ์†Œ์ด๋‹ค. Maven์€ ์ด ์ €์žฅ์†Œ์—์„œ ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ž๋™์œผ๋กœ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์•„ ์‚ฌ์šฉํ•œ๋‹ค. Maven Central Repository๋Š” ๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ Maven Repository ์ค‘ ํ•˜๋‚˜์ด๋‹ค. ์ด ์ €์žฅ์†Œ์—๋Š” ์ˆ˜๋งŽ์€ Java ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์ด ๋“ฑ๋ก๋˜์–ด ์žˆ์–ด, ๊ฐœ๋ฐœ์ž๋“ค์€ ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ Maven Central Repository์—์„œ ๊ฒ€์ƒ‰ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. Gradle๋„ Maven๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด Maven Repository๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

  • ์•„๋ž˜ ๋งํฌ๋กœ Maven Repository ์— ์ ‘์†ํ•  ์ˆ˜ ์žˆ๋‹ค. Maven Repository: Search/Browse/Explore
  • ๋ฉ”์ธ ํ™”๋ฉด
  • ๊ฒ€์ƒ‰ ์ฐฝ์— ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฒ€์ƒ‰ํ•œ ๋’ค ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ์ค‘ ์•Œ๋งž์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํด๋ฆญํ•œ๋‹ค.
  • ํ•ด๋‹น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋‹ค์–‘ํ•œ ์ €์žฅ์†Œ์™€ ๋ฒ„์ „์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์›ํ•˜๋Š” ์ €์žฅ์†Œ์˜ ๋ฒ„์ „์„ ํด๋ฆญํ•œ๋‹ค.
  • ํ•˜๋‹จ์˜ Maven, Gradle ๋“ฑ์˜ Tab์„ ํด๋ฆญํ•˜์—ฌ ์›ํ•˜๋Š” ๊ตฌ๋ฌธ์„ ๋ณต์‚ฌํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ์‹œ Gradle DSL : Kotlin ์„ ์„ ํƒํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— Gradle(Kotlin) ํƒญ์„ ์„ ํƒํ•œ๋‹ค.

build.gradle.kts ์„ค์ •

  • Project์˜ directory์ค‘ build.gradle ํŒŒ์ผ์„ ์—ด์–ด Maven Repository ์—์„œ ๋ณต์‚ฌํ•œ ๊ตฌ๋ฌธ์„ ๋ถ™์—ฌ ๋„ฃ์–ด ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘์„ฑํ•œ๋‹ค.
    dependencies {
    
    		implementation("org.springframework:spring-core:5.3.27")
        implementation("org.springframework:spring-context:5.3.27")
        implementation("org.springframework:spring-beans:5.3.27")
        implementation("org.springframework:spring-expression:5.3.27")
        implementation("org.springframework:spring-aop:5.3.27")
        implementation("commons-logging:commons-logging:1.2")
    
    		...์ƒ๋žต
    }
  • ์šฐ์ธก ์ƒ๋‹จ์˜ Load Gradle Change ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ dependencies ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ฐ˜์˜์‹œํ‚จ๋‹ค.
    • โ‡’ ํ•ด๋‹น ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉ ๋  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ž๋™์œผ๋กœ ๋‹ค์šด๋กœ๋“œ ๋˜๊ณ  ํ™˜๊ฒฝ์— ๋“ฑ๋ก ๋œ๋‹ค.

Lombok ์‚ฌ์šฉ

๐Ÿ’ก Lombok์€ ์ž๋ฐ” ํด๋ž˜์Šค์—์„œ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ž‘์„ฑ๋˜๋Š” getter, setter, toString, ์ƒ์„ฑ์ž ์ฝ”๋“œ ๋“ฑ์˜ ์†Œ์Šค๋“ค์„, ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋„๋ก ์ปดํŒŒ์ผ ์‹œ์ ์— ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ด์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.

Lombok Annotation ์ข…๋ฅ˜

  • @Getter : ํ•ด๋‹น ๋ฉค๋ฒ„ ๋ณ€์ˆ˜์— ๋Œ€ํ•œ getter๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  • @Setter : ํ•ด๋‹น ๋ฉค๋ฒ„ ๋ณ€์ˆ˜์— ๋Œ€ํ•œ setter๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  • @ToString : ํ•ด๋‹น ํด๋ž˜์Šค์˜ toString()์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•œ๋‹ค.
  • @EqualsAndHashCode : ํ•ด๋‹น ํด๋ž˜์Šค์˜ equals()์™€ hashCode()๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•œ๋‹ค.
  • @NoArgsConstructor : ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์—†๋Š” ์ƒ์„ฑ์ž๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  • @AllArgsConstructor : ๋ชจ๋“  ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›๋Š” ์ƒ์„ฑ์ž๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  • @RequiredArgsConstructor : final์ด๋‚˜ @NonNull์ธ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋งŒ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›๋Š” ์ƒ์„ฑ์ž๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  • @Data : @ToString, @EqualsAndHashCode, @Getter, @Setter, @RequiredArgsConstructor์„ ๋ชจ๋‘ ์ ์šฉํ•œ ๊ฒƒ๊ณผ ๊ฐ™๋‹ค.

Lombok ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

Lombok ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‹จ๊ณ„๋ฅผ ์ง„ํ–‰ํ•ด์•ผํ•œ๋‹ค.

  1. IntelliJ์— Lombok ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์น˜ (2020.03 ๋ฒ„์ „ ์ดํ›„์—๋Š” ์„ค์น˜ ๋˜์–ด ์žˆ์–ด ๋ณ„๋„์˜ ์„ค์น˜๊ฐ€ ํ•„์š” ์—†๋‹ค.)
    1. IntelliJ ์‹คํ–‰
    2. File > Settings ํด๋ฆญ
    3. Plugins ํด๋ฆญ
    4. Marketplace ํƒญ์—์„œ Lombok ๊ฒ€์ƒ‰
    5. Lombok Plugin์„ ์„ค์น˜ํ•˜๊ณ  IntelliJ๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘
  2. ํ”„๋กœ์ ํŠธ์— Lombok ์˜์กด์„ฑ ์ถ”๊ฐ€
    1. build.gradle.kts ํŒŒ์ผ์— ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€

      dependencies {
      
          implementation("org.projectlombok:lombok:1.18.26")
      		annotationProcessor("org.projectlombok:lombok:1.18.26")
      
      		...์ƒ๋žต
      }
      
    2. build.gradle ํŒŒ์ผ์„ ์ €์žฅํ•˜๊ณ , IntelliJ์—์„œ Reload Changes ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅธ๋‹ค.

  3. ์‚ฌ์šฉํ•  Lombok ์–ด๋…ธํ…Œ์ด์…˜ ์ ์šฉ
    1. ์‚ฌ์šฉํ•  Lombok ์–ด๋…ธํ…Œ์ด์…˜์„ ํด๋ž˜์Šค์— import ํ•œ๋‹ค.

      import lombok.Getter;
      import lombok.Setter;
      import lombok.ToString;
      
      @Getter
      @Setter
      @ToString
      public class MyClass {
          private String name;
          private int age;
      }
      
    2. Lombok ์–ด๋…ธํ…Œ์ด์…˜์„ ์ ์šฉํ•œ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, getter, setter, toString ๋“ฑ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ๋ณ„๋„๋กœ ์ž‘์„ฑํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

      MyClass myClass = new MyClass();
      myClass.setName("John");
      myClass.setAge(30);
      
      System.out.println(myClass.getName()); // "John" ์ถœ๋ ฅ
      System.out.println(myClass.getAge()); // 30 ์ถœ๋ ฅ
      System.out.println(myClass); // "MyClass(name=John, age=30)" ์ถœ๋ ฅ
profile
์—”์ง€๋‹ˆ์–ด๋กœ์˜ ์„ฑ์žฅ์ผ์ง€

0๊ฐœ์˜ ๋Œ“๊ธ€