웹브라우저와 웹서버
웹브라우저와 웹서버는 웹 환경에서 핵심적인 역할을 수행합니다. 웹브라우저는 사용자의 요청을 받고, 웹서버에 HTTP 요청을 전송합니다. 웹서버는 요청을 수신하여 해당 작업을 처리하고, 그 결과로 HTTP 응답을 생성합니다. 웹브라우저는 받은 응답을 렌더링하여 사용자에게 출력합니다.
요청
- URL 입력: 웹브라우저에 URL(Uniform Resource Locator)을 입력합니다. URL은 웹서버에서 제공하는 웹페이지 또는 리소스의 주소를 나타냅니다.
- HTTP 요청 전송: 웹브라우저는 HTTP(HyperText Transfer Protocol)를 사용하여 웹서버에 요청을 전송합니다. HTTP 요청은 주로 GET 또는 POST 메서드를 사용하며, 요청에 필요한 추가적인 정보도 포함될 수 있습니다.
작업(처리)
- 요청 수신: 웹서버는 웹브라우저로부터 받은 HTTP 요청을 수신합니다.
- 요청 처리: 웹서버는 받은 요청에 따라 해당하는 작업을 처리합니다. 예를 들어, 요청된 웹페이지를 찾아서 동적으로 생성하거나, 데이터베이스와 상호작용하여 요청에 대한 결과를 준비합니다.
- 응답 생성: 웹서버는 요청에 대한 처리 결과를 기반으로 HTTP 응답을 생성합니다. 이 응답에는 상태 코드, 헤더, 본문 등의 정보가 포함됩니다.
출력
- HTTP 응답 전송: 웹서버는 생성한 HTTP 응답을 웹브라우저로 전송합니다.
- 응답 수신 및 렌더링: 웹브라우저는 받은 HTTP 응답을 수신하고, 응답에 따라 웹페이지를 렌더링하여 사용자에게 출력합니다. 이 과정에서 HTML, CSS, JavaScript 등의 웹 기술이 사용됩니다.
Spring MVC
Spring MVC는 자바 기반의 웹 애플리케이션을 개발하기 위한 프레임워크로, Model-View-Controller 아키텍처를 따릅니다.
아래는 MVC 아키텍쳐에 관해서 잘 정리된 글이라고 생각돼서 가지고 왔습니다.
https://developer.mozilla.org/ko/docs/Glossary/MVC
@Controller 어노테이션
@Controller 어노테이션은 Spring MVC에서 컨트롤러를 정의하는 데 사용됩니다. 이 어노테이션을 사용하여 클래스를 컨트롤러로 선언하면 해당 클래스는 HTTP 요청을 처리하는 역할을 수행합니다.
@Controller
public class MyController {
// 컨트롤러의 메서드들
}
@RequestMapping 어노테이션
@RequestMapping 어노테이션은 컨트롤러 메서드와 특정 URL 패턴을 매핑하는 데 사용됩니다. 이 어노테이션을 사용하여 각각의 요청 URL에 해당하는 메서드를 지정할 수 있습니다.
@Controller
public class MyController {
@RequestMapping("/hello")
public String hello() {
System.out.println("hello");
}
}
위의 예제에서는 "/hello" URL 패턴에 해당하는 요청이 있을 때 hello() 메서드가 실행되고, "hello"라는 뷰를 반환합니다.
@RequestMapping 어노테이션은 다양한 속성을 가지며, 아래는 일부 중요한 속성의 예시입니다.
- value: 매핑할 URL 패턴을 지정합니다.
- method: 허용할 HTTP 메서드를 지정합니다. 기본적으로 GET, POST 모두 허용됩니다.
- params: 요청 파라미터의 조건을 지정합니다.
- headers: 요청 헤더의 조건을 지정합니다.
@Controller
public class MyController {
@RequestMapping(value = "/hello", method = RequestMethod.GET, params = "name=John", headers = "X-CustomHeader=Test")
public String hello() {
return "hello";
}
}
위의 예제에서는 "/hello" URL 패턴에 GET 메서드로 요청이 들어오고, "name" 파라미터 값이 "John"이며 "X-CustomHeader" 헤더 값이 "Test"인 경우에만 hello() 메서드가 실행됩니다.
HTTP 요청과 응답
Http 요청
클라이언트에서 서버로 전송되는 요청은 HTTP 프로토콜을 따르며, Spring MVC는 이를 처리하는 다양한 방법을 제공합니다. 일반적으로 다음과 같은 방식으로 Http 요청을 처리할 수 있습니다.
1. Controller 메서드 매개변수로 직접 받기
Spring MVC에서는 컨트롤러의 메서드 매개변수로 다양한 타입을 받을 수 있습니다. Http 요청의 정보를 담고 있는 HttpServletRequest
객체를 매개변수로 선언하여 요청 정보를 직접 얻을 수 있습니다. 예를 들면 다음과 같습니다.
@RequestMapping("/example")
public String handleRequest(HttpServletRequest request) {
// 요청 정보 처리
String parameterValue = request.getParameter("param");
// ...
return "view";
}
2. @RequestParam 어노테이션 사용하기
@RequestParam
어노테이션을 이용하여 특정 요청 매개변수를 받을 수도 있습니다. 이 방식은 특정 매개변수의 값을 추출하여 컨트롤러 메서드의 매개변수로 자동으로 바인딩해줍니다. 예를 들면 다음과 같습니다.
@RequestMapping("/example")
public String handleRequest(@RequestParam("param") String parameterValue) {
// 요청 정보 처리
// ...
return "view";
}
HTTP 응답
Spring MVC에서는 컨트롤러 메서드의 반환 값에 따라 Http 응답을 생성합니다. 일반적으로 다음과 같은 방식으로 Http 응답을 처리할 수 있습니다.
1. 문자열 반환하기
가장 간단한 방법은 컨트롤러 메서드에서 문자열을 반환하는 것입니다. 이 문자열은 뷰의 이름으로 해석되어 해당하는 뷰가 렌더링됩니다.
@RequestMapping("/example")
public String handleRequest() {
// 응답 정보 처리
// ...
return "view";
}
2. HttpServletResponse 이용하기
HttpServletResponse는 Spring MVC에서 HTTP 응답을 다루는 데 사용되는 인터페이스입니다. 이를 활용하여 HTTP 응답의 상태 코드, 헤더, 본문 등을 조작할 수 있습니다.
package com.fastcampus.ch2;
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 TwoDice {
@RequestMapping("/rollDice")
public void main(HttpServletResponse response) throws IOException {
int idx1 = (int)(Math.random()*6 + 1);
int idx2 = (int)(Math.random()*6 + 1);
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("</head>");
out.println("<body>");
out.println("<img src='resources/img/dice" + idx1 + ".jpg'>");
out.println("<img src='resources/img/dice" + idx2 + ".jpg'>");
out.println("</body>");
out.println("</html>");
}
}
'웹개발' 카테고리의 다른 글
@RequestsParam, @ModelAttribute (0) | 2023.05.20 |
---|---|
서블릿과 JSP (1) | 2023.05.19 |
MVC패턴 예제 (0) | 2023.05.17 |
HTTP에서 바이너리 파일 다루기 (0) | 2023.05.15 |
HTTP에 대한 이해 (0) | 2023.05.15 |