Back-end

    [Spring] XML을 이용한 DI 의존관계 설정정보

    지금까지 DI 의존관계 설정정보를 자바 코드를 이용해 만들어왔다. 스프링에서는 다양한 방법을 통해 DI 의존관계 설정정보를 만들 수 있는데, 대표적으로 XML이 있다. ✏️XML의 장점 단순한 텍스트 파일이기 때문에 다루기 쉽다. 쉽게 이해할 수 있으며 컴파일과 같은 별도의 빌드 작업이 없다 환경이 달라져서 오브젝트 관계가 바뀌는 경우에도 빠르게 변경사항을 반영 할 수 있다. 스키마나 DTD를 이용해서 정해진 포맷을 따라 작성됐는지 손쉽게 확인할 수 있다. ✏️ XML을 이용한 설정 애플리케이션 컨텍스트는 XML에 담긴 DI 정보를 활용 할 수 있다. XML 설정은 @Configuration과 @Bean이 붙은 자바 클래스로 만든 설정과 내용이 동일한데 아래와 같이 만들 수 있다. 자바 코드 설정정보 X..

    [Spring] 의존성 주입 - DI

    💡 의존성 주입이란? IoC라는 용어는 매우 느슨하게 정의돼서 폭 넓게 사용되는 용어입니다. 그렇기 때문에 몇몇 사람의 제안으로 스프링이 제공하는 IoC방식의 핵심을 짚어주는 명확히 드러나는 이름을 만드는데, 이를 의존관계 주입(Dependency Injection)이라고 합니다. 스프링 IoC 기능의 대표적인 동작원리는 주로 의존관계 주입이라고 불립니다. 따라서 IoC컨테이너를 지금은 의존관계 주입 컨테이너, DI 컨테이너라 더 많이 불리고 있습니다. ✏️ 의존관계란? 누가 누구에게 의존하는 관계에 있다. UML모델에서는 두 클래스의 의존관계를 아래와 같이 표현한다. 의존한다는 건 의존대상, B가 A에 영향을 미친다는 뜻인데, B의 기능이 추가되거나 변경되면 그 영향이 A로 전달된다는 것이다. 다시 말..

    [Spring] 싱글톤 레지스트리

    💡 싱글톤 패턴이란? 서버는 하나당 최대로 초당 수십에서 수백 번씩 요청을 받아 처리할 수 있는 높은 성능을 요구하며, 계층형구조로 이뤄진 경우가 대부분이고, 비즈니스 로직도 복잡한 경우가 많습니다. 이때 매번 요청이 올때마다 로직을 담당하는 오브젝트를 만든다면, 부하가 걸려 서버가 감당하기 힘들것입니다. (오브젝트의 동일성과 등등성 참고) 그래서 서비스 오브젝트라는 개념을 사용해 하나의 오브젝트만 만들어두고, 이를 공유해서 사용하는 방식을 택합니다. 이렇게 애플리케이션 안에 제한된 수, 대개 한 개의 오브젝트만 만들엇 사용하는 것이 싱글톤 패턴 원리입니다. ✏️ 싱글톤 패턴의 구현 방법 클래스 밖에서는 오브젝트 생성을 못하고, 생성자를 private로 만듭니다. 생성된 싱글톤 오브젝트를 저장할 수 있는..

    [Spring] 스프링의 IoC

    👉 지금까지 대표적인 IoC 프레임워크인 스프링 없이도 IoC 개념을 적용했었는데, 이번에는 스프링 프레임워크를 사용해 IoC 스타일의 애플리케이션을 설계해보겠습니다. 스프링의 IoC 핵심은 빈 팩토리(Bean Factroy)와 애플리케이션 컨텍스트(Application Context)가 있습니다. 스프링에서는 빈의 생성과 관계설정 같은 제어를 담당하는 IoC 오브젝트를 빈 팩토리라 부릅니다. 그리고 이를 좀 더 확장한 것을 애플리케이션 컨텍스트라고 부릅니다. 이 둘의 차이점은 빈팩토리는 빈을 생성하고 관계를 설정하는 IoC의 기본 기능에 초점을 맞췄고, 애플리케이션 컨텍스트는 애플리케이션 전반에 걸쳐 모든 구성요소의 제어 작업을 담당하는 IoC엔진입니다. 💡 빈(Bean)이란? 스프링이 제어권을 가지고..

    [Spring] 오브젝트 팩토리

    👉 클라이언트인 UserDaoTest에서 ConnectionMaker 구현 클래스를 사용할지를 결정하는 기능을 갖고 있습니다. 하지만 UserDaoTest는 UserDao의 기능이 잘 동작하는지 테스트를 위한 클래스입니다. 그렇기 때문에 UserDaoTest에 있는 Connection Maker 구현 부분을 분리해야합니다. 💡 팩토리 분리시킬 기능을 담당할 클래스를 만들기 위해, 이 클래스는 객체의 생성 방법을 결정하고 그렇게 만들어진 오브젝트를 돌려주는 것인데, 이 클래스를 팩토리라고 부릅니다. 주의해야할 점은 추상 팩토리 패턴이나 팩토리 메소드 패턴과는 다르다는 것을 인지해야합니다. 이제 팩토리 클래스의 역할을 하는 DaoFactory 클래스를 만들어보겠습니다. DaoFactory 클래스 public..

    [Spring] 객체지향적 DAO - 확장 (전략 패턴)

    객체지향 세계에서 모든 오브젝트는 변한다고 했는데, 모든 오브젝트가 다 동일한 방식으로 변하진 않습니다. 이전 글에서, 상속을 통해 DAO를 분리해봤습니다. 하지만 상속에는 여러 가지 문제점이 있습니다. 참고: https://withseungryu.tistory.com/67 [Spring] 객체지향적 DAO 만들기 - 분리 👉 객체지향의 세계에서는 모든것이 변하는데, 쉽게 말하면 객체에 대한 설계와 이를 구현한 코드가 변한다는 것입니다. 그렇기 때문에 개발자는 객체를 설계할 때 바로 미래의 변화를 어떻게 withseungryu.tistory.com 이러한 문제들이 있기 때문에, 이번에는 상속 관계과 아닌 독립적인 클래스로 만들어보겠습니다. 즉, DB Connection 부분을 서브클래스가 아닌, 별도의 ..