Microsoft MVP성태의 닷넷 이야기
Java: 3. 이클립스에서 서블릿 디버깅하는 방법 [링크 복사], [링크+제목 복사],
조회: 38357
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
(연관된 글이 2개 있습니다.)

이클립스에서 서블릿 디버깅하는 방법

지난번 글에서 Java Servlet을 만들어 봤었는데요.

닷넷 개발자가 처음 실습해 본 서블릿
; https://www.sysnet.pe.kr/2/0/1115

개발에 다소 불편한 점이 있지요. 컴파일하고, .class 파일이 생성되었으면 톰캣의 \webapps\ROOT\WEB-INF\classes 폴더에 배포하고, 다시 컴파일 하고 ... 를 반복하는 것은 영~~~ 생산성 면에서 좋지 않습니다.

Visual Studio의 경우에는 개발하는 프로젝트의 폴더 자체가 웹 애플리케이션이 되어 배포할 필요가 없지만, Eclipse라면 이런 부분에 대한 개선을 위해 몇 가지 설정을 추가해 주어야 합니다.

우선, Tomcat 웹 서버와 이클립스의 메뉴 통합을 해야 하는데 다음의 글을 참조하시면 됩니다.

Apache Tomcat Eclipse Integration
; http://www.mulesoft.com/tomcat-eclipse

저는 초보자이므로 ^^ 이번 글에서는 위의 글을 따라해 보도록 하겠습니다. "Help" / "Install New Software..." 메뉴를 선택해서 뜨는 대화창의 "Work with:" / "Add..." 버튼을 눌러서 아래의 항목을 추가해 주고,

The Eclipse Web Tools Platform (WTP) software repository - http://download.eclipse.org/webtools/repository/indigo

Web Tools Platform SDK (WTP SDK) 3.3.0

설치가 완료되었으면, 이제 'Tomcat과 통합된 기능을 제공하는 유형의 프로젝트'를 만들어야 합니다. Visual Studio에 익숙한 개발자라면 단순히 디버깅 메뉴에서 IIS를 프로세스로 지정하는 것으로 해결되는 문제인데, 이클립스에서는 그런 용도의 프로젝트를 만들어야 한다는 것에 다소 의아스럽긴 합니다.

제 예상에는, Visual Studio에서도 라이브러리 프로젝트와 EXE 프로젝트 파일의 차이점이 내부에 있는 옵션에 있듯이, 아마도 이클립스도 'Tomcat과 통합된 기능을 제공하는 유형의 프로젝트'가 다른 일반 프로젝트와는 다른 옵션이 몇 가지 있는 정도가 아닐까 싶습니다. (어쨌든, 저는 여전히 이쪽 분야에 대해서는 초보자이므로, 여기까지만! ^^)

Tomcat과 통합된 프로젝트의 유형이름이 바로 "Dynamic Web Project"입니다. 따라서 "File" / "New" 메뉴에서 "Dynamic Web Project"를 선택합니다. (만약 목록에 없다면 "Other" 항목을 선택하고 "Web" 범주를 찾아보면 됩니다.)

그럼, 아래와 같은 대화창이 나오고 "Target runtime"의 "New Runtime..." 버튼을 누릅니다.

tomcat_integration_1.png

이어서 각종 웹 서버 유형을 나타내는 목록이 나오는데, "Apache" 범주에서 테스트 대상이 되는 Tomcat 버전과 일치하는 항목을 선택합니다. (Tomcat이 설치된 폴더에 가면, "RUNNING.txt" 파일이 있는데 그 안에 보면 버전이 명시되어 있습니다.)

제 경우에는 "Apache Tomcat v6.0"을 선택했습니다.

그다음, 테스트 대상이 되는 톰캣의 설치 폴더를 알려주고,

tomcat_integration_2.png

프로젝트 대화상자를 마치면, 아래와 같이 일반적인 자바 프로젝트와는 다른 유형의 프로젝트가 생성됩니다.

tomcat_integration_3.png

