Skip to content

Latest commit

ย 

History

History
406 lines (274 loc) ยท 19.2 KB

File metadata and controls

406 lines (274 loc) ยท 19.2 KB

๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ ์ž๋ฐ” ๊ธฐ์ˆ  ๋ฉด์ ‘ | ์‹ ์ž… ๊ฐœ๋ฐœ์ž SPRING ๋‹จ๊ณจ ์งˆ๋ฌธ



Spring ํ”„๋ ˆ์ž„์›Œํฌ

Spring ํ”„๋ ˆ์ž„์›Œํฌ์— ๋Œ€ํ•ด ๋งํ•ด์ฃผ์„ธ์š”.
  • ์ž๋ฐ” ๊ธฐ๋ฐ˜์˜ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ•๋ ฅํ•œ ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค.
  • IoC, DI, AOP ๋“ฑ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์—ฌ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋” ์‰ฝ๊ฒŒ ์œ ์ง€๋ณด์ˆ˜ ๊ฐ€๋Šฅํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค๋„๋ก ๋•๋Š”๋‹ค.
    • ์Šคํ”„๋ง์€ ํŠนํžˆ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜, RESTful ์„œ๋น„์Šค, ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ ๋“ฑ ๋‹ค์–‘ํ•œ ์šฉ๋„๋กœ ์‚ฌ์šฉ๋œ๋‹ค.
โ‰๏ธ Spring ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ์— ๋Œ€ํ•ด ๋งํ•ด์ฃผ์„ธ์š”.
  • IoC ๋ฐ DI๋ฅผ ์‚ฌ์šฉํ•œ ๊ฐ์ฒด ๊ด€๋ฆฌ์˜ ์ˆ˜์›”ํ•จ๊ณผ ์ฝ”๋“œ์˜ ๊ฒฐํ•ฉ๋„๊ฐ€ ๊ฐ์†Œํ•œ๋‹ค.
  • ๋ชจ๋“ˆํ™” ๋ฐ ์žฌ์‚ฌ์šฉ์„ฑ์œผ๋กœ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋งŒ ์„ ํƒํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์—ฐ์„ฑ์ด ์žˆ๋‹ค.
  • AOP๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ์˜ ์ค‘๋ณต์„ ์ค„์ด๊ณ  ๊ฐ€๋…์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚จ๋‹ค.
  • ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ์ถ•์„ ์œ„ํ•ด ์Šคํ”„๋ง MVC ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ง€์›ํ•œ๋‹ค.
  • Hibernate, JPA, EJB ๋“ฑ ๋‹ค์–‘ํ•œ ๊ธฐ์ˆ ๊ณผ ์‰ฝ๊ฒŒ ํ†ตํ•ฉ๋œ๋‹ค.

โ‰๏ธ Spring ํ”„๋ ˆ์ž„์›Œํฌ์˜ ํ•ต์‹ฌ ๋ชจ๋“ˆ์ด ๋ฌด์—‡์ธ์ง€ ๋งํ•ด์ฃผ์„ธ์š”.
  1. Spring Core: ์ œ์–ด์˜ ์—ญ์ „(IoC)๊ณผ ์˜์กด์„ฑ ์ฃผ์ž…(DI) ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.
  2. Spring AOP: ๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ œ๊ณตํ•œ๋‹ค.
  3. Spring ORM: Hibernate, JPA ๋“ฑ ORM ํ”„๋ ˆ์ž„์›Œํฌ์™€์˜ ํ†ตํ•ฉ์„ ์ œ๊ณตํ•œ๋‹ค.
  4. Spring DAO: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒํ˜ธ์ž‘์šฉ์„ ๊ฐ„์†Œํ™”ํ•˜๋Š” JDBC ์ถ”์ƒํ™” ๊ณ„์ธต์„ ์ œ๊ณตํ•œ๋‹ค.
  5. Spring Context: ์Šคํ”„๋ง ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•œ ์ปจํ…์ŠคํŠธ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•œ๋‹ค.
  6. Spring Web: ์›น ์ง€ํ–ฅ ํ†ตํ•ฉ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.
  7. Spring MVC: Model-View-Controller ์•„ํ‚คํ…์ฒ˜ ๋ฐ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

