본문 바로가기

컴퓨터공부/JSP

스프링 입문을 위한 자바 객체 지향의 원리와 이해 (3)[책리뷰 & Book review]

by Life & study 2024. 1. 26.
반응형

스프링 입문을 위한 자바 객체 지향의 원리와 이해 (3)

[책리뷰 & Book review]

 

Spring Boot에서 JSP를 사용 웹통신방법은?

Spring Boot에서 JSP를 사용하려면 몇 가지 설정이 필요합니다. 

먼저, pom.xml 파일에 JSP와 관련된 의존성을 추가해야 합니다.

xml

<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
</dependency>


그리고 application.properties 파일에

 JSP 파일이 위치한 디렉터리와 JSP를 사용하기 위한 뷰 리졸버 설정을 추가해야 합니다.
properties

spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp


이제 HelloWorldController를 수정하여

 "Hello Men" 메시지를 JSP 페이지를 통해 반환하도록 변경합니다.

java

@Controller
public class HelloWorldController {
    @GetMapping("/HelloWorld")
    public String helloWorld(Model model) {
        model.addAttribute("message", "Hello Men");
        return "helloWorld";
    }
}


위의 코드는 "/HelloWorld" URL에 대한 GET 요청을 처리하고, 

"Hello Men"이라는 메시지를 helloWorld.jsp 페이지에 전달합니다.

helloWorld.jsp 페이지는 다음과 같이 작성할 수 있습니다.

jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<body>
    <h1>${message}</h1>
</body>
</html>


이제 WebClient를 사용하여 이 URL에 요청을 보낼 수 있습니다.

java

WebClient webClient = WebClient.create();
Mono<String> result = webClient.get()
    .uri("http://localhost:8080/HelloWorld")
    .retrieve()
    .bodyToMono(String.class);

result.subscribe(System.out::println);


위의 코드와 같이 WebClient를 사용하여

 "/HelloWorld" URL에 요청을 보내면, helloWorld.jsp 페이지의 내용이 콘솔에 출력됩니다.

다음 텍스트 그림은 이 과정을 나타냅니다.

[웹 브라우저]  --(1) GET /HelloWorld 요청-->  [Spring Boot 애플리케이션]
[Spring Boot 애플리케이션]  --(2) helloWorld.jsp 응답-->  [웹 브라우저]

[WebClient]  --(3) GET /HelloWorld 요청-->  [Spring Boot 애플리케이션]
[Spring Boot 애플리케이션]  --(4) helloWorld.jsp 응답-->  [WebClient]


요청:

웹 브라우저가 "/HelloWorld" URL을 요청합니다.
WebClient가 동일한 URL을 요청합니다.
응답:
2. Spring Boot 애플리케이션은 helloWorld.jsp 페이지를 웹 브라우저에 응답합니다.
4. Spring Boot 애플리케이션은 helloWorld.jsp 페이지를 WebClient에 응답합니다.





 

웹 view-Resolver 란 무엇인가?

뷰 리졸버(View Resolver)는 스프링 MVC에서 컨트롤러가 반환하는 뷰 이름을 실제 뷰로 변환하는 역할을 합니다. 

즉, 컨트롤러에서 반환하는 문자열(예: "helloWorld")을 사용자에게 보여줄 실제 뷰(예: "helloWorld.jsp")로 매핑하는 역할을 합니다.

예를 들어, 컨트롤러에서 "helloWorld"라는 문자열을 반환하면, 뷰 리졸버는 이를 "/WEB-INF/jsp/helloWorld.jsp"라는 실제 JSP 파일로 매핑하게 됩니다. 이 과정은 아래와 같이 나타낼 수 있습니다:

[HelloWorldController]
        |
        | (1) return "helloWorld"
        v
[View Resolver] --(2) resolve to "/WEB-INF/jsp/helloWorld.jsp"--> [Dispatcher Servlet]
        |
        | (3) forward to JSP Engine
        v
