1장 웹 프로그래밍의 시작

1.4 HttpServlet

서블릿은 요청(Request)을 처리해서 응답(Response)할 목적으로 설계 되었다. 다만 이 서블릿 객체의 생성과 소멸은 개발자가 아닌 톰캣 등의 서블릿 컨테이너가 관리한다.

  1. 브라우저 → 서블릿 특정 경로(URI) 호출
  2. 톰캣 : 해당 경로에 적합한 서블릿 클래스 로딩, 객체 생성
(init() 메소드로 서블릿 객체 동작 전 수행할 내용 정할 수 있다.)
  3. 서블릿 객체 : 브라우저 요청에 대한 정보 분석하여 GET/POST 등의 정보와 함께 같이 전달되는 파라미터(쿼리 스트링 내용)들을 HttpServletRequest 타입의 파라미터로 전달받음.
(응답을 처리하는 기능들은 HttpServletResponse가 담당)
  4. 서블릿 내부 : GET/POST에 맞게 doGet()/doPost() 등의 메소드 실행. 이후 동일한 (주소)호출이 있을 때는 서블릿은 동일한 객체 하나만 이용하여 이를 처리.
  5. 톰캣 종료 : 서블릿 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

댓글남기기