-
[Study24] SpringBoot JPA사용을 위한 설정FISA 2026. 2. 2. 12:31
Spring기반 웹 개발 흐름은
Servlet -> SpringFramework -> SpringBoot로 이어집니다.
가장 기본단에는 항상 was와 servlet engine(tomcat)이 존재하고 이 위에서 모든 것이 동작합니다.
Spring이든 SpringBoot든 결국 내부적으론 servlet스펙을따릅니다.
서브렛을 따로 제가 정리한 적이 없는 것 같은데, 자바로 만든 웹 요청 처리 규격입니다. 동적 웹 페이지를 만들때(JSP)사용되는 자바 기반의 웹 프로그래밍 기술입니다.
웹 브라우저에서 http://localhost:8080/test 같은 요청을 보내면, 이 요청을 직접 받아서 처리하는 주체는 Spring이 아니라 WAS(Tomcat 등) 입니다.Tomcat은 요청을 받으면 “이 요청을 처리할 Servlet이 있는가?”를 먼저 확인하고, 있다면 해당 Servlet의 메서드를 호출합니다. 이때 호출되는 핵심 메서드가 service()이고, 내부적으로는 HTTP 메서드에 따라 doGet(), doPost() 같은 메서드로 분기됩니다.
즉 흐름을 단순화하면
브라우저 → WAS(Tomcat) → Servlet → 자바 코드 실행 → 응답 반환
이 구조입니다.jsp도 서브렛으로 실행시점에 변환되어 컴파일되긴해요. 그래서 결국 jsp가 결국 servlet이란말이나와요.
Spring Framework부터 보면, 전통적인 웹 애플리케이션 구조를 그대로 유지합니다. 톰캣같은 was를 따로 설치하고,서버 설정 역시 개발자나 인프라 운영자가 직접 담당합니다. Eclipse 기준의 기존 정통 웹 프로젝트 구조에서 라이브러리만 추가해 사용하는 방식이기 때문에, servlet 위치나 jsp 경로, WEB-INF 구조가 모두 기존과 동일합니다.
그래서 지금까지 실습한 바로는
1. Gradle Groovy Project생성
2. Was(Tomcat)추가
3. WEB-INF구조 추가
4.jsp jstl 설정 추가
4. jsp controller index등과같은 파일 추가를했었어야했는데
springBoot는 여기서 한 단계 더 나아갑니다. 기본적으로 Tomcat이 내장되어있어 별도의 was 설치가 필요없고, properties설정만으로 설정이 가능합니다.
Spring Boot에서 정적 파일과 동적 파일의 구분도 명확합니다. HTML, CSS, JS, 이미지 파일 같은 정적 리소스는 src/main/resources/static 경로에 두며, 이 위치의 파일들은 컨트롤러 없이도 바로 접근이 가능합니다. 반면 JSP는 동적 파일이기 때문에 webapp 경로를 사용합니다. webapp/*.jsp는 일반적인 JSP 개발 경로이고, webapp/WEB-INF/*.jsp는 Spring을 통해서만 접근 가능한 구조입니다.그래서 일반적인 웹 개발 환경을 원할 경우 마켓플레이스에서 Web Developer 플러그인을 추가로 설치하는 경우가 많습니다.
코드 레벨에서 보면 @RestController는 비동기 처리에 적합하며, HTTP 메서드에 맞게 @GetMapping, @PostMapping 등을 사용해 요청을 매핑합니다.
세션 관리의 경우 Servlet API에서는 HttpSession을 직접 생성하고 setAttribute, getAttribute, invalidate() 등을 사용하지만, Spring에서는 이를 추상화해 @SessionAttributes, Model, SessionStatus 같은 API를 제공합니다.
@SessionAttributes로 세션에 사용할 별칭을 등록하고, Model.addAttribute()로 데이터를 저장하며, @ModelAttribute를 통해 세션 데이터를 메소드 파라미터로 받아 사용할 수 있습니다. 세션 무효화는 SessionStatus.setComplete()로 처리하며, 이는 HttpSession.invalidate()와 동일한 개념입니다.
JSP 개발을 위해서는 src/main/webapp, src/main/webapp/WEB-INF 폴더를 직접 생성하고, application.properties에 JSP 실행 경로를 반드시 등록해야 하며, 빌드 설정 파일(pom.xml 또는 build.gradle)에 JSP 실행이 가능한 라이브러리 설정도 필수입니다.
Properties의 dependencies에 아래 코드와 같은 설정을 추가해주어야 Jsp 실행이 가능해집니다.
// JSP 렌더링 엔진 (Spring Boot가 버전을 관리하도록 버전 생략 권장) implementation 'org.apache.tomcat.embed:tomcat-embed-jasper' // JSTL (Jakarta EE 9/10 규격) implementation 'jakarta.servlet.jsp.jstl:jakarta.servlet.jsp.jstl-api' // 인터페이스 implementation 'org.glassfish.web:jakarta.servlet.jsp.jstl' // 구현체하고나선 gradle refresh필수!!
Application.yml같은 경우엔
spring: application: name: step02_web mvc: view: prefix: /WEB-INF/fisaview/ suffix: .jsp server: servlet: context-path: /fisa port: 8082이렇게 jsp경로를 따로 지정해 주어야 찾을 수 있습니다.
실습을 해보자면
index.html에서
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>index.html</title> </head> <body> <h3>SpringAPI를 활용한 웹페이지 이동 학습</h3> <a href="test.jsp">1.springapi 필요없이 단순 링크로 이동</a> <br><hr><br> <!-- spring api & application.yml위치 기준 --> <a href="step01">2.spring api로 jsp로 foward로 이동</a> <br><hr><br> <a href="step02">3.spring api로 test.jsp로 redirect로 이동 redirect로 이동 : Non WEB-INF</a> <br><hr><br> <a href="step03">4.spring api로 test.jsp로 foward로 이동 foward로 이동 : Non WEB-INF</a> </body> </html>각각의 목적에 맞는 경로를 추가해줍니다.
이건 MySubController입니다.
package edu.fisa.ce; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.servlet.ModelAndView; @Controller public class MySubController { @RequestMapping(value="/step03", method = RequestMethod.GET) public String step03() { System.out.println("step03 ---"); //http://localhost/fisa/test.jsp return "forward:/test.jsp"; } //redirect로 test.jsp호출해보기 /* * application.yml에 설정된 위치가 아니라 일반 Jsp경로의 파일로도 이동 가능 * * * modelAndView API필요성이 없기 때문에 * 즉 요청 객체에 새로운 데이터 저장할 로직이 필요 없는 경우 * 단순 String반환으로 jsp로 redirect이2 */ @RequestMapping(value="/step02", method = RequestMethod.GET) public String step02() { System.out.println("step02 ---"); //http://localhost/fisa/test.jsp return "redirect:/test.jsp"; } //index.html의 2번링크 실행 - get방식 /* * ModelAndView API로 ce1.jsp로 이동 */ @RequestMapping( value="/step01",method=RequestMethod.GET ) public ModelAndView step01() { ModelAndView mv = new ModelAndView(); //요청 객체에 짝꿍이름 저장 mv.addObject("name","순재"); //view지정 mv.setViewName("ce1"); return mv; } }각각 스텝의 경로를 어떤 뷰를 보여줄지 결정합니다.
리턴에 경로를 지정해주면되는 것 같아요.
jsp와같이 동적파일은
WEB-INF에 넣어주어야하고
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> ce1.jsp - ${requestScope.name} </body> </html>다음과같이 jsp tag문법 써주시면 동적문서가됩니다!!
그리고 eclipse할때 항상 properties를 보셔야해요.
Jsp쓰려면 Project Facets에 Dynamic Web Module설정을해주어야하고
그밖에도 자바 버젼 설정등과같은거...중요합니데이

Spring Boot에서 JSP를 사용하는 경우에도 컨트롤러는 내부적으로 Servlet으로 변환되어 실행됩니다. 이때 @Controller와 @RestController의 역할 구분이 중요해집니다. @Controller는 JSP와 같은 뷰로 화면을 이동시키는 전통적인 MVC 방식에 적합하고, @RestController는 JSP 없이 문자열이나 JSON을 바로 응답하는 구조로, 비동기 처리나 API 서버에 권장됩니다. JSP 개발을 위해서는 src/main/webapp, src/main/webapp/WEB-INF 폴더를 직접 생성해야 하며, application.properties에 JSP 실행 경로를 반드시 등록해야 합니다. 또한 pom.xml이나 build.gradle에 JSP 실행이 가능한 라이브러리 설정이 필수로 필요합니다.
Gradle 기준으로는 JSP 렌더링을 위해 tomcat-embed-jasper를 추가하고, JSTL 사용을 위해 Jakarta EE 규격에 맞는 API와 구현체를 함께 설정합니다. 이때 권장되는 방식은 Spring Boot가 관리하는 라이브러리는 버전을 명시하지 않고, 핵심 라이브러리들만 상단에서 버전을 통합 관리하는 것입니다. 이렇게 해야 의존성 충돌을 최소화할 수 있습니다.
실행 흐름은 단순합니다. main 메서드를 보유한 Spring Boot 애플리케이션을 실행한 뒤, 브라우저에서 http://localhost/index.html 같은 정적 리소스를 확인하거나 Postman으로 API 요청을 테스트하면 됩니다. JSP 테스트를 위해서는 Gradle 프로젝트 생성 → JSP 관련 라이브러리 추가 → Gradle 새로고침 → webapp/WEB-INF 폴더 생성 → Dynamic Web Module 설정 → 단순 JSP 작성 순서로 진행합니다.
코드 레벨에서 보면 @RestController는 비동기 처리에 적합하며, HTTP 메서드에 맞게 @GetMapping, @PostMapping 등을 사용해 요청을 매핑합니다. 이 방식은 JSP 없이도 문자열이나 JSON 형태로 바로 응답할 수 있다는 특징이 있습니다. 세션 관리의 경우 Servlet API에서는 HttpSession을 직접 생성하고 setAttribute, getAttribute, invalidate() 등을 사용하지만, Spring에서는 이를 추상화해 @SessionAttributes, Model, SessionStatus 같은 API를 제공합니다. @SessionAttributes로 세션에 사용할 별칭을 등록하고, Model.addAttribute()로 데이터를 저장하며, @ModelAttribute를 통해 세션 데이터를 메소드 파라미터로 받아 사용할 수 있습니다. 세션 무효화는 SessionStatus.setComplete()로 처리하며, 이는 HttpSession.invalidate()와 동일한 개념입니다.
Spring의 대표적인 API인 ModelAndView는 Model(데이터)과 View(화면)를 함께 다루는 객체로, 컨트롤러에서 데이터를 담아 JSP로 전달하고 실제 출력은 JSP에게 위임하는 구조입니다. 이를 사용하려면 application.properties에 JSP 경로(prefix, suffix)를 반드시 등록해야 하며, 예를 들어 /WEB-INF/views/test.jsp와 같은 구조로 매핑됩니다. 이 방식 역시 Servlet 기반 MVC 구조 위에서 동작하며, Spring은 이 흐름을 더 명확하고 안전하게 관리해주는 역할을 담당합니다.
728x90'FISA' 카테고리의 다른 글
[Study26]예제로 알아보는 큰 흐름 (0) 2026.02.06 [Study25] curl명령보내기 (0) 2026.02.02 [Study23] 양방향연결에서의 순환참조 문제 (0) 2026.01.30 [Study22]JPA db CRUD실습 (0) 2026.01.28 [회고]4주차_우리FISA클라우드 엔지니어링 (2) 2026.01.25