본문 바로가기
Spring

[스프링 부트] migration

by moca7 2024. 11. 5.

 

 

 

ㅁ 스프링 부트

- 스프링 레거시 프로젝트랑 같은데 스프링 부트 프로젝트를 하면 설정이 굉장히 간결해진다.

- logback.xml을 제외하고 xml 파일들이 사라진다. 하나의 properties 파일에 설정하면 끝이다.

- 스프링 부트도 하나의 프레임워크인데 스프링을 가져다 쓰고 있다. 

스프링 기술들을 쓰는데 설정이 간편해진다.

- sts3에서도 부트프로젝트를 할 순 있지만 sts4로 한다.

 

- 우리가 쓰는 5.3.27버전은 11버전 이하를 호환이 잘된다.

Spring Boot 3는 Spring Framework 6을 기반으로 하고 있으며, Java 17 이상에서만 지원된다.

- 스프링 부트는 어떤 버전이 좋은지도 다 나와있어서 버전 관리하기도 용이하다.

 

 

 

 

 

 

ㅁ sts4 설치

 

 

 

 

 

- 작업 탐색기에서 상단의 '압축 풀기'를 눌러서 압축을 푼다.

c드라이브에 푼다. 이런 툴들은 c드라이브에 두는게 제일 좋다. 

 

 

 

 

 

 

 

- 이름을 sts-4.26.0.RELEASE에서 STS4로 바꾼다.

 

 

 

 

 

 

- C:\Program Files\Amazon Corretto를 가보면 이전에 설치한 자바가 보여진다.

 

 

 

 

 

 

- 스프링 부트 3버전은 자바 17이상만 지원한다.

스프링을 하면서 자바 11버전을 사용했었다. 자바를 17버전으로 바꾼다.

- 내 PC 빈곳 우클릭 - 설정 - 고급 시스템 설정 - 환경 변수 - 아래 시스템 변수에서 path 클릭.

- path에서 17을 제일 위로 둔다.

(근데 자리 바꾸고 자바 17이 C:\Program Files\Amazon Corretto에 깔려는 있는데 path에서는 안보여서 새로 만들기로 추가했다)

 

 

 

 

 

- 또 시스템 변수에서 JAVA_HOME이 11로 되어 있는데 디렉터리 찾아보기로 17로 교체한다.

 

 

 

 

 

 

- cmd에서 java -version하면 현재 자바 버전이 17이라고 뜬다.

 

 

 

 

 

ㅁ C:\workspaces에 08_springboot-workspace 폴더를 만든다.

 

 

 

 

ㅁ sts4 실행

 

 

- C:\STS4의 SpringToolSuite4.exe로 STS4를 실행한다.

 

 

 

 

 

 

- 워크스페이스를 C:\workspaces\08_springboot-workspace를 선택해서 실행한다.

 

 

 

 

 

 

 

 

ㅁ 이클립스 플러그인 세팅 (이건 워크스페이스 설정이 아니라 이클립스라는 ide에 대한 세팅이다)

 

- 부트 프로젝트는 백엔드 용이다.

우리는 jsp를 써서 프론트와 백엔드를 같이 쓰고 있다.

근데 원래 부트프로젝트는 백엔드용으로 개발되었다 보니까 html css 파일 등을 여기서 만들 수가 없다.

 

 

- 상단 메뉴의 Help - Eclipse Marketplace... -  web 검색 - 두번째 Eclipse Enterprise Java and Web Developer Tools 3.35를 install한다. 

 

 

 

- 바로 confirm.

 

 

- accept하고 finish.

 

 

 

 

 

 

- select all하고 trust

- 그다음 restart now를 누른다.

 

 

 

 



ㅁ 워크스페이스 세팅

ㅁ 뷰 설정

 

- 뷰를 이렇게 설정했다.

- 서버는 부트 대시보드에 뜬다.

 

 

 

ㅁ spelling체크

- 다 utf-8일거다. 그래도 체크

 

 

ㅁ font

-basic textfont 가서 d2coding으로

 

 

ㅁ tab size 2로

 

 

ㅁ 템플릿

- java code style - code templates - 메소드바디, 캣치블럭바디 주석 지움.

 

 

ㅁ jsp 파일 의 templates

-html5 더블클릭해서 페이지 지시어 하단에 추가 2줄

 

 

 

 

 

