일기장
Published 2023. 5. 14. 22:40
웹 브라우저와 웹 서버 웹개발

웹브라우저와 웹서버

웹브라우저와 웹서버는 웹 환경에서 핵심적인 역할을 수행합니다. 웹브라우저는 사용자의 요청을 받고, 웹서버에 HTTP 요청을 전송합니다. 웹서버는 요청을 수신하여 해당 작업을 처리하고, 그 결과로 HTTP 응답을 생성합니다. 웹브라우저는 받은 응답을 렌더링하여 사용자에게 출력합니다.

 

요청

  1. URL 입력: 웹브라우저에 URL(Uniform Resource Locator)을 입력합니다. URL은 웹서버에서 제공하는 웹페이지 또는 리소스의 주소를 나타냅니다.
  2. HTTP 요청 전송: 웹브라우저는 HTTP(HyperText Transfer Protocol)를 사용하여 웹서버에 요청을 전송합니다. HTTP 요청은 주로 GET 또는 POST 메서드를 사용하며, 요청에 필요한 추가적인 정보도 포함될 수 있습니다.

 

작업(처리)

  1. 요청 수신: 웹서버는 웹브라우저로부터 받은 HTTP 요청을 수신합니다.
  2. 요청 처리: 웹서버는 받은 요청에 따라 해당하는 작업을 처리합니다. 예를 들어, 요청된 웹페이지를 찾아서 동적으로 생성하거나, 데이터베이스와 상호작용하여 요청에 대한 결과를 준비합니다.
  3. 응답 생성: 웹서버는 요청에 대한 처리 결과를 기반으로 HTTP 응답을 생성합니다. 이 응답에는 상태 코드, 헤더, 본문 등의 정보가 포함됩니다.

 

출력

  1. HTTP 응답 전송: 웹서버는 생성한 HTTP 응답을 웹브라우저로 전송합니다.
  2. 응답 수신 및 렌더링: 웹브라우저는 받은 HTTP 응답을 수신하고, 응답에 따라 웹페이지를 렌더링하여 사용자에게 출력합니다. 이 과정에서 HTML, CSS, JavaScript 등의 웹 기술이 사용됩니다.

 


 

 

Spring MVC

Spring MVC는 자바 기반의 웹 애플리케이션을 개발하기 위한 프레임워크로, Model-View-Controller 아키텍처를 따릅니다.

 

아래는 MVC 아키텍쳐에 관해서 잘 정리된 글이라고 생각돼서 가지고 왔습니다.

https://developer.mozilla.org/ko/docs/Glossary/MVC

 

MVC - MDN Web Docs 용어 사전: 웹 용어 정의 | MDN

MVC (모델-뷰-컨트롤러) 는 사용자 인터페이스, 데이터 및 논리 제어를 구현하는데 널리 사용되는 소프트웨어 디자인 패턴입니다. 소프트웨어의 비즈니스 로직과 화면을 구분하는데 중점을 두고

developer.mozilla.org

 

@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
profile

일기장

@공군급양

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!