์ œ์–ด์˜ ์—ญ์ „(Inversion of Control, IoC)

์ œ์–ด์˜ ์—ญ์ „(Inversion of Control, IoC)์— ๋Œ€ํ•ด ๋งํ•ด์ฃผ์„ธ์š”.
  • ๊ฐ์ฒด์˜ ์ƒ์„ฑ๊ณผ ์ƒ๋ช… ์ฃผ๊ธฐ๋ฅผ ์™ธ๋ถ€์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ์›์น™์ด๋‹ค.
  • ์ด์— ๊ฐœ๋ฐœ์ž๋Š” ๊ฐ์ฒด์˜ ๊ตฌํ˜„์— ์ง‘์ค‘ํ•˜๊ณ , IoC๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด์˜ ๊ด€๋ฆฌ์™€ ์˜์กด์„ฑ ์ฃผ์ž…์„ ์™ธ๋ถ€์— ๋งก๊ธด๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ๊ฐ์ฒด๊ฐ€ ์ž์‹ ์˜ ์˜์กด์„ฑ์„ ์Šค์Šค๋กœ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ๊ณผ ๋ฐ˜๋Œ€๋˜๋Š” ๊ฐœ๋…์ด๋‹ค.

โ‰๏ธ IoC ์ปจํ…Œ์ด๋„ˆ์— ๋Œ€ํ•ด ๋งํ•ด์ฃผ์„ธ์š”.
  • IoC ์›์น™์„ ๊ตฌํ˜„ํ•˜๋Š” ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์˜ ํ•ต์‹ฌ ์ปดํฌ๋„ŒํŠธ์ด๋‹ค.
  • ์Šคํ”„๋ง ๋นˆ(Bean)์˜ ์ƒ์„ฑ, ์˜์กด์„ฑ ์ฃผ์ž…, ์ƒ๋ช… ์ฃผ๊ธฐ ๊ด€๋ฆฌ ๋“ฑ์„ ๋‹ด๋‹นํ•œ๋‹ค.
  • ์Šคํ”„๋ง์˜ ApplicationContext์™€ BeanFactory๊ฐ€ ๋Œ€ํ‘œ์ ์ธ IoC ์ปจํ…Œ์ด๋„ˆ์ด๋‹ค.

IoC ์›์น™์„ ์‹ค์ œ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ์‹œ์Šคํ…œ์ด๋‚˜ ๋„๊ตฌ์ด๋‹ค. IoC๋ฅผ ์ ์šฉํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.


์˜์กด์„ฑ ์ฃผ์ž…(Dependency Injection, DI)

์˜์กด์„ฑ ์ฃผ์ž…(Dependency Injection, DI)์— ๋Œ€ํ•ด์„œ ๋งํ•ด์ฃผ์„ธ์š”.
  • ์˜์กด์„ฑ ์ฃผ์ž…์€ ๊ฐ์ฒด ๊ฐ„์˜ ์˜์กด์„ฑ์„ ์™ธ๋ถ€์—์„œ ์ฃผ์ž…ํ•ด์ฃผ๋Š” ๊ธฐ๋ฒ•์ด๋‹ค.
  • ์ด๋ฅผ ํ†ตํ•ด ๋А์Šจํ•œ ๊ฒฐํ•ฉ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.
โ‰๏ธ ์Šคํ”„๋ง์˜ ์˜์กด์„ฑ ์ฃผ์ž… ๋ฐฉ์‹์— ๋Œ€ํ•ด ๋งํ•ด์ฃผ์„ธ์š”.
  • ์ƒ์„ฑ์ž ์ฃผ์ž…(Constructor Injection): ์˜์กด์„ฑ์„ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด ์ฃผ์ž…ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
  • ์„ธํ„ฐ ์ฃผ์ž…(Setter Injection): ํด๋ž˜์Šค์˜ ์„ธํ„ฐ ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
  • ํ•„๋“œ ์ฃผ์ž…(Field Injection): ํด๋ž˜์Šค์˜ ํ•„๋“œ์— ์ง์ ‘ ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