ㅁ xml - xml catalog - user specified entries 등록

 

 

ㅁ xml(wild web developer)에서 deownload ~ dtd, xsd 첫번째 체크박스 체크.

 

 

 

=======

 

 

 

ㅁ 서버 세팅

- 부트는 내장 서버가 있다. 내장 톰캣이 있다.

내부적으로 아파치 톰캣 10버전을 쓴다.

- 톰캣 9버전, 10버전 차이가 있다.

- 서버세팅은 할 필요 없다.

 

 

 

=======

 

ㅁ new했을 때 뜨는 특징

window - perspective - customize perspective - shortcuts

 

 

 

 

- 메이븐은 체크해제

 

 

- Spring boot는 Spring Starter Project 체크

 

 

 

 

 

 

- Web에서 JSP File 체크. CSS File은 해도 되고 안해도 된다.

 

 

 

 

- XML에서 XML File 체크

 

 

 

 

 

ㅁ 새로운 Spring Starter Project 생성

 

 

- 패키지 익스플로러가 현재 텅 비어있다.

Create new Spring Starter Project를 클릭한다.

 

 

 

 

 

 

- 처음에 Service URL과 Name만 뜨면 좀 기다렸다가 다시 열면 제대로 뜬다.

 

- name은 boot (프로젝트 이름)

- Type은 Maven (빌드도구 선택)

- packaging은 War (개발끝나고 배포할때 압축시킬 파일의 타입)

- Languagae는 Java 

- Java Version은 17(17이상만 있다)

 

- GroupId는 com.br

- ArtifactId는 boot

- Package는 com.br.boot

- Description은 설명이다. 수정해도 되고 그래도 둬도 된다. 그냥 둔다.

- 하단의 next. 

 

 

 

 

 

- 스프링 부트 버전을 뭘로 쓸건지 선택한다. 

스냅샷이나 rc1은 개발단계에선 사용가능하지만 운영할땐 문제가 생길수있는 베타버전이다.

스냅샷이나 rc1을 제외하면 버전이 3.3.5와 3.2.11만 남는다.

- 스프링 부트 버전은 3.2.11 버전을 선택한다.

3.3 버전대는 못쓴다. 스프링 마이바티스가 3.3.5를 지원하지 않기 때문이다. 

 

- 참고로 전자정부 프레임워크는 부트버전은 더 옛날버전인 2.8버전이다. 우리는 3.2버전대로 한다.

2.8 버전대의 코드나 3.1 버전대의 코드나 별 차이가 없다.

- 스프링 부트 프로젝트를 만들면 좋은게 왠만한 라이브러리는 이미 다 추가되어있다.

 

 

- 라이브러리는 처음에 미리 추가하지 말고 나중에 필요할 때 가서 해야 한다. 
- 그렇지만 처음 Spring Starter Project를 만들 때도 라이브러리 3개는 무조건 추가한다.

- lombok 검색 -> Lombok 체크

- devtools 검색 -> Spring Boot DevTools 체크

- spring web 검색 -> Spring Web 체크

- 내가 필요한걸 미리 추가하면 안된다. 그럼 세팅도 다 해야 한다.

나중에 프로젝트 우클릭 - Spring - Add Starters에서 이 창을 또 띄울수있으니 그때 추가하면 된다.

 

 

 

 

=================================================================

 

 

 

ㅁ springWeb를 springBoot로 마이그레이션

 

 

* Spring Legacy Project (Spring MVC Project) 작업시

- java version : 11

- apache tomcat version : 9   => javax.xxx 

- IDE : STS3

- spring version : 5.3.27

 

* Spring Starter Project (Spring Boot Project) 작업시

- java version : 17

- apache tomcat version : 10 (내장톰캣)   => jakarta.xxx (서버관련 클래스들 패키지)

- IDE : STS4

- spring boot version : 3.2.11 (내부적으로 스프링 버전을 6.1.14버전 사용 - 부트도 내부적으로 스프링 프레임워크를 가져와서 쓰고 있다.)

 

 

* Spring Boot 특징

- 스프링을 사용하기 위해서 여러가지 복잡한 설정들을 해야만 하는데(xml파일 활용해서)

스프링부트를 쓰면 복잡한 환경 설정들을 간소화할 수 있다.

- 개발자는 비즈니스 로직 구현에 집중할 수 있다.

