자바 웹 개발 워크북 - 구멍가게 코딩단 1.4~1.5
1장 웹 프로그래밍의 시작
1.4 HttpServlet
서블릿은 요청(Request)을 처리해서 응답(Response)할 목적으로 설계 되었다. 다만 이 서블릿 객체의 생성과 소멸은 개발자가 아닌 톰캣 등의 서블릿 컨테이너가 관리한다.
- 브라우저 → 서블릿 특정 경로(URI) 호출
- 톰캣 : 해당 경로에 적합한 서블릿 클래스 로딩, 객체 생성 (init() 메소드로 서블릿 객체 동작 전 수행할 내용 정할 수 있다.)
- 서블릿 객체 : 브라우저 요청에 대한 정보 분석하여 GET/POST 등의 정보와 함께 같이 전달되는 파라미터(쿼리 스트링 내용)들을 HttpServletRequest 타입의 파라미터로 전달받음. (응답을 처리하는 기능들은 HttpServletResponse가 담당)
- 서블릿 내부 : GET/POST에 맞게 doGet()/doPost() 등의 메소드 실행. 이후 동일한 (주소)호출이 있을 때는 서블릿은 동일한 객체 하나만 이용하여 이를 처리.
- 톰캣 종료 : 서블릿 destroy()
Error
package org.zerock.w1 에 있는 HelloServlet를 TodoRegisterController가 extends하도록 오타를 내서 발생한 에러이다. java에서 부모 클래스의 메서드보다 더 좁은 접근 제어자를 쓸 수 없기 때문이다.
해결
public class TodoRegisterController extends HelloServlet -> public class TodoRegisterController extends HttpServlet
접근 제한자(Access Modifier)
- 여기서 접근이란 클래스 및 인터페이스 그리고 이들이 가지고 있는 멤버의 접근으로 이를 제한하기 위해 사용한다.
- 접근 제한자는 public, protected, private와 같이 세 가지 종류가 있다.
- public 접근 제한자: 단어 뜻 그대로 외부 클래스가 자유롭게 사용할 수 있도록 한다.
- protected 접근 제한자: 같은 패키지 또는 자식 클래스에서 사용할 수 있도록 한다.
- private 접근 제한자: 단어 뜻 그대로 개인적인 것이라 외부에서 사용될 수 없도록 한다.
- 위 세 가지 접근 제한자가 적용되지 않으면 default 접근 제한을 가진다.
- default 접근 제한: 같은 패키지에 소속된 클래스에서만 사용할 수 있도록 한다.
- protected 접근 제한은 default 접근 제한과 마찬가지로 같은 패키지에 속하는 클래스에서 생성자를 호출할 수 있도록 한다. 차이점으로 다른 패키지에 속한 클래스가 해당 클래스의 자식(child) 클래스라면 생성자를 호출할 수 있다.
- 은행을 예로 들어보면,
- public : 은행 창구
- protected : 은행 창구의 직원 자리
- package-private : 지점장실
- private : 금고
-
public은 아무나 들어갈 수 있고, protected는 직원만 들어갈 수 있고, package-privae는 회사 직원이라도 높은 사람들만 들어갈 수 있는 지점장실, private는 아무도 못들어가는 거라고 생각할 수 있다.
- 출처: https://hongong.hanbit.co.kr/%EC%9E%90%EB%B0%94-%EC%A0%91%EA%B7%BC-%EC%A0%9C%ED%95%9C%EC%9E%90%EC%9D%98-%EC%A2%85%EB%A5%98%EC%99%80-%EC%B0%A8%EC%9D%B4public-protected-private/
1.5 모델(Model)
- 모델의 3가지 계층
- View 계층(JSP + 서블릿)
- 서비스 계층(로직 처리)
- 영속 계층(데이터 처리)
DTO(Data Transfer Object)
- 데이터 전송 객체(DTO)란 프로세스 사이에서 데이터를 전송하는 객체
- DTO 기법을 사용하면 중요한 정보를 노출시키지 않고 두 시스템(API와 서버 등) 간 통신을 원활하게 촉진할 수 있다.
- 3티어 계층을 분리하는 경우에는 반드시 계층이나 객체들 간에 데이터 교환이 이루어진다. 이때 사용하는 것이 DTO로 여러 개의 데이터를 묶어서 필요한 곳에 전달하거나 호출을 결과로 받는 방식으로 사용한다.
- DTO는 Java Beans 형태로 구성하는 경우가 많다.
Java Beans
- 생성자가 없거나 반드시 파라미터가 없는 생성자 함수를 가지는 형태 (기본 생성자)
- 속성(멤버 변수)은 private으로 작성
- getter/setter를 제공할 것
- 이 외에도 Serializable 인터페이스를 구현 등의 규칙이 있으나 최소한의 규칙은 앞의 3가지이다.
서비스 객체
- Service 객체는 프로그램이 구현해야하는 기능들의 묶음으로 비지니스 로직이 들어가는 부분이다.
- 해당 워크북의 CRUD 기능은 모두 서비스 객체에서 구현한다.
- 서비스 객체 메소드들의 파라미터나 리턴타입으로 DTO 사용한다.
참고자료
- https://velog.io/@9to0/%EC%9E%90%EB%B0%94-%EC%9B%B9-%EA%B0%9C%EB%B0%9C-%EC%9B%8C%ED%81%AC%EB%B6%81-Ch.1-3-1.4-HttpServlet-1.5-%EB%AA%A8%EB%8D%B8Model
- 자바 웹 개발 워크북 - 예스24
- https://github.com/ckck24/PART01/tree/master/src/main/java/org/zerock/w1/todo
댓글남기기