์ƒ์„ฑ์ž ์ฃผ์ž… ๋ฐฉ์‹์ด ๊ฐ€์žฅ ๊ถŒ์žฅ๋˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ, ํ•„์ˆ˜์ ์ธ ์˜์กด์„ฑ์„ ๋ช…์‹œ์ ์œผ๋กœ ์ œ๊ณตํ•˜๋ฉฐ ๋ถˆ๋ณ€์„ฑ์„ ์ œ๊ณตํ•œ๋‹ค.


์Šคํ”„๋ง ๋นˆ(Spring Bean)

์Šคํ”„๋ง ๋นˆ(Spring Bean)์— ๋Œ€ํ•ด ๋งํ•ด์ฃผ์„ธ์š”.
  • ์Šคํ”„๋ง ๋นˆ์€ IoC ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ์ธ์Šคํ„ด์Šคํ™”๋˜๋ฉฐ, ์ƒ์„ฑ ๋ฐ ๊ด€๋ฆฌ๋˜๋Š” ๊ฐ์ฒด์ด๋‹ค.
  • ์Šคํ”„๋ง ๋นˆ์€ ์Šคํ”„๋ง ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ตฌ์„ฑ ์š”์†Œ์ด๋ฉฐ, ์Šคํ”„๋ง ์„ค์ • ํŒŒ์ผ์— ์ •์˜๋˜๊ฑฐ๋‚˜ @Componet, @Service ๋“ฑ์˜ ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ํ‘œ์‹œ๋œ๋‹ค.
โ‰๏ธ ์Šคํ”„๋ง ๋นˆ์„ ์ •์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๋งํ•ด์ฃผ์„ธ์š”.
  • ์Šคํ”„๋ง ๋นˆ ์ •์˜: XML ์„ค์ • ๋ฐฉ์‹
<!-- ์˜ˆ์‹œ: ์Šคํ”„๋ง ๋นˆ ์„ค์ •
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
       http://www.springframework.org/schema/beans/spring-beans.xsd">

  <bean id="myService" class="com.example.MyService"/>
</beans> 
-->
  • ์Šคํ”„๋ง ๋นˆ ์ •์˜: ์ž๋ฐ” ๊ธฐ๋ฐ˜ ์„ค์ • ๋ฐฉ์‹
@Configuration
public class AppConfig {

	@Bean
	public MyBean myBean() {
		return new MyBean();
	}
}
  • ์Šคํ”„๋ง ๋นˆ ์ •์˜: ์ž๋ฐ” ์–ด๋…ธํ…Œ์ด์…˜ ์„ค์ • ๋ฐฉ์‹
@Component
public class MyBean {
}

