728x90
반응형

Spring/스프링의 이해와 원리 10

[스프링의 이해와 원리] 2.2 테스트

▶ 스프링의 테스트 적용 지난 게시글에서 정리했듯이, JUnit은 독립적인 테스트를 지원하기 위해 매 번 새로운 애플리케이션 컨텍스트 오브젝트를 만들게 했다. 따라서 @Before 메소드가 테스트 메소드 개수만큼 반복되기 때문에 애플리케이션 컨텍스트도 그 개수만큼 생성된다. 설정도 간단하고 빈도 몇 개 없는 경우에는 별 문제가 되지 않지만, 빈이 많아지고 복잡해지면 애플리케이션 컨텍스트 생성에 적지 않은 시간이 걸릴 수 있다. 애플리케이션 컨텍스트가 만들어질 때는 모든 싱글톤 빈 프로젝트를 초기화한다. 어떤 빈은 오브젝트가 생성될 때 자체적인 초기화 작업을 진행해서 제법 많은 시간을 필요로 할 수 있다. 또, 애플리케이션 컨텍스트가 초기화될 때 어떤 빈은 독자적으로 많은 리소스를 할당하거나 독립적인 스레..

[스프링의 이해와 원리] 2.1 테스트

Spring에서 개발자에게 제공하는 가장 중요한 가치는 객체지향과 테스트이다. 스프링의 핵심인 IoC와 DI는 오브젝트의 설계와 생성, 관계, 사용에 관환 기술이다. Spring은 IoC/DI를 이용해 객체지향 프로그래밍 언어의 근본과 가치를 개발자가 손쉽게 적용하고 사용할 수 있게 도와주는 기술이다. 개발을 진행하다보면 애플리케이션은 계속 변하고 복잡해져 간다. 그 변화에 대응하는 첫 번째 전략이 확장과 변화를 고려한 객체지향적 설계와 그것을 효과적으로 담아낼 수 있는 IoC/DI 같은 기술이라면, 두 번째 전략은 만들어진 코드를 확실할 수 있게 해주고, 변화에 유연하게 대처할 수 있는 테스트 기술이다. ▶ 웹을 통한 테스트 방법의 문제점 테스트 코드를 사용하지 않고 웹을 통해 테스트하는 것은 매우 불..

스프링의 디자인 패턴

※ 디자인 패턴 디자인 패턴은 소프트웨어 설계 시 특정 상황에서 자주 만나는 문제를 해결하기 위해 사용할 수 있는 재사용 가능한 솔루션을 말한다. 모든 패턴에는 간결한 이름이 있어서 잘 알려진 패턴을 적용하고자 할 때 간단히 패턴 이름을 언급하는 것만으로도 설계의 의도와 해결책을 함께 설명할 수 있다는 장점이 있다. 디자인 패턴은 주로 객체지향 설계에 관한 것이고, 대부분 객체지향적 설계 원칙을 이용해 문제를 해결한다. 패턴의 설계 구조를 보면 대부분 비슷한데, 그 이유는 객체지향적인 설계로부터 문제를 해결하기 위해 적용할 수 있는 확장성 추구 방법이 대부분 두 가지 구조로 정리되기 때문이다. 하나는 클래스 상속이고 다른 하나는 오브젝트 합성이다. 따라서 패턴의 결과로 나온 코드나 설계 구조만 보면 대부..

오브젝트와 의존관계 - 싱글톤 패턴과 스프링에서의 싱글톤

스프링은 기본적으로 별다른 설정을 하지 않으면 내부에서 생성하는 빈 오브젝트를 모두 싱글톤으로 만든다. 여기서 싱글톤이라는 것은 디자인 패턴에서 나오는 싱그톤 패턴과 비슷한 개념이지만 구현 방법은 확연히 다르다. 싱글톤 패턴의 원리는 애플리케이션 안에 제한된 수, 대개 한 개의 오브젝트만 만들어서 사용하는 것이다. 매번 클라이언트에서 요청이 올 때마다 각 로직을 담당하는 오브젝트를 새로 만들어서 사용한다고 가정하면 요청 한 번에 5개의 오브젝트가 새로 만들어지고 초당 500개의 요청이 들어오면 초당 2500개의 새로운 오브젝트가 생성된다. 아무리 환경이 좋아졌다고 한들 이렇게 부하가 걸리면 서버가 감당하기 힘들어진다. 따라서 서버환경엣는 서비스 싱글톤의 사용이 권장된다. 하지만 디자인 패턴에 소개된 싱글..

오브젝트와 의존관계 - 3. DB 커넥션 독립 / 디자인 패턴

UserDao의 커넥션 만들기를 관심사의 분리를 통해 변화에 좀 더 유연하게 대처할 수 있는 코드를 만들었다. 근데 만약 다른 환경에서 위 코드를 사용하고 싶은데 각 환경마다 DB가 달라 매 번 커넥션을 가져올 때마다 변경될 가능성이 존재하면 어떻게 해야할까? 상속을 통한 확장 기존 UserDao 코드에서 한 단계 더 분리해보자. getConnection()을 추상 메소드로 만들어놓는다. 추상 메소드라서 메소드 코드는 없지만 메소드 자체는 존재한다. public abstract Connection getConnection() throws ClassNotFoundException, SQLException; 위와 같은 추상 메소드를 만들어놓고 public class AUserDao extends UserDa..

