[Spring Core] Spring Framework 기본 3

grapefruit·2022년 10월 13일
0

BE 2022-10.10~10.14

목록 보기
4/8

👨🏻‍💻IoC(Inversion of Control)란?

Library는 애플리케이션 흐름의 주도권이 개발자에게 있고, Framework은 애플리케이션 흐름의 주도권이 Framework에 있다.

여기서 말하는 애플리케이션 흐름의 주도권이 뒤바뀐 것을 바로 IoC(Inversion of Control)라고 한다.


👨🏻‍💻Java 콘솔 애플리케이션의 일반적인 제어권

public class Example2_10 {
    public static void main(String[] args) {
        System.out.println("Hello IoC!");
    }
}

Java 콘솔 애플리케이션을 실행하려면 main() 메서드가 있어야 한다.

그래야 이 main() 메서드 안에서 다른 객체의 메서드를 호출한다던가 하는 프로세스가 진행이 될테니까

위 코드에서는 main() 메서드가 호출 되고 난 다음에 System 클래스를 통해서 static 멤버 변수인 out의 println()을 호출한다.

이렇게 개발자가 작성한 코드를 순차적으로 실행하는게 애플리케이션의 일반적인 제어 흐름이다.


👨🏻‍💻Java 웹 애플리케이션에서 IoC가 적용되는 예

이번에는 Java 콘솔 애플리케이션이 아니라 웹 상에서 돌아가는 Java 웹 애플리케이션의 경우를 한번 생각해보자.

서블릿 기반의 애플리케이션을 웹에서 실행하기 위한 서블릿 컨테이너의 모습이다.

Java 콘솔 애플리케이션의 경우 main() 메서드가 종료되면 애플리케이션의 실행이 종료됩니다.

하지만 웹에서 동작하는 애플리케이션의 경우 클라이언트가 외부에서 접속해서 사용하는 서비스이기 때문에 main() 메서드가 종료되지 않아야 할 것이다.

그런데 서블릿 컨테이너에는 서블릿 사양(Specification)에 맞게 작성된 서블릿 클래스만 존재하지 별도의 main() 메서드가 존재하지 않습니다.

main() 메서드처럼 애플리케이션이 시작되는 지점을 엔트리 포인트(Entry point)라고도 부릅니다.

main() 메서드가 없는데 어떻게 애플리케이션이 실행 되는 이유는 서블릿 컨테이너의 경우, 클라이언트의 요청이 들어올 때마다 서블릿 컨테이너 내의 컨테이너 로직(service() 메서드)이 서블릿을 직접 실행시켜 주기 때문에 main() 메서드가 필요없다.

이 경우에는 서블릿 컨테이너가 서블릿을 제어하고 있기 때문에 애플리케이션의 주도권은 서블릿 컨테이너에 있다.

바로 서블릿과 웹 애플리케이션 간에 IoC(제어의 역전)의 개념이 적용되어 있는 것이다.

profile
개발자몽

0개의 댓글