โ‰๏ธ ์Šคํ”„๋ง ๋นˆ์˜ ์ƒ๋ช…์ฃผ๊ธฐ์— ๋Œ€ํ•ด ๋งํ•ด์ฃผ์„ธ์š”.
  • ๋นˆ ์ƒ์„ฑ(Instantiation): ์Šคํ”„๋ง IoC ์ปจํ…Œ์ด๋„ˆ๋Š” ๋นˆ์˜ ์ •์˜๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋นˆ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ์ด ๋‹จ๊ณ„์—์„œ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค.
  • ์˜์กด์„ฑ ์ฃผ์ž…(Dependency Injection): ๋นˆ์ด ์ƒ์„ฑ๋œ ํ›„, IoC ์ปจํ…Œ์ด๋„ˆ๋Š” ํ•ด๋‹น ๋นˆ์˜ ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•œ๋‹ค. ์ด ๊ณผ์ •์€ ์ƒ์„ฑ์ž, ์„ธํ„ฐ, ํ•„๋“œ ์ฃผ์ž… ๋“ฑ์˜ ๋ฐฉ์‹์œผ๋กœ ์ด๋ฃจ์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค.
  • ์ดˆ๊ธฐํ™”(Initialization): ๋นˆ์ด ์˜์กด์„ฑ์„ ์ฃผ์ž…๋ฐ›์€ ํ›„, ์ดˆ๊ธฐํ™” ๊ณผ์ •์ด ์‹œ์ž‘๋œ๋‹ค. @PostConstruct, init-method ์†์„ฑ
  • ์‚ฌ์šฉ(Usage): ๋นˆ์ด ์ƒ์„ฑ๋˜๊ณ  ์ดˆ๊ธฐํ™”๋œ ํ›„, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉ๋œ๋‹ค. ์ด ์‹œ์ ์—์„œ ๋นˆ์€ ์˜์กด์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ํ•„์š”ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  • ์†Œ๋ฉธ(Destruction): ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ข…๋ฃŒ๋˜๊ฑฐ๋‚˜ ๋นˆ์ด ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์„ ๋•Œ, ๋นˆ์˜ ์†Œ๋ฉธ ๊ณผ์ •์ด ์‹œ์ž‘๋œ๋‹ค. @PreDestroy, destroy-method ์†์„ฑ

IoC ์ปจํ…Œ์ด๋„ˆ๋Š” ์Šคํ”„๋ง ๋นˆ์˜ ์ƒ๋ช… ์ฃผ๊ธฐ์ธ ๋นˆ ์ƒ์„ฑ -> ์˜์กด์„ฑ ์ฃผ์ž… -> ์ดˆ๊ธฐํ™” -> ์‚ฌ์šฉ -> ์†Œ๋ฉธ ๊ณผ์ •์„ ๊ด€๋ฆฌํ•˜์—ฌ ๋นˆ์˜ ์ƒ๋ช… ์ฃผ๊ธฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค.


โ‰๏ธ @Component, @Service, @Repository, @Controller ์–ด๋…ธํ…Œ์ด์…˜์˜ ์ฐจ์ด์ ์— ๋Œ€ํ•ด ๋งํ•ด์ฃผ์„ธ์š”.
  • @Componet: ์ผ๋ฐ˜์ ์ธ ์Šคํ”„๋ง ๋นˆ์„ ์ •์˜ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ํŠน๋ณ„ํ•œ ์—ญํ• ์ด ์—†๊ณ , ํŠน์ •ํ•œ ๋ชฉ์ ์— ๋งž์ง€ ์•Š๋Š” ์ผ๋ฐ˜์ ์ธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
  • @Service: ์„œ๋น„์Šค ๊ณ„์ธต์˜ ๋นˆ์„ ์ •์˜ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ํฌํ•จ๋œ ์„œ๋น„์Šค ํด๋ž˜์Šค๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ์ฃผ๋กœ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์™€ ๊ด€๋ จ๋œ ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  • @Repository: ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ณ„์ธต์˜ ๋นˆ์„ ์ •์˜ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํด๋ž˜์Šค์— ์‚ฌ์šฉ๋œ๋‹ค.
  • @Controller: ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ •์˜ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. HTTP ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ , ์‚ฌ์šฉ์ž์—๊ฒŒ ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ์ฃผ๋กœ MVC ํŒจํ„ด์—์„œ ์‚ฌ์šฉ๋œ๋‹ค.

์Šคํ”„๋ง MVC

Spring MVC์— ๋Œ€ํ•ด ๋งํ•ด์ฃผ์„ธ์š”.
  • ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ๋ชจ๋“ˆ๋กœ, MVC(Model-View-Controller) ๋””์ž์ธ ํŒจํ„ด์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ๋‹ค.
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง, ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค, ์ž…๋ ฅ ์ฒ˜๋ฆฌ ๋“ฑ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ฐœ๋ฐœ์˜ ํšจ์œจ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋ณด์—ฌ์ค€๋‹ค.

์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์กฐ์ ์œผ๋กœ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ , ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ๋ถ„๋ฆฌํ•œ๋‹ค.

