[JSP] M1 맥 이클립스 / 인텔리제이 Tomcat 연동, 그리고 서버 2개 동시에 실행하기

웰시코딩·2023년 3월 18일
4

my record

목록 보기
7/7
post-thumbnail

진짜 나 너무너무 힘들었다 이거 하느라

썸네일은 그냥 코기가 귀여워서

정말 오랜만에 글을 작성한다 ,,

그동안 Java, DBMS, HTTP/CSS/JavaScript 를 배웠고
너무 많은 내용이 단기간에 머릿속으로 들어와서 도저히
블로그를 작성하면서 공부를 할 수가 없었다 ,,

아무튼 오늘은 JSP에 관해서 전체적인 이론을 설명 듣고,
개발 환경을 구축하기 위해서 세팅을 했는데
이놈의 맥은 진짜 .. 오라클부터 지금까지 세팅 하는데서
날 너무 힘들게 만든다 ㅠ ㅠ ㅠ

우리는 수업을 할 때 항상 이클립스를 사용했는데,
전에 올린 게시물 과 같이 나는 이클립스 따윈
진작 쓰레기통에 넣어버린지 오래였다.

근데 Tomcat을 다운받고, 구글링을 해가면서 세팅을 하는데
이클립스랑 달라도 너무 다르길래 좀 많이 당황했음 . .

아무튼 우여곡절 끝에 세팅 하는법을 완료했는데
다시 이클립스로 돌아가 이클립스로 수업을 듣다가
글을 쓰고 있는 지금 드디어 이클립스와 인텔리제이에서
❗️ 톰캣 서버 두개를 동시에 올리는 법을 알아버렸다 ❗️
너무 뿌듯함 ㅠㅠ

아직 공부하는 단계라 부정확한 정보가 있을 수 있습니다. 만약 부정확한 정보가 있을 시 댓글이나 이메일로 알려주신다면 정정하도록 하겠습니다.
아무튼 이제 본론으로 들어가보자 🥹

먼저 순서는

1. 이클립스에서 Tomcat 세팅
2. 인텔리제이에서 Tomcat 세팅
3. 이클립스, 인텔리제이에서 서버 2개 동시에 실행하기

이렇게 되겠다

(서버 2개를 동시에 실행하는 방법이 궁금해서 들어오셨다면 3번부터 보시는 거 추천드립니다.)

1. 이클립스에서 Tomcat 세팅

1-1. Tomcat 다운받고 설치하기

처음에 나는 8.5 버젼을 받아서 설치 후 이클립스에서 서버를 가동했는데 오류가 뜨길래 확인해보니 Servlet Spec 부분이 싱크가 맞지 않아서 그렇다고 한다 -강사님 피셜- (참고로 본인은 java 11 버젼 사용 중)

그래서 Servelt Spec 을 4.0 까지 지원하는 9.0 버젼을 다운 받으니 정상적으로 진행이 됐다.

톰캣 홈페이지에 들어가서 다운받으면 됨.
검색하기 귀찮으면 여기 눌러 ㅋㅅㅋ

우리는 맥 사용중이니깐 tar.gz 파일을 받아주자.
(사실 zip 받아도 아무 상관 없음 파일 압축방식 차이라)

파일을 원하는 곳에 저장하고, 압축을 풀어주면 일단은 끝 !
이제 이클립스에서 경로만 잡아주면 서버를 만들고 구동할 수 있다

1-2. 이클립스에서 Dynamic Web Project 생성

⌘ cmd + N 으로 새로운 프로젝트 (Dynamic Web Project 검색 후) 생성하기
NEXT 클릭

Project name 은 알아서 적으시고~
Configuration 탭에 Modify 들어가서 세팅을 해줘야 해요

다른거는 잘 모르니 건들지 말고,
네모 박스 쳐진 JAVA 부분이 원래는 17로 되어 있을텐데

본인의 자바 버젼에 맞게 설정하고 OK 눌러주시고 나와서 NEXT
(본인은 11버젼이라 11로 선택함)

다음 단계에서 src/main/java 가 나올텐데
소스폴더 경로 정하는거니 따로 바꾸실 거 아니면
그냥 NEXT 하고 넘기시면 됩니다.

그 다음 화면에선 web.xml 파일을 생성할 거냐고 물어보는데
web.xml 은 브라우저가 실행될 때 무조건! 반드시 거쳐가는 파일 이라
설정 파일을 담당할 수 있기 때문에 꼭 체크해 주도록 하자.

그리고 Finish 를 누르면 프로젝트 생성 완료 👻

1-3. Tomcat으로 서버 생성 후 연동

