[Spring] STS, Tomcat

0. 출처

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

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

https://search.shopping.naver.com/book/catalog/41101295635?cat_id=50010920&frm=PBOKPRO&query=%EC%98%AC%EC%9D%B8%EC%9B%90+%EC%8A%A4%ED%94%84%EB%A7%81+%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC&NaPm=ct=lma2t8xk%7Cci=a48cf03f14ef65da3f75709822c7b195a41bd691%7Ctr=boknx%7Csn=95694%7Chk=dba64f780dac99af3b6dc40908ddb18778aaa3a1


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

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

강의에서는 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

....
Code language: JavaScript (javascript)

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

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

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

성공적인 설치


다. 보충 설명

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

톰캣의 디렉터리 구조

❯ pwd
/Users/user/Desktop/Study_JavaSpring_2/download/apache-tomcat-9.0.82
❯ ll
total 240
drwxr-xr-x@ 16 user  staff    512 10 26 23:58 .
drwxr-xr-x   4 user  staff    128 10 26 23:58 ..
-rw-r-----@  1 user  staff  19992 10 11 22:15 BUILDING.txt
-rw-r-----@  1 user  staff   6210 10 11 22:15 CONTRIBUTING.md
-rw-r-----@  1 user  staff  57092 10 11 22:15 LICENSE
-rw-r-----@  1 user  staff   2333 10 11 22:15 NOTICE
-rw-r-----@  1 user  staff   3398 10 11 22:15 README.md
-rw-r-----@  1 user  staff   6901 10 11 22:15 RELEASE-NOTES
-rw-r-----@  1 user  staff  16505 10 11 22:15 RUNNING.txt
drwxr-x---@ 29 user  staff    928 10 11 22:15 bin
drwx------@ 12 user  staff    384 10 11 22:15 conf
drwxr-x---@ 34 user  staff   1088 10 11 22:15 lib
drwxr-x---@  2 user  staff     64 10 11 22:15 logs
drwxr-x---@  3 user  staff     96 10 11 22:15 temp
drwxr-x---@  7 user  staff    224 10 11 22:15 webapps
drwxr-x---@  2 user  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.xmlconf/Catalina/[hostname]/[appname].xml에 저장한다.

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

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

2) document root 설정

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

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

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

톰캣의 디렉터리 구조

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

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

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

<Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">
 ..
 </Host>
Code language: HTML, XML (xml)

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>
Code language: HTML, XML (xml)

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
Code language: PHP (php)

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

vscode

# tomcat 명령어
[tomcat 설치 위치]/bin/startup.sh
[tomcat 설치 위치]/bin/shutdown.sh
Code language: PHP (php)
# 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
Code language: PHP (php)

출처 : 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"/>
Code language: HTML, XML (xml)

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"/>
Code language: HTML, XML (xml)

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>
Code language: HTML, XML (xml)

댓글 남기기