โ‰๏ธ DispatcherServlet์— ๋Œ€ํ•ด ๋งํ•ด์ฃผ์„ธ์š”.
  • ์Šคํ”„๋ง MVC์˜ ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ๋กœ, ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ ์—ญํ• ์„ ํ•œ๋‹ค.
  • ๋‹ค์–‘ํ•œ ํ•ธ๋“ค๋Ÿฌ, ์ธํ„ฐ์…‰ํ„ฐ, ๋ทฐ ๋ฆฌ์กธ๋ฒ„ ๋“ฑ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๊ณ , ์Šคํ”„๋ง์˜ IoC ์ปจํŠธ๋กค๋Ÿฌ์™€ ํ†ตํ•ฉ๋˜์–ด ์˜์กด์„ฑ ์ฃผ์ž…์„ ํ†ตํ•ด ๊ฐ์ฒด๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํ•ต์‹ฌ ์ปดํฌ๋„ŒํŠธ๋กœ, ์š”์ฒญ์„ ์ˆ˜์‹ ํ•˜๊ณ  ์ ์ ˆํ•œ ์ปจํŠธ๋กค๋Ÿฌ๋กœ ์ „๋‹ฌํ•˜๋ฉฐ, ์ตœ์ข…์ ์œผ๋กœ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

โ‰๏ธ ์Šคํ”„๋ง MVC์˜ ๋™์ž‘ ๊ณผ์ •์— ๋Œ€ํ•ด ๋งํ•ด์ฃผ์„ธ์š”.
  • ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์„ ๋ฐ›๊ณ , ์š”์ฒญ์„ ์ ์ ˆํ•œ ํ•ธ๋“ค๋Ÿฌ(์ปจํŠธ๋กค๋Ÿฌ)๋กœ ์ „๋‹ฌํ•œ๋‹ค.
  • ์š”์ฒญ URL์— ๋”ฐ๋ผ ์ ์ ˆํ•œ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ฐพ์•„ ํ˜ธ์ถœํ•œ๋‹ค.
  • ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์„œ๋น„์Šค ๋ ˆ์ด์–ด๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.
  • ์„œ๋น„์Šค๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋ธ์— ๋‹ด์•„ ๋ทฐ๋กœ ์ „๋‹ฌํ•œ๋‹ค.
  • ๋ทฐ๋ฅผ ๊ฒฐ์ •ํ•˜๊ณ  ๋ Œ๋”๋ง์„ ์ง€์‹œํ•œ๋‹ค.

DispatcherServlet -> Handler Mapping -> Bussiness Logic -> Model -> ViewResolver


Spring Boot ํ”„๋ ˆ์ž„์›Œํฌ

Spring Boot ํ”„๋ ˆ์ž„์›Œํฌ์— ๋Œ€ํ•ด ๋งํ•ด์ฃผ์„ธ์š”.
  • ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๊ธฐ์กด ๊ฐœ๋ฐœ ๋ฐฉ์‹์˜ ๋ฌธ์ œ์™€ ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.
  • ๋งŽ์€ ๋ชจ๋“ˆ์„ ์ถ”๊ฐ€ํ•˜๋ฉด ์„ค์ •์ด ๋ณต์žกํ•ด์ง€๋Š”๋ฐ, ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์Šคํ”„๋ง ๋ถ€ํŠธ๊ฐ€ ํƒ„์ƒํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

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

์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๋ณต์žก์„ฑ์„ ์ค„์ด๊ณ , ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์ด๋‹ค.

