렌더링이란 무엇입니까?
웹 개발에서 렌더링은 웹 페이지를 만드는 과정을 의미합니다. 웹 페이지는 HTML, CSS, JS와 같은 웹 기술을 사용하여 작성되며 웹 브라우저는 이러한 코드를 해석하여 클라이언트가 볼 수 있는 화면으로 변환합니다.
렌더링은 크게 브라우저에서 처리하는 클라이언트측 렌더링과 서버에서 처리하는 서버측 렌더링으로 나뉩니다.
CSR(Client Side Rendering)은 브라우저에서 JavaScript를 사용하여 웹 페이지를 동적으로 생성하는 방법입니다.
관련 기술로는 Google 지도, Gmail 및 Google 캘린더가 있습니다.
SSR(Server Side Rendering)은 HTML, CSS 등을 사용하여 서버에서 시작 페이지를 생성하고 브라우저에 전달하는 프로세스입니다. 주로 정적 웹 사이트에 사용됩니다.
관련 기술로는 JSP 및 Time Leap이 있습니다.
백엔드 개발자는 서버, DB, 인프라 등 수많은 백엔드 기술을 공부해야 합니다.
MVC란 무엇입니까?
MVC(Model-View-Controller)는 소프트웨어 개발에 사용되는 아키텍처 디자인 패턴입니다.
MVC 패턴은 소프트웨어를 세 가지 역할로 나눕니다.
- 모델은 데이터와 비즈니스 로직을 처리하는 구성 요소입니다.
- View는 모델에서 가져온 데이터를 사용자에게 보여주는 역할을 합니다.
- 컨트롤러는 모델을 구동하고 사용자 요청을 보고 처리합니다.
MVC 패턴을 사용하면 애플리케이션의 각 구성 요소가 독립적으로 작동하므로 유지 관리 및 개발이 더 쉬워집니다. 또한 코드의 재사용성이 증가하고 소프트웨어의 확장성과 유연성을 높일 수 있습니다.
MVC 패턴은 일반적으로 웹 개발에 사용됩니다. 예를 들어 모델은 데이터베이스와 상호 작용하고 뷰는 HTML, CSS 및 JavaScript로 구성된 프런트 엔드로 구현되며 컨트롤러는 서버 측 로직을 담당합니다. 이 구성은 웹 응용 프로그램을 보다 효과적으로 구조화하고 유지 관리 및 개발을 쉽게 만듭니다.
서블릿이란 무엇입니까?
서블릿은 Java를 사용하여 웹 애플리케이션을 개발하는 데 사용되는 기술입니다.
서블릿은 클라이언트의 요청을 처리하고 응답을 구성하는 웹 서버에서 실행되는 Java 클래스입니다. 웹 브라우저가 HTTP 요청을 보내면 서블릿 컨테이너가 요청을 받아 서블릿으로 전달합니다. 그런 다음 서블릿은 요청을 처리하고 응답을 생성하여 클라이언트로 보냅니다.
서블릿은 JSP(JavaServer Pages)와 함께 웹 개발에서 가장 일반적으로 사용되는 기술 중 하나입니다. JSP는 서블릿과 비슷한 역할을 하지만 Java 코드가 HTML 코드에 삽입되는 방식이 다릅니다. 서블릿과 JSP를 함께 사용하면 동적 웹 페이지를 쉽게 개발할 수 있습니다.
서블릿은 다양한 기능을 제공하며 웹 애플리케이션 성능을 향상시킬 수 있는 다양한 기술 및 라이브러리와 함께 사용됩니다. 예를 들어 서블릿 필터를 사용하여 클라이언트의 요청과 응답을 가로채서 처리할 수 있습니다. 서블릿 컨텍스트를 사용하여 서블릿 간에 데이터를 교환할 수도 있습니다.
@ServletComponentScan이란 무엇입니까?
@ServletComponentScan은 Spring Framework에서 서블릿과 필터를 자동으로 등록하기 위해 사용되는 주석입니다.
서블릿과 필터는 Spring의 IoC(제어 역전) 컨테이너에 bean으로 등록될 수 있습니다. 그러나 이 구성을 위해 각 빈을 개별적으로 등록하는 것은 번거롭습니다. 이를 해결하기 위해 Spring은 @ServletComponentScan 애노테이션을 제공한다.
@ServletComponentScan 주석을 사용하여 Spring Boot는 서블릿과 필터를 자동으로 감지하고 빈으로 등록합니다. 이렇게 하려면 서블릿 및 필터를 구현하는 클래스에 @WebServlet 및 @WebFilter와 같은 주석을 추가해야 합니다.
예를 들어 다음과 같이 @ServletComponentScan 주석으로 서블릿 및 필터를 등록할 수 있습니다.
@SpringBootApplication
@ServletComponentScan
public class MyApplication {
public static void main(String() args) {
SpringApplication.run(MyApplication.class, args);
}
}
이 구성으로 서블릿과 필터를 구현한 클래스에 @WebServlet과 @WebFilter 어노테이션을 추가하면 자동으로 빈으로 등록된다.
@SpringBootApplication이란 무엇입니까?
@SpringBootApplication은 Spring Boot 애플리케이션에 대한 주석입니다.
이 주석은 Spring Boot 애플리케이션을 구성하는 데 필요한 여러 주석의 단순화된 조합입니다.
@SpringBootApplication 주석에는 다음 주석이 포함됩니다.
- @Configuration: 이것이 Spring 구성 파일임을 나타내는 주석.
- @EnableAutoConfiguration: 자동 구성 활성화에 대한 참고 사항입니다.
- @ComponentScan: 구성 요소 검색 활성화에 대한 참고 사항입니다.
이 주석을 사용하면 Spring Boot 애플리케이션의 구성이 간소화됩니다. Spring Boot 애플리케이션을 시작하고 주석이 달린 이 클래스의 기본 메서드를 실행하면 Spring Boot는 자동으로 구성 파일을 로드하고 구성 요소를 찾고 애플리케이션을 구성합니다.
@ServletComponentScan
@SpringBootApplication
public class ServletApplication {
public static void main(String() args) {
SpringApplication.run(ServletApplication.class, args);
}
}
**SpringApplication.run(ServletApplication.class, args);**는 Spring Boot 애플리케이션을 실행하는 메서드입니다.
- 스프링 애플리케이션: Spring Boot 어플리케이션을 생성하고 실행하는 클래스입니다.
- 달리다(): Spring Boot 애플리케이션을 시작하는 방법입니다.
- 서블릿애플리케이션.클래스: Spring Boot 어플리케이션의 메인 클래스입니다. 이 수업 @SpringBootApplication 주석은 애플리케이션을 구성하기 위해 Spring Boot에서 선언되고 사용됩니다.
- 인수: 애플리케이션 실행 시 전달되는 인수입니다. 이러한 값은 애플리케이션이 실행되는 방식에 영향을 미칩니다. 예를 들어 프로필, 구성 파일 경로 등을 전달할 수 있습니다.
이 코드 서블릿 애플리케이션 클래스를 기본 애플리케이션 클래스로 사용하여 Spring Boot 애플리케이션을 실행합니다. 이때 @SpringBootApplication 구성 파일은 주석을 통해 자동으로 로드되고 구성 요소가 검색되며 애플리케이션이 구성됩니다. 또한, 인수 인수를 전달하여 응용 프로그램을 실행할 때 필요한 정보를 전달할 수 있습니다.
서블릿 코드 샘플(1)
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(name = "helloServlet", urlPatterns = "/hello")
public class HelloServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
System.out.println("HelloServlet.service");
System.out.println("request = " + request);
System.out.println("response = " + response);
String username = request.getParameter("username");
System.out.println("username = " + username);
response.setContentType("text/plain");
response.setCharacterEncoding("utf-8");
response.getWriter().write("hello " + username);
}
}
위의 코드를 실행한 후 http://localhost:8080/hello?username=world
위의 코드는 **HelloServlet**이라는 서블릿 클래스를 정의합니다. @WebServlet 주석을 사용하여 서블릿 클래스에 대한 설정을 지정합니다.
@WebServlet 주석 성 속성은 서블릿의 이름을 지정합니다. URL 패턴 속성은 서블릿이 매핑되어야 하는 URL 패턴을 지정합니다. 위의 코드에서 /안녕하세요 패턴에 매핑하도록 설정됩니다.
HelloServlet 수업은 Http서블릿 클래스가 상속되기 때문에 서비스() 클라이언트 요청을 처리하는 메서드를 재정의합니다. 서비스() 메서드는 **HttpServletRequest**이고 HttpServlet 응답 개체를 매개 변수로 사용합니다.
위의 코드에서 **HttpServletRequest**를 통해 클라이언트로부터 요청 정보를 검색하고 **HttpServletResponse**를 통해 응답을 생성합니다. **username**이라는 클라이언트가 전달한 매개 변수 값은 **request.getParameter(“username”)**를 통해 검색되고 해당 값을 사용하여 응답이 구성됩니다.
마지막으로 **response.setContentType(“text/plain”)** 및 **response.setCharacterEncoding(“utf-8”)**을 사용하여 응답 및 **응답의 MIME 유형 및 문자 인코딩을 설정합니다. getWriter().write(“hello ” + username)**로 클라이언트에 대한 응답.
즉, 위의 코드는 /안녕하세요 URL에 요청이 있을 때 HelloServlet 클래스 서비스() 메서드에서 매개변수로 전달됨 Http서블릿 요청 개체에서 사용자 이름 매개변수 값을 읽고 응답으로 반환 안녕하세요 {사용자 이름} 메시지를 출력하는 코드입니다.
Service() 메서드의 역할
서비스() 방법은 Http서블릿 클래스의 메소드로서 클라이언트 요청이 도착하면 서블릿 컨테이너에 의해 자동으로 호출됩니다. 서비스() 메서드는 요청 메서드(GET, POST, PUT, DELETE 등)에 따라 적절한 처리 메서드(doGet(), doPost(), doPut(), doDelete() 등)를 호출합니다.
이 메서드의 역할은 다음과 같습니다.
- 클라이언트의 요청을 구문 분석하고 적절한 처리 방법을 호출합니다.
- 요청 유형(GET, POST, PUT, DELETE 등)에 따라 해당 처리 메서드(doGet(), doPost(), doPut(), doDelete() 등)가 호출됩니다.
- 요청에 대한 처리 절차의 실행 결과가 응답으로 전송됩니다.
- 처리 절차에서 생성된 응답은 클라이언트로 전송됩니다.
- 응답의 MIME 유형(콘텐츠 유형)을 설정할 수 있습니다.
- 오류 처리를 수행합니다.
- 클라이언트 요청을 처리하는 동안 예외가 발생하면 오류 페이지가 표시될 수 있습니다.
- 오류 페이지를 표시하기 전에 예외 처리 프로세스를 수행하여 적절한 오류 코드 등을 설정할 수 있습니다.
그러므로 서비스() 메소드(Method)는 서블릿에서 핵심적인 역할을 하는 메소드 중 하나로 서블릿 컨테이너에 의해 노출되는 많은 메소드 중 가장 많이 사용되는 메소드 중 하나이다.
서블릿의 환영 페이지
main/webapp 경로에 index.html 설치
HttpServletRequest와 HttpServletResponse를 사용할 때 가장 중요한 점은 이 객체들이 HTTP 요청 메시지와 HTTP 응답 메시지를 편리하게 사용할 수 있도록 도와준다는 것입니다. 이 기능을 완전히 이해하려면 HTTP 사양에서 제공하는 요청 및 응답 메시지 이해당신은해야합니다.
@WebServlet(이름 = “”, urlPatterns = “”)
성 속성은 @WebServlet 해당 서블릿의 이름을 지정하는 주석에 사용되는 속성 중 하나입니다.
서블릿 이름은 웹 애플리케이션 내에서 고유해야 합니다. 서블릿은 일반적으로 서블릿 클래스와 동일한 이름을 지정하지만 다른 이름을 지정할 수 있습니다.
@WebServlet(name = “requestHeaderServlet”, urlPatterns = “/request-header”)에서 name=”requestHeaderServlet”은 이 서블릿의 이름을 “requestHeaderServlet”으로 지정한다는 의미입니다. 이 할당된 이름은 서블릿 컨테이너 내에서 서블릿을 식별하는 데 사용됩니다.
HTTP 요청 데이터
HTTP에서 데이터를 요청하는 세 가지 방법이 있습니다.
- GET, 쿼리문
- 우편
- 메시지 본문에 직접 작성
GET, 쿼리 매개변수
URL 예) http://localhost:8080/request-param?username=hello&age=20
위의 예에서와 같이 쿼리 매개변수는 ? &로 시작하고 &로 구분합니다.
쿼리 매개변수 검색 방법
String username = request.getParameter("username"); //단일 파라미터 조회 Enumeration<String>
parameterNames = request.getParameterNames(); //파라미터 이름들 모두 조회
Map<String, String()> parameterMap = request.getParameterMap(); //파라미터를 Map 으로 조회
String() usernames = request.getParameterValues("username"); //복수 파라미터 조회
매개변수는 중복될 수 있습니다.
예를 들어) http://localhost:8080/request-param?username=김&사용자 이름=팩&사용자 이름=공원
따라서 단일 매개변수 조회와 다중 매개변수 조회를 구분합니다.
여러 매개변수의 단일 매개변수 검색
이러한 방식으로 모든 매개변수를 쿼리하고 인쇄할 수 있습니다.
request.getParameterNames().asIterator()
.forEachRemaining(paramName -> System.out.println(paramName +
"=" + request.getParameter(paramName)));
getParameterNames()를 통해 각 파라미터의 이름을 가져온 후 getParameter()에 이름을 주입하여 값을 가져옵니다.
주요 서블릿 메소드
- init() : 서블릿이 처음 요청될 때 호출되며 초기화 작업을 수행합니다.
- service() : 요청이 발생할 때마다 호출됩니다. 요청을 실제로 처리하는 메서드입니다.
- doGet() : 이 메서드는 HTTP GET 요청을 처리합니다.
- doPost() : 이 메서드는 HTTP POST 요청을 처리합니다.
- Destroy() : 서블릿이 종료되고 일부 정리 작업을 수행할 때 호출됩니다.
- getParameter() : 이 메소드는 HTTP 요청에 의해 전달된 매개변수 값을 검색합니다.
- getServletContext() : 서블릿 컨텍스트 객체를 반환하는 메서드입니다.
- getServletConfig() : 이 메서드는 서블릿 구성 정보를 반환합니다.
- getInitParameter() : 이 메소드는 서블릿 초기화 매개변수 값을 가져옵니다.
- getServletName() : 이 메소드는 서블릿 이름을 반환합니다.
또한 HttpServletRequest, HttpServletResponse 및 HttpSession과 같은 개체를 사용하여 HTTP 요청 및 응답을 처리할 수 있습니다. 이러한 메서드와 개체를 사용하여 효과적으로 서블릿을 개발할 수 있습니다.