교재 실습266 6.6.1 요구사항 · 지금까지 구현한 기능을 개발 서버에 톰캣 서버를 설치한 후 배포한다. · 서버가 정상적으로 실행되고 있는지 톰캣 로그 파일(catalina.out)을 통해 모니터링한다. · 쉘 스크립트를 만들어 배포 과정을 자동화한다.참고도서 : 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. 6. 19. 6.6 쉘 스크립트를 활용한 배포 자동화 3장에서 HTTP 웹 서버를 원격 서버에 배포했듯이 원격 서버(운영체제는 3장 실습과 같이 우분트)에 톰캣 서버를 설치하고, 지금까지 구현한 소스코드를 배포하는 경험을 한다. 이 슬습에서는 단순히 톰캣 서버에 소스코드를 배포하는 경험에서 한 발 더 나아가 수동으로 배포하던 작업을 쉘 스크립트를 활용해 배포를 자동화하는 과정까지 진행한다. 이와 같이 전체 과정을 반복하는 경우 특정 부분에서 문제라고 생각되는 부분을 찾아 개선하는 경험을 좀 더 빠른 시점에 할 수 있는 이점을 얻을 수 있다.참고도서 : https://roadbook.co.kr/169 [신간안내] 자바 웹 프로그래밍 Next Step● 저자: 박재성 ● 페이지: 480 ● 판형: 사륙배변형(172*225) ● 도수: 1도 ● 정가: 30,00.. 2025. 6. 18. 6.5 MVC 프레임워크 구현 1단계 이 절에서 구현할 MVC 프레임워크의 기본 뼈대는 이미 5장에서 구현한 구조이다. 클라이언트의 요청에 대한 처리를 담당하는 부분을 Controller 라는 인터페이스로 다음과 같이 추상화 할 수 있다. - Controller.javaimport javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public interface Controller { String execute(HttpServletRequest req, HttpServletResponse resp) throws Exception;} 지금까지 HttpServlet을 상속해 구현한 서블릿 코드를 Controller 인터페이스를 구현하도록 변경.. 2025. 6. 12. 6.4.2 요구사항 분리 및 힌트 · 모든 요청을 서블릿 하나(예를 들어 DispatcherServlet)가 받을 수 있도록 URL 매핑한다. HINT@WebServlet(name = "dispatcher", urlPatterns = "/", loadOnStartup = 1) loadOnStartup 속성이 무슨 역할을 하는지 학습해 본다. 서블릿은 "/"로 설정함으로써 모든 요청을 하나의 서블릿으로 매핑할 수 있다. · Controller 인터페이스를 추가한다. HINTpublic interface Controller { String execute(HttpServletRequest request, HttpServletResponse response) throws Exception; } execute() 메서드의 반환값이 Str.. 2025. 6. 10. 6.4.1 요구사항 요구사항은 MVC 패턴을 지원하는 프레임워크를 구현하는 것이다. MVC 패턴을 지원하는 기본적인 구조는 5장의 HTTP 웹 서버 리팩토링 단계에서 다양한 분기문을 제거할 때 적용한 방법을 그대로 사용하면 된다. 단, 이와 같은 구조로 변경하려면 모든 요청을 RequestHandler 가 받아서 요청 URL에 따라 분기 처리 했듯이 서블릿도 모든 요청을 하나의 서블릿이 받은 후 요청 URL에 따라 분기 처리하는 방식으로 구현하면 된다.MVC 패턴은 기본적으로 사용자의 최초 진입 시점이 컨트롤러가 된다. 뷰에 직접 접근하는 것을 막고 항상 컨트롤러를 통해 접근하도록 해야 한다. 따라서 지금까지 회원가입(/user/form.jsp), 로그인(/user/login.jsp)과 같이 JSP로 직접 접근하지 않도록 .. 2025. 5. 14. 6.4 MVC 프레임워크 요구사항 1단계 대략 2000년대 초중반까지 대부분의 웹 애플리케이션 개발은 JSP에 대부분의 로직을 포함하고 있었다. 이는 자바 진영뿐만 아니라 PHP, ASP 또한 비슷한 형태로 구현했다. 점점 더 많은 애플리케이션이 웹으로 개발되고, 요구사항의 복잡도는 점점 더 증가했다. 또한 웹 애플리케이션의 수명이 길어지면서 유지보수 업무가 증가했다. JSP에 상당 부분의 로직을 포함하는 것이 초기 개발 속도는 빨랐지만 유지보수 비용은 증가했다. 이 같은 단점을 보완해 유지보수 비용을 줄이기 위해 MVC(Model, View, Controller) 패턴 기반으로 웹 애플리케이션을 개발하는 방향으로 발전했다. JSP에 집중되었던 로직을 모델(Model), 뷰(View), 컨트롤러(Controller) (컨트롤러는 Controll.. 2025. 5. 12. 6.3.4 클라이언트별 세션 저장소 추가 마지막으로 추가할 클래스는 각 클라이언트별 세션을 담당할 HttpSession 클래스로 서블릿에서 세션 데이터에 접근할 때 사용한 클래스다. HttpSession 은 다음과 같이 구현 가능하다. - HttpSession.javaimport java.util.HashMap;import java.util.Map;public class HttpSession { private Map values = new HashMap(); private String id; public HttpSession(String id) { this.id = id; } public String getId() { return id; } public void setAttribut.. 2025. 5. 8. 6.3.3 모든 클라이언트의 세션 데이터에 대한 저장소 추가 서버는 다수의 클라이언트 세션을 지원해야 한다. 따라서 모든 클라이언트의 세션을 관리할 수 있는 저장소가 필요하다. 이 저장소는 모든 세션을 매번 생성하는 것이 아니라 한 번 생성한 후 재사용할 수 있어야 한다. 따라서 다음과 같이 static 으로 Map 을 생성해 구현했다. - HttpSessions.javaimport java.util.HashMap;import java.util.Map;public class HttpSessions { private static Map sessions = new HashMap(); public static HttpSession getSession(String id) { HttpSession session = sessions.get(id); .. 2025. 5. 7. 6.3.2 쿠키를 활용해 아이디 전달 클라이언트가 처음 접근하는 경우 클라이언트가 사용할 세션 아이디를 생성한 후 쿠키를 통해 전달한다. 이렇게 세션 아이디를 한 번 전달하면 이후 요청부터는 상태 값을 공유하기 위해 이 세션 아이디를 사용하면 된다.RequestHandler 클래스에 세션 아이디가 존재하는지 여부를 판단한 후에 세션 아이디가 존재하지 않을 경우 세션 아이디를 새로 발급한다. 세션 아이디는 JSESSIONID로 전달한다. - RequestHandler.javapublic class RequestHandler extends Thread { ... public void run() { log.debug("New Client Connect! Connected IP : {}, Port : {}", connecti.. 2025. 5. 1. 이전 1 2 3 4 5 ··· 30 다음