โ‰๏ธ ์Šคํ”„๋ง ๋ถ€ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ , ์ฃผ์š” ํŠน์ง•์— ๋Œ€ํ•ด์„œ ๋งํ•ด์ฃผ์„ธ์š”.
  • ์ž๋™ ๊ตฌ์„ฑ, AutoConfiguration

    • ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์„ค์ •์„ ์ž๋™์œผ๋กœ ๊ฐ์ง€ํ•˜์—ฌ ๋ณต์žกํ•œ ์„ค์ • ๊ณผ์ •์„ ์ตœ์†Œํ™”ํ•œ๋‹ค.
  • ์Šคํƒ€ํ„ฐ ์˜์กด์„ฑ, Starter Dependency

    • ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์‰ฝ๊ฒŒ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฏธ๋ฆฌ ์ •์˜๋œ ์Šคํƒ€ํ„ฐ ์˜์กด์„ฑ์„ ์ œ๊ณตํ•œ๋‹ค.
  • ๋‹จ๋… ์‹คํ–‰, Standalone

    • ๋‚ด์žฅ๋œ ์›น ์„œ๋ฒ„ Tomcat, Jetty ๋“ฑ์„ ํฌํ•จํ•˜์—ฌ ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๊ณ , ๋ณ„๋„์˜ ์„œ๋ฒ„ ์„ค์น˜ ์—†์ด JAR ํŒŒ์ผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํ”„๋กœ๋•์…˜ ์ค€๋น„, Production Ready

    • ๋ชจ๋‹ˆํ„ฐ๋ง, ๋ฉ”ํŠธ๋ฆญ์Šค, ์„ค์ • ๊ด€๋ฆฌ ๋“ฑ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์— ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ๋‚ด์žฅํ•ด์„œ ์šด์˜ ํ™˜๊ฒฝ์— ์ ํ•ฉํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
  • ์Šคํ”„๋ง์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ ์‚ฌ์šฉ

    • ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ธฐ์กด ์Šคํ”„๋ง ์ƒํƒœ๊ณ„๋ฅผ ๊ทธ๋Œ€๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

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

โ‰๏ธ @SpringBootApplication ์–ด๋…ธํ…Œ์ด์…˜์— ๋Œ€ํ•ด ๋งํ•ด์ฃผ์„ธ์š”.
  • ์Šคํ”„๋ง ๋ถ€ํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•œ ํ•ต์‹ฌ ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ, ์„ธ ๊ฐ€์ง€ ์–ด๋…ธํ…Œ์ด์…˜์˜ ์กฐํ•ฉ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.

  • @SpringBootConfiguration: ์Šคํ”„๋ง ๋ถ€ํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ค์ •์„ ์ •์˜ํ•œ๋‹ค.

    • @Configuration ์–ด๋…ธํ…Œ์ด์…˜์„ ํฌํ•จํ•˜์—ฌ ์Šคํ”„๋ง์˜ ์„ค์ • ํด๋ž˜์Šค๋กœ ์ž‘๋™ํ•œ๋‹ค.
  • @EnableAutoConfiguration: ์Šคํ”„๋ง ๋ถ€ํŠธ์˜ ์ž๋™ ์„ค์ • ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™”ํ•œ๋‹ค.

    • ํด๋ž˜์Šค ๊ฒฝ๋กœ์— ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์„ค์ •์— ๋”ฐ๋ผ ์Šคํ”„๋ง ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ตฌ์„ฑ์„ ์ž๋™์œผ๋กœ ์„ค์ •ํ•œ๋‹ค.
  • @ComponetScan: ํ˜„์žฌ ํŒจํ‚ค์ง€์™€ ๊ทธ ํ•˜์œ„ ํŒจํ‚ค์ง€์—์„œ ์Šคํ”„๋ง์˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ž๋™์œผ๋กœ ๊ฒ€์ƒ‰ํ•œ๋‹ค.

    • ์ด๋Š” @Component, @Service, @Repository, @Controller์™€ ๊ฐ™์€ ์–ด๋…ธํ…Œ์ด์…˜์ด ๋ถ™์€ ํด๋ž˜์Šค๋ฅผ ์ฐพ์•„ ์Šคํ”„๋ง์˜ Application Context์— ๋“ฑ๋กํ•œ๋‹ค.

์Šคํ”„๋ง ๋ถ€ํŠธ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋“ค์„ ์ž๋™์œผ๋กœ ์„ค์ •ํ•˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜์„ ์ œ๊ณตํ•œ๋‹ค.


