배운 것
원격 프로그램을 실행하는 방법
HTTP 요청 / 응답
내용 정리
웹 프로그래밍?
- 요청을 받으면 처리 후, 브라우저에게 html을 만들어서 주는 것
원격 프로그램을 실행하기 위해선 브라우저와 웹 어플리케이션 ( WAS )가 필요하다.
브라우저에 URL을 입력하면 주소를 통해 호출되는 원리
이렇게 하기 위해선
1. 사전에 프로그램 등록
2. URL과 프로그램(메소드)를 연결
의 절차가 필요하다
클래스에 @Controller을 붙임
호출하려는 메소드에 @ReqeustMapping을 붙임
-> URL에 메소드가 연결됨, 브라우저에 URL을 입력하고 호출하면 URL과 연결된 메소드가 실행된다
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class Hello {
// 브라우저에 해당 주소로 요청하면 main메소드가 실행
@RequestMapping("/hello")
public void main(HttpServletResponse response) throws IOException {
System.out.println("Hello"); // 콘솔에 출력
// 브라우저로 출력
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
out.print("Hello");
}
}
브라우저로 URL을 입력해서 원격프로그램을 호출(요청)하면,
톰캣이 받아서 HttpServletRequest객체를 만들고 요청한 내용을 담은 후, 연결된 메소드에 매개변수로 전달한다
매개변수로 적기만 하면, 톰캣이 자동으로 만들어서 준다.
우리는 톰캣이 만들어준 것을 사용하면 됨
클라이언트(client) : 서비스를 요청하는 애플리케이션
서버(server) : 서비스를 제공하는 애플리케이션
브라우저에서 URL로 요청 -> 서버에서 원격 프로그램 실행 -> 결과를 HTML로 응답
프로토콜?
- 서로 간의 통신을 위한 약속, 규칙
- 주고 받을 데이터에 대한 형식을 정의한 것
- ex) 편지봉투 (보내는 사람, 받는 사람, 주소 우표등)
HTTP ( Hyper Text Transfer Protocol )
- 텍스트 기반의 프로토콜
- 단순하고 읽기 쉬움
- 상태를 유지하지 않는 특성(stateless) -> 클라이언트의 정보를 저장하지 않음
- 같은 클라이언트에서 데이터를 보내도 서버는 인지하지 못함
- 이를 보완하기 위해 쿠키, 세션 사용 -> 클라이언트 구별 가능
- 확장 가능 (커스텀 헤더 추가 가능)
- 요청 메세지 / 응답 메세지로 구분
- 브라우저에 URL을 입력해서 요청하면 브라우저가 HTTP 요청 메세지를 작성해 전송됨
- 서버는 요청을 받아서 HTTP 응답 메세지를 작성해 응답해줌
HTTP 요청 메세지
- GET / POST
ㅇ GET
- 서버에게 리소스를 요청해서 얻어온다 (READ)
- BODY없음, 대신 데이터를 보낼 게 있으면 쿼리 스트링 사용
- 단순히 정보를 얻어오는 역할
ㅇ POST
- 서버에 정보 제공 (WRITE)
- 전송할 데이터를 BODY에 담아 전송
- 게시판 글쓰기, 로그인, 회원가입, 파일첨부 등등
느낀점/보완할 점
스프링 강의를 통해 스프링을 공부한지 1달?이 넘었다.
이제는 어느정도 눈에 익지만 아직 손으로 타이핑하기엔 부족한 듯 하다.
스프링을 통해서 계속 무언가를 만들어봐야겠다는 생각이 들었다.
혹시 잘못된 정보가 있다면 지적 부탁드려요.
'아카이브 > 스프링' 카테고리의 다른 글
| 스프링의 정석 (@RequestParam, @ModelAttribute) (0) | 2021.12.27 |
|---|---|
| 스파르타 코딩클럽 [ 웹개발의 봄, Spring ] - 1주차 (0) | 2021.12.26 |
| 스프링의 정석 (서블릿과 JSP) (0) | 2021.12.24 |
| 스프링의 정석 (관심사 분리와 MVC패턴) (0) | 2021.12.24 |
| 스프링의 정석 ( 클라이언트-서버, 웹 어플리케이션 서버, 텍스트 파일, 바이너리 파일 ) (0) | 2021.12.22 |