- 내장 톰캣을 사용하고 있어서 빠르고 간편하게 배포 가능.

 

 

=================================================================

 

 

* workspace 세팅

(1) Eclipse Enterprises Java and Web Developer Tools 3.x.x 설치

(2) 기존의 세팅

- Window > view

- Window > preferences(인코딩 설정, 폰트 설정, tab size 설정, java template 설정, jsp template 설정, xml 카탈로그 등록)

- Window > perspective > customize perspective - shortcuts

- 서버 세팅은 안해도 됨(내장 톰캣이 있어서)

 

=================================================================

 

 

 

* 프로젝트 생성

 

(1) Spring Starter Project 생성

- Name : 프로젝트명

- Type : Maven (빌드도구)

- Packaging : War

- Java Version : 17

- Language : Java

- Group : com.br

- Artifact : boot

- Package : com.br.boot

- Spring Boot Version : 3.2.11 (반드시 3.2버전대. 3.3버전대 안됨)

 

 

스프링 부트가 3버전이 되면서 톰캣이 10버전 이상만 쓰게끔 되었다.

보통 톰캣이 버전 바꿀 때 많이 안바꾸는데 9버전에서 10버전으로 바뀌면서 굉장히 많이 바뀌었다.

 

- 저게 톰캣에서 제공하는 건데 클래스는 그대론데 패키지가 바뀌었다.  javax에서 jakarta로.

- 파일 업로드도 톰캣 9에서는 되던게 10에서는 안되는 경우가 있었다.

 

 

 

(2) Dependencies 선택 (기본적으로 이 3개를 추가한 채로 프로젝트 생성)

- Lombok

- Spring Web

- Wpring Boot DevTools

 

 

(3) 폴더 구조

- src/main/java : java파일 (소스코드 작업)

- src/main/resources : 로그 설정문서, 마이바티스 관련 문서

- src/main/resources/static : 정적 자원 (이미지, js, css파일들)

- src/main/webapp/WEB-INF/views : jsp파일 (화면 작업)

 

 

 

- src/main/java 저 두개 클래스는 반드시 있어야 한다. 부트 프로젝트를 구동시켜주는 클래스다.

- src/main/resources에 logback 문서 등 만들었었다.

src/main/resources에 static 폴더가 들어있다.

정적 자원들을 src/main/webapp/resources에 보관했었는데 이제 정적자원들을 src/main/resources의 static 폴더에 둬야 한다.

- 스프링 부트에서는 mybatis.config 문서를 안써도 된다. 

 

- src/main/webapp에 WEB-INF폴더, 그 아래 views 폴더가 없다 .직접 만들어야 함.

 

 

 

 

 

ㅁ pom.xml을 열어본다.

 

 
<?xml version="1.0" encoding="UTF-8"?>
 
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.2.11</version>
    <relativePath/> <!-- lookup parent from repository -->
  </parent>
 
  <groupId>com.br</groupId>
  <artifactId>boot</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  <name>boot</name>
  <description>Demo project for Spring Boot</description>
 
  <url/>
  <licenses>
    <license/>
  </licenses>
  <developers>
    <developer/>
  </developers>
  <scm>
    <connection/>
    <developerConnection/>
    <tag/>
    <url/>
  </scm>
 
  <properties>
    <java.version>17</java.version>
  </properties>
 
  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
 
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-devtools</artifactId>
      <scope>runtime</scope>
      <optional>true</optional>
    </dependency>
 
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <optional>true</optional>
    </dependency>
 
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-tomcat</artifactId>
      <scope>provided</scope>
    </dependency>
 
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <configuration>
          <excludes>
            <exclude>
              <groupId>org.projectlombok</groupId>
              <artifactId>lombok</artifactId>
            </exclude>
          </excludes>
        </configuration>
      </plugin>
    </plugins>
  </build>

</project>
 

 

- 기존 spring legacy project의 pom.xml과 거의 비슷한데 조금 다르다. 

- 라이브러리들도 서로서로 의존관계로 되어 있다. 

이 라이브러리를 쓰기 위해서는 또다른 라이브러리가 필요하다.

그 모든 라이브러리들이 문제없이 버전이 다 호환되어야 한다.

부트에서는 그걸 아예 모아놓은 형태로 제공하고 있다.

