본문 바로가기
개발 공부 중!/Spring

[자바 웹개발] Chap 01. 웹 프로그래밍의 시작

by 김evelyn 2024. 1. 16.

[자바 웹개발] 카테고리는 '자바 웹 개발 워크북' 책을 공부하는 글이 업로드될 예정이다.

블로그 글에는 간단한 정리 내용들을 작성하고, 코드들은 마지막에 깃허브 링크를 첨부할 예정이다. 

 

https://m.yes24.com/Goods/Detail/111136639

 

자바 웹 개발 워크북 - 예스24

자바 웹 개발자로 취업이나 이직을 준비 중이라면!성장하는 개발자가 되기 위한 맞춤 안내서서블릿에서 스프링 부트까지 한번에, API 서버를 위한 REST 방식과 JWT 처리까지이 책은 제목 그대로 워

m.yes24.com


📚 웹 기본 동작 방식 이해하기

브라우저는 자신이 원하는 정보를 전달하기 위해 두 가지 방식을 이용한다.

  • GET 방식
    • 주소창에 직접 원하는 데이터를 적거나 링크를 클릭해서 호출
    • 원하는 웹의 주소를 호출할 때 데이터를 ‘?’와 ‘&,=’를 이용해 같이 전송하는 방식
    • ‘주소 + 필요한 데이터’를 같이 보내기 때문에 단순 링크로 처리
    • ⇒ 다른 사람들에게 메신저, SNS 등을 통해 쉽게 공유 가능
    • 이 방식은 주로 특정한 정보를 조회하는 용도로 사용됨
  • POST 방식
    • 입력 화면에서 필요한 내용을 작성한 후에 ‘전송’과 같은 버튼 등을 클릭해서 호출
    • 주소와 데이터를 따로 보내는 방식
    • 예) 회원가입, 로그인 등의 처리
    • 이 방식은 웹 화면을 통해서 실제 처리가 필요한 작업을 하기 위해서 사용됨

📚 브라우저 ↔ 서버는 각각 서로 요청과 응답을 보낸다.

서버에서는 브라우저로 응답을 보내는데 서버에서는 이를 정적인 데이터인지, 동적인 데이터인지에 따라 다르게 처리한다.

  • 정적(static) 데이터
    • 항상 동일하게 고정된 데이터를 전송하는 방식
    • 주로 파일로 고정된 HTML, CSS, 이미지 파일 등의 데이터
    • 정적 데이터를 보내는 역할만을 수행하는 서버 = 웹 서버
  • 동적(dynamic) 데이터
    • 매번 필요할 때마다 다른 데이터를 동적으로 구성해서 전송하는 방식
    • (=서버사이드 프로그래밍)
    • 동적 데이터를 만들어 보내는 서버 = 웹 어플리케이션 서버(WAS)

 

📚 서블릿 기술

  • 서블릿 기술이란?
    • 서버에서 동적으로 요청과 응답을 처리할 수 있는 API들을 정의한 것
  • JSP란?
    • 서블릿과 같은 원리지만 HTML을 좀 더 쉽게 이용할 수 있는 방식으로 코드 작성이 가능

서블릿으로는 코드를 이용한 처리, JSP로는 화면 개발과 같은 역할 분담이 일반적!

 

 

🧐 JSP와 Servlet 기술의 공통점

  • 둘 다 Java EE 스펙의 일부
  • 둘 다 실행하기 위해서는 서블릿 컨테이너가 필요
  • 서블릿 컨테이너가 JSP/서블릿 객체를 생성하고 생명 주기를 관리

🧐 JSP와 Servlet 기술의 차이점

JSP 기술 Servlet 기술
HTML 코드를 그대로 이용하고 필요할 때 약간의 자바 코드 삽입하는 방식 자바 코드를 이용해 HTML 문자열을 만들어내는 방식

JSP의 (제한적인) 용도

  • JSP에서 쿼리 스트링이나 파라미터를 처리하지 않는다. - JSP 대신 서블릿을 통해 처리
  • JSP는 입력 화면을 구성하거나 처리 결과를 보여주는 용도로만 사용
  • 브라우저는 직접 JSP 경로를 호출하지 않고 서블릿 경로를 통해서 JSP를 보는 방식으로 사용

⇒ 문제 해결하기 위해 등장한 방식 ‘웹 MVC’ 방식

JSP는 결과만 출력 & 서블릿을 통해 처리

 

서블릿은 준비한 데이터들을 JSP로 전달하고, JSP에서는 EL을 이용해 최종적인 결과 데이터를 생성하고, JSP를 이용해 생성된 결과 화면은 톰캣을 통해 브라우저로 전송된다.

 

