이마닷의 블로그

[spring] java-spring 기본 개념 본문

java + kotlin

[spring] java-spring 기본 개념

움나나움 2020. 7. 29. 18:21

1. IoC 와 Container

inversion of control. 역제어. 전통적 개발 방식에서 개발자(클라이언트 코드)가 가지고 있던 객체에 대한 제어권(control)이, 프레임워크를 사용하게 되면서 컨테이터(container)에게 넘어가게 된 현상. 프레임워크 기반의 개발에서는, 컨테이너가 객체의 생성부터 생명주기까지 모두 관리한다.

 

2. DI

dependency Injection. 의존성 주입. 한 클래스에서, 그 클래스와 연결된 다른 객체를 클래스 내부에서 생성하는 것이 아니라, 외부에서 주입해 주는 것. Spring과 같은 프레임워크에서는 보통 IoC 컨테이너에서 의존성 있는 객체를 만들어준 후, 이를 대상 클래스에 주입(Injection)해 줌으로써 의존성을 설정한다. DI는 setter를 통해서 이루어질 수 있다.

class Example {
	
    DepedentObj dependentObj;
    
    public void setDependentObj (DependentObj obj) {
    	this.dependentObj = obj;
    }
}

 

3. Bean

Java에서 특정 규칙을 만족하는 클래스를 총칭하는 말이다. 해당 규칙은 아래와 같다.

1. 모든 클래스의 property는 private이고, 각 객체는 getter와 setter를 가지고 있다.
2. 인자를 가지지 않는 public 생성자가 존재한다.
3. serializable 인터페이스를 구현한다. (ex. class MyBean implements Serializable)

3-1. POJO

Plain Old Java Object. 순수한 Java 객체를 가리키는 말로, loose coupling 개념을 강조하기 위해 사용되는 용어이다. 즉, 특정 기술에 종속되지 않는 Java 객체를 뜻하며, Bean도 POJO에 속하는 개념이다.

 

3-2. Bean Scope

bean의 생명주기. spring에서는 기본적으로 java bean의 bean scope를 singleton으로 설정해 관리한다. singleton은 IoC 컨테이너 내에 있는 bean 클래스의 객체를 단 하나만 생성함을 의미하며, bean scope가 prototype이면 IoC 컨테이너 내에 bean 클래스의 객체가 여러개가 된다. 즉, singleton일 경우, 해당 bean의 객체를 가져올 때 매번 동일한 하나의 인스턴스만을 가져오게 되며, prototype일 경우에는 bean을 가져올 때마다 새로운 인스턴스를 생성해서 가져오게 된다.

 

3-3. EJB

Enterprise Java Beans. 서버 애플리케이션의 생산성과 이동성을 향상시키기 위해 만들어진 Bean으로, Enterprise Bean, Container, EJB Server, Client Application으로 구성된다. 

 

3-3-1. Enterprise Bean

Session Bean과 Entity Bean 두 개의 모델을 가지며, 비즈니스 로직을 담당한다. Session Bean은 클라이언트와의 세션을 처리하기 위한 object이고, entity bean은 db의 레코드를 object 형태로 받아오기 위한 object이다.

 

3-3-2. Container

EJB Server와 Enterprise Bean을 매개하기 위해 존재하는 컨테이너.

 

3-3-3. EJB Server

컨테이너를 관리함으로써, DB처리, 트랜잭션 처리 등 시스템 레벨의 서비스를 실현한다.

 

3-3-4. Client Application

말 그대로 클라이언트 어플리케이션. servlet, jsp등

 

 

 

[참고] (IoC, DI)

https://jongmin92.github.io/2018/02/11/Spring/spring-ioc-di/

https://medium.com/@jang.wangsu/di-inversion-of-control-container-%EB%9E%80-12ecd70ac7ea

https://private.tistory.com/39

 

[참고] (Bean)
https://www.hanumoka.net/2019/01/06/java-20190106-java-pojo-vs-bean/

https://javaslave.tistory.com/45

https://www.slipp.net/wiki/pages/viewpage.action?pageId=25528177

https://pokey.tistory.com/7

'java + kotlin' 카테고리의 다른 글

[spring] test 환경 분리하기  (0) 2021.01.11
[spring] Nested JSON 만들기  (1) 2020.12.25
[spring] springboot test (draft)  (0) 2020.12.20
Comments