[Spring] STS, Tomcat

2023. 10. 28. 02:23학부 강의/웹프로그래밍 (Spring)


0. 출처

 

아직 배우고 있는 중이라 부정확한 정보가 포함되어 있을 수 있습니다!
주의하세요!

 

올인원 스프링 프레임워크 참고.

 

올인원 스프링 프레임워크 : 네이버 도서

네이버 도서 상세정보를 제공합니다.

search.shopping.naver.com

 


 

1. STS

 

  • STS
    : Spring Tool Suite
    : Spring 개발을 도와주는 툴 모음.

 

STS3을 사용한다.

 

STS3에선 Eclipse에 STS 플러그인을 설치할 수 있고 STS를 설치할 수도 있다.

 

STS를 설치하도록 한다.

 


 

가. 설치

 

우선 springMVC_STS 아래 workspace로 사용할 project 폴더와 다운로드한 파일을 관리할 download 폴더를 생성한다.

 

 

github에서 설치한다.

 

 

Spring Tool Suite 3

the distribution build for the Spring Tool Suite and the Groovy/Grails Tool Suite - spring-attic/toolsuite-distribution

github.com

 

Spring Tool Suite 3.9.18의 full distribution on Eclipse 4.21 ver 설치한다.

 

springMVC_STS\download 아래에 다운로드 후 압축 푼다.

 

STS.exe를 실행한다.

 

 

 

springMVC/project를 workspace로 설정한다.

 

 


 

나. 인코딩 설정

 

  • Workspace encoding
    : Window → Preferences → General → Workspace → Text file encoding → Other 체크 → UTF-8 선택

 

  • CSS encoding
    : Window → Preferences → Web → CSS Files → Encoding → ISO 10646/Unicode(UTF-8)

 

  • HTML encoding
    : Window → Preferences → Web → HTML Files → Encoding → ISO 10646/Unicode(UTF-8)

 

  • JSP encoding
    : Window → Preferences → Web → JSP Files → Encoding → ISO 10646/Unicode(UTF-8)

 


 

2. Tomcat

 

  • 아파치 톰캣(Apache Tomcat)
    : 아파치 소프트웨어 재단에서 개발한 서블릿 컨테이너(또는 웹 컨테이너)만 있는 웹 애플리케이션 서버이다.
    : 웹 서버와 연동하여 실행할 수 있는 자바 환경을 제공하여 JSP와 Java Servlet이 실행할 수 있는 환경을 제공하고 있다.

 

톰캣은 웹 컨테이너로 웹 애플리케이션에 필요한 웹 컴포넌트를 실행할 수 있는 환경을 제공한다.

 

출처 : https://ko.wikipedia.org/wiki/아파치_톰캣

 


 

가. 설치 및 연동

 

 

Apache Tomcat® - Apache Tomcat 9 Software Downloads

Welcome to the Apache Tomcat® 9.x software download page. This page provides download links for obtaining the latest version of Tomcat 9.0.x software, as well as links to the archives of older releases. Unsure which version you need? Specification version

tomcat.apache.org

강의에서는 Tomcat 9 버전 사용했음.

 

springMVC_STS\download 아래에 다운로드 후 압축 풀기.

 

기본으로 설치된 VMWare Server는 삭제한다.

 

Tomcat server 추가.

 

Tomcat indtallation directory에 Tomcat이 설치된 디렉터리를 선택한다.

 

정상적으로 추가된 tomcat server.

 


 

나. 설정

 

STS3에서 Tomcat의 설정을 바로 수정할 수 있다.

  • Use Tomcat Installation : 톰캣의 경로를 지정하는 방법.
  • Publish module contexts to separate XML files : 서버 설정 파일을 STS에서 관리하기 위해서 필요
  • Ports : 사용할 포트 번호 선택. 8090 사용.

 

설정 후 Ctrl + s로 저장한다.

 

 

오른쪽 삼각형 버튼을 눌러서 실행한다.

 

여기서 가끔 경고창이 뜨는 경우가 있다.

 