아래 탭중에 Servers 탭을 누르면
생성된 서버가 없다고 만들거면 누르던가~
라고 친절하게 적혀 있으니 클릭해주자.

서버탭이 안보인다면 상단 메뉴에서
Window > Show view > Servers 를 눌러 열어주기

type filter text 에 Tomcat 을 검색해도 되고,
제일 위에 있는 Apache 탭을 열어서 직접 찾아줘도 된다.

그리고 서버 이름은 각자 알아서 해주시고 NEXT 🥹

이제 드디어 아까 다운받고 압축 풀었던 톰캣을 연동해주자.

Browse... 을 클릭해 톰캣 폴더 경로를 지정해주고 NEXT

이건 지금 만드는 서버에 어떤 프로젝트를 할당할건지 선택하는건데,
아까 만들어 놓은 프로젝트를 Add로 configured 쪽으로 넘겨주자.

그리고 Finish 하면 Tomcat이랑 이클립스 연동 끝~

1-4. 서버 설정하기

아까 만든 서버를 더블클릭해주면 OverView 가 나오면서
오른쪽에 Port Name 이랑 Port Number 가 나온다.
여기는 본인 상황에 맞게 변경해주세요 ~!

나는 인텔리제이랑 이클립스에서 서버를 동시에 구동하기 위해서
Tomcat admin port를 8005에서 9005로 변경해 주었고,
HTTP/1.1 는 학원에서 8081로 통일했기 때문에 바꿔주었다.

(윈도우에선 오라클 서버 포트랑 겹쳐서 8080으로 하면 오류가 발생하나봄)

아까 생성한 서버를 클릭하면 우측의 Edit 버튼이 활성화 됨
Path를 "/" 로 수정해준다 (중요❗️)

Path를 수정하지 않으면 root path가 localhost:포트번호/프로젝트이름
으로 설정되는데, 보기도 안좋은데 모든 링크에 /프로젝트이름 을 달아줘야 하니깐
그냥 우리는 보기도 좋고 편하게 "/" 로 설정해주자 . .

자자 여기까지 하셨으면 서버 설정까지 끝났고,
이제 마지막 단계인 Servlet 라이브러리를 가져올 일만 남았다.

1-5. Servlet 라이브러리 가져오기

Tomcat 폴더안의 lib 폴더에서 "servlet-api.jar" 파일 복사하기

구글링해보니 다른 방법도 있는거 같지만 나는 이거로 배움 ㅠ
나중에 다른 방법도 찾아보고 추가로 포스팅 하겠음 ~!

src/main/webapp/WEB-INF/lib 경로에 파일 붙여넣기 해주기
(옆에 코드는 아무 상관 없는건데 괜히 헷갈릴까봐 블러처리함)

Properties (⌘ cmd + I) 에 들어가주기

Java Build Path > Libraries > Classpath 를 선택하면
우측에 Add JARs ... 탭이 활성화 된다.

ADD JARs로

아까 servlet-api.jar 파일을 넣어준 경로
src/main/webapp/WEB-INF/lib 로 찾아가서 선택 후 OK,
Apply and Close 를 하자.

다시 돌아와서 Web App Libararies 를 확인해보면
servlet-api.jar 가 정상적으로 라이브러리에 들어왔음을 확인 가능하다 👻

이클립스에서 톰캣 세팅은 여기서 끝~


2. 인텔리제이에서 Tomcat 세팅

못생긴 이클립스 보다가 인텔리제이 보니깐 마음이 편안해짐 , ,

단축키 세팅을 Eclipse(MacOS)로 사용하고 있어서 기본값과 조금 다를수도 있습니다.

2-1. 프로젝트 생성하기

인텔리제이 실행 첫 화면 (프로젝트가 아무것도 열리지 않은 상태)
에서 New Project로 들어가서 왼쪽 Generators 목록 중
Jakarta EE 탭을 눌러서 다음과 같이 세팅해주자.

프로젝트 이름 각자 설정하시고,
Template 는 Web application ❗️중요❗️
Application server 는 아직 안만들었으니 그냥 두고
Group은 src/main/java 안의 패키지? 경로라고 생각하면 될 듯
(사실 아직은 Group이 뭔지 저도 잘 모르겠어요 나중에 삭제 가능하니 지금 건들 ㄴㄴ)
JDK 는 당연하게도 본인이 지금 사용중엔 java 선택하면 됨.

다했으면 NEXT로 가보자고

다른 블로그들을 보면 Java EE 나 Java 탭에서 프로젝트를 생성하는데
난 아무리 찾아도 쟤내가 안보여서 구글링 하던 중 재밌는 사실을 알게 됨
난 이거 때문에 한참 헤맸는데 다른 사람들은 나처럼 헤메지 않길 ,,