위 설명을 웹 MVC구조에 비교하자면, 서블릿이 바로 컨트롤러 역할, JSP가 뷰 역할이라고 할 수 있다. 서블릿은 JSP에 필요한 데이터를 가공하는 역할을 하는데 이때 필요한 데이터를 제공하는 객체를 모델(Model)이라 한다.


📚 PRG 패턴 (POST-Redirect-GET)

  • 웹 MVC 구조에서 가장 흔하게 사용되는 패턴
  • 이 패턴의 흐름
    1. POST 방식으로 데이터의 처리를 요청
    2. 데이터를 처리하고 브라우저에게는 다른 주소로 Redirect하도록 응답
    3. 브라우저는 이동해야 하는 주소 받음
    4. 브라우저는 GET 방식으로 서버를 호출
    5. GET 방식의 데이터를 처리하고 응답 메세지 전송
    6. 브라우저로 응답

📚 HttpServlet

특징

  • GET/POST 등에 맞게 doGet(), doPost() 등을 제공하므로, 개발자는 필요한 메서드를 오버라이드하는 것만으로 GET/POST 방식 처리를 나누어 처리할 수 있다.
  • HttpServlet을 상속받은 클래스 객체는 WAS의 내부에서 자동으로 객체를 생성하고 관리하기 때문에 개발자가 객체 관리에 신경 쓸 필요가 없다.
  • HttpServlet은 멀티 스레드에 의해 동시에 실행될 수 있도록 처리되기 때문에 개발자는 동시에 많은 사용자를 어떻게 처리해야 하는지에 대한 고민을 줄일 수 있다.

서블릿은 기본적으로 요청을 처리해서 응답을 목적으로 설계되었다. 다만 서블릿은 웹이라는 환경으로 인해 직접 객체를 생성하는 대신 ‘톰캣에서 객체들을 관리’한다.

 

서블릿 클래스들의 처리 과정 중 중요한 점은

  1. 서블릿의 객체는 경로에 맞게 하나만 만들어진다.
  2. 매번 호출 시에는 자동으로 doGet()/doPost()를 이용해서 처리된다.

 

✏️ HttpServletRequest의 주요 기능

  • setAttribute()
    • JSP로 전달할 데이터를 추가할 때 사용
    • ‘키’와 ‘값’의 형태로 데이터 저장 가능
  • RequestDispatcher
    • 웹 MVC 구조에서는 HttpServletRequest의 getRequestDispatcher()을 이용해서 RequestDispatcher 타입의 객체 구할 수 있다.
    • RequestDispatcher는 현재의 요청(Request)을 다른 서버의 자원(서블릿 or JSP)에게 전달하는 용도로 사용
    • RequestDispatcher의 2개의 메서드
      1. forward() : 현재까지의 모든 응답 내용은 무시하고 JSP가 작성하는 내용만을 브라우저로 전달
      2. include() : 지금까지 만들어진 응답 내용 + JSP가 만든 내용을 브라우저로 전달

 

✏️ HttpServletResponse의 주요 기능

웹 MVC 구조에서 HttpServletResponse는 JSP에서 주로 처리됨 → 서블릿 내에서 직접 사용되는 일은 많지 않고 주로 sendRedirect()를 이용하는 경우가 많다.

  • sendRedirect()
    • 브라우저의 주소가 아예 변경되기 때문에 사용자의 ‘새로고침’과 같은 요청을 미리 방지 가능
    • 특정한 작업이 완전히 끝나고 새로 시작하는 흐름을 만들 수 있다.

📚 DTO(Data Transfer Object)

  • 계층이나 객체들 간에 데이터 교환이 이루어진다.
  • 이 경우 대부분은 한 개 이상의 데이터를 전달 → 여러 개의 데이터를 묶어서 하나의 객체로 전달하는 것을 DTO라 한다.
  • 대부분 Java Beans 형태로 구성
    • Java Beans은 다음과 같은 형식으로 구성
      • 생성자가 없거나 반드시 파라미터가 없는 생성자 함수를 가지는 형태
      • 속성(멤버 변수)은 private으로 작성
      • getter/setter를 제공할 것

📚 서비스 객체

  • ‘기능(로직)들의 묶음’
  • 프로그램이 구현해야 하는 기능들의 실제 처리를 담당

 


책의 실습 코드는 밑의 깃허브에서 확인 가능합니다-!

 

https://github.com/EvelynKimm/SpringSelfStudy

 

GitHub - EvelynKimm/SpringSelfStudy: 💻 혼자 Spring 공부하는 Repository

💻 혼자 Spring 공부하는 Repository . Contribute to EvelynKimm/SpringSelfStudy development by creating an account on GitHub.

github.com