[JSP Engine] --(4) render the JSP--> [User's Browser]


HelloWorldController가 "helloWorld"라는 뷰 이름을 반환합니다.
뷰 리졸버는 "helloWorld" 뷰 이름을 "/WEB-INF/jsp/helloWorld.jsp"라는 JSP 파일 경로로 변환합니다.
변환된 JSP 파일 경로를 Dispatcher Servlet에게 전달합니다.

 

Dispatcher Servlet은 JSP 엔진을 통해 해당 JSP 파일을 렌더링 하고, 그 결과를 사용자의 브라우저로 전송합니다.
뷰 리졸버 설정은 application.properties 파일에서 다음과 같이 할 수 있습니다.

properties

spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp


위 설정에 따르면, 뷰 이름 앞에는 "/WEB-INF/jsp/"를, 뒤에는 ".jsp"를 추가하여 실제 뷰 경로를 생성합니다.

 따라서 "helloWorld"라는 뷰 이름은 "/WEB-INF/jsp/helloWorld.jsp"라는 JSP 파일 경로로 변환됩니다.

 

 

 

 

spring 과 springboot와 jsp의 이해는?

 

 

spring Framework

Spring Framework는 엔터프라이즈급 애플리케이션을 개발하기 위한 컴프리헨시브 프레임워크입니다. 주요 기능으로는 IoC(Inversion of Control), AOP(Aspect-Oriented Programming), 트랜잭션 관리, MVC 웹 애플리케이션 개발 등이 있습니다.



Spring Boot

Spring Boot는 Spring 기반의 애플리케이션을 빠르고 쉽게 개발할 수 있도록 지원하는 도구입니다.
기본 설정을 통해 쉽게 애플리케이션을 구동시킬 수 있고, 복잡한 XML 설정 없이 애노테이션 기반의 설정을 지원합니다.


Dispatcher Servlet

Dispatcher Servlet은 Spring MVC의 핵심 구성 요소로, 클라이언트의 요청을 적절한 컨트롤러에게 전달하는 역할을 합니다.
Dispatcher Servlet은 클라이언트의 요청을 받고, Handler Mapping을 통해 해당 요청을 처리할 컨트롤러를 찾습니다.
찾은 컨트롤러가 요청을 처리한 후 반환한 모델과 뷰를 가지고, View Resolver를 통해 뷰를 렌더링 하고 클라이언트에게 응답합니다.



JSP

JSP(Java Server Pages)는 동적인 웹 페이지를 생성하는 기술입니다.
HTML 코드 안에 자바 코드를 넣어 웹 페이지를 동적으로 생성하며, 서버에서 실행되어 클라이언트에게는 HTML로 결과를 전송합니다.
작동 원리는 다음과 같습니다:

[Client]  --(1) HTTP Request-->  [Dispatcher Servlet]
[Dispatcher Servlet]  --(2) find Controller-->  [Handler Mapping]
[Handler Mapping]  --(3) invoke Controller-->  [Controller]
[Controller]  --(4) return Model and View-->  [Dispatcher Servlet]
[Dispatcher Servlet]  --(5) resolve View-->  [View Resolver]
[View Resolver]  --(6) render View-->  [JSP]
[JSP]  --(7) return HTML-->  [Dispatcher Servlet]
[Dispatcher Servlet]  --(8) HTTP Response-->  [Client]


클라이언트가 HTTP 요청을 보냅니다.
Dispatcher Servlet이 Handler Mapping에게 적절한 컨트롤러를 찾아달라고 요청합니다.
Handler Mapping은 요청을 처리할 컨트롤러를 찾아 호출합니다.
컨트롤러는 처리 결과인 모델과 뷰를 반환합니다.
Dispatcher Servlet이 View Resolver에게 뷰를 렌더링하라고 요청합니다.
View Resolver는 JSP를 사용하여 뷰를 렌더링합니다.
JSP는 렌더링 결과인 HTML을 반환합니다.
Dispatcher Servlet이 클라이언트에게 HTTP 응답을 보냅니다.

 

 

 

 

 

 

 

java 8 version 에 대한 multiCore에 대한 혁신 부분은 무엇인가? java 1.5와의 차이점은 무엇인지에 대한 
함수언어 와 java 1.5 version에 대한 차이점을 

 


Java 8에서는 함수형 프로그래밍을 쉽게 할 수 있도록 Stream API와 람다 식을 도입했습니다. 

이는 멀티코어 프로세서에서 병렬 처리를 효과적으로 수행하는 것을 가능하게 했습니다.

Java 1.5와의 주요 차이점은 다음과 같습니다:

Java 1.5에서는 병렬 처리를 위해 명시적으로 스레드를 관리해야 했지만, Java 8에서는 Stream API를 이용하여 병렬 처리를 간단하게 수행할 수 있습니다.
Java 1.5에서는 익명 클래스를 사용하여 함수형 인터페이스를 구현했지만, Java 8에서는 람다 식을 사용하여 코드를 더 간결하게 작성할 수 있습니다.
예를 들어, 리스트의 각 요소를 출력하는 작업을 각 버전에서 어떻게 수행하는지 비교해 보겠습니다.

Java 1.5 코드:

java
List<String> list = Arrays.asList("Apple", "Banana", "Cherry");

for (String fruit : list) {
    System.out.println(fruit);
}


Java 8 코드:

java

List<String> list = Arrays.asList("Apple", "Banana", "Cherry");

list.stream().forEach(System.out::println);



Java 8의 코드는 Stream API와 람다 식을 이용하여 더 간결하게 작성되었습니다. 또한, 이 코드는 멀티코어 프로세서에서 병렬 처리를 수행할 수 있습니다. stream() 대신 parallelStream()을 사용하면 됩니다.

java
list.parallelStream().forEach(System.out::println);
이처럼 Java 8은 멀티코어 프로세서에서 병렬 처리를 효율적으로 수행하고, 코드를 더 간결하게 작성할 수 있도록 돕습니다.



 

 

 

 

jsp와 Disparcher Servlet 과의 관계

 

HTTP 요청에서 응답까지의 과정을 간단한 Hello World 예제와 함께 설명하겠습니다.

먼저, 클라이언트가 http://localhost:8080/hello라는 URL로 HTTP 요청을 보내면 이 요청이 Dispatcher Servlet에게 전달됩니다.

java

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class HelloWorldController {
    @RequestMapping("/hello")
    public String hello(Model model) {
        model.addAttribute("message", "Hello, World!");
        return "helloWorld";
    }
}


위의 코드는 "/hello"라는 요청이 들어오면 "helloWorld"라는 뷰를 반환하는 간단한 컨트롤러입니다.

이후, Dispatcher Servlet은 Handler Mapping에게 요청을 처리할 컨트롤러를 찾아달라고 요청합니다. Handler Mapping은 HelloWorldController의 hello 메서드를 찾고 호출합니다.

hello 메소드는 모델에 message라는 이름으로 "Hello, World!"라는 값을 추가하고, "helloWorld"라는 뷰 이름을 반환합니다.

java

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
<meta charset="UTF-8">
<title>Hello World!</title>
</head>
<body>
    ${message}
</body>
</html>


위의 코드는 "helloWorld.jsp"라는 뷰 파일입니다. 이 파일은 View Resolver에 의해 렌더링 되며, 모델에 추가된 message 값을 출력합니다.

마지막으로, 렌더링된 HTML이 Dispatcher Servlet을 통해 클라이언트에게 HTTP 응답으로 전달됩니다. 웹 브라우저에서 이 응답을 받으면 "Hello, World!"라는 메시지가 출력됩니다.

이런 식으로 Spring MVC는 HTTP 요청을 처리하고 응답을 생성합니다.

 

 

 

 

 

#개발자취업 #개발자기초 #개발자 #개발자분야 #개발자분류 #개발자종류 #it개발자 #서버개발자 #개발자성장 #신입개발자 #ios개발자 #개발자노트북 #개발자 되는 법 #개발 #앱개발 #웹개발 #개발분야 #it개발 #개발공부 #코딩상식 #개발공부 #개발초보

 

#개발자취업 #개발자면접 #개발자채용 #백엔드개발자 #백엔드개발자 #백엔드개발자취업 #백엔드개발 #프런트엔드개발자 #개발자상담 #백엔드 #개발자 #앱개발자 #웹개발자 #개발자팁 #앱개발자 #백엔드취업 #백엔드공부 #백엔드강의 #백엔드독학

 

#전산직면접 #면접 #면접팁 #면접관 #공공기관전산직면접 #공사면접 #면접질문 #면접할 말 #면접준비 #면접준비 #면접답변 #면접질문 #면접기출 #전화면접 #면접복장 #면접답변 #면접꿀팁 #모의면접 #면접후기 #롯데면접 #면접후기 #임원면접 #최종면접 #면접꿀팁

 

 

 

 

 

반응형

댓글