2.서블릿 컨테이너
서블릿은 서블릿 컨테이너에 의해 관리되어 동작함
1. 서블릿 컨테이너
서블릿 컨테이너(Servlet Container)란 Java 기반 웹 프로그램에서 사용되는 Servlet 객체를 관리하는 공간(컨테이너)
→ ex. FirstServlet.java는 곧 서블릿 객체 인스턴스를 뜻함
서블릿 컨테이너는 웹 컨테이너, Tomcat 컨테이너라고 표현하기도 함
현재 서버 실행으로 사용 중인 Apache Tomcat이 대표적인 서블릿 컨테이너로 동작하고 있음
사용자의 요청에 의해 생성된 서블릿 객체는 서블릿 컨테이너 내부에 보관되고,
이후 동일한 경로로 요청이 올 경우, 보관하고 있던 서블릿을 재사용함
→ 매 요청이 발생할 때마다 새로운 서블릿 객체를 생성하지 않음
정리하면,
서블릿 컨테이너는 작성된 서블릿 객체를 생성하고, 서블릿 컨테이너 내부에서 보관, 관리하고 있다가
요청에 따라 해당 서블릿 객체를 실행시켜주는 역할을 함
→ 더 정확하게는 EJB Conatiner에서 Bean의 형태로 관리된다고 함
Java 진영에서 대표적으로 사용하는 서블릿 컨테이너가 Apache Tomcat

제어의 역전, Inversion of Control(IoC)
1. Java SE 기반의 콘솔(Console) 프로그램
Java SE 기반의 콘솔 프로그램을 실행할 때는 개발자가 직접 인스턴스를 작성 및 관리하는 방식으로, 작성한 코드는 main() 내부에서 수행되었음
→ 프로그램에 대한 제어권이 개발자한테 있음
2. Java EE 기반의 컨테이너 방식으로 동작하는 웹 서버 프로그램, Servlet/JSP
프로그램을 실행하던 main()가 사라지고,
프로그램, 보다 정확하게는 서버를 실행하면 서버의 동작에 필요한 모든 인스턴스들은 개발자가 아닌 컨테이너가 생성, 관리하는 방식
→ 프로그램의 처리 흐름과 동작에 대한 제어권이 개발자에서 컨테이너로 변경됨