โ‰๏ธ Spring Data JPA์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
  • ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ, ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ๊ณ„์ธต ๊ฐœ๋ฐœ์„ ๊ฐ„์†Œํ™”ํ•˜๋Š” Spring Data์˜ ํ•œ ๋ถ€๋ถ„์ด๋‹ค.
  • JPA(Java Persistence API)์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋„๋ก ๋„์™€์ฃผ๋Š” ๋ชจ๋“ˆ์ด๋‹ค.
  • CRUD(CREATE, READ, UPDATE, DELETE) ์ž‘์—…์„ ์‰ฝ๊ฒŒ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ORM์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ž๋ฐ” ๊ฐ์ฒด ๊ฐ„ ๋ณ€ํ™˜์„ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌ ๋ฐ ๋ฐ˜๋ณต ์ฝ”๋“œ๋ฅผ ์ค„์—ฌ์ค€๋‹ค.

โ‰๏ธ Spring Repository์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ๊ฐ„์†Œํ™”ํ•˜๊ณ , ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๋ฉฐ, ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ํ•œ๋‹ค.
  • Repository ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ •์˜ํ•˜๋ฉด ์Šคํ”„๋ง์ด ์ž๋™์œผ๋กœ ๊ตฌํ˜„์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ, ๋ณต์žกํ•œ DAO ํด๋ž˜์Šค๋ฅผ ์ž‘์„ฑํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.
  • ๋ฉ”์„œ๋“œ ์ด๋ฆ„ ๊ธฐ๋ฐ˜ ์ฟผ๋ฆฌ๋ฅผ ํ†ตํ•ด ์ž๋™์œผ๋กœ SQL ์ฟผ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๊ฐœ๋ฐœ์ž์˜ ์ƒ์‚ฐ์„ฑ์„ ๋†’์ธ๋‹ค.
  • @Transactional ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…์„ ์›์ž์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  • JPA ์™ธ์—๋„ MongoDB, Redis ๋“ฑ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๋ฐ์ดํ„ฐ ์†Œ์Šค๋ฅผ ์ง€์›ํ•˜์—ฌ ์œ ์—ฐํ•œ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ จ ์˜ˆ์™ธ๋ฅผ DataAccessException์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ๊ฐ„์†Œํ™”ํ•œ๋‹ค.
@Repository
public interface MemberRepository extends JpaRepository<Member, Long> {
    List<Member> findByLastName(String lastName);
}

Spring Repository๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๊ธฐ ์œ„ํ•œ CRUD ์ž‘์—… ๋ฐ ์ฟผ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ๊ธฐ์ˆ ์— ๋Œ€ํ•œ ์ถ”์ƒํ™”์ด๋‹ค.


โ‰๏ธ CrudRepository์™€ JpaRepository์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
  • CrudRepository: ๊ธฐ๋ณธ์ ์ธ CRUD(CREATE, READ, UPDATE, DELETE) ์ž‘์—…์„ ์œ„ํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋กœ JPA์— ์˜์กดํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • JpaRepository: CrudRepository๋ฅผ ์ƒ์†๋ฐ›์•„ ๊ธฐ๋ณธ CRUD ๋ฉ”์„œ๋“œ๋ฅผ ํฌํ•จํ•˜๋ฉฐ, JPA ๊ธฐ๋ฐ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค.

๋‹จ์ˆœ CRUD ์ž‘์—…์ด ํ•„์š”ํ•  ๊ฒฝ์šฐ CrudRepository๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , JPA ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•œ ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•  ๊ฒฝ์šฐ JpaRepository๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹๋‹ค.


์Šคํ”„๋ง AOP

์Šคํ”„๋ง AOP์— ๋Œ€ํ•ด ๋งํ•ด์ฃผ์„ธ์š”.
  • ๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ง€์›ํ•˜์—ฌ ๊ณตํ†ต ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ชจ๋“ˆํ™”ํ•˜์—ฌ ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚จ๋‹ค.
  • ๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ํ•ต์‹ฌ ๊ด€์‹ฌ์‚ฌ์™€ ๊ณตํ†ต ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•˜๋Š” ๊ธฐ์ˆ ์ด๋‹ค.
