개발 일지/Spring 44

[Spring] AOP

AOP(Aspect Oriented Programming)란, 관점 지향 프로그래밍 정도로 해석할 수 있다. 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나눠서 보고 그 관점을 기준으로 각각 모듈화 하는 것이다. 객체 지향 프로그래밍은 애플리케이션을 설계할 때 클래스가 단일 책임을 갖도록 분리하여 각 모듈의 결합도가 낮아지게 한다. 하지만, 여러 클래스에 로깅이나 보안 및 트랜잭션 등의 공통된 기능들이 흩어져 존재할 수 있다는 한계가 있다. 따라서 AOP가 필요한 것이다. 다시 말해, AOP는 애플리케이션의 핵심 업무 로직에서 로깅이나 보안, 트랜잭션 같은 공통 기능 로직들을 분리하는 것이라고 생각하면 된다. 애플리케이션을 개발하다보면 공통적으로 사용되는 기능들이 있기 마련인데, 이러한 공통 ..

[Spring] IoC / DI

IoC(Inversion of Control)란 직역하면 '제어의 역전', 애플리케이션 흐름의 주도권이 뒤바뀐 것을 말한다. 라이브러리의 애플리케이션 흐름 주도권은 개발자에게 있고 프레임워크의 애플리케이션 흐름 주도권은 프레임워크에 있다. 이것을 IoC라고 부른다. 이처럼 프로그램의 제어 흐름을 직접 제어하는 것이 아니라 외부에서 관리하는 것을 제어의 역전이라 부르며, 이렇게 IoC가 일어나는 공간을 IoC 컨테이너라고 부른다. IoC는 DI(Dependency Injection, 의존성 주입)와 밀접한 관련이 있다. IoC와 DI 모두 객체 간의 결합을 느슨하게 만들어 유연하고 확장성이 뛰어난 코드를 작성하기 때문이다. IoC는 서버 컨테이너 기술, 디자인 패턴, 객체 지향 설계 등에 적용하게 되는 일..

[Spring] POJO

POJO(Plain Old Java Object)는 객체 지향적인 원리에 충실하면서 환경과 기술에 종속되지 않고 필요에 따라 재활용이 가능한 방식으로 설계된 객체이다. 간단히 말하면 Java로 생성하는 순수한 객체라고 표현할 수 있다. Spring은 POJO 프로그래밍을 지향하는 프레임워크이며, POJO는 Spring에서 사용하는 핵심 개념인 IoC/DI, AOP, PSA를 통해 달성할 수 있다. 단순히 순수 자바 객체만을 사용해서 프로그래밍 코드를 작성한다 해서 POJO 프로그래밍이라고 볼 수는 없으며, POJO 프로그래밍으로 작성한 코드가 되기 위해서는 다음과 같은 규칙을 지켜야 한다. Java나 Java의 스펙(사양)에 정의된 것 이외의 특정 기술이나 규약에 종속되지 않는다. : 특성 기술을 상속해..

[Spring] 의존성 주입(Dependency Injection, DI)

Spring Framework의 3가지 핵심 프로그래밍 중 하나인 의존성 주입(DI)은 외부에서 두 객체 간의 관계를 결정해주는 디자인 패턴이다. 의존성 주입의 기본적인 의미는 '외부'에서 클라이언트에게 서비스를 제공하는 것이다. 즉, 객체가 필요로 하는 어떤 것을 외부에서 전달해주는 것으로 생각할 수 있다. 인터페이스를 사이에 둬서 클래스 단계에서는 의존관계가 고정되지 않도록 하고 런타임 시에 관계를 동적으로 주입해서 유연성을 확보하고 결합도를 낮출 수 있게 해준다. 의존성을 주입하는 방법에는 생성자 주입, setter 주입, 필드 주입 등 정말 다양하다. 이 중에서 최근 가장 많이 쓰이는 방법은 생성자 주입이다. 그 이유는 다음과 같다. 우선 생성자 주입은 객체를 생성할 때 1번만 호출되므로 이후에 ..