[Spring] 의존 관계 주입(DI) & 의존 관계 검색(DL)
·
Framework/Spring
의존 관계 Dependency스프링은 의존관계 주입 컨테이너, DI컨테이너라고도 불린다. 여기서 말하는 의존관계 즉, 의존성은 한 객체가 다른 객체에 의존하고 있다는 의미를 가지고 있다. 객체 지향 프로그래밍에서는 다른 객체를 사용하기 위해 호출을 할 때, 파라미터를 이용해 메세지를 주고 받거나, 객체를 직접 가져오기도 한다. 이 모두 의존관계가 형성되어 있는 것이다.의존성은 컴파일 의존성과 런타임 의존성으로 나뉘게 된다.  컴파일 의존성 Compile Dependency (정적 의존성, Static Dependency) 컴파일은 소스코드가 기계어로 변환하는 시점으로, 컴파일타임 의존성은 컴파일러가 직접 관리하여 코드를 통해 의존성을 확인한다. 코드 자체에서 어떤 객체를 참고할지 결정하고 있기 때문에 정..
[Spring] 싱글톤 레지스트리(Singleton Registry)란?
·
Framework/Spring
싱글톤 패턴일반적으로 객체를 여러번 생성하면 그 객체가 가지고 있는 정보는 같지만, 객체 자체는 모두 다른 객체이다.완전히 같은 오브젝트는 동일하다고 하고, 동일한 정보를 가지고 있는 건 동등하다고 한다.하지만 스프링에서는 여러번 빈을 요청해도 매번 동일한 오브젝트를 돌려준다.이는 스프링이 싱글톤을 적용하고 있기 때문이다.2024.12.06 - [Knowledge/디자인패턴] - [디자인 패턴] 싱글톤 패턴(Singleton Pattern) 싱글톤은 이와 같이 유일한 인스턴스를 사용해 메모리를 절약하고, 이미 생성된 인스턴스에 접근해 속도가 빠르다는 장점이 있다. 하지만 싱글톤의 사용은 위 글에서처럼 장점보다 큰 단점을 가지고 있다. private로 생성되어 객체 지향의 특징인 다형성 적용이 불가능하고,..
[토비의스프링] 1.5 스프링의 IoC
·
Framework/Spring
스프링의 핵심스프링의 핵심은 빈 팩토리, 애플리케이션 컨텍스트 라고 불리는 것에서 담당한다. 빈 Bean스프링이 제어권을 가지고 직접 만들고, 관계를 부여하는 오브젝트오브젝트 단위의 애플리케이션 컴포넌트스프링 컨테이너가 생성과 관계 설정, 사용 등을 제어하는 제어의 역전이 적용된 오브젝트 빈 팩토리와 애플리케이션 컨텍스트빈 팩토리빈의 생성과 관계 설정 같은 제어 담당 IoC오브젝트. 보통 빈 팩토리보다 애플리케이션 컨텍스트를 주로 사용한다.애플리케이션 컨텍스트IoC방식을 따라 만들어진 빈 팩토리. 빈 생성, 관계 설정 등 제어 작업 총괄빈 팩토리는 빈을 생성하고 관계를 설정하는 IoC기본 기능을 가지고 있다면, 애플리케이션 컨텍스트는 이 빈 팩토리의 확장형으로, 빈 팩토리의 모든 기능을 포함하여 추가 기..
[토비의스프링] 1.4 제어의 역전(IoC)
·
Framework/Spring
[1.3 DAO의 확장] 마지막 단계에서 만든 UserDaoTest는 클라이언트 역할을 하는 클래스로 생성하였다.다른 책임이나 관심사를 독립적으로 분리시키며서 DAO를 만들어왔지만, 결국 클라이언트 역할을 하는 이 테스트 클래스에서 '어떤 DB커넥션을 가져올지 결정하는 책임'을 맡게 되었다.  다시 이 클라이언트를 분리시키는 작업을 해보겠다. 여기서 팩토리(Factory)라는 개념이 등장한다. 팩토리(Factory)객체의 생성 방법을 결정하고, 객체를 돌려주는 역할을 한다.오브젝트를 생성하는 것과, 생성된 오브젝트를 사용하는 것을 분리하기 위한 목적으로 사용한다. 클라이언트 UserDaoTest 속 UserDAO, ConnectionMaker의 생성과정을 새로운 팩토리로 옮기고,클라이언트에서 팩토리에서 ..
[토비의스프링] 1.3 DAO의 확장
·
Framework/Spring
[1.2 DAO의 분리]에서는 DB 커넥션을 가져오는 코드를 메소드로 따로 분리하였고, 이 메소드를 추상메소드로 만들어 UserDAO를 다른 사용자가 상속받아 사용할 수 있게 하였다. 상속을 통해서 만들면 다중 상속 문제가 발생할 수 있으며, 슈퍼클래스에 제약을 걸어야 하는 필요성이 생기거나, 메소드가 매 클래스마다 중복 생성이 되는 단점이 있다. '상속'을 통해 생기는 문제점으로 상속을 하지 않으면 해결되지 않을까?추상 메소드로 분리해둔 DB커넥션을 독립적인 클래스로 만들어 나누어 보겠다.  package springbook.user.dao;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;publi..
[토비의스프링] 1.2 DAO의 분리
·
Framework/Spring
1.1 에 작성한 DAO는 초난감 코드로 동작은 제대로 작동하지만 효율적인 코드는 아니다.add()와 get()에서 모두 Connection을 가져오는 중복된 코드가 존재한다.일단 이 중복된 코드를 따로 구현하여 Connection을 동작하는 getConnection 메소드를 생성할 수 있다. public void add(User user) throws ClassNotFoundException, SQLException{ Connection c = getConnection(); ... } public User get(String id) throws ClassNotFoundException, SQLException{ Connection c = getConnection()..
[토비의스프링] 1.1 초난감 DAO
·
Framework/Spring
[토비의스프링 3.1] 첫 단계 '1.1 초난감 DAO'를 통해 DAO의 의미와 간단한 이용법을 알아보았다.DAO는 Database Access Obejct로 말 그대로 데이터베이스를 조작하거나 조회하는 기능의 오브젝트이다.데이터베이스의 가장 기본적인 CRUD를 이 DAO를 통해 조작한다.CRUD는 Create, Read, Update, Delete로 데이터를 생성, 사용, 수정, 삭제 동작의 약자이다. 본 코드를 실습해보기 전 JDBC가 동작하기 위해 사용하는 클래스는 아래와 같다.Connection: 데이터베이스 연결Statement · PreparedStatement: SQL 쿼리문을 담아서 실행ResultSet: 실행 결과를 옮겨 오브젝트에 저장  MySQL에서 테이블을 생성한다.CREATE DA..
[Spring] HttpServlet에 대해
·
Framework/Spring
HttpServlethttp프로토콜에 특화된 기능을 처리하기 위한 용도  요청 Request를 처리해서 응답 Response하는 목적으로 설계되었다.httpServlet을 상속받은 객체는 WAS 내부에서 자동으로 객체가 생성, 관리 된다.멀티스레드에 의해 동시 실행될 수 있도록 처리할 수 있다. 객체 자동 관리서블릿은 웹이라는 특수한 환경으로 인해 개발자가 직접 객체를 생성하는 대신 톰캣에서 객체를 관리한다.서블릿 관점에서 톰캣은 서블릿 컨테이너로 볼 수 있다.  처리 과정서블릿이 처리해야 하는 특정 경로 호출경로에 맞는 서블릿 클래스를 로딩하고 개체를 생성 → init()메서드 실행요청 정보를 분석해 쿼리 스트링의 파라미터를 HttpServletRequest로 전달 받는다.응답에 필요한 기능은 Http..
[Spring] Spring MVC 구조 알아보기
·
Framework/Spring
Model View Controller어플리케이션 구성 시 요소를 세가지 역할로 구분해 서로 영향을 주지 않고 수정 가능한 MVC구조  Model비즈니스 로직을 담당하며, 데이터를 처리하는 것. 데이터베이스와 연동하는 DAO와 데이터 구조의 DO로 구성되어 있다. 데이터베이스에서 처리하여 데이터를 가공한 뒤 뷰로 전달한다. View데이터를 별도 보관하지 않고 화면에 보여주는 자체 영역 Controller모델과 뷰 사이 다리 역할을 하는 컨트롤러는 입력에 대한 모델과 뷰의 업데이트 로직이 포함되어 있다. 사용자의 요청을 받는 역할은 이 컨트롤러에서 진행된다. 각 영역이 독립적으로 구성되어 의존성이 낮아진다. 개발자 간 협업이 원활하지만, 데이터 처리가 커지면 컨트롤러가 해야 할 일이 많아져 역할 분담이 필..