프로그래밍 28

[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] Maven Lifecycle에 대해 알아보자

Youtube 뉴렉처 강사님의 메이븐 강의를 듣고 정리한 글입니다. #1. Maven Lifecycle 앞서 우리는 cmd에서 컴파일을 할 때, 패키지를 만들 때 그에 해당하는 명령어를 사용했다. (mvn compile, mvn package...등) 이 명령어는 Maven이 가지고 있는 빌드 단계에 해당되는 명령어 들이다. 1. 특징 - Maven에서는 미리 정의하고 있는 빌드 순서가 있다. 이 순서를 라이프 사이클(LifeCycle)이라고 한다. - 라이프 사이클의 각 빌드 단계를 phase라 하며 각각의 phase는 의존관계를 가지고 있어 해당 phase가 수행되려면 이전 단계의 phase가 모두 수행되어야 한다. - 만약 compile이 실행되려면 그 전 단계들이 실행되어야 한다는 뜻이다. - 모..

[Spring] Maven에 대해 알아보자

Youtube 뉴렉처 강사님의 메이븐 강의를 듣고 정리한 글입니다. #1 Maven이란? 빌드할 때 사용하는 도구(Tool) - 라이브러리 관리(설치, 삭제, 다운로드 받기) - 빌드기능 프로젝트 빌드 과정 프로젝트 생성 -> 라이브러리 설정 -> 코드작업 -> 컴파일 -> 테스트 -> 패키지생성 -> 배포 -> 레포팅 이러한 과정들을 쉽게 구현할 수 있도록 도와준다. IDE와 빌드 도구의 차이 Eclipse, Intellj, VSCode 등 과 같은 IDE에서도 프로젝트를 생성, 라이브러리 설정, 코드작업, 컴파일 등등을 할 수 있다. 프로젝트를 개발할 때 필요한 도구들(빌드도구, 디버거, 컴파일러, 형상관리, 탐색기, 콘솔 등등)을 하나로 통합한 것이 IDE다. 빌드 도구는 IDE에서 사용할 수 있는..

[Spring] DB연결, Controller에 대해 알아보자

스프링 흐름도 1. 요청 -> DispatcherServlet이 FrontController역할을 한다. root-context.xml에 있는 빈들을 메모리에 올린다. 2. XXXController로 연결해서 주소창에 매핑되어 있는 이름에 맞는 SubController로 이동한다. 3. Controller에서 DB에서 가져올 데이터가 필요하면 XXXDAO를 통해 DB와 연동 후 데이터를 가져온다. 4. Controller는 Model이름을 DispatcherServlet에 반환한다. 5. ViewResolver는 Model의 이름 앞 뒤에 접두사, 접미사를 붙여서 /WEB-INF/view/뷰이름.jsp로 만든다. (ViewResolver는 servlet-context.xml에서 빈으로 등록되어 있다.) ..

[Spring] 프로젝트 생성 방법에 대해 알아보자

스프링 프로젝트 생성 SpringMVC 프로젝트를 생성하자. - 설치할 라이브러리 Lombok Oracle DBCP MyBatis Spring JDBC HikariCP 1. Spring Legacy Project를 선택하고 Spring MVC Project 템플릿을 선택한다. - 별도의 설정 없이 Maven을 사용하는 스프링 프로젝트를 생성할 수 있다. 2. pom.xml 설정 1) 자바 버전, 스프링프레임워크 버전, aspect 버전을 설정해준다. (여기선 1.8, 5.0.7, 1.9.0을 사용) 1.8 5.0.7.RELEASE 1.9.0 1.6.6 밑으로 내려보면 태그가 있는데 그곳에 있는 와 도 1.8로 바꿔준다. org.apache.maven.plugins maven-compiler-plugin ..

[Spring] Constructor Injection에 대해 알아보자

Constructor Injection 생성자를 이용하여 클래스 사이의 의존 관계를 연결하는 방법이다. setter injection의 경우 컨테이너 (xml파일) 에 태그를 통해 값을 넣어줬다면, constructor injection은 태그를 통해 값을 넣는다. 앞서 포스팅 했던 DI 참고 [프로그래밍/Spring] - 알기 쉬운 Spring DI (Dependency Injection)에 대해 알아보자 DI 분류 체계 1) Setter Injection - 기본 생성자를 통해 접근 2) Constructor Injection - 기본 생성자가 없다면 인자생성자를 통해 접근 Constructor Injection 사용하기 - Emp interface 생성 package ex05; public inte..