Microsoft MVP성태의 닷넷 이야기
Java: 3. 이클립스에서 서블릿 디버깅하는 방법 [링크 복사], [링크+제목 복사],
조회: 38406
글쓴 사람
정성태 (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)
11811정성태2/11/201920905오류 유형: 510. 서버 운영체제에 NVIDIA GeForce Experience 실행 시 wlanapi.dll 누락 문제
11810정성태2/11/201918514.NET Framework: 808. .NET Profiler - GAC 모듈에서 GAC 비-등록 모듈을 참조하는 경우의 문제
11809정성태2/11/201920730.NET Framework: 807. ClrMD를 이용해 메모리 덤프 파일로부터 특정 인스턴스를 참조하고 있는 소유자 확인
11808정성태2/8/201922051디버깅 기술: 123. windbg - 닷넷 응용 프로그램의 메모리 누수 분석
11807정성태1/29/201919955Windows: 156. 가상 디스크의 용량을 복구 파티션으로 인해 늘리지 못하는 경우 [4]
11806정성태1/29/201919584디버깅 기술: 122. windbg - 덤프 파일로부터 PID와 환경 변수 등의 정보를 구하는 방법
11805정성태1/28/201921748.NET Framework: 806. C# - int []와 object []의 차이로 이해하는 제네릭의 필요성 [4]파일 다운로드1
11804정성태1/24/201919606Windows: 155. diskpart - remove letter 이후 재부팅 시 다시 드라이브 문자가 할당되는 경우
11803정성태1/10/201918468디버깅 기술: 121. windbg - 닷넷 Finalizer 스레드가 멈춰있는 현상
11802정성태1/7/201920187.NET Framework: 805. 두 개의 윈도우를 각각 실행하는 방법(Windows Forms, WPF)파일 다운로드1
11801정성태1/1/201921468개발 환경 구성: 427. Netsh의 네트워크 모니터링 기능 [3]
11800정성태12/28/201820582오류 유형: 509. WCF 호출 오류 메시지 - System.ServiceModel.CommunicationException: Internal Server Error
11799정성태12/19/201822304.NET Framework: 804. WPF(또는 WinForm)에서 UWP UI 구성 요소 사용하는 방법 [3]파일 다운로드1
11798정성태12/19/201821144개발 환경 구성: 426. vcpkg - "Building vcpkg.exe failed. Please ensure you have installed Visual Studio with the Desktop C++ workload and the Windows SDK for Desktop C++"
11797정성태12/19/201817135개발 환경 구성: 425. vcpkg - CMake Error: Problem with archive_write_header(): Can't create '' 빌드 오류
11796정성태12/19/201817428개발 환경 구성: 424. vcpkg - "File does not have expected hash" 오류를 무시하는 방법
11795정성태12/19/201820698Windows: 154. PowerShell - Zone 별로 DNS 레코드 유형 정보 조회 [1]
11794정성태12/16/201816813오류 유형: 508. Get-AzureWebsite : Request to a downlevel service failed.
11793정성태12/16/201819339개발 환경 구성: 423. NuGet 패키지 제작 - Native와 Managed DLL을 분리하는 방법 [1]
11792정성태12/11/201819147Graphics: 34. .NET으로 구현하는 OpenGL (11) - Per-Pixel Lighting파일 다운로드1
11791정성태12/11/201819137VS.NET IDE: 130. C/C++ 프로젝트의 시작 프로그램으로 .NET Core EXE를 지정하는 경우 닷넷 디버깅이 안 되는 문제 [1]
11790정성태12/11/201817627오류 유형: 507. Could not save daemon configuration to C:\ProgramData\Docker\config\daemon.json: Access to the path 'C:\ProgramData\Docker\config' is denied.
11789정성태12/10/201831250Windows: 153. C# - USB 장치의 연결 및 해제 알림을 위한 WM_DEVICECHANGE 메시지 처리 [2]파일 다운로드2
11788정성태12/4/201817525오류 유형: 506. SqlClient - Value was either too large or too small for an Int32.Couldn't store <2151292191> in ... Column
11787정성태11/29/201821685Graphics: 33. .NET으로 구현하는 OpenGL (9), (10) - OBJ File Format, Loading 3D Models파일 다운로드1
11786정성태11/29/201818653오류 유형: 505. OpenGL.NET 예제 실행 시 "Managed Debugging Assistant 'CallbackOnCollectedDelegate'" 예외 발생
... 76  77  78  79  80  81  82  83  84  [85]  86  87  88  89  90  ...