목록Programing & Coding/Spring (15)
S E P H ' S
Spring 애플리케이션을 개발하면서 JPA를 선택하는 이유가 무엇일까? MyBatis로도 DB를 쉽게 다루고 동적 쿼리를 작성할 수 있는데 말이다. 이에 대해서는 먼저 ORM에 대해 이해하는 것이 필요하다. ORM ORM(Object Relational Mapping)을 직역하면 객체 관계 매핑이다. 말그대로 객체의 관계를 매핑한다는 말이다. 무엇을 매핑하는 것일까? 우리는 Spring, 즉 Java 코드를 작성할때, 객체 지향 프로그래밍으로 코드를 작성한다. (최대한..) 객체 지향 프로그래밍에서는 하나의 객체가 자신의 역할을 준수하며 책임을 다하고 메시지를 기반으로 여러 객체들과의 협력을 이뤄내면서 작동한다. 관계형 데이터베이스는 테이블을 사용한다. 객체 지향 프로그래밍의 객체 모델과 관계형 데이터..
JDK 동적 프록시 & CGLIB 동적 프록시 이전 포스트의 내용을 한번 정리하고 프록시 팩토리에 대해서 시작해보자. 동적 프록시를 생성하기 위해 Java의 리플렉션을 활용하여 동적으로 메소드를 뽑아냈다. 그리고 이를 바탕으로 구현된 JDK 동적 프록시 기술로 프록시 객체를 만들어 의존관계 주입을 통해서 처리했다. 그러나 JDK 동적 프록시는 반드시 인터페이스가 있는 환경에서만 사용할 수 있다는 한계가 있다. 인터페이스의 클래스 로더, 클래스 메타 정보 등을 넣어주어 동적으로 메소드를 뽑아오기 때문이었다. 그래서 인터페이스 없이 구체 클래스만 있을 때는 CGLIB라는 라이브러리를 이용하여 대상 객체를 상속받은 동적 프록시 객체를 만들었다. 실무에서는 인터페이스가 있는 경우, 구체 클래스만 있는 경우 등 ..
AOP 포스팅 4. Spring AOP와 디자인 패턴 (1) 5. Spring AOP - 총정리 (2) AOP를 달성하기 위해 사용한 디자인 패턴을 알아보면서 어떤 식으로 개선을 해왔는지 알아봤다. 하지만 5번 포스팅의 마지막 정리 부분에서 말했듯이 프록시 패턴이나 데코레이터 패턴을 사용하더라도 부가 기능을 도입하고자 하는 클래스의 개수만큼 필요한 클래스를 만들어야 한다는 문제점이 있었다. 이를 동적 프록시 적용 (JDK 동적 프록시, CGLIB, ProxyFactory) 으로 해결할 수 있다고 했었다. 동적 프록시(Dynamic Proxy) 앞서 말했듯이 프록시를 적용해야할 클래스가 너무 많다면 프록시 클래스를 그 개수 만큼 일일이 만드는 것은 엄청난 노동이다. 이를 해소하기 위한 기술이 동적 프록시이..
Annotation 어노테이션은 Spring에서 많이 사용되기는 하지만 Java 자체 기술이다. 스프링을 사용하면서 자연스럽게 많이 사용하거나 심지어는 그냥 그러려니 하고 지나가지만 동작 원리에 대해서는 제대로 생각해보지 않았던 사람들이 많을 것이다. (나도 마찬가지..) 어노테이션은 사전적의미로는 주석이라는 뜻이다. 자바에서 사용될 때 어노테이션은 코드 사이에 주석처럼 쓰여서 특별한 의미, 기능을 수행하도록 하는 기술이다. 즉, 프로그램에 추가적인 정보를 제공해주는 메타데이터(데이터를 위한 데이터)라고 볼 수 있다. 어노테이션에 대한 자세한 설명은 [Java] 6. Annotation 에서 확인할 수 있다. Spring의 대표적인 Annotation과 역할 @Component 개발자가 생성한 클래스를 ..