Memo/기타

왜 IDE와 WS를 그대로 복사해왔는데 이클립스 구동이 안될까?

cassan 2022. 9. 26. 17:51

0. 개요

이번에 SVN브랜치를 개발버전과 신기능테스트용 버전을 나누면서 개발서버를 따로 구축할 일이 있었다.

다들 아는 사실이지만 SVN브랜치 기능은 git브랜치에 비해 많은점이 부족하다..

구성은 대강 이런 느낌인데

▷ 로컬 (Master, 윈도우내부망)
▷ 운영 (Tmax, JBOSS-WAS)
▶ 개발서버1 (기존테스트서버, 리눅스/내부망) 
▶ 개발서버2 (신기능테스트서버, 윈도우내부방 (IDE로 서버구동))
▶ 개발서버3 (신기능빌드서버-실사용자테스트용, 리눅스.외부망)

이러한 구성인데, 새로구축한 2번, 3번 서버에서 이클립스가 안열리거나 서버가 켜지지 않아서 애를 먹었다. 결론은 다음과 같이 냈으며 잘 처리되었다.

  • 개발서버2 : 로컬 pom.xml 에 기술된 m2 라이브러리로는 구동불가 → 실서버 pom.xml 추출, 로컬Master m2 빽업 후 포팅
  • 개발서버3 : OPEN JDK / 로컬 JDK 버전충돌 → 디프리케이트 혹은 구동불가 메소드들에 대해 기능제한 후 Server startup

아래는 결론은 낸 후 이클립스 파일구조를 정리한 내용

 



 

학부생 시절에 가졌던 왜 학교에서 쓴 IDE와 WS를 그대로 복사해왔는데 구동이 안되지?? 란 의문에 조금이나마 답을 냈기 때문에 이글을 기록. 크게 3가지를 적어보려고 한다.

→ 결론만 궁금하다면 : 1.3, 2.3 만 참고

  1. IDE_PATH : 이클립스 위치의 파일구조를 설명
  2. WS_PATH : 워크스페이스 위치의 파일구조를 설명
  3. PRJ_PATH : 프로젝트 폴더의 파일구조를 설명

1. IDE_PATH (이클립스 파일구조)

이클립스의 버전과 이클립스를 코어로 만들어진 STS, eGov의 경우 상세스펙은 조금 다를 수 있다.

${IDE_PATH}
├─configuration
│  ├─.settings
│  ├─org.eclipse.core.runtime 
│  ├─org.eclipse.e4.ui.css.swt.theme
│  ├─org.eclipse.epp.mpc.ui
│  ├─org.eclipse.equinox.app 
│  ├─org.eclipse.equinox.simpleconfigurator
│  ├─org.eclipse.equinox.source
│  ├─org.eclipse.help.base
│  │  └─index
│  │      └─ko_KR
│  ├─org.eclipse.oomph.setup
│  ├─org.eclipse.osgi 
│  ├─org.eclipse.ui.intro.universal
│  ├─org.eclipse.update 
│  └─org.eclipse.wst.server.discovery
├─dropins
├─features
│  ├─ ... 
│  └─umlet-eclipse-feature_14.3.0
│      └─META-INF
├─p2
│  ├─org.eclipse.equinox.p2.core 
│  ├─org.eclipse.equinox.p2.engine
│  │  ├─.settings
│  │  └─profileRegistry
│  └─org.eclipse.equinox.p2.repository
│      └─cache
│          └─downloading
├─plugins
│   └─ ...
└─readme

1.1. 핵심폴더

  • configuration : 구동을 위한 내부설정 파일. ui, theme, source 등
  • plugins & features : Plugins, Bundles and Products 레파지토리
  • p2 : Plugins, Bundles and Products Manager

1.2. 주해

configuration 폴더는 이름 그대로의 일을 한다. 길게 설명할 것은 아니고, 사실 이 경로의 가장 중요한 파일로는 eclipse.ini 인데, 사용자는 이 파일을 통해 configuration 폴더의 runtime 옵션에 대해 일부 접근이 가능하다.

