교재 실습253 5.4.1 객체지향 설계와 개발 객체지향 설계뿐 아니라 모든 설계는 짧은 기간 공부한다고 바로 효과를 볼 수 있는 영역이 아니다. 다양한 관점으로 설계해보고 고민한 경험들이 축적되어야만 좋은 설계를 할 수 있다. 따라서 이 부분의 학습은 개발자가 평생 지속적으로 학습해 나가야 할 부분이다. 그만큼 여유를 가지고 접근한다.먼저 초보 개발자도 부담없이 읽을 수 있는 2권의 책을 추천한다. · "객체지향의 사실과 오해"(조영호 저, 위키북스/2015) - 객체지향의 이론적인 내용에 대해 학습할 수 있다. 특히 객체를 설계할 때 각 객체의 역할, 책임, 협력이 중요한데 이와 관련해 초보 개발자도 이해할 수 있도록 예제를 통해 쉽게 풀어내고 있다. · "개발자가 반드시 정복해야 할 객체지향과 디자인 패턴"(최범균 저, 인투북스/2013) - ".. 2025. 4. 9. 5.4 추가 학습 자료 이 장에서는 4장에서 구현한 HTTP 웹 서버를 리팩토링하면서 객체지향 설계와 객체 지향적으로 개발했을 때 얻을 수 있는 이점에 대한 맛을 볼 수 있었다. 또한 이렇게 리팩토링한 웹 서버가 현재 자바 업계의 표준이라 할 수 있는 서블릿 컨테이너, 서블릿과 어떻게 연결되는지에 대해 알아봤다. 이 두 가지 주제와 관련한 추가학습 자료는 다음과 같다.참고도서 : https://roadbook.co.kr/169 [신간안내] 자바 웹 프로그래밍 Next Step● 저자: 박재성 ● 페이지: 480 ● 판형: 사륙배변형(172*225) ● 도수: 1도 ● 정가: 30,000원 ● 발행일: 2016년 9월 19일 ● ISBN: 978-89-97924-24-0 93000 [강컴] [교보] [반디] [알라딘] [예스24.. 2025. 4. 8. 5.3.2 서블릿 컨테이너, 서블릿 앞의 HTTP 웹 서버 리팩토링 과정을 이해했다면 이미 서블릿 컨테이너와 서블릿이 어떻게 동작하는지 이해한 것이나 다를 바 없다.앞의 동영상에서 톰캣 서버를 시작하는 WebServerLauncher 클래스를 살펴보면 다음과 같다. - WebServerLauncher.javapublic class WebServerLauncher { private static final Logger logger = LoggerFactory.getLogger(WebServerLauncher.class); public static void main(String[] args) throws Exception { String webappDirLocation = "webapp/"; Tomcat to.. 2025. 4. 6. 5.3.1 개발 환경 세팅 및 Hello World 출력 다음 2개의 동영상을 참고해 톰캣 서버를 설치하고 "Hello World"를 출력하는 서블릿을 추가해 실행한다. https://www.youtube.com/watch?v=jWVlAclnIXo : Embedded 톰캣 설정하는 방법 https://www.youtube.com/watch?v=xCXw8xmmWC4 : Hello World 출력하는 서블릿을 추가하고, 실행해 보는 과정 톰캣 서버를 활용해 웹 애플리케이션을 개발하는 과정에서 소스코드를 수정한 다음 서버를 재시작해야 하는 경우가 많다. 서버 재시작을 단축키로 할 수 있도록 지원하는 이클립스 플러그인이 있어 소개한다. 설치하고 사용하는 방법은 다음 동영상을 참고한다. https://youtu.be/OdCR6Y4_HAQ : relaunch plugin.. 2025. 4. 6. 5.3 서블릿 컨테이너, 서블릿/JSP를 활용한 문제 해결 앞에서 구현한 웹 서버는 크게 3가지 문제점을 가지고 있다. 이 중 앞의 두 가지 문제점을 해결하기 위해 자바 진영에서 표준으로 정한 것이 서블릿 컨테이너와 서블릿/JSP 이다.서블릿 컨테이너와 서블릿/JSP에 대해 이해하기 위해 앞에서 구현한 웹 서버와 연결해 설명한다. 먼저 서블릿은 앞에서 구현한 웹 서버의 Controller, HttpRequest, HttpResponse 를 추상화해 인터페이스로 정의해 놓은 표준이다. 즉, HTTP의 클라이언트 요청과 응답에 대한 표준을 정해 놓은 것을 서블릿이라 생각하면 된다. 즉 HTTP의 클라이언트 요청과 응답에 대한 표준을 정해 놓은 것을 서블릿이라 생각하면 된다. 서블릿 컨테이너는 이 서블릿 표준에 대한 구현을 담당하고 있으며 앞에서 구현한 웹 서버가 서.. 2025. 4. 5. 5.2.4 HTTP 웹 서버의 문제점 지금까지 HTTP 웹 서버를 직접 구현하고 리팩토링하는 과정에 대해 살펴봤다. 웹 서버를 직접 구현해 봄으로써 HTTP 요청과 응답의 세부 내용에 대해 더 깊이 있게 학습할 수 있는 계기가 되었다. 하지만 지금까지 구현한 웹 서버는 다음과 같은 한계를 가진다. · HTTP 요청과 응답 헤더, 본문 처리와 같은데 시간을 투자함으로써 정작 중요한 로직을 구현하는데 투자할 시간이 상대적으로 적다. · 동적인 HTML을 지원하는데 한계가 있다. 동적으로 HTML을 생성할 수 있지만 많은 코딩량을 필요로 한다. · 사용자가 입력한 데이터가 서버를 재시작하면 사라진다. 사용자가 입력한 데이터를 유지하고 싶다. 물론 위 3가지 외에도 부족한 부분이 많지만 가장 큰 문제점이라고 생각하는 부분만 정리해 봤다.참고도서 :.. 2025. 4. 4. 5.2.3 다형성을 활용해 클라이언트 요청 URL에 대한 분기 처리를 제거한다 HttpRequest, HttpResponse 를 추가해 RequestHandler 의 복잡도를 많이 낮추었다. 하지만 아직까지 run() 메서드의 복잡도를 완전히 낮추지는 못했다. run() 메서드의 가장 큰 문제점은 기능이 추가될 때마다 새로운 else if 절이 추가되는 구조로 구현되어 있다는 것이다. 이는 객체지향 설계 원칙 중 요구사항의 변경이나 추가사항이 발생하더라도, 기존 구성요소는 수정이 일어나지 말아야 하며, 기존 구성요소를 쉽게 확장해서 재사용할 수 있어야 한다는 OCP(개방폐쇄의 원칙, Open-Closed Principle) 원칙을 위반하고 있다. 새로운 기능이 추가되거나 수정사항이 발생하더라도 변화의 범위를 최소화하도록 설계를 개선해 본다.앞의 요청과 응답 데이터를 분리하는 실습을.. 2025. 4. 2. 5.2.2 응답 데이터를 처리하는 로직을 별도의 클래스로 분리한다 요청 데이터를 처리하는 로직을 구현하고 리팩토링을 하였다. 대규모 리팩토링을 처음 진행했기 때문에 단계별로 상세히 살펴봤다. 다음 단계로 분리할, 응답 데이터를 처리하는 로직은 빠르게 진행한다. 리팩토링의 시작은 단계적으로 천천히 진행하지만 익숙해지면 단계를 건너뛰고 더 빠른 보폭으로 걸어도 좋다. 장애물을 만나면 다시 속도를 늦추면 된다.응답 데이터 처리를 담당하는 HttpResponse 클래스를 추가한다. 이 클래스의 역할은 응답 데이터의 상태에 따라 적절한 HTTP 헤더를 처리한다. 특히 HTML, CSS, 자바스크립트 파일을 읽어 변환하는 부분과 302 상태 코드를 처리하는 것이가능해야 하며, 쿠키 추가와 같이 HTTP 헤더에 임의의 값을 추가할 수 있어야 한다. 이 같은 요구사항을 만족하도록 구.. 2025. 4. 1. 5.2.1 요청 데이터를 처리하는 로직을 별도의 클래스로 분리한다 클라이언트 요청 데이터에서 요청 라인(request line)을 읽고, 헤더를 읽는 로직을 HttpRequest 클래스를 추가해 구현한다.HttpRequest 의 책임은 클라이언트 요청 데이터를 읽은 후 각 데이터를 사용하기 좋은 형태로 분리하는 역할만 한다. 이렇게 분리한 데이터를 사용하는 부분은 RequestHandler가 가지도록 한다. 즉 데이터를 파싱하는 작업과 사용하는 부분을 분리하는 것이다. 이 같은 원칙에 따라 구현한 HttpRequest 코드는 다음과 같다. - src/main/java/http/HttpRequest.javapackage http;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStr.. 2025. 3. 19. 이전 1 2 3 4 5 6 ··· 29 다음