- 여러 라이브러리들이 모인 패키지 형태다.

스프링 부트에서는 어떤 라이브러리에 어떤 버전이 호환이 맞는지 다 매핑되어있다.

ctrl누르면서 parent를 타고 들어가서 볼 수도 있다. 

 

- 이제 maven repository 닷컴을 안가도 된다. 물론 필요에 따라 가는 경우도 있지만.

여기서 그냥 쓰면 자동완성이 된다.

 

- dependency도 ctrl 누르고 클릭하면 타고타고 들어갈 수 있다. 그 안에 어떤 dependency들이 있는지.

 

- pom.xml에서 엔터로 간격만 띄워놓았다. 수정한 것은 없다.

- 다른 프로젝트에서 쓰려고 이 pom.xml을 가져간다면 groupId, artifactId, name을 수정해야 한다.

 

 

 

 

 

ㅁ 서버 구동시에 문제가 없어야 한다.

 

 

- 부트 대시보드 탭을 보면 local 아래에 아무것도 없었는데 하나가 생겼다.

프로젝트 생성시 프로젝트명으로 추가되었다. 재생버튼을 눌러서 서버를 start 해본다.

 

 

 

 

 

- 오류가 난다. 오라클이 8080 포트를 이미 쓰고 있다.

그래서 포트번호를 수정해야 한다. src/main/resources의 application.properties에서 수정한다.

 

 

 

 

 

ㅁ application.properties

 

- properties 파일이니까 키-밸류 형태로 써주면 된다.

- 기본적으로 1줄이 써있다. 어플리케이션명으로 boot라고 되어있다. 이건 있어도 되고 없어도 된다. 그냥 둔다.

- 주석은 #쓰면 된다.

- server.port=8888를 작성하고 저장한다.

- 다른 프로젝트에서 쓰려고 이 application.properties를 가져간다면 spring.application.name=boot를 수정해야 한다. 

 

 

 

 

- 저장을 눌렀더니 위와같은 에러 발생. Save as UTF-8을 누르면 된다.

 

 

 

 

 

ㅁ 서버 start

 

 

- 이젠 오류가 뜨지 않는다.

 

 

 

 

 


=================================================================

 

 

* jsp 사용을 위한 세팅 


1) 라이브러리 추가 (pom.xml)
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
</dependency>

<dependency>
    <groupId>jakarta.servlet</groupId>
    <artifactId>jakarta.servlet-api</artifactId>
</dependency>

<dependency>
    <groupId>jakarta.servlet.jsp.jstl</groupId>
    <artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
</dependency>

<dependency>
    <groupId>org.glassfish.web</groupId>
    <artifactId>jakarta.servlet.jsp.jstl</artifactId>
</dependency>


2) 뷰리졸버관련 세팅(prefix, suffix 등록) : application.properties
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp

 


3) 기존 views 폴더 안 페이지들 복사 

 

 

=================================================================

 

* migration 작업 - 리소스 핸들링

 


  1. 기존 프로젝트의 정적자원들 (src/main/webapp/resources/ 안 폴더)을 static 폴더에 가져다 두기

  2. 정적자원의 경로 재설정 (정적 자원 디렉토리 등록) 
   
     1) WebMvc 관련 세팅을 위한 @Configuration 클래스 만들기 : com.br.boot.config.WebMvcConfig 
     2) WebMvcConfigurer를 구현한 클래스로 만들기 : implements WebMvcConfigurer 
     3) addResourceHandlers 메소드 오버라이딩 후 아래 내용 참고해서 작성
         registry.addResourceHandler("mapping값")
         .addResourceLocations("location값")

  3. server start 해서 
     localhost:8888  url 요청시 main 페이지 잘 뜨는지 
     * 기본적으로 contextPath가 ""로 설정 되어있음
   


---------------------------------------------------------------

* migration 작업 - 기존 프로젝트의 패키지 및 클래스들 복사해오기 
  1. 패키지 선언부 또는 import 다시 진행하기 
  2. 롬복 설치하기

 

 


---------------------------------------------------------------

* migration 작업 - BCryptPasswordEncoder 빈 등록
 
  1. 라이브러리 등록 : pom.xml
 <dependency>
  <groupId>org.springframework.security</groupId>
  <artifactId>spring-security-core</artifactId>
 </dependency>
 
