You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
참고 - 실행 로그 확인
톰캣의 실행 로그는 톰캣폴더 /logs/catalina.out 파일로 확인할 수 있다.
실행이 잘 되지 않을 때 해결 방안
톰캣을 실행했지만 http://localhost:8080/ 에 접근이 되지 않으면 우선 실행 로그를 확인해야 한다. ⇒ 실행 로그 톰캣폴더 ⇒ /logs/catalina.out
만약 다음과 같은 메시지가 보인다면 어떤 프로그램이 이미 8080 포트를 사용하고 있는 것이다. java.net.BindException: Address already in use
해결방안1 - 해당 포트를 사용하는 프로그램을 종료한다.
8080 포트를 사용하는 프로그램을 찾아서 종료한다. 만약 종료가 어렵다면 컴퓨터를 재부팅 하는 것도 방법이다.
[MAC OS] sudo lsof -i :8080 프로세스 ID(PID) 조회 sudo kill -9 PID : 프로세스 종료 [윈도우]
cmd를 열고 아래 명령어 순차적으로 실행
현재 포트를 사용중인 프로세스 찾기: netstat -ano | findstr :포트번호
프로세스 강제 종료하기: taskkill /f /pid 프로세스번호
해결방안2 - 톰캣 서버 포트를 변경한다
다음 톰캣 설정 파일을 수정한다. 여기에 보면 8080 이라는 부분이 있는데, 이 부분을 다른 포트로 변경한다. 그리고 톰캣 서버를 종료하고 다시 시작한 다음 다른 포트로 접근한다.
예) 9080 포트로 변경했으면 http://localhost:9080/ 으로 접근한다.
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
0x01. 웹 서버와 스프링 부트 소개
main()메서드만 실행하면 되고 WAS 설치나 IDE와 WAS를 연동하는 복잡한 일을 수행하지 않아도 된다.옛날 개발자들은 WAS를 설치하고 war를 만들어서 배포하는 것이 익숙하겠지만, 최근 개발자들은 이런 것을 경험할 일이 없다. 그래도 한번은 알아둘 가치가 있다. 과거에 어떻게 했는지 알아야 현재의 방식이 왜 이렇게 사용되고 있는지 더 깊이있는 이해가 가능하다.
서블릿 컨테이너도 설정하고, 스프링 컨테이너도 만들어서 등록하고, 디스패처 서블릿을 만들어서 스프링 MVC와 연결하는 작업을 스프링 부트 없이 직접 경험해보자. 그러면 스프링 부트가 웹 서버와 어떻게 연동되는지 자연스럽게 이해할 수 있을 것이다.
참고로 여기서는 web.xml 대신에 자바 코드로 서블릿을 초기화 한다. 옛날 개발자라도 대부분 web.xml 을 사용했지 자바 코드로 서블릿 초기화를 해본 적은 없을 것이므로 꼭 한번 코드로 함께 따라해보자.
0x02. 스프링 부트 없이 직접 구성
톰캣 다운로드
톰캣 실행 설정
톰캣폴더/bin폴더로 이동톰캣폴더/bin폴더로 이동톰캣 실행 확인
http://localhost:8080/
실행이 잘 되지 않을 때 해결 방안
톰캣을 실행했지만 http://localhost:8080/ 에 접근이 되지 않으면 우선 실행 로그를 확인해야 한다. ⇒ 실행 로그 톰캣폴더 ⇒
/logs/catalina.out만약 다음과 같은 메시지가 보인다면 어떤 프로그램이 이미 8080 포트를 사용하고 있는 것이다.
java.net.BindException: Address already in use해결방안1 - 해당 포트를 사용하는 프로그램을 종료한다.
8080 포트를 사용하는 프로그램을 찾아서 종료한다. 만약 종료가 어렵다면 컴퓨터를 재부팅 하는 것도 방법이다.
[MAC OS]
sudo lsof -i :8080프로세스 ID(PID) 조회sudo kill -9 PID: 프로세스 종료[윈도우]
cmd를 열고 아래 명령어 순차적으로 실행
netstat -ano | findstr :포트번호taskkill /f /pid 프로세스번호해결방안2 - 톰캣 서버 포트를 변경한다
다음 톰캣 설정 파일을 수정한다. 여기에 보면 8080 이라는 부분이 있는데, 이 부분을 다른 포트로 변경한다. 그리고 톰캣 서버를 종료하고 다시 시작한 다음 다른 포트로 접근한다.
예) 9080 포트로 변경했으면 http://localhost:9080/ 으로 접근한다.
톰캣폴더/conf/server.xml이제 이 톰캣 서버에 배포할 애플리케이션 코드를 작성해보자.
사전 준비물
프로젝트 설정 순서
File ⇒ Open ⇒ 해당 프로젝트의 build.gradle 을 선택하자. 그 다음에 선택창이 뜨는데, Open as Project를 선택하자.
build.gradleid 'war': 톰캣 같은 WAS 위에서 동작하는 WAR 파일을 만들어주는 플러그인jakarta.servlet-api: 서블릿을 사용할 때 필요한 라이브러리plugins { id 'java' id 'war' } group = 'hello' version = '0.0.1-SNAPSHOT' sourceCompatibility = '17' repositories { mavenCentral() } dependencies { //서블릿 implementation 'jakarta.servlet:jakarta.servlet-api:6.0.0' } tasks.named('test') { useJUnitPlatform() }먼저 간단한 HTML과 순수 서블릿으로 동작하는 웹 애플리케이션을 만들어보자.
(1) 간단한 HTML 등록
웹 서버가 정적 리소스를 잘 전달하는지 확인하기 위해 HTML을 하나 만들어보자.
/src/main하위에webapp이라는 폴더를 만들자/src/main/webapp/index.htmlHTML 파일을 생성하자.(2) 서블릿 등록
전체 설정이 잘 동작하는지 확인하기 위해 간단한 서블릿을 하나 만들어보자.
웹 서버를 통해 이 서블릿이 실행되어야 한다.
/test로 요청이 오면 이 서블릿이 실행된다.이 서블릿을 실행하려면 톰캣 같은 WAS 에 위 코드를 배포해야 한다. 그러려면 WAR 파일로 만들어야 한다.
(1) WAR 빌드
WAS에 우리가 만든 코드를 빌드하고 배포해보자.
프로젝트 빌드
[MAC OS] ⇒
./gradlew build[윈도우 OS] ⇒
gradlew buildbuild/libs/server-0.0.1-SNAPSHOT.warbuild.gradle에 보면 war 플러그인이 사용된 것을 확인할 수 있다. 이 플러그인이 war 파일을 만들어준다.plugins { id 'java' **id 'war'** }WAR 압축 풀기
우리가 빌드한 war 파일의 압축을 풀어서 내용물을 확인해보자.
build/libs폴더로 이동하자.jar -xvf server-0.0.1-SNAPSHOT.warWAR를 푼 결과
WEB-INFclasseshello/servlet/TestServlet.classlibjakarta.servlet-api-6.0.0.jarindex.htmlWAR를 푼 결과를 보면 WEB-INF, classes, lib 같은 특별한 폴더들이 보인다. 이 부분을 알아보자.
(2) JAR, WAR 설명
JAR 소개
java -jar abc.jarJAR(Java Archive)**라고 하는 압축파일을 만들 수 있다.main()메서드가 필요하고MANIFEST.MF파일에 실행할 메인 메서드가 있는 클래스를 지정해두어야 한다.WAR 소개
WEB-INFclasses: 실행 클래스 모음lib: 라이브러리 모음web.xml웹 서버 배치 설정 파일(생략 가능)index.html: 정적 리소스WEB-INF폴더 하위는 자바 클래스와 라이브러리, 설정 정보가 들어가는 곳이다.WEB-INF를 제외한 나머지 영역은 HTML, CSS 같은 정적 리소스가 사용되는 영역이다.(3) WAR 배포
이렇게 생성된 WAR 파일을 톰캣 서버에 실제 배포해보자.
./shutdown.shorshutdown.bat톰캣폴더/webapps하위를 모두 삭제한다.webapps⇒ 웹애플리케이션이 들어가는 곳server-0.0.1-SNAPSHOT.war를 복사한다.톰캣폴더/webapps하위에 붙여넣는다.톰캣폴더/webapps/server-0.0.1-SNAPSHOT.war톰캣폴더/webapps/ROOT.war./startup.shorstartup.bat실제 서버에서는 이렇게 사용하면 되지만, 개발 단계에서는 war 파일을 만들고, 이것을 서버에 복사해서 배포하는 과정이 너무 번잡하다.
인텔리 J나 이클립스 같은 IDE는 이 부분을 편리하게 자동화해준다.
(1) 톰캣 설정 - 인텔리 J (유료 버전)
인텔리J 유료 버전과 무료 버전에 따라 IDE에서 톰캣을 설정하는 방법이 다르다. 여기서는 유료 버전을 설명한다.
인텔리J 유료 버전에는 톰캣 지원이 포함되어 있다.
메뉴→Run→Edit Configurations...로 이동왼쪽 상단의 플러스 버튼을 클릭
Other 하위에 있는 Tomcat Server에 Local을 선택
Configure…버튼 선택Tomcat Home: 부분에 설치된 톰캣 폴더를 선택
Deployment메뉴 선택 →+버튼 선택 → 끝에 (exploded)로 끝나는war파일을 선택Application context 박스 안에 있는 내용을 모두 지워준다.
설정한 톰캣을 선택하고 실행한다.
http://localhost:8080/
http://localhost:8080/test
(2) 톰캣 설정 - 인텔리 J (무료 버전)
build.gradle에 다음 내용을 추가./gradlew explodedWargradlew explodedWarbuild/exploded폴더가 새로 생성되고, 여기에WEB-INF를 포함한 war가 풀려 있는 모습을 확인할 수 있다.Smart Tomcat 설정
Smart Tomcat이라는 플러그인을 설치해야 한다.메뉴→IntelliJ IDEA→Preferences(Windows는 File → Settings) →plugin→Smart Tomcat검색 설치 실행 (재시작)Smart Tomcat에서 사용할 톰캣 서버를 별도로 하나 만들어둔다.smart-tomcat이라는 이름의 폴더로 만들어두겠다.메뉴→Run→Edit Configurations...로 이동좌측 상단의
+버튼 클릭Smart Tomcat선택화면과 같이 설정
Tomcat server: 설치한 톰캣의 위치를 지정한다. 오른쪽에 있는 Configure...를 누르면 된다. 아래 화면을 참고하자.+버튼 선택Catalina base: 기본 값을 사용한다. (비워두면 된다. 자동으로 채워진다.)Deployment directory: 현재 프로젝트 폴더의build/exploded로 지정한다.User classpath of module:server를 선택한다.Context path:/를 입력한다.완료되면 아래에 있는 OK 버튼을 선택하자.
설정한 톰캣을 선택하고 실행
http://localhost:8080/
http://localhost:8080/test
Beta Was this translation helpful? Give feedback.
All reactions