CONSOLE PERFEORMANCE WARING (from Ansi Console)!

Console buffer size too low (80,000). About 2 times slower

....

콘솔 창의 버퍼 크기가 작아서 생기는 문제다.

 

Window → Preferences → Run/Debug → Console → Limit console output 해제

 

http://localhost:8090/에 접속하기.

 

성공적인 설치

 


 

다. 보충 설명

 

1) “Publish module contexts to separate XML files” 옵션 설명

 

톰캣의 디렉터리 구조

❯ pwd
/Users/dmlrms4598/Desktop/Study_JavaSpring_2/download/apache-tomcat-9.0.82
❯ ll
total 240
drwxr-xr-x@ 16 dmlrms4598  staff    512 10 26 23:58 .
drwxr-xr-x   4 dmlrms4598  staff    128 10 26 23:58 ..
-rw-r-----@  1 dmlrms4598  staff  19992 10 11 22:15 BUILDING.txt
-rw-r-----@  1 dmlrms4598  staff   6210 10 11 22:15 CONTRIBUTING.md
-rw-r-----@  1 dmlrms4598  staff  57092 10 11 22:15 LICENSE
-rw-r-----@  1 dmlrms4598  staff   2333 10 11 22:15 NOTICE
-rw-r-----@  1 dmlrms4598  staff   3398 10 11 22:15 README.md
-rw-r-----@  1 dmlrms4598  staff   6901 10 11 22:15 RELEASE-NOTES
-rw-r-----@  1 dmlrms4598  staff  16505 10 11 22:15 RUNNING.txt
drwxr-x---@ 29 dmlrms4598  staff    928 10 11 22:15 bin
drwx------@ 12 dmlrms4598  staff    384 10 11 22:15 conf
drwxr-x---@ 34 dmlrms4598  staff   1088 10 11 22:15 lib
drwxr-x---@  2 dmlrms4598  staff     64 10 11 22:15 logs
drwxr-x---@  3 dmlrms4598  staff     96 10 11 22:15 temp
drwxr-x---@  7 dmlrms4598  staff    224 10 11 22:15 webapps
drwxr-x---@  2 dmlrms4598  staff     64 10 11 22:15 work

앞서 Publish module contexts to separate XML files 옵션을 사용했었다.

 

그 이유는 Context를 관리하기 편하기 때문이다.

 

Tomcat에서 웹 애플리케이션을 실행시킬 때 참고할 Context를 정의해야 한다.

 

Tomcat이 설치된 디렉터리에는 conf라는 디렉터리가 위치해 있다.

 

이때 conf/context.xml에 모든 애플리케이션에 공통으로 해당되는 기본적인 Context를 정의한다.

 

웹 애플리케이션 별로 개별적인 Context에 대하여 정의할 때는 conf/server.xml conf/Catalina/[hostname]/[appname].xml에 저장한다.

 

각 애플리케이션마다 분리된 conf/Catalina/[hostname]/[appname].xml 파일로 관리하는 것이 conf/server.xml 하나로 관리하는 것보다 관리 및 분리의 어려움, 설정의 복잡성 증가 등 여러 이유로 권장된다.

 

항목 설명
/conf/context.xml - Tomcat의 모든 웹 애플리케이션에 공통으로 적용되는 기본 Context 설정을 포함합니다.
- 개별 웹 애플리케이션의 <Context>설정에 명시되지 않은 경우, 이 파일의 설정이 기본값으로 사용됩니다.
/conf/server.xml - Tomcat 서버 전체의 구성과 관련된 설정을 포함합니다.
- 여러 서비스, 커넥터, 엔진, 호스트 등을 포함할 수 있습니다.
- <Host> 아래에 <Context>를 정의할 수 있지만, 이 방식은 권장되지 않습니다.
/conf/Catalina/[hostname]/[appname].xml - 특정 웹 애플리케이션에만 적용되는 <Context> 설정을 포함합니다.
- [hostname]은 서버의 호스트 이름, [appname]은 웹 애플리케이션의 이름을 나타냅니다.
- 이 파일의 설정은 해당 웹 애플리케이션에만 적용됩니다.

 


 