2. BCryptPasswordEncoder 빈 등록 
   1) Spring Security 설정 관련 클래스 만들기 : com.br.boot.config.SecurityConfig
   2) 해당 클래스에 @Configuration 작성
   3) @Bean 으로 BCryptPasswordEncoder 빈 등록


---------------------------------------------------------------

* migration 작업 - MyBatis, logback, log4jdbc

  1. OrcleDriver, MyBatis starter 라이브러리 등록
     1) 프로젝트 우클릭 > Spring > Add Starters 선택후 dependency 선택
        ㄴ Oracle Driver (SQL 안)
        ㄴ MyBatis Framework (SQL 안)
        
  2. mybatis 기존 mapper 파일 가져다 두기 : src/main/resources/mybatis/mappers/
  
  3. db 연결 정보 등록 : application.properties
     spring.datasource.driver-class-name=net.sf.log4jdbc.sql.jdbcapi.DriverSpy
 spring.datasource.url=jdbc:log4jdbc:oracle:thin:@localhost:1521:xe
 spring.datasource.username=spring
 spring.datasource.password=spring
 
4. mybatis 관련 구문 등록 : application.properties
   mybatis.mapper-locations=mybatis/mappers/*.xml
 mybatis.type-aliases-package=com.br.boot.dto
 mybatis.configuration.jdbc-type-for-null=NULL
 
5. log4jdbc 라이브러리 추가 : pom.xml
   <dependency>
  <groupId>org.bgee.log4jdbc-log4j2</groupId>
  <artifactId>log4jdbc-log4j2-jdbc4.1</artifactId>
  <version>1.16</version>
 </dependency>
 
6. logback, log4jdbc 기존 파일 복사해오기 : src/main/resources/
   logback.xml 파일 패키지 수정 
     
---------------------------------------------------------------

* migration 작업 - 파일업로드 (별도의 라이브러리 등록 필요 없음)

  1. MultipartResolver 관련 등록 구문 :  application.properties
     spring.servlet.multipart.max-file-size=10MB
 spring.servlet.multipart.max-request-size=100MB
 
2. FileUtil 클래스에 fileupload 메소드 안에 업로드 폴더 경로 수정 

   File filePathDir = new File("C:" + filePath);

---------------------------------------------------------------

* migration 작업 - Interceptor

  1. 기존 프로젝트의 interceptor 클래스 복사
  
  2. 해당 interceptor 클래스 빈으로 등록 (@Component)
  
  3. 인터셉터 등록 : WebMvcConfig
     1) Interceptor 객체 DI(의존성 주입)
     2) addInterceptors 메소드 오버라이딩 후 아래 내용 작성 
        registry.addInterceptor(실행시킬Interceptor객체)
.addPathPatterns("url mapping값")
.addPathPatterns("url mapping값");

4. contextPath 이슈
   - Interceptor 클래스에 contextPath로 리다렉트 구문 작성시 
     contextPath가 빈 문자열일 경우 이슈 발생 (제대로 redirect 되지 않음)
     => response.sendRedirect(request.getContextPath().equals("") ? "/"
   : request.getContextPath());  로 수정
        
---------------------------------------------------------------

* migration 작업 - Scheduler

  1. 기존 프로젝트에서 Scheduler 클래스 복사
  
  2. 해당 클래스 빈으로 등록 (@Component)
  
  3. 스케줄링 활성화 : com.br.boot.BootApplication
     @EnableScheduling 추가 
     
---------------------------------------------------------------

* migration 작업 - WebSocket

  1. 라이브러리 등록 
     1) 프로젝트 우클릭 > Spring > Add Starters 
     2) WebSocket (Messaging 안) dependency 추가 
     
  2. 기존 프로젝트 EchoHandler 클래스 복사
  
  3. 해당 클래스 빈 등록 (@Component)
  
  4. websocket 핸들러 등록 
     1) websocket 설정을 위한 클래스 만들기 : com.br.boot.config.WebSocketConfig
     2) WebSocketConfigurer 구현 클래스로 만들기 : implements WebSocketConfigurer
     3) EchoHandler 객체 DI
     4) HttpSessionHandshakeInterceptor 빈으로 등록 
     5) registerWebSocketHandlers 오버라이딩 한 후 하단 구문 작성 
        registry.addHandler(구동시킬EchoHandler객체, "웹소켓연결을위한url")
.addInterceptors(httpSessionHandshakeInterceptor())
.withSockJS();

 

 

 

 

 

 

 

 

 

 


=================================================================

 

 

 

 

ㅁ jsp 사용을 위한 라이브러리 추가 (pom.xml) 

 

- 스프링 부트는 백엔드 개발용으로 만들어졌다. 

- 그래서 jsp를 쓰고 싶으면 라이브러리도 추가해야 한다.

톰캣 10으로 바뀌면서 추가해야하는 라이브러리도 바뀌었다.

- jsp를 사용하기 위해 dependency 를 추가한다.

- 그런데 지금 사용하려는 라이브러리는 초반에는 자동완성이 안돼서 MVN REPOSITORY에서 검색한다.

 

 

 

(1) 

 

- 들어가서 버전 아무거나 선택해서 dependency를 복사한다.

여기서 앞에게 그룹id고 뒤에가 artifact id다. 

검색은 항상 artifact id를 하면 된다. 

 

 

<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
    <version>11.0.0</version>
</dependency>

 

- 아무거나 가져왔다.

이걸 pom.xml에 쓰면 노란줄이 뜬다.

버전에 노란줄이 뜨면 version 태그를 생략하면 된다. 

부트에서는 이미 몇버전과 호환되는지 정보가 등록되어 있다.

 

 

 

 

(2)

 

 

- 얘도 아무 버전이나 들어가서 dependency 태그를 복사해온다.

 

<dependency>
    <groupId>jakarta.servlet</groupId>
    <artifactId>jakarta.servlet-api</artifactId>
    <version>6.1.0</version>
    <scope>provided</scope>
</dependency>

 

- version 생략 가능하다고 노란줄이 뜨고 scope는 지워줘야 한다. 둘 다 지운다.

 

 

 

 

(3)

 

 

<dependency>
    <groupId>jakarta.servlet.jsp.jstl</groupId>
    <artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
    <version>3.0.2</version>
</dependency>

 

- 노라줄이 뜬다. 버전 지우면 된다.

- 근데 노란줄이 뜨면 지우고 노란줄이 안뜨면 버전을 지우면 안된다. 버전 정보가 없다는 거니까.

 

 

 

 

 

(4)

 

 

 

<dependency>
    <groupId>org.glassfish.web</groupId>
    <artifactId>jakarta.servlet.jsp.jstl</artifactId>
    <version>3.0.1</version>
</dependency>

 

- 얘도 버전을 지운다.

- jsp에서 jstl을 사용한다. jstl 사용을 위한 라이브러리다.

 

 

 

 

 
<?xml version="1.0" encoding="UTF-8"?>
 
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.2.11</version>
    <relativePath/> <!-- lookup parent from repository -->
  </parent>
 
  <groupId>com.br</groupId>
  <artifactId>boot</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  <name>boot</name>
  <description>Demo project for Spring Boot</description>
 
  <url/>
  <licenses>
    <license/>
  </licenses>
  <developers>
    <developer/>
  </developers>
  <scm>
    <connection/>
    <developerConnection/>
    <tag/>
    <url/>
  </scm>
 
  <properties>
    <java.version>17</java.version>
  </properties>
 
  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-devtools</artifactId>
      <scope>runtime</scope>
      <optional>true</optional>
    </dependency>

    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <optional>true</optional>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-tomcat</artifactId>
      <scope>provided</scope>
    </dependency>
   
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>
   
    <!-- jsp 사용을 위한 jasper 라이브러리 -->
    <dependency>
      <groupId>org.apache.tomcat.embed</groupId>
      <artifactId>tomcat-embed-jasper</artifactId>
      <!--<version>11.0.0</version>-->
    </dependency>
   
    <!-- jstl 사용을 위한 라이브러리들 -->
    <dependency>
      <groupId>jakarta.servlet</groupId>
      <artifactId>jakarta.servlet-api</artifactId>
      <!--<version>6.1.0</version>-->
      <!--<scope>provided</scope>-->
    </dependency>

    <dependency>
        <groupId>jakarta.servlet.jsp.jstl</groupId>
        <artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
        <!--<version>3.0.2</version>-->
    </dependency>
   
    <dependency>
        <groupId>org.glassfish.web</groupId>
        <artifactId>jakarta.servlet.jsp.jstl</artifactId>
        <!--<version>3.0.1</version>-->
    </dependency>

  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <configuration>
          <excludes>
            <exclude>
              <groupId>org.projectlombok</groupId>
              <artifactId>lombok</artifactId>
            </exclude>
          </excludes>
        </configuration>
      </plugin>
    </plugins>
  </build>

</project>

 

- jsp 사용을 위한 jasper 라이브러리 1개, jstl 사용을 위한 라이브러리 3개를 추가했다.

 

 

 

 

 

ㅁ webapp 폴더에 WEB-INF폴더와 views 폴더를 만든다.

 

 

 

- view 폴더 우클릭 new - jsp file

 

 

 

 

ㅁ src/main/webapp/WEB-INF/views에 main.jsp 생성

 

 
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
   
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>    
<c:set var="contextPath" value="${pageContext.request.contextPath}" />  
   
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

    잘열리나?

</body>
</html>
 

 

 

 

 

 

ㅁ com.br.boot.controller 패키지 생성

ㅁ spring legacy project 워크스페이스에서 MvcController 클래스를 복사해온다.

 

 

- C:\workspaces\07_spring-workspace\springWeb\src\main\java\com\br\spring\controller에서 MvcController.java를 복사

 

 

 

 
package com.br.boot.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class MvcController {

 
  @GetMapping("/")
  public String mainPage() {
    return "main";
  }
 
}

 

- 패키지 선언부를 com.br.boot.controller로 수정한다.

- @GetMapping을 잠깐 @RequestMapping으로 바꿔보면 파란줄이 뜬다.

스프링 부트에서는 @GetMapping, @PostMapping으로 요청방식을 지정해서 쓰라고 하고 있다.

 

 

 

 

 

 

ㅁ 부트에서는 기본적으로 컨텍스트 패스가 없다. 빈문자열이다.

 

 

 

- 컨텍스트패스를 생략해도 된다.

- Spring Boot는 기본적으로 context path 없이 루트 경로(/)에서 애플리케이션을 실행하도록 되어 있다.

 

 

 

 

ㅁ 물론 컨텍스트 패스를 등록할 수 도 있다.

 

 

- application.properties 또는 application.yml 파일에서 설정할 수 있다.

application.properties에 server.servlet.context-path=/your-context-path를 작성하면

브라우저 주소창에 http://localhost:8080/your-context-path를 쳐서 갈 수 있다.

- 부트에서는 많이들 컨텍스트패스 없이 한다. 우리도 주석처리한다.

 

 

 

 

 

 

ㅁ 서버 start

- 브라우저 주소창에 "localhost:8888"를 입력해본다.

 

 

- 스프링 부트하면서 자주 보게 될 whitelabel error page가 뜬다.

 

- 뷰 리졸버에 뭐 등록을 한 적이 없다.

prefix와 suffix를 설정하지 않아서 지금 오류가 뜬다.

 

 

 

- servlet-context.xml에 빈을 등록하면서 이 둘을 설정했었다

부트에서는 이런 xml파일이 없다. application.properties 파일에 작성하면 된다.

 

 

 

 

 

ㅁ application.properties

 

 
spring.application.name=boot

#contextPath 등록
#server.servlet.context-path=/boot

#사용할 포트번호 수정
server.port=8888

#응답뷰 관련한 prefix, suffix : servlet-context.xml의 ViewResolver 빈 등록 설정 대체
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
 

 

 

 

- 빈등록을 할 필요가 없다. 왜냐면 부트측에서 ViewResolver를 빈으로 가지고 있다. prefix와 suffix 값이 비어있는 상태일 뿐이다.

- 잘 뜬다.

 

 

 

 

 

ㅁ gitignore

- boot project를 깃으로 올릴때는 application.properties 파일도 올려야 된다.

- gitignore 문서에서 *.properties는 없애거나 주석처리(앞에 # 붙이면 주석처리)해야된다.

 

 

 

 

 

'Spring' 카테고리의 다른 글

[스프링부트] 3. 패키지 안 클래스들 migration  (0) 2024.11.06
[스프링 부트] 정적자원 디렉토리 등록하기 (WebMvcConfigurer)  (0) 2024.11.05
[스케줄러]  (2) 2024.11.05
[인터셉터]  (0) 2024.11.05
[웹소켓] 2.  (2) 2024.11.04