[41일 차] 스프링 프레임워크 (HTTP,Servlet,JSP)

2025. 3. 25. 09:15·LG 유플러스 유레카/스프링 프레임워크

25/03/25 (화)

목이 아픈게 서서히 낫고있습니다.

주짓수를 슬슬 갈수도있겠네요.

오늘은 새로운 조 편성과 드디어 백엔드를 본격적으로 공부하는 날입니다.

힘내서 집중해보겠습니다.


강의

- 강의 목차 

스프링 프레임워크 (17일), REST API (10일)

  • HTTP, Servlet, JSP (2일)
  • Spring 배경지식, DI, AOP (2일)
  • Spring MVC + DB + Mybatis (7일)
  • JPA (4~5일)
  • Spring Boot + DB + JPA (5일)
  • Spring Boot + REST + jUnit + Secutiry + OAuth2 + AWS 연동 (5일)

AWS (3일)

 

- HTTP 개요

https://developer.mozilla.org/ko/docs/Web/HTTP/Guides/Overview

 

HTTP 개요 - HTTP | MDN

HTTP는 HTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 프로토콜입니다. HTTP는 웹에서 이루어지는 모든 데이터 교환의 기초이며, 클라이언트-서버 프로토콜이기도 합니다. 클라이언트-서버

developer.mozilla.org

 

프로토콜 구조

  • TCP : 데이터가 다 도착했나 검사 (웹사이트)
  • UDP : 데이터 로스 어느정도 인정 (라디오)
  • HTTP의 가장 큰 특징 : 상태를 저장하지 않음 (Stateless), 세션은 있음

 

- 전형적인 HTTP 세션

요청 메서드

  • GET, POST, OPTIONS

 

응답 상태 코드

  • 2XX(긍정적), 3XX(진행이 더 필요), 4XX(Request가 잘못된 상황), 5XX(Backend 오류)

 

- HTTP 메시지

헤더

  • Access-Control-Allow-Origin

 

- HTTP 쿠키

  • 서버가 사용자의 웹 브라우저에 전송하는 작은 데이터 조각
  • 브라우저는 그 데이터 조각들을 저장해 놓았다가, 동일한 서버에서 재 요청 시 저장된 데이터 함께 전송
  • 두 요청이 동일한 브라우저에서 들어왔는지 아닌지 판단할 때 주로 사용
  • stateless한 HTTP 프로토콜에서 상태 정보를 기억시켜 줌 (로그인 상태 유지할 때 사용)
  • 목적 : Session management, Personalization, Tracking

 

Client 기억

  • Cookie only (문자열)
  • Session (Cookie 필요/객체)

 

Cookie와 Session은 HTTP의 Stateless를 극복하기 위해 탄생

 

- HTTP 리다이렉트

  • URL Redirection 또는 Forwarding은 페이지 단위의 실제 리소스, 폼 혹은 전체 웹 애플리케이션이 다른 URL에 위치하고 있는 상태에서 링크를 존속시키는 기술
  • 3XX의 코드를 지님

 

Redirection

 

Forwarding

 

Servlet

- Tomcat

  • Java 기반의 서블릿 컨테이너이자 웹 서버. JSP/Spring으로 웹사이트를 구축한다면 톰캣은 거의 반드시 사용 됨
  • Apache : Web Server / Static
  • Tomcat : Web Application Server / Dynamic

 

  • main()을 Tomcat이 실행
  • tomcat이 어떻게 우리가 작성한 코드를 실행할 수 있을까?
  • Container vs Component <= 양쪽이 서로 미리 약속한 규칙이 존재
  • 우리는 그 규칙대로 코딩

 

- Postman

  • Rest API 테스팅 툴
  • HttpServlet service()가 get, post 등 method를 확인하고 난 뒤 HelloServelt의 doGet, doPost를 호출

 

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        response.getWriter().append("<html><body><h1>Your username : " + username + "</h1></html>");

        String password = request.getParameter("password");
        System.out.println("Password : "+password);
    }

 

JSP

  • jsp는 compiler에 의해 servlet 변환
  • HTML like 코드 <= Html 안에 java 코드를 위치

 

  • sub url 방식 vs job parameter 방식 ( 프론트엔드와 협업 약속차이 )
package tomcat.tomcat;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;

//도메인 업무를 서블릿으로 처리
//단순 CRUD를 위한 서블릿을 각각 만들지 않고, 업무별 세부 처리를 하나의 서블릿에서 처리하는 방식
// 1. sub url로 구분
//  @WebServlet("/book/*")
//  도서목록 : /book/list
//  도서상세 : /book/detail
//  도서등록 : /book/insert
//  도서...

// 2. 업무 구분자를 parameter(job)로 사용
//  도서목록 : /book?job=list
//  도서상세 : /book?job=detail
//  도서등록 : /book?job=insert
//  도서...

