교재 실습/자바 웹 프로그래밍 Next Step98 5.1.2.1 요청 데이터를 처리하는 로직을 별도의 클래스로 분리한다(HttpRequest) HINT· 클라이언트 요청 데이터를 담고 있는 InputStream을 생성자로 받아 HTTP 메서드, URL, 헤더, 본문을 분리하는 작업을 한다. · 헤더는 Map에 저장해 관리하고 getHeader("필드 이름") 메서드를 통해 접근 가능하도록 구현한다. · GET과 POST 메서드에 따라 전달되는 인자를 Map에 저장해 관리하고 getParameter("인자 이름") 메서드를 통해 접근 가능하도록 구현한다. 위 요구사항을 구현하기 위해 새로운 클래스를 만들어 구현할 때 테스트 코드를 기반으로 개발할 수 있다. 먼저 src/test/resources 디렉토리에 Http_GET.txt라는 이름으로 요청 데이터를 담고 있는 테스트 파일을 추가한다. - src/test/resources/Http_GET.t.. 2025. 3. 16. 5.1.1 리팩토링 할 부분 찾기 리팩토링을 하려면 먼저 나쁜 냄새(영어로 Bad Smell이라고 한다. 이 표현은 "리팩토링 : 코드 품질을 개선하는 객체지향 사고법"(마틴 파울러 저/김지원 역, 한빛미디어, 2012년) 번역서를 따라 나쁜 냄새라는 표현을 사용했다)가 나는 코드를 찾을 수 있는 능력을 키워야 한다. 리팩토링을 하는 데 있어 리팩토링을 어떻게 하느냐는 능력보다 리팩토링이 필요한 시점과 종료해야 하는 시점을 판단해야 하는 능력이 중요하다. 일단 소스코드에서 나쁜 냄새가 나면 다음 단계는 어떻게 리팩토링할 것인지 방법을 찾으면 된다. 하지만 나쁜 냄새가 진동하는 코드를 찾지 못하면 리팩토링할 필요성조차 느끼지 못해 아무런 시도도 하지 않는다. "리팩토링 : 코드 품질을 개선하는 객체지향 사고법"(마틴 파울러 저/김지원 역,.. 2025. 3. 15. 5장 웹 서버 리팩토링, 서블릿 컨테이너와 서블릿의 관계 웹 서버를 구현하면서 리팩토링을 거의 하지 않았다. 리팩토링을 하지 않은 결과 https://github.com/slipp/web-application-server 저장소의 was-step1-bad-version 브랜치에 있는 RequestHandler 클래스와 같은 코드를 구현하게 되었다. 자신이 구현한 소스 코드와 비교했을 때 더 깔끔하고 읽기 좋은 코드를 구현했길 기대한다.실무에서 진행하는 대부분의 프로젝트는 이와 같이 무작정 개발을 시작하지 않는다. 프로젝트 성격과 규모에 따라 다르지만 메서드 수준까지 철저한 설계를 한 후 개발을 시작하는 경우도 있으며, 대략적인 클래스 설계를 한 후 진행하는 경우도 있다. 하지만 대부분의 프로젝트는 프로젝트 요구사항이 명확하지 않고, 프로젝트를 진행하면서 요구사.. 2025. 3. 14. 4.3.2 네트워크 HTTP 다음 단계로 학습할 내용은 클라이언트와 서버 간에 데이터를 주고 받는 과정에 대해서이다. 클라이언트에서 보낸 데이터가 어떻게 서버까지 전달되며, 서버에서 전달된 데이터가 어떤 과정으로 클라이언트까지 전달되는지 알아야 한다. 이는 네트워크에 대해 학습함으로써 알 수 있다.클라이언트에서 요청한 데이터가 서버까지, 서버에서 응답한 데이터가 클라이언트까지 어떤 여행 과정을 거치는지에 대해 학습하고 싶다면 "성공과 실패를 결정하는 1%의 네트워크 원리"(Tsutomu Tone 저/이도희 역/ 이중호 감역, 성안당/2015) 책을 추천한다. 이 책은 기존의 다른 네트워크 책들과 달리 전체 과정을 쉽게 풀어 설명하고 있어 초보자가 읽기에 적합한 네트워크 책이다. 웹 개발자가 이 책의 모든 내용을 상세하게 이.. 2025. 3. 13. 4.3.1 HTTP 책을 통해 HTTP 요청 헤더와 응답 헤더 전체를 하나씩 학습하는 것이 싫다면 먼저 https://www.ntu.edu.sg/home/ehchua/programming/webprogramming/HTTP_Basics.html 문서에 있는 내용만이라도 학습한다. 이 장의 실습을 충실히 진행했다면 이 문서의 대부분의 용어들에 대해 이해할 수 있을 것이다.웹 애플리케이션 개발을 처음 시작할 때 생소한 용어들이 많이 등장한다. 새롭게 등장하는 용어들 때문에 강의를 듣고, 책을 읽는 것에 어려움을 느낀다. 이는 결국 학습을 포기하는 이유 중의 하나가 된다. 아직까지 웹 개발 용어에 친숙하지 않다면 "프로가 되기 위한 웹 기술 입문"(고모리 유스케 저/김정환 역, 위키북스/2012) 책을 읽어볼 것을 추천한다. 웹.. 2025. 3. 13. 4.3 추가 학습 자료 HTTP와 네트워크를 학습할 수 있는 계기가 생겼다. 특별히 관심을 가지지 않으면 학습할 기회가 많지 않다. 하지만 웹 개발자가 한 단계 더 도약하기 위해 반드시 학습해야 할 내용이 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] [인터파크] [샘roadbook.co.kr 2025. 3. 13. 4.2.1.7 요구사항 7 - CSS 지원하기 요구사항지금까지 구현한 소스코드는 CSS 파일을 지원하지 못하고 있다. CSS 파일을 지원하도록 구현한다. 지금까지 서비스한 HTML 소스코드를 보면 태그에 CSS 파일도 정상적으로 설정되어 있으며, 물리적인 CSS 파일도 해당 위치에 존재한다. 이클립스 콘솔을 통해 확인해보면 CSS 파일에 대한 요청도 정상이다. 문제는 응답을 보낼 때 모든 컨텐츠의 타입을 text/html로 보내는 것이다. 브라우저는 응답을 받은 후 Content-Type 헤더 값을 통해 응답 본문(body)에 포함되어 있는 컨텐츠가 어떤 컨텐츠인지를 판단한다. 그런데 지금까지 구현한 모든 응답은 text/html로 고정되어 있어 브라우저는 CSS 파일도 HTML로 인식했기 때문에 정상적으로 동작하지 않았다.이 문제를 해결하려면 C.. 2025. 3. 12. 4.2.1.6 요구사항 6 - 사용자 목록 출력 요구사항접근하고 있는 사용자가 "로그인" 상태일 경우(Cookie 값이 logined=true) http://localhost:8080/user/list로 접근했을 때 사용자 목록을 출력한다. 만약 로그인하지 않은 상태라면 로그인 페이지(login.html)로 이동한다. 이 문제는 요구사항 5에서 구현한 Cookie 헤더 값을 활용해 현재 요청을 보내고 있는 클라이언트가 로그인을 한 상태인지의 유무를 판단하는 것이다. 실제 웹 애플리케이션을 서비스할 때도 로그인한 사용자만 접근을 허용해야 한다는 요구사항은 자주 발생한다.현재 로그인 상태 유무에 따라 사용자 목록 페이지를 출력하는 기능은 다음과 같이 구현할 수 있다. - RequestHandler.javapackage webserver;import jav.. 2025. 3. 11. 4.2.1.5 요구사항 5 - 로그인하기 요구사항"로그인" 메뉴를 클릭하면 http://localhost:8080/user/login.html로 이동해 로그인할 수 있다. 로그인이 성공하면 /index.html로 이동하고, 로그인이 실패하면 /user/login_failed.html로 이동해야 한다. 앞에서 회원가입한 사용자로 로그인할 수 있어야 한다. 로그인이 성공하면 로그인 상태를 유지할 수 있어야 한다. 로그인이 성공할 경우 요청 헤더의 Cookie 헤더 값이 logined=true, 로그인이 실패하면 Cookie 헤더 값이 logined=false로 전달되어야 한다. HTTP는 요청을 보내고 응답을 받으면 클라이언트와 서버 간의 연결을 끊는다. ※ HTTP가 클라이언트와 서버의 연결을 매 요청마다 맺고, 끊는다면 성능이 많이 떨어질 것이.. 2025. 2. 25. 이전 1 2 3 4 5 6 7 ··· 11 다음