dropins 폴더는 현재 미사용 폴더이고 그 역할을 plugins&features 폴더가 대신한다. 이곳에는 마켓플레이스에서 다운받은 플러그인들의 논리파일이 xml,또는 jar로 저장된다. 역으로 말하자면, 플러그인 논리파일을 가지고 있다면 마켓플레이스에서 사라진 플러그인도 설치가 가능하다. 단 이경우 설치하려는 이클립스의 버전 및 jar 파일의 종속성은 따로 체크를 해주어야한다. --이방법으로 objectAid를 설치했다--

plugins&features 폴더가 리소스를 저장하는 레파지토리의 역할을 한다면, 이 리소스들에 대한 버전정보, 종속성 확인 및 업데이트/제거의 지원은 p2 폴더에서 관리한다. 단순하게 설명하자면 MAVEN 과 같은 역할을 하는 설정 파일 그룹이다.

1.3. 왜 IDE 폴더를 압축해서 옮기면 실행이 안될까?

→ 여기 단계에서 발생하는 문제는 대부분 JAVA 버전PC 성능 의해 발생한다.
이클립스는 버전에 따라 구동가능한 JDK 버전이 다르다. cmd 에서 각 PC의 java -version 을 확인해본 후 구동설정을 맞춰주면 해결 할 수 있다.
PC성능의 경우 옮기려는 곳이 CPU나 RAM 여유공간이 부족할 경우 경고메세지가 발생하거나 강제종료될 것이다. eclipse.ini 파일을 통해 구동시 메모리를 조절해주면 효과를 볼 수도 있다.

2. WS_PATH (워크스페이스 경로)

${WS_PATH}
├─.metadata
│  ├─.mylyn
│  │  ├─.taskListIndex
│  │  └─contexts
│  └─.plugins
│      ├─org.eclipse.buildship.core
│      ├─org.eclipse.core.resources
│      │  ├─.history 
│      │  ├─.projects
│      │  │  ├─Servers 
│      │  │  ├─${PROJECT_NAME_01}   
│      │  │  └─${PROJECT_NAME_02}   
│      │  ├─.root 
│      │  └─.safetable
│      ├─org.eclipse.core.runtime 
│      ├─org.eclipse.datatools.connectivity
│      ├─org.eclipse.debug.core 
│      ├─org.eclipse.debug.ui
│      ├─org.eclipse.e4.ui.workbench.swt
│      ├─org.eclipse.e4.workbench
│      ├─org.eclipse.eclemma.core 
│      ├─org.eclipse.emf.common.ui
│      ├─org.eclipse.epp.logging.aeri.ide 
│      ├─org.eclipse.epp.mpc.ui
│      ├─org.eclipse.equinox.p2.ui
│      ├─org.eclipse.jdt.core
│      ├─org.eclipse.jdt.debug.ui
│      ├─org.eclipse.jdt.junit.core 
│      ├─org.eclipse.jdt.launching
│      ├─org.eclipse.jdt.ui
│      ├─org.eclipse.jst.j2ee
│      ├─org.eclipse.jst.j2ee.ui
│      ├─org.eclipse.jst.j2ee.web
│      ├─org.eclipse.jst.jsp.core 
│      ├─org.eclipse.jst.jsp.ui
│      ├─org.eclipse.ltk.core.refactoring 
│      ├─org.eclipse.ltk.ui.refactoring
│      ├─org.eclipse.m2e.core 
│      ├─org.eclipse.m2e.core.ui
│      ├─org.eclipse.m2e.jdt
│      ├─org.eclipse.m2e.launching 
│      ├─org.eclipse.m2e.logback.configuration
│      ├─org.eclipse.oomph.setup
│      ├─org.eclipse.oomph.setup.ui
│      ├─org.eclipse.rse.core 
│      ├─org.eclipse.search
│      ├─org.eclipse.team.core 
│      ├─org.eclipse.team.svn.core 
│      ├─org.eclipse.team.svn.revision.graph
│      ├─org.eclipse.team.ui
│      ├─org.eclipse.tips.ide
│      ├─org.eclipse.tm.terminal.view.ui 
│      ├─org.eclipse.ui.editors
│      ├─org.eclipse.ui.ide
│      ├─org.eclipse.ui.intro
│      ├─org.eclipse.ui.workbench
│      ├─org.eclipse.ui.workbench.texteditor
│      ├─org.eclipse.userstorage.oauth
│      ├─org.eclipse.wst.common.modulecore
│      ├─org.eclipse.wst.common.snippets 
│      ├─org.eclipse.wst.html.ui
│      ├─org.eclipse.wst.internet.cache
│      ├─org.eclipse.wst.jsdt.core 
│      ├─org.eclipse.wst.jsdt.ui
│      ├─org.eclipse.wst.jsdt.web.core 
│      ├─org.eclipse.wst.json.ui
│      ├─org.eclipse.wst.server.core
│      │  ├─publish
│      │  ├─tmp0
│      │  │  └─ ....
│      │  ├─tmp1
│      │  │├─conf, logs, temps, webapps, work 
│      │  │└─wtpwebapps 
│      │  │  └─${PROJECT_NAME_01}   
│      │  │      └─WEB-INF 
│      │  └─tmp2
│      │      ├─conf, logs, temps, webapps, work  
│      │      └─wtpwebapps 
│      │        └─${PROJECT_NAME_02}   
│      │            └─WEB-INF 
│      ├─org.eclipse.wst.server.discovery
│      ├─org.eclipse.wst.server.ui
│      ├─org.eclipse.wst.sse.core
│      ├─org.eclipse.wst.sse.ui
│      ├─org.eclipse.wst.validation
│      ├─org.eclipse.wst.ws
│      ├─org.eclipse.wst.ws.explorer
│      └─org.eclipse.wst.xml.core
├─.recommenders
│  ├─caches
│  └─index
├─${PROJECT_NAME_01}   
├─${PROJECT_NAME_02}   
└─Servers
      ├─.settings
      ├─Server-${PROJECT_NAME_01}-config
      └─Server-${PROJECT_NAME_02}-config