//  @WebServlet("/book/*")
@WebServlet("/book")
public class BookServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    //여러 요청을 처리
    //sub url
//    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//        System.out.println(request.getRequestURI());
//        System.out.println(request.getContextPath());
//
//        String job = request.getRequestURI().substring(request.getContextPath().length());
//        switch(job) {
//            case "/book/list" : list(); break;
//            case "/book/detail" : detail(); break;
//            case "/book/insert" : insert(); break;
//        }
//    }

    //job parameter
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String job = request.getParameter("job"); //client에서 무조건 job이 전달된다
        switch (job){
            case "list" : list(); break;
            case "detail" : detail(); break;
            case "insert" : insert(); break;
        }
    }

    private void list(){ System.out.println("list()"); }
    private void detail(){ System.out.println("detail()"); }
    private void insert(){ System.out.println("insert()"); }
}

 

마무리

- WorkShop

  • (개인별) 자기소개(static)를 localhost tomcat 프로젝트로 전환하기
    • 프로젝트명 : IntroduceMyself
  • 조별 취합 시 구현 기능인 참여(form)을 변형해서 친구 맺기 기능을 (form) 구현
    • html의 form element의 입력값 또는 선택값을 servlet에서 읽고 출력 (tomcat console)
  • 기타 추가 기능은 알아서

 

- 정리

  • TCP/IP
    • TCP : 전송 조절 프로토콜(데이터 전달 보증O, 순서)
    • IP : 인터넷 프로토콜(패킷 전달 여부 보증X, 순서X)
    • 송신자가 수신자에게 IP  주소를 사용하여 데이터를 전달하고, 그 데이터가 제대로 갔는지, 제대로 받았다고 연락은 오는지에 대한 얘기를 하는 것
  • Sesseion : 둘 이상의 개체가 정보 교환을 할 때, 개체들이 연결되어 있다는 것에 대한 정보
  • Java EE와 Jakarta EE : 엔터프라이즈 애플래케이션 개발, 실행 하기 위한 기술과 환경 제공
    • Jakarta EE는 Eclipse가 Java EE(오픈 소스)를 가져오며 이름을 바꿈(Java 저작권)

  • 엔터프라이즈 애플리케이션 : 조직 운영의 다양한 프로세스 간소화, 자동화 하도록 설계된 대규모 소프트웨어 솔루션
  • Servlet : 동적 웹 페이지를 만들 때 사용되는 자바 기반의 웹 애플리케이션  프로그래밍 기술
  • 비동기 처리 : 프로세스의 완료를 기다리지 않고 동시에 다른 작업을 처리하는 방식
  • JavaServer Pages (JSP) : HTML 코드에 Java 코드를 넣어 동적웹페이지 생성하는 언어
    • JSP가 실행되면 자바 서블릿으로 변환되며 웹 어플리케이션 서버에서 동작되면서 필요한 기능 수행
    • 생성된 데이터 웹페이지와 함께 클라이언트로 응답

'LG 유플러스 유레카 > 스프링 프레임워크' 카테고리의 다른 글

[45일 차] 스프링 프레임워크 (Spring MVC)  (0) 2025.04.01
[44일 차] 스프링 프레임워크 (Spring DI/AOP)  (0) 2025.03.31
[42일 차] 스프링 프레임워크 (BookManager Servlet + JSP(MVC))  (0) 2025.03.26
'LG 유플러스 유레카/스프링 프레임워크' 카테고리의 다른 글
  • [46일 차] 스프링 프레임워크 (SpringBoot MVC DB + Ajax)
  • [45일 차] 스프링 프레임워크 (Spring MVC)
  • [44일 차] 스프링 프레임워크 (Spring DI/AOP)
  • [42일 차] 스프링 프레임워크 (BookManager Servlet + JSP(MVC))
문태신
문태신
3대500 백엔드 개발자가 꿈입니다.
  • 문태신
    별 될 시간
    문태신

  • 전체
    오늘
    어제
    • 전체 글 (82)
      • LG 유플러스 유레카 (78)
        • 강의 정리 (5)
        • 소프트웨어 엔지니어링 (8)
        • 알고리즘 (13)
        • 데이터베이스 활용 (5)
        • 미니 프로젝트 1 (3)
        • 데이터베이스 심화 (5)
        • 프론트엔드 이해 (3)
        • 깃허브 특강 (2)
        • 취업 특강 (2)
        • 스프링 프레임워크 (16)
        • 후기 (1)
        • REST API (9)
        • 미니 프로젝트 2 (6)
      • 자격증 (1)
      • 디자인 (2)
      • 감상문 (1)
        • 책 (0)
        • 영화 (1)
  • 인기 글

  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
문태신
[41일 차] 스프링 프레임워크 (HTTP,Servlet,JSP)
상단으로

티스토리툴바