여기가 끝이 아니군요. ^^; "Window" / "Show View" / "Servers" 메뉴를 선택하고, 다음과 같이 마우스 오른쪽 버튼을 눌러 "New" / "Server" 메뉴를 실행합니다.

tomcat_integration_4.png

그럼, "Dynamic Web Project" 생성 시와 유사한 웹 서버 선택 및 설정 창이 뜨고 적당한 값을 입력하고, 'Next' 버튼을 누릅니다.

tomcat_integration_5.png

다음과 같이 프로젝트 선택 창이 나오는데, 아마도 해당 서버에 배포되는 프로젝트들을 지정하는 것 같습니다. (제 경우에는 "FirstServlet" 프로젝트를 추가한 것입니다. - 그나저나, 이런 건 기본적으로 프로젝트 생성 시에 미리 하나 생성해 줘도 될 것 같지 않은가요? ^^;)

tomcat_integration_6.png

이제 완료하면 이클립스의 "Project Explorer"에는 새롭게 "Servers" 노드와 그 하위에 Tomcat 설정 파일을 직접 편집할 수 있는 목록이 제공되고, 별도로 "Servers" 윈도우에는 추가된 Tomcat 서버 목록이 나오고 이를 마우스 두 번 클릭해 주면 아래와 같이 "Overview" 설정을 확인할 수 있습니다.

tomcat_integration_7.png

이것으로 모두 끝!




개인적으로, 개발을 할 때 가장 중요시하는 것이 "F5 디버깅"입니다. 다행히, 이클립스에서 위와 같은 설정을 했으면 서블릿에 대해서 이와 동일하게 디버깅이 가능합니다.

우선, 예제 서블릿을 작성하고 Visual Studio의 "F5 디버깅"에 해당하는 "Alt + Shift + D, R" 단축키를 눌러줍니다. (또는 "Project Explorer"의 서블릿을 담고 있는 프로젝트를 마우스 오른쪽 버튼을 눌러 나오는 메뉴에서 "Debug As" / "Debug on Server"를 선택)

다음은 각각의 기능에 대한 단축키 비교입니다.

  • BP 토글: Visual Studio - F9, Eclipse - "Ctrl + Shift + B"
  • StepInto: Visual Studio - F11, Eclipse - F5
  • StepOver: Visual Studio - F10, Eclipse - F6
  • BP에서 계속 실행: Visual Studio - F5, Eclipse - F8
  • 디버깅 종료: Visual Studio - "Shift + F5", Eclipse - "Ctrl + F2"
  • 디버그 기능 없이 실행: Visual Studio - "Ctrl + F5", Eclipse - "Alt + Shift + X, R"

그런데, "Dynamic Web Project"에서 이런 식으로 실행을 한 경우 웹 페이지에서의 서블릿 실행 경로가 달라지는 군요. 지난번 예제에서는 "http://localhost:8080/servlet/HelloWorld" 경로로 접속할 수 있었는데, 이번에는 "http://localhost:8080/FirstServlet/servlet/HelloWorld"처럼 중간에 프로젝트 명이 들어가야 합니다.

오호~~~ 문제군요. 그렇다면 내부에서 서블릿 간에 링크를 걸 때 "FirstServlet" 문자열을 넣어야 하는데, 정작 예전 글에서의 방식처럼 응용 프로그램을 배포하면 링크들이 모두 깨지는 현상이 발생할 것입니다. (혹시 이에 대해서 아시는 분이 있다면 댓글 부탁드립니다.)




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 6/21/2021]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 



2011-09-11 03시01분
이클립스에 WTP SDK가 설치되지 않는다면?
; http://www.sysnet.pe.kr/2/0/1119
정성태
2011-09-12 09시19분
이클립스에 java decompiler 연동하는 방법

Java Decompiler Plugin For Eclipse IDE
; http://www.mkyong.com/java/java-decompiler-plugin-for-eclipse/
정성태
2011-09-12 08시51분
WTP 내에서 서블릿을 실행하는 환경
; http://www.sysnet.pe.kr/2/0/1121
정성태
2011-10-28 03시40분
[cchcc] 도움 많이 됬어요~ 잘 보구 갑니다~
[guest]