2) document root 설정

 

eclipse를 사용하면 할 필요없음. 참고만 하세요.

 

Tomcat의 설정을 수정하기 위해서는 설치된 디렉터리의 conf/server.xml을 수정해야 한다.

 

  • conf/server.xml
    : Tomcat의 핵심 구성 요소 및 연결, 동작 방식을 정의.
    : 여기에는 서버의 네트워크 설정, 웹 애플리케이션 배포 방식, 보안 설정 등의 주요 정보가 포함됨.

 

톰캣의 디렉터리 구조

❯ pwd
/Users/dmlrms4598/Desktop/Study_JavaSpring_2/download/apache-tomcat-9.0.82
❯ ll
total 240
drwxr-xr-x@ 16 dmlrms4598  staff    512 10 26 23:58 .
drwxr-xr-x   4 dmlrms4598  staff    128 10 26 23:58 ..
-rw-r-----@  1 dmlrms4598  staff  19992 10 11 22:15 BUILDING.txt
-rw-r-----@  1 dmlrms4598  staff   6210 10 11 22:15 CONTRIBUTING.md
-rw-r-----@  1 dmlrms4598  staff  57092 10 11 22:15 LICENSE
-rw-r-----@  1 dmlrms4598  staff   2333 10 11 22:15 NOTICE
-rw-r-----@  1 dmlrms4598  staff   3398 10 11 22:15 README.md
-rw-r-----@  1 dmlrms4598  staff   6901 10 11 22:15 RELEASE-NOTES
-rw-r-----@  1 dmlrms4598  staff  16505 10 11 22:15 RUNNING.txt
drwxr-x---@ 29 dmlrms4598  staff    928 10 11 22:15 bin
drwx------@ 12 dmlrms4598  staff    384 10 11 22:15 conf
drwxr-x---@ 34 dmlrms4598  staff   1088 10 11 22:15 lib
drwxr-x---@  2 dmlrms4598  staff     64 10 11 22:15 logs
drwxr-x---@  3 dmlrms4598  staff     96 10 11 22:15 temp
drwxr-x---@  7 dmlrms4598  staff    224 10 11 22:15 webapps
drwxr-x---@  2 dmlrms4598  staff     64 10 11 22:15 work

톰캣의 기본 Document Root는 webapps/ROOT 이다.

 

그러면 기본 Document Root는 어디에서 설정되었는지 살펴보자.

 

<Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">
 ..
 </Host>

conf/server.xml<Host> 태그는 아래와 같이 설정되어 있고, <Context> 태그가 생략되어 있다.

 

<Context>를 사용하지 않으면 webapps/ROOT를 자동으로 Document Root로 사용한다.

 

<!-- webapps/hello를 Document Root 로 지정한 예제 -->
<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
            <!-- Document Root를 수정함 -->
            <Context path="" docBase="hello" reloadable="true"/>
...
</Host>

webapps/hello을 Document Root로 지정해 보았다.

 

<Context> 태그를 사용해 appBase 하위 디렉터리를 Document Root로 지정할 수 있다.

 

# maven 빌드
mvn clean package # 또는 mvn clean install

# war 이동
#cp target/[artifactId].war [path to tomcat]/webapps/[document root].war
cp hello-1.0.0-BUILD-SNAPSHOT.war ../../../download/apache-tomcat-9.0.82/webapps/hello.war

# tomcat start
[tomcat 설치 위치]/bin/startup.sh

 

해당 과정을 매번 반복할 순 없으니 ide를 사용하자.

 

vscode

 

# tomcat 명령어
[tomcat 설치 위치]/bin/startup.sh
[tomcat 설치 위치]/bin/shutdown.sh
# maven 명령어

# 1. `target` 디렉토리를 클린하여 이전 빌드 결과물을 제거합니다.
mvn clean

# 2. 소스 코드를 컴파일합니다.
mvn compile

# 3. 단위 테스트를 실행합니다. (`src/test/java` 내의 테스트들)
mvn test

