정말 오랜만에 글을 작성한다 ,,
그동안 Java, DBMS, HTTP/CSS/JavaScript 를 배웠고
너무 많은 내용이 단기간에 머릿속으로 들어와서 도저히
블로그를 작성하면서 공부를 할 수가 없었다 ,,아무튼 오늘은 JSP에 관해서 전체적인 이론을 설명 듣고,
개발 환경을 구축하기 위해서 세팅을 했는데
이놈의 맥은 진짜 .. 오라클부터 지금까지 세팅 하는데서
날 너무 힘들게 만든다 ㅠ ㅠ ㅠ우리는 수업을 할 때 항상 이클립스를 사용했는데,
전에 올린 게시물 과 같이 나는 이클립스 따윈
진작 쓰레기통에 넣어버린지 오래였다.근데 Tomcat을 다운받고, 구글링을 해가면서 세팅을 하는데
이클립스랑 달라도 너무 다르길래 좀 많이 당황했음 . .아무튼 우여곡절 끝에 세팅 하는법을 완료했는데
다시 이클립스로 돌아가 이클립스로 수업을 듣다가
글을 쓰고 있는 지금 드디어 이클립스와 인텔리제이에서
❗️ 톰캣 서버 두개를 동시에 올리는 법을 알아버렸다 ❗️
너무 뿌듯함 ㅠㅠ
먼저 순서는
1. 이클립스에서 Tomcat 세팅
2. 인텔리제이에서 Tomcat 세팅
3. 이클립스, 인텔리제이에서 서버 2개 동시에 실행하기
이렇게 되겠다
(서버 2개를 동시에 실행하는 방법이 궁금해서 들어오셨다면 3번부터 보시는 거 추천드립니다.)
처음에 나는 8.5 버젼을 받아서 설치 후 이클립스에서 서버를 가동했는데 오류가 뜨길래 확인해보니 Servlet Spec 부분이 싱크가 맞지 않아서 그렇다고 한다 -강사님 피셜- (참고로 본인은 java 11 버젼 사용 중)
그래서 Servelt Spec 을 4.0 까지 지원하는 9.0 버젼을 다운 받으니 정상적으로 진행이 됐다.
톰캣 홈페이지에 들어가서 다운받으면 됨.
검색하기 귀찮으면 여기 눌러 ㅋㅅㅋ
우리는 맥 사용중이니깐 tar.gz 파일을 받아주자.
(사실 zip 받아도 아무 상관 없음 파일 압축방식 차이라)
파일을 원하는 곳에 저장하고, 압축을 풀어주면 일단은 끝 !
이제 이클립스에서 경로만 잡아주면 서버를 만들고 구동할 수 있다
⌘ 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 를 누르면 프로젝트 생성 완료 👻
아래 탭중에 Servers 탭을 누르면
생성된 서버가 없다고 만들거면 누르던가~
라고 친절하게 적혀 있으니 클릭해주자.
서버탭이 안보인다면 상단 메뉴에서
Window > Show view > Servers 를 눌러 열어주기
type filter text 에 Tomcat 을 검색해도 되고,
제일 위에 있는 Apache 탭을 열어서 직접 찾아줘도 된다.
그리고 서버 이름은 각자 알아서 해주시고 NEXT 🥹
이제 드디어 아까 다운받고 압축 풀었던 톰캣을 연동해주자.
Browse... 을 클릭해 톰캣 폴더 경로를 지정해주고 NEXT
이건 지금 만드는 서버에 어떤 프로젝트를 할당할건지 선택하는건데,
아까 만들어 놓은 프로젝트를 Add로 configured 쪽으로 넘겨주자.
그리고 Finish 하면 Tomcat이랑 이클립스 연동 끝~
아까 만든 서버를 더블클릭해주면 OverView 가 나오면서
오른쪽에 Port Name 이랑 Port Number 가 나온다.
여기는 본인 상황에 맞게 변경해주세요 ~!
나는 인텔리제이랑 이클립스에서 서버를 동시에 구동하기 위해서
Tomcat admin port를 8005에서 9005로 변경해 주었고,
HTTP/1.1 는 학원에서 8081로 통일했기 때문에 바꿔주었다.(윈도우에선 오라클 서버 포트랑 겹쳐서 8080으로 하면 오류가 발생하나봄)
아까 생성한 서버를 클릭하면 우측의 Edit 버튼이 활성화 됨
Path를 "/" 로 수정해준다 (중요❗️)
Path를 수정하지 않으면 root path가 localhost:포트번호/프로젝트이름
으로 설정되는데, 보기도 안좋은데 모든 링크에 /프로젝트이름 을 달아줘야 하니깐
그냥 우리는 보기도 좋고 편하게 "/" 로 설정해주자 . .
자자 여기까지 하셨으면 서버 설정까지 끝났고,
이제 마지막 단계인 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 가 정상적으로 라이브러리에 들어왔음을 확인 가능하다 👻
이클립스에서 톰캣 세팅은 여기서 끝~
단축키 세팅을 Eclipse(MacOS)로 사용하고 있어서 기본값과 조금 다를수도 있습니다.
인텔리제이 실행 첫 화면 (프로젝트가 아무것도 열리지 않은 상태)
에서 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 폴더에 넣고 직접 경로를 설정해 줬지만
놀랍게도 인텔리제이에선 체크만 해주면 그럴 필요가 없다 ~~!
이클립스에서 '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 server 의 CONFIGURE... 를 클릭해서 Tomcat 경로를 지정해주자.
"Tomcat Home"의 폴더를 클릭해서 톰캣의 경로를 지정해주자.
네 잠깐 다른 얘기 하다가 왔는데
다시 본론으로 돌아와서
톰캣 경로도 등록해줬고 서버 이름, 포트 번호, JRE 등등
기본적인 세팅을 끝냈다면 아래 보이는
Warning : No artifacts marked for deployement --> 💡FIX
를 눌러서 세팅을 해주자.
+ 버튼을 누르고 Artifact (프로젝트명:war exploded) 를 선택
Application context 의 경로를 "/" 로 수정해주자
(이클립스에서 설정한 root path 랑 같은 원리, 모르면 그냥 외워~ "/")
다 완료했으면 APPLY 클릭 후 OK 를 눌러주면 서버 세팅이 끝난다 ~~
하단의 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
이런식의 로그들이 뜨면 정상적으로 실행 완료 된 것 ❗️❗️
이제 마지막으로 서버 두개 올리는법에 대해서 설명하겠음.
⭕️ 정상적으로 서버 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 다들 안녕~ 🖐️
와.. 감사합니다!!