Oracle이 Java EE 8 릴리즈를 마지막으로 이클립스 재단에 프로젝트를 이관해서
그때부터 정식 명칭이 Java EE 에서 Jarkart EE 로 변경된 것이였다.
혹시 더 궁금하신 분들은 📰 관련 리포트 📰 읽어보시면 좋을듯

결론은 Java EE 나 Jakarta EE랑 같은거니 다들 헷갈리지 마시길

네 잠깐 말이 좀 샜구요

사진을 참고해서 세팅을 해주자.
Server : Java EE 8
Specifications / Servlet 체크하기

그리고 CREATE 눌러서 프로젝트 생성해주면 끝 !

2023-03-20 수정

  • pageContext.forward 가 동작하지 않아서 (forward에서 오류 발생함) 문제를 해결하려고 찾아보다가 필요한 모듈이 없어서 그런 거 같아서 상단 Specification 의 "Web Profile" 을 체크해서 Create 하니 정상적으로 동작함.

Version 을 눌러보면 Java EE 8, Jakarta EE 9.1 / 10
3가지 버젼이 보이는데 무슨 차이인지 궁금해서 구글링을 좀 해봤다.
내가 사용할 Tomcat 9.0 버젼이 Java EE를 기반으로 하고 있는듯
(Servlet 버젼도 4.0 으로 내가 사용하는 Tomcat 9.0이랑 같았음)

그래서 나는 Java EE 8 을 선택해주었다.

그리고 이클립스에서는 jar 파일을 lib 폴더에 넣고 직접 경로를 설정해 줬지만
놀랍게도 인텔리제이에선 체크만 해주면 그럴 필요가 없다 ~~!

Java EE에 관한 좀 더 자세한 내용이 궁금하시다면 여기로 📒

2-2. Tomcat 연동

이클립스에서 'Dynamic Web Project' 로 프로젝트를 생성해준거처럼
위 사진처럼 인텔리제이에서도 성공적으로 프로젝트를 생성해주었다.

상단 탭중 Run > Edit Configurations 들어가기
왼쪽 Add new... (⌃ control + N) 를 눌러서
쭉 내려서 Tomcat Server > Local 선택해주기

빨간색 네모 친 부분들 위에서 부터 순서대로

Name : 서버 이름 설정
CONFIGURE ... : Tomcat 서버 경로 설정
JRE : Java 버젼 선택
HTTP port : Port 번호
Warning : Artifacts 가 없어서 추가하라고 뜨는것

(After launch 항목을 체크하면 서버를 재시작 할 때마다
아래 설정된 URL 을 열어주는데, 나는 서버 재가동 할 때마다 뜨는게
불편해서 그냥 체크 해제를 해줬다)

사진을 참고해서 작성해주도록 하고,
Application serverCONFIGURE... 를 클릭해서 Tomcat 경로를 지정해주자.

"Tomcat Home"의 폴더를 클릭해서 톰캣의 경로를 지정해주자.

네 잠깐 다른 얘기 하다가 왔는데
다시 본론으로 돌아와서

톰캣 경로도 등록해줬고 서버 이름, 포트 번호, JRE 등등
기본적인 세팅을 끝냈다면 아래 보이는
Warning : No artifacts marked for deployement --> 💡FIX

를 눌러서 세팅을 해주자.

+ 버튼을 누르고 Artifact (프로젝트명:war exploded) 를 선택
Application context 의 경로를 "/" 로 수정해주자
(이클립스에서 설정한 root path 랑 같은 원리, 모르면 그냥 외워~ "/")

다 완료했으면 APPLY 클릭 후 OK 를 눌러주면 서버 세팅이 끝난다 ~~

2-3. 서버 실행

하단의 Services 탭을 확인해 보면, 방금 정상적으로 서버 생성이 완료되었다.
서버 이름 위에 마우스 우클릭 > Run [ ⌃ control + ⇧ shift + R ] 을 누르면 실행

실행 시키고나면 오른쪽의 Server 탭에 로그가 주르륵 뜨면서

Connected to server
[2023-03-19 12:34:42,154] Artifact test01:war exploded: Artifact is being deployed, please wait...
[2023-03-19 12:34:42,410] Artifact test01:war exploded: Artifact is deployed successfully
[2023-03-19 12:34:42,411] Artifact test01:war exploded: Deploy took 257 milliseconds

이런식의 로그들이 뜨면 정상적으로 실행 완료 된 것 ❗️❗️

이제 마지막으로 서버 두개 올리는법에 대해서 설명하겠음.


3. Tomcat 서버 2개 동시 구동