... 76  77  78  79  80  81  82  83  84  85  86  87  88  [89]  90  ...
NoWriterDateCnt.TitleFile(s)
11710정성태10/2/201822048.NET Framework: 794. C# - 같은 모양, 다른 값의 한글 자음을 비교하는 호환 분해 [5]
11709정성태9/30/201820374개발 환경 구성: 402. .NET Core 콘솔 응용 프로그램을 docker로 실행/디버깅하는 방법 [1]
11708정성태9/30/201822530개발 환경 구성: 401. .NET Core 콘솔 응용 프로그램을 배포(publish) 시 docker image 자동 생성 [2]파일 다운로드1
11707정성태9/30/201823887오류 유형: 489. ASP.NET Core를 docker에서 실행 시 "Failed with a critical error." 오류 발생 [1]
11706정성태9/29/201820042개발 환경 구성: 400. Synology NAS(DS216+II)에서 실행한 gcc의 Segmentation fault [2]
11705정성태9/29/201820881개발 환경 구성: 399. Synology NAS(DS216+II)에 gcc 컴파일러 설치
11704정성태9/29/201824910기타: 73. Synology NAS 신호음(beep) 끄기 [1]파일 다운로드1
11703정성태9/27/201819660개발 환경 구성: 398. Blazor 환경 구성 후 빌드 속도가 너무 느리다면? [2]
11702정성태9/26/201816874사물인터넷: 44. 넷두이노(Netduino)의 네트워크 설정 방법
11701정성태9/26/201822625개발 환경 구성: 397. 공유기를 일반 허브로 활용하는 방법파일 다운로드1
11700정성태9/21/201820700Graphics: 25. Unity - shader의 직교 투영(Orthographic projection) 행렬(UNITY_MATRIX_P)을 수작업으로 구성
11699정성태9/21/201819174오류 유형: 488. Add-AzureAccount 실행 시 "No subscriptions are associated with the logged in account in Azure Service Management (RDFE)." 오류
11698정성태9/21/201820457오류 유형: 487. 윈도우 성능 데이터를 원격 SQL에 저장하는 경우 "Call to SQLAllocConnect failed with %1." 오류 발생
11697정성태9/20/201819342Graphics: 24. Unity - unity_CameraWorldClipPlanes 내장 변수 의미
11696정성태9/19/201820249.NET Framework: 793. C# - REST API를 이용해 NuGet 저장소 제어파일 다운로드1
11695정성태9/19/201825401Graphics: 23. Unity - shader의 원근 투영(Perspective projection) 행렬(UNITY_MATRIX_P)을 수작업으로 구성
11694정성태9/17/201819626오류 유형: 486. nuget push 호출 시 405 Method Not Allowed 오류 발생
11693정성태9/16/201822798VS.NET IDE: 128. Unity - shader 코드 디버깅 방법
11692정성태9/13/201823098Graphics: 22. Unity - shader의 Camera matrix(UNITY_MATRIX_V)를 수작업으로 구성
11691정성태9/13/201820043VS.NET IDE: 127. Visual C++ / x64 환경에서 inline-assembly를 매크로 어셈블리로 대체하는 방법 - 두 번째 이야기
11690정성태9/13/201823023사물인터넷: 43. 555 타이머의 단안정 모드파일 다운로드1
11689정성태9/13/201822315VS.NET IDE: 126. 디컴파일된 소스에 탐색을 사용하도록 설정(Enable navigation to decompiled sources)
11688정성태9/11/201817669오류 유형: 485. iisreset - The data is invalid. (2147942413, 8007000d) 오류 발생
11687정성태9/11/201819530사물인터넷: 42. 사물인터넷 - 트랜지스터 다중 전압 테스트파일 다운로드1
11686정성태9/8/201818578사물인터넷: 41. 다중 전원의 소스를 가진 회로파일 다운로드1
11685정성태9/6/201818545사물인터넷: 40. 이어폰 소리를 capacitor로 필터링파일 다운로드1
... 76  77  78  79  80  81  82  83  84  85  86  87  88  [89]  90  ...