[자바 웹개발] 카테고리는 '자바 웹 개발 워크북' 책을 공부하는 글이 업로드될 예정이다.
블로그 글에는 간단한 정리 내용들을 작성하고, 코드들은 마지막에 깃허브 링크를 첨부할 예정이다.
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 구조에서 가장 흔하게 사용되는 패턴
- 이 패턴의 흐름
- POST 방식으로 데이터의 처리를 요청
- 데이터를 처리하고 브라우저에게는 다른 주소로 Redirect하도록 응답
- 브라우저는 이동해야 하는 주소 받음
- 브라우저는 GET 방식으로 서버를 호출
- GET 방식의 데이터를 처리하고 응답 메세지 전송
- 브라우저로 응답
📚 HttpServlet
특징
- GET/POST 등에 맞게 doGet(), doPost() 등을 제공하므로, 개발자는 필요한 메서드를 오버라이드하는 것만으로 GET/POST 방식 처리를 나누어 처리할 수 있다.
- HttpServlet을 상속받은 클래스 객체는 WAS의 내부에서 자동으로 객체를 생성하고 관리하기 때문에 개발자가 객체 관리에 신경 쓸 필요가 없다.
- HttpServlet은 멀티 스레드에 의해 동시에 실행될 수 있도록 처리되기 때문에 개발자는 동시에 많은 사용자를 어떻게 처리해야 하는지에 대한 고민을 줄일 수 있다.
서블릿은 기본적으로 요청을 처리해서 응답을 목적으로 설계되었다. 다만 서블릿은 웹이라는 환경으로 인해 직접 객체를 생성하는 대신 ‘톰캣에서 객체들을 관리’한다.
서블릿 클래스들의 처리 과정 중 중요한 점은
- 서블릿의 객체는 경로에 맞게 하나만 만들어진다.
- 매번 호출 시에는 자동으로 doGet()/doPost()를 이용해서 처리된다.
✏️ HttpServletRequest의 주요 기능
- setAttribute()
- JSP로 전달할 데이터를 추가할 때 사용
- ‘키’와 ‘값’의 형태로 데이터 저장 가능
- RequestDispatcher
- 웹 MVC 구조에서는 HttpServletRequest의 getRequestDispatcher()을 이용해서 RequestDispatcher 타입의 객체 구할 수 있다.
- RequestDispatcher는 현재의 요청(Request)을 다른 서버의 자원(서블릿 or JSP)에게 전달하는 용도로 사용
- RequestDispatcher의 2개의 메서드
- forward() : 현재까지의 모든 응답 내용은 무시하고 JSP가 작성하는 내용만을 브라우저로 전달
- include() : 지금까지 만들어진 응답 내용 + JSP가 만든 내용을 브라우저로 전달
✏️ HttpServletResponse의 주요 기능
웹 MVC 구조에서 HttpServletResponse는 JSP에서 주로 처리됨 → 서블릿 내에서 직접 사용되는 일은 많지 않고 주로 sendRedirect()를 이용하는 경우가 많다.
- sendRedirect()
- 브라우저의 주소가 아예 변경되기 때문에 사용자의 ‘새로고침’과 같은 요청을 미리 방지 가능
- 특정한 작업이 완전히 끝나고 새로 시작하는 흐름을 만들 수 있다.
📚 DTO(Data Transfer Object)
- 계층이나 객체들 간에 데이터 교환이 이루어진다.
- 이 경우 대부분은 한 개 이상의 데이터를 전달 → 여러 개의 데이터를 묶어서 하나의 객체로 전달하는 것을 DTO라 한다.
- 대부분 Java Beans 형태로 구성
- Java Beans은 다음과 같은 형식으로 구성
- 생성자가 없거나 반드시 파라미터가 없는 생성자 함수를 가지는 형태
- 속성(멤버 변수)은 private으로 작성
- getter/setter를 제공할 것
- Java Beans은 다음과 같은 형식으로 구성
📚 서비스 객체
- ‘기능(로직)들의 묶음’
- 프로그램이 구현해야 하는 기능들의 실제 처리를 담당
책의 실습 코드는 밑의 깃허브에서 확인 가능합니다-!
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
'개발 공부 중! > Spring' 카테고리의 다른 글
[자바 웹개발] Chap 02. 웹과 데이터베이스 (0) | 2024.01.21 |
---|---|
[스프링5 입문] Chap 08. DB 연동 (0) | 2024.01.12 |
[스프링5 입문] Chap 07. AOP 프로그래밍 (2) | 2024.01.08 |
[스프링5 입문] Chap 06. 빈 라이프사이클과 범위 (0) | 2024.01.07 |
[스프링5 입문] Chap 05. 컴포넌트 스캔 (2) | 2024.01.06 |