2.1. 핵심폴더

  • .metadata : 워크스페이스의 홈디렉터리 폴더
  • .recommenders : 워크스페이스 내 변경사항 아카이빙 폴더
  • ${PROJECT_NAME} : 워크스페이스 내 존재하는 Project 개별 폴더
  • Servers : 워크스페이스 내 존재하는 Server 설정 폴더

2.2. 주해

2.2.1. Server 폴더

우선 쉬운것부터 설명하자면 Servers 폴더는 워크스페이스내 존재하는 Server 들에 대한 설정이다. Server 폴더 내 .settings는 이름 그대로의 역할을 하며, 그외 폴더는 워크스페이스 내에 존재하는 서버의 설정 파일이다.
서버의 설정파일 이라고 하면 거창해 보이지만 Eclipse를 통해 쉽게 관찰할 수 있다.

1) Eclipse-ServerTab에서 한개의 서버를 더블클릭했을 때 나오는 환경설정 화면이 이 설정파일을을 일부 GUI화 시킨 것이다.
2) ProjectExplorer 등에서 Server 항목을 폴딩해제 해보면 이 폴더에 존재하는 설정파일들을 확인할 수 있다.

이 설정 파일들이 꽤 중요한데 이 포스트의 주제와 벗어나는 것이니 일단 생략한다. 추후에 적으면 링크를 걸겠다.

위 트리의 워크스페이스에는 Server-${PROJECT_NAME_01} 와 Server-${PROJECT_NAME_02} 두 개의 서버가 존재는 것을 알 수 있다. 서버들의 명칭은 생성시 명명한 이름과 동일하게 생성된다. 예를 들면 Apache Tomcat v7.0 (2)-config 이런 식이 된다. 생성 후 이름을 변경해도 폴더 구조에는 최초의 명칭으로 남는다.

2.2.2. .metadata 폴더

.metadata 폴더는 워크스페이스의 셋팅, 캐시정보를 저장한다. 폴더구조는 2가지로 mylyn 은 이클립스내 테스크를 관리하고 (안써봤다) plugins 은 프로젝트 내에 사용된 플러그인들의 정보를 담고 있다. 위 트리 구조를 보면 debug, m2e, team.svn 등 눈에 뛰는 패키지들이 있을 것이다. 이러한 공용 패키지 외에 사용자가 설치한 anyEditTool 플러그인이 존재할 때도 있다.
하지만 이중에서 가장 자주 만나게 될 폴더는 org.eclipse.wst.server.core 인데 이 폴더는 보통 톰캣이 인식하는 경로라고 부른다.