⭕️ 정상적으로 서버 2개가 작동되고 있는 모습 ⭕️

설명하기 전 주절주절 타임 😆

먼저 내가 처음에 서버 2개를 동시에 구동하려고 한 이유는
수업은 이클립스로 진행하는데 이미 인텔리제이의 맛을 봐버린 나는 이클립스가
너무나도 불편하게 느껴졌고 하루라도 빨리 인텔리제이로 넘어가고 싶었다.

그래도 수업을 놓치면 안 되니깐 고민을 하다 처음으로 든 생각이
"이클립스에서 따라하면서 인텔리제이에서 동시에 코드를 쳐보자" 였는데,
처음에는 단순히 HTTP Port만 바꿔주니 오류가 발생하는 거임 ,, 🧐

혼자 고민하면서 문제를 해결하기 위해 많은 시행착오를 겪었다.

  • 같은 서버 (같은 폴더에 있는 Tomcat)를 2개 프로그램이 동시에 사용해서 그런가?
    >> 폴더 2개를 분리해서 따로따로 실행했는데 또 오류 발생

  • 이클립스의 서버 Overview 에서 Tomcat admin port 라는게 존재했는데,
    말 그대로 admin port / 즉 관리자 포트이기 때문에 이 값이 중복돼서 그런가?

    >> 폴더 분리 / admin port 변경 후 서버 가동 - 정상적으로 가동됨

가끔은 이렇게 혼자 원인을 분석하고 해결하는 과정이 재밌는 거 같다.

다시 본론으로 돌아와서,
이번에는 Tomcat 서버 2개를 동시에 가동시켜보자.

위에 잠깐 설명했는데 2개의 서버를 동시에 가동하기 위해서는
Admin Port 가 중복되면 안 된다.

먼저 서버를 2개로 분리 시켜주자 (이게 적절한 표현인지 모르겠다 🧐)

  • 위의 사진처럼 폴더를 추가로 생성하여 Tomcat을 2개로 만들어 준다.
    참고로 나는 구별하기 쉽게 폴더 이름 뒤에 _EC(이클립스용)를 붙였다.

admin port 를 수정하기 위해
Tomcat/conf 폴더내의 server.xml 를 실행시켜준다.
(나는 VSCode로 실행했고, 이클립스에서 사용할 Tomcat을 수정했다.)

여기서 잠깐 ❗️
만약 이클립스로 Tomcat 서버를 미리 세팅했다면
본 게시물 내용 중 [1-4] 에서 admin port 를 쉽게 변경 가능함.

위 사진에 보이는 부분을 수정해주면 되는데
상세 내용은 아래 코드를 참고하시길.

<Server port="9005" shutdown="SHUTDOWN">
// Tomcat admin port, 아까 말했던 수정해야 하는 포트이다.
// 기본값 8005 에서 9005 로 수정

<Connector 	port="8081" protocol="HTTP/1.1"
			connectionTimeout="20000"
            redirectPort="8443" />
// HTTP Port, 당연한 소리지만 이 포트도 중복되면 안 된다.
// 기본값 8080 에서 8081 로 수정

sever.xml 파일을 저장까지 했다면
기존에 있던 서버들을 전부 삭제해주고 (만약 등록이 되어 있었다면)
이클립스와 인텔리제이에서 각각 Tomcat을 연동시켜주고
서버를 실행시켜주면 충돌 없이 정상적으로 2개의 서버가 구동된다.

아까 분리한 서버대로 각각 ❗️따로❗️ 연동시켜줘야 한다.
(인텔리제이에서 사용하는 Tomcat과 이클립스에서 사용하는 Tomcat의 폴더가 달라야한다)

여기까지 따라오느라 고생 많으셨습니다 😛


혹시 궁금한 점이나 막히는 부분이 있다면 댓글이나 이메일로 알려주세요 최대한 도와드리겠습니다 ~~!

다들 윈도우로 수업 듣는데 혼자 맥북 써가면서
어렵게 수업 듣는 나 같은 사람들이 있지 않을까? 라는 마음에
최대한 보기 쉽게 설명해놨으니 도움이 됐으면 하는 작은 바램을 가지며 ,,

글을 마치겠습니다 나중에 또 다시 오겠음.

그럼 20000 다들 안녕~ 🖐️

profile
웰시코기를 좋아하는 개발자 꿈나무

3개의 댓글

comment-user-thumbnail
2023년 3월 24일

와.. 감사합니다!!

답글 달기
comment-user-thumbnail
2023년 3월 24일

잘 보고 갑니다~^_^

답글 달기
comment-user-thumbnail
2023년 6월 29일

혹시.. 어떤 테마 쓰세요..?

답글 달기