오브젝트와 의존관계 - etc. 스프링 IoC의 용어 정리

▶ 빈 (bean) - 빈 또는 빈 오브젝트는 스프링이 IoC 방식으로 관리하는 오브젝트라는 뜻이다. 관리되는 오브젝트(managed object)라고 부르기도 한다. 주의할 점은 스프링을 사용하는 애플리케이션에서 만들어지는 모든 오브젝트가 다 빈은 아니라는 사실이다. 그 중에서 스프링이 직접 그 생성과 제어를 담당하는 오브젝트만을 빈이라고 부른다. ▶ 빈 팩토리 (bean factory) - 스프링의 IoC를 담당하는 핵심 컨테이너. 빈을 등록, 생성, 조회, 반환을 하며, 그 외에 부가적인 빈을 관리하는 기능을 담당한다. 보통은 이 빈 팩토리를 바로 사용하지 않고 이를 확장한 애플리케이션 컨텍스트를 사용한다. BeanFactory라고 붙여쓰면 빈 팩토리가 구현하고 있는 가장 기본적인 인터페이스의 이름..

오브젝트와 의존관계 - 5. 제어의 역전(IoC) / Spring's IoC

IoC라는 약자로 많이 사용되는 제어의 역전(Inversion of Control)이라는 용어가 있다. 제어권의 이전을 통한 제어관계 역전 제어의 역전이라는 건, 간단히 프로그램의 제어 흐름 구조가 뒤바뀌는 것이라고 설명할 수 있다. 일반적으로 프로그램의 흐름은 main() 메서드와 같이 프로그램이 시작되는 지점에서 다음에 사용할 오브젝트를 결정하고, 결정한 오브젝트를 생성하고, 만들어진 오브젝트에 있는 메서드를 호출하고, 그 오브젝트 메서드 안에서 다음에 사용할 것을 결정하고 호출하는 식의 작업이 반복된다. 이렇게 진행되면 모든 종류의 작업을 사용하는 쪽에서 제어하는 구조이다. 제어의 역전이란 이런 제어 흐름의 개념을 거꾸로 뒤집는 것이다. 제어의 역전에서는 오브젝트가 자신이 사용할 오브젝트를 스스로 ..

오브젝트와 의존관계 - 4. 개방 폐쇄 원칙 / 전략 패턴

개방 폐쇄 원칙(OCP, Open-Closed Principle)은 깔끔한 설계를 위해 적용 가능한 객체 지향 설계 원칙 중의 하나다. 이 원칙을 간단히 정의하자면 클래스나 모듈은 확장에는 열려 있어야 하고 변경에는 닫혀 있어야한다. 좋은 객체 지향 설계 원칙(SOLID)에 대해 정리해놓은 글이 있다. https://wonsjung.tistory.com/290?category=987440 좋은 객체 지향 프로그래밍 다형성 : Polymorphism 하나의 코드로 다양한 타입의 객체를 처리하는 기술 : 인터페이스를 기반으로 한 구현 클래스로 다른 일을 할 수 있도록 하는 것 -> 오버라이딩을 통해 가능하다. 스프링을 이 wonsjung.tistory.com 높은 응집도와 낮은 결합도 개방 폐쇄 원칙은 높은..

오브젝트와 의존관계 - 2. 관심사의 분리 + 리팩토링

전 게시글에서 만들어본 UserDao 클래스이다. package jpaEx.toyP.tobispring; import javax.xml.transform.Result; import java.sql.*; public class UserDao1 { public void add(User user) throws ClassNotFoundException, SQLException{ Class.forName("com.mysql.jdbc.Driver"); Connection c = DriverManager.getConnection( "jdbc:mysql://localhost/springbook", "spring", "book"); PreparedStatement ps = c.prepareStatement( "inser..

오브젝트와 의존관계 - 1. 스프링의 기본, 오브젝트 이해하기

스프링은 자바를 기반으로 한 기술로 스프링이 자바에서 가장 중요하게 두는 것은 객체 지향 설계이다. 따라서, 스프링을 바르게 이해하기 위해서는 가장 먼저 오브젝트에 대한 기본적인 이해가 필요하다. 애플리케이션에서 오브젝트가 생성되고 다른 오브젝트와 관계를 맺고, 사용되고, 소멸되는 전 과정을 바르게 이해해야한다. 따라서, 이 글에서는 스프링에 대한 글이 아닌 오브젝트의 설계와 구현에 대해 살펴본다. 사용자 정보를 JDBC API를 통해 DB에 저장하고 조회할 수 있는 간단한 DAO를 만들어보자 DAO(Data Access Object) : DB를 사용해 데이트럴 조회하거나 조작하는 기능을 전담하도록 만든 오브젝트 사용자의 정보(id, name, password)를 가진 User 클래스를 만들어보자. 롬복..

728x90
반응형