스프링 트라이앵글


스프링 프레임워크에서의 스프링 트라이앵글은 스프링의 3대 요소를 나타내는 용어입니다. 이 요소들은 제어 역전(IoC), 관점 지향 프로그래밍(AOP), 추상화 서비스(PSA)입니다. 이 요소들은 스프링 프레임워크의 핵심 기능과 철학을 담고 있습니다.

제어 역전(IoC)

제어 역전(IoC)은 개발자가 아닌 프레임워크가 객체의 생성과 의존성 주입을 관리하는 것을 말합니다. 이를 통해 개발자는 객체 간의 결합도를 낮추고 유연한 코드를 작성할 수 있습니다. 스프링에서는 IoC 컨테이너라고 불리는 ApplicationContext와 BeanFactory 인터페이스를 통해 IoC를 구현합니다. IoC 컨테이너는 빈 설정 소스로부터 빈 정의를 읽어들이고, 의존관계를 설정하여 빈을 구성하고 제공해줍니다.
빈은 스프링 IoC 컨테이너가 관리하는 객체로, 싱글톤으로 생성되며 필요할 때 주입받아 사용할 수 있습니다. IoC 컨테이너는 또한 빈의 생명 주기를 관리하며, 스프링의 라이프사이클 콜백 인터페이스를 이용하여 부가적인 기능을 수행할 수 있습니다.

관점 지향 프로그래밍(AOP)

관점 지향 프로그래밍(AOP)은 핵심 비즈니스 로직 외에 공통으로 처리되어야 하는 로그 출력, 보안 처리, 예외 처리 등의 코드를 모아서 처리하는 것을 말합니다. 이를 통해 개발자는 코드의 중복과 난잡함을 줄이고, 모듈성과 재사용성을 높일 수 있습니다.
스프링에서는 프록시 패턴을 기반으로 AOP를 구현합니다. 프록시 패턴은 핵심 로직을 구현한 객체에 접근하기 전에 중간에 다른 객체(프록시)를 두어 공통 기능을 적용하는 방식입니다. 스프링에서는 @Aspect 어노테이션을 이용하여 AOP를 적용할 클래스를 정의하고, @Pointcut 어노테이션을 이용하여 AOP를 적용할 메서드나 클래스를 지정합니다. 그리고 @Before, @After, @Around 등의 어노테이션을 이용하여 AOP를 적용할 시점을 정의합니다.

추상화 서비스(PSA)

추상화 서비스(PSA)는 외부 라이브러리들을 POJO로 사용할 수 있도록 일종의 껍데기를 씌워 추상화한 것입니다. 이를 통해 개발자는 스프링에서 추상화된 서비스들을 자바 언어로 자유롭게 사용할 수 있게 됩니다. 또한 완전히 다른 기술 스택으로도 애플리케이션이 작동할 수 있도록 해주어 코드를 바꿀 일이 줄어들게 됩니다.

스프링에서는 다양한 추상화 서비스를 제공하는데요. 예를 들면, 스프링 트랜잭션 추상화는 JDBC, JPA, Hibernate 등 다양한 트랜잭션 API를 하나의 인터페이스로 통일하여 사용할 수 있게 해줍니다. 스프링 캐시 추상화는 EhCache, Redis, Memcached 등 다양한 캐시 라이브러리를 하나의 인터페이스로 통일하여 사용할 수 있게 해줍니다. 스프링 웹 MVC 추상화는 서블릿 API를 직접 사용하지 않고도 웹 애플리케이션을 개발할 수 있게 해줍니다.

마무리

이렇게 스프링 트라이앵글에 대해 알아보았습니다. 스프링 트라이앵글은 스프링 프레임워크의 핵심 개념과 기능을 담고 있는 용어로, 스프링을 공부하고 사용하려면 반드시 알아야 하는 내용입니다. 스프링 트라이앵글을 잘 이해하고 적용하면 스프링 프레임워크의 장점을 최대한 활용할 수 있습니다. 감사합니다.

'스프링' 카테고리의 다른 글

@RequestParam @PathVariable의 차이  (0) 2019.10.16
@RequestMapping  (0) 2019.10.16
스프링을 사용하는 이유  (0) 2019.03.26
MyBatis란?  (0) 2019.01.17
DI란?  (0) 2019.01.12

@PathVariable은 URL경로에 변수를 넣는것 입니다.

 

RESTful API에서 사용합니다. 

 

ex)127.0.0.1:8080/abcd/abcd

 

@RequestParam은 URL 파라미터로 값을 넘기는 방식입니다.

 

ex)127.0.0.1:8080?a=b&c=d

 

'스프링' 카테고리의 다른 글

스프링 트라이앵글  (0) 2023.04.12
@RequestMapping  (0) 2019.10.16
스프링을 사용하는 이유  (0) 2019.03.26
MyBatis란?  (0) 2019.01.17
DI란?  (0) 2019.01.12

@RequestMapping 클라이언트의 요청을 어떤 매서드가 처리할지 결정합니다. 

 

'스프링' 카테고리의 다른 글

스프링 트라이앵글  (0) 2023.04.12
@RequestParam @PathVariable의 차이  (0) 2019.10.16
스프링을 사용하는 이유  (0) 2019.03.26
MyBatis란?  (0) 2019.01.17
DI란?  (0) 2019.01.12

DI를 지원

의존성이란

A객체가 B객체의 메소드를 사용하고 있을 때 A객체는 B객체에 의존하고 있다고 표현

이때 B객체의 메소드 이름이 바뀌면 그 메소드를 찾을 수 없기 때문에 똑같이 변경해야 


이처럼 B객체의 메소드를 사용하면 유지보수의 어려움이 있기에 DI를 사용한다. DI란 기존의 의존성 대신 제 3자가 만들어주는 의존객체를 필요한 클래스에 제공하여 변경의 유연함이 있다.


AOP를 지원 

한 어플리케이션 내 다양한 모듈에서 공통적으로 이용되는 기능 분리시켜 사용


'스프링' 카테고리의 다른 글

@RequestParam @PathVariable의 차이  (0) 2019.10.16
@RequestMapping  (0) 2019.10.16
MyBatis란?  (0) 2019.01.17
DI란?  (0) 2019.01.12
request, response 객체  (0) 2019.01.11

MyBatis란 SQL을 더 적은 코드로 쉽게 사용할 수 있게 해주는 프레임워크입니다.


마이바티스를 쓰는 이유는 적은 코드로 빠른 개발이 가능하기 때문입니다.

'스프링' 카테고리의 다른 글

@RequestParam @PathVariable의 차이  (0) 2019.10.16
@RequestMapping  (0) 2019.10.16
스프링을 사용하는 이유  (0) 2019.03.26
DI란?  (0) 2019.01.12
request, response 객체  (0) 2019.01.11


DI란 Dependency Injection의 약자로 의존성 주입을 의미합니다. 


의존성이란 의미는 하나의 객체에서 다른 객체를 사용하고 있는것을 말합니다.


A클래스에서 B클래스를 사용할 때 A클래스는 B클래스에 의존하고 있고 B클래스를 변경시 A클래스에 영향을 미칩니다. 


B클래스를 생성해서 A클래스에 넣어주는 과정을 의존성 주입이라고 합니다.

'스프링' 카테고리의 다른 글

@RequestParam @PathVariable의 차이  (0) 2019.10.16
@RequestMapping  (0) 2019.10.16
스프링을 사용하는 이유  (0) 2019.03.26
MyBatis란?  (0) 2019.01.17
request, response 객체  (0) 2019.01.11

+ Recent posts