# 4. 프로젝트를 JAR, WAR 등의 패키지로 번들링합니다.
mvn package   # mvn clean package 가능

# 5. 컴파일 및 테스트 후, 패키지를 로컬 Maven 저장소에 설치합니다. 
# mvn package의 모든 단계를 수행하고 추가로, 패키징된 아티팩트를 로컬 Maven 저장소에 설치합니다.
# 이로 인해 다른 로컬 Maven 프로젝트에서 해당 아티팩트를 종속성으로 사용할 수 있게 됩니다.
mvn install

# 6. 생성된 패키지를 원격 Maven 저장소에 배포합니다.
mvn deploy

# 7. 프로젝트가 올바른지와 필요한 모든 정보가 사용 가능한지 확인합니다.
mvn validate

# 8. 프로젝트의 종속성 트리를 출력합니다.
mvn dependency:tree

# 9. Maven 아키텍처를 사용하여 새 프로젝트 구조를 생성합니다.
mvn archetype:generate

# 10. `clean`과 `install` 명령을 함께 실행하여 이전 빌드 결과물을 제거하고, 빌드 후 패키지를 로컬 저장소에 설치합니다.
mvn clean install

# 11. 빌드 시 테스트를 건너뜁니다.
mvn install -DskipTests

# 12. 프로젝트의 실제 POM (부모 POM을 포함한)을 출력합니다.
mvn help:effective-pom

 

출처 : http://wiki.gurubee.net/pages/viewpage.action?pageId=1508019

 


 

3) conf/Catalina/[hostname]/[appname].xml 추가

 

eclipse를 사용하면 할 필요없음. 참고만 하세요.

 

앞서 “각 애플리케이션마다 분리된 conf/Catalina/[hostname]/[appname].xml 파일로 관리하는 것이 conf/server.xml 하나로 관리하는 것보다 관리 및 분리의 어려움, 설정의 복잡성 증가 등 여러 이유로 권장된다.”라고 언급했다.

 

conf/server.xml에 있던 <Context>/conf/Catalina/localhost/[appname].xml로 옮긴다.

 

<!-- [appname].xml 형식 -->
<?xml version="1.0" encoding="UTF-8"?>
<Context docBase="[document root]" path="[path to app]" reloadable="true"/>

 

hello.xml 예시

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/hello" docBase="~/Desktop/Study_Java_2/download/apache-tomcat-9.0.82/webapps" reloadable="true"/>

 


 

3. STS로 웹 프로젝트 생성

 

File → New → Spring Legacy Project

 

Templates로 Spring MVC Project 선택.

 

화면에 Hello world!와 서버 시간을 출력하는 샘플을 포함하는 프로젝트가 생성된다.

 


 

4. 디렉터리 구조

 

  • webapp : 웹 관련 파일들 모음
  • resources : CSS, JS 파일 위치
  • spring : 스피링 설정 파일 위치
  • views : view로 사용될 jsp 파일 위치
  • web.xml : 웹 서비스의 전반적인 설정
  • pom.xml : Maven 설정 파일
  • WEB-INF, META-INF : 웹 상에 노출되지 않는 특수 폴더. 클라이언트에서 URL로 접근할 수 없다. webapp 및에 jsp를 위치시키면 웹 상에 노출된다. URL만 알면 언제든지 접근할 수 있다.

 


 

가. pom.xml

 

<java-version>1.6에서 11로 변경한다.

 

<org.springframework-version>3.1.1.Real…에서 5.2.9.RELEASE로 변경한다.

 

pom.xml의 수정사항을 저장하고 maven update 실행한다.

 

Run As → Run on Server

 

실행 후 Hello world! 확인한다.

 

서버 시간이 깨져서 보인다.

 

한글 인코딩 설정이 필요하다.

 

+ 원하는 브라우저에서 확인할 수도 있다.

 


 

나. 한글 인코딩

 

web.xml을 열고 인코딩 설정을 추가한다.

 

    ...
    <servlet-mapping>
        <servlet-name>appServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <!-- 추가-->
    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

</web-app>