spring 16

[Spring] 관심사의 분리와 MVC 패턴에 대해 알아보자

관심사의 분리 하나의 메서드에서 여러 기능을 하는 로직이 많아지면 유지보수 측면에서 어려움을 겪을 수 있다. 아래 코드는 main 메서드에 입력, 작업, 출력 이라는 기능(관심사)이 3개가 있는 것을 볼 수 있다. 이 코드는 단순하지만, 복잡한 기능이 하나의 메서드에 여러개 있다면 그것을 찾는 일은 어려울 것이다. 그래서 우리는 관심사를 분리해야 한다. 앞으로 배울 MVC 패턴도 관심사의 분리라는 개념에서 시작된다. @Controller public class UserInfo { @RequestMapping("/userInfo") public void main(HttpServletRequest request, HttpServletResponse response) throws Exception { // 1..

[Spring] Tomcat의 내부 구조, 설정 파일에 대해 알아보자

웹 서버 구조 톰캣의 내부 구조와 처리과정 1. 클라이언트가 브라우저에서 URL을 요청 (8080포트) - ex) http://www.naver.com/event/list 2. 톰캣의 Thread Pool에서 해당 요청을 받아서 Connector를 통해 HTTP버전에 맞는 요청을 연결해준다. 3. Engine에서 URL에 해당하는 Host로 접근 - ex) www.naver.com 4. 호스트의 각 Context(Spring Project) 로 접근 - ex) /event 5. Context 내부에는 각각의 서블릿이 들어있으며 url에 맞는 서블릿에 접근한다. - ex) /list 6. 해당 서블릿이 실행되고 그 결과를 브라우저에 전송한다. 브라우저 요청 -> 톰캣서버 -> Host -> Context ..

[Spring] 클라이언트와 서버에 대해 알아보자

클라이언트와 서버 역할에 따라 클라이언트와 서버를 구분할 수 있다. 클라이언트(client): 서비스를 요청하는 애플리케이션(or 컴퓨터, 브라우저) 서버(server): 서비스를 제공하는 애플리케이션(or 컴퓨터) 서버의 종류 어떤 서비스를 제공하느냐에 따라 종류가 나눠질 수 있다. ex) Email server, file server, Web server WebServer? 브라우저를 통해서 받을 수 있는 모든 서비스를 칭한다. css, html, 이미지 등 정적인 데이터를 처리해준다. 예를 들어 브라우저에서 byungmin.tistory.com/59 라는 주소를 요청하면 웹서버는 그 요청에 해당하는 화면을 html파일로 뿌려준다. html과 동시에 css, 이미지 파일 등을 같이 뿌려준다. 정적인 ..

[Spring] HTTP 요청과 응답에 대해 알아보자

HTTP 프로토콜 HTTP는 Hyper Text Transfer Protocol의 약자로, 인터넷 상에서 데이터를 주고 받기 위한 약속, 규칙이다. 웹에서는 클라이언트(브라우저)와 서버간에 데이터를 주고 받기 위한 방식으로 HTTP프로토콜을 사용한다. 이렇게 규칙을 정해두었기 때문에, 모든 프로그램이 이 규칙에 맞춰 개발함으로써 서로 정보를 교환할 수 있게 된다. HTTP로 보낼 수 있는 데이터는 HTML문서, 이미지, 동영상, 오디오, 텍스트 문서, JSON형식 등 여러종류가 있으며 브라우저에서 요청하면 서버는 요청에 대한 내용을 처리하여 브라우저에 다시 응답해준다. HTTP 프로토콜의 특징 단순하고 읽기 쉽다. - 텍스트 기반의 프로토콜 상태를 유지하지 않는다. (stateless) - 클라이언트의 ..

[Spring] 원격 프로그램 실행방법에 대해 알아보자

Spring 프로젝트를 생성 후 브라우저에서 원격으로 우리가 만든 프로젝트를 실행하는 방법을 알아보자 Controller 생성 1. 프로그램 등록 2. URL과 프로그램을 연결 @Controller // 원격 호출 가능한 프로그램으로 등록 public class Hello { @RequestMapping("/hello") // URL과 프로그램을 연결 public void hello() { System.out.println("hello"); } } 3. 브라우저에서 해당 URL로 호출 실행결과 hello 인스턴스 메서드가 실행될 수 있는 이유 메서드가 static이 아닌 인스턴스 메서드임에 주목하자. 인스턴스 메서드는 객체가 생성된 후에 사용할 수 있는데 우리 코드에는 객체를 생성한 흔적이 없다. 이는 ..

[Spring] DI (Dependency Injection)에 대해 알아보자

DI (Dependency Injection) DI (Dependency Injection) 는 클래스 간의 의존관계를 빈-xml 파일정보를 바탕으로 컨테이너가 자동으로 연결해주는 것을 의미한다. - 참조되는 객체 (class)를 직접 생성 (new) 하지 않고 컨테이너에 등록 (injection) 한 빈(객체)으로 불러와서 (lookup) 사용하는 방법이다. 스프링 컨테이너란? 빈을 관리하는 저장소라고 생각하면 쉽다. 스프링 컨테이너는 빈 객체를 저장하고 있으며, 각 객체간의 의존 관계를 관리해준다. BeanFactory와 ApplicationContext가 컨테이너 역할을 수행하는 인터페이스 1) BeanFactory (인터페이스) 2) ApplicationContext (BeanFactory 를 상..