이 폴더의 내부구조를 보면 publishtmpN 폴더들로 나뉘는데, publish 는 tmpN 파일들에 대한 캐싱 파일 그룹이고, tmpN 폴더들은 프로젝트 내 존재하는 톰캣 서버의 리소스 그룹이다. tmpN 폴더는 위에서 설명한 Servers 와 달리 워크스페이스에 존재하는 서버 갯수만큼 생성되지 않는다. tmpN 폴더들이 생성/삭제는 이클립스에 의해 동적으로 제어되는데 사용자가 ServerTab을 통해 Run/Clean/Publish를 할때 이를 확인할 수 있다.
tmpN의 N은 publish/clean시 다음 순번으로 올라가는데 (때때로 그렇게 동작하지 않을 때도 있다) 내부를 확인해보면 프로젝트 내의 target 폴더의 class 파일과 기타 리소스들이 저장되어 있는 것을 확인할 수 있다. 이 폴더가 이클립스 용량증가의 주범(?)인데 경험상 무한정 늘어나는 것은 아니고 보통 0,1,2 에서 관리되는 것 같았다.

여기서 의문이 생긴다. JAVA 파일이 컴파일 되면 프로젝트 내의 target 폴더에 class 파일이 생성된다. 그런데 org.eclipse.wst.server.core 에도 tmp0 형식으로 class 파일이 생성된다. 이 둘의 차이점은 무엇일까? 이건 3번째 장에 적을 것이다..

다시 원래 이야기로 되돌아와서.. 때때로 톰캣이 구동되지 않을 경우, 혹은 내용이 반영되지 않을 경우 Clean > Run 진행하라는 것은 톰캣이 인식하는 경로를 정리하란 뜻이다.
이클립스의 Clean은 프로젝트가 엄청나게 크거나, SSD가 오래되어 성능이 크게 저하된 경우(또는 디스크가 READ 불가상태일 경우), CPU가 부족한 경우 작업이 무시되거나 성공하지 못하는 경우가 있는데, 이때 사용자가 강제로 tmp 폴더와 그와 연계된 pulish 폴더내의 index를 지워주면 동일한 효과를 볼 수 있다.

2.3. 왜 WS 폴더를 압축해서 옮기면 실행이 안될까?

→ 이건 좀 변수가 많은데 아래 두가지 경우에 해당하지 않는다면, org.eclipse.wst.server.core 폴더의 내용을 모두 지우고 옮기려는 PC의 이클리스에서 재컴파일(Run)을 진행하면 효과를 볼 수도 있다.

1) 동일하지 않은 플러그인 - 옮기려는 이클립스에 설치된 플러그인과 프로젝트에 적용된 플러그인이 다르다
2) 동일하지 않은 서버 - 옮기려는 이클립스에 설치된 서버와 프로젝트의 서버의 버전/갯수/이름이 일치하지 않는다

3. PRJ_PATH (프로젝트 폴더)

# 3. PRJ_PATH

 ${WORKSPACE_PATH}
├${PROJECT_NAME}
├─.settings
├─.svn
│  ├─pristine 
│  └─tmp
├─bin
│  └─target
│      ├─classes
│      │  └─${PROJECT_NAME} 
│      └─m2e-wtp
│          └─web-resources
│              └─META-INF
│                  └─maven
│                      └─${PROJECT_NAME} 
├─src
│  ├─main
│  │  ├─java
│  │  │  └─${PROJECT_NAME} 
│  │  ├─resources
│  │  │  └─config, ddl, mapper, properties 
│  │  └─webapp
│  │      ├─document
│  │      ├─gpkisecureweb 
│  │      ├─META-INF
│  │      ├─static
│  │      │  ├─css, fonts,  images, js
│  │      └─WEB-INF
│  │          └─config, jsp, lib, tiles, templete 
│  └─test
│      └─java
├─target
│  ├─classes
│  │  ├─config, ddl, mapper, properties   
│  │  └─${PROJECT_NAME}  
│  ├─m2e-wtp
│  │  └─web-resources
│  │      └─META-INF
│  │          └─maven
│  │              └─${PROJECT_NAME} 
│  └─test-classes
└─WebContent
    ├─META-INF
    └─WEB-INF
        └─lib

참고자료

https://wiki.eclipse.org/Equinox/p2/FAQ
https://stackoverflow.com/questions/19996170/what-is-the-metadata-folder-in-eclipse-workspace

반응형