โ‰๏ธ ์Šคํ”„๋ง AOP์—์„œ Advice์˜ ์ข…๋ฅ˜์— ๋Œ€ํ•ด ๋งํ•ด์ฃผ์„ธ์š”.
  • @Before: ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ์‹คํ–‰๋˜๊ธฐ ์ „์— ์‹คํ–‰๋œ๋‹ค.
  • @AfterReturning: ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ์ •์ƒ์ ์œผ๋กœ ๋๋‚œ ํ›„ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์•„์„œ ์‹คํ–‰๋œ๋‹ค.
  • @AfterThrowing: ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์‹คํ–‰ ์ค‘ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์‹คํ–‰๋œ๋‹ค.
  • @After: ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์‹คํ–‰ ํ›„, ์„ฑ๊ณต ์—ฌ๋ถ€์™€ ๊ด€๊ณ„์—†์ด ํ•ญ์ƒ ์‹คํ–‰๋œ๋‹ค.
  • @Around: ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์‹คํ–‰ ์ „ํ›„์— ๋ชจ๋‘ ์‹คํ–‰๋œ๋‹ค.

โ‰๏ธ ์Šคํ”„๋ง AOP์˜ ์ฒ˜๋ฆฌ ๊ณผ์ •์— ๋Œ€ํ•ด ๋งํ•ด์ฃผ์„ธ์š”.
  • ๋นˆ ์ƒ์„ฑ: ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์—์„œ ๋นˆ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  • ๋นˆ ํ›„์ฒ˜๋ฆฌ๊ธฐ: ๋นˆ์ด ์ €์žฅ์†Œ์— ๋“ฑ๋ก๋˜๊ธฐ ์ „์— ํ›„์ฒ˜๋ฆฌ๊ธฐ์— ์ „๋‹ฌ๋˜์–ด AOP ์ ์šฉ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.
  • Advisor ์กฐํšŒ: ๋ชจ๋“  Advisor(Advice์™€ Pointcut์„ ํฌํ•จํ•˜๋Š” ๊ฐ์ฒด)๋ฅผ ์กฐํšŒํ•œ๋‹ค.
  • ํ”„๋ก์‹œ ์ƒ์„ฑ: ํฌ์ธํŠธ์ปท๊ณผ ๋ฉ”์„œ๋“œ ์กฐ๊ฑด์ด ๋งค์นญ๋˜๋ฉด ํ”„๋ก์‹œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  • ๋นˆ ๋“ฑ๋ก: ํ”„๋ก์‹œ๊ฐ€ ์ƒ์„ฑ๋˜์ง€ ์•Š์œผ๋ฉด ์›๋ž˜ ๊ฐ์ฒด ๊ทธ๋Œ€๋กœ ๋นˆ ์ €์žฅ์†Œ์— ๋“ฑ๋กํ•œ๋‹ค.
@Aspect
public class LoggingAspect {

    @Before("execution(* com.example.service.*.*(..))")
    public void logBefore(JoinPoint joinPoint) {
        System.out.println("Method called: " + joinPoint.getSignature().getName());
    }

    @AfterReturning(pointcut = "execution(* com.example.service.*.*(..))", returning = "result")
    public void logAfterReturning(JoinPoint joinPoint, Object result) {
        System.out.println("Method returned: " + joinPoint.getSignature().getName());
        System.out.println("Result: " + result);
    }
}

ํ”„๋ก์‹œ ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹ค์ œ ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ์ œ์–ดํ•˜๋ฉฐ, ํ”„๋ก์‹œ๊ฐ€ ์‹ค์ œ ๊ฐ์ฒด๋ฅผ ๊ฐ์‹ธ AOP ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•ด ์‹ค์ œ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์„ฑ๋Šฅ ์ €ํ•˜ ์—†์ด AOP๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.