드디어 올 것이 왔다. Java 는 매번 운영만 했는데(Hadoop, Jenkins, ElasticSearch 등등), 드디어 Java 코드를 보며 개발을 해야 할 순간이 왔다.

엄밀히 말하면 유지보수 측면에서의 개발이지만, 그래도 개발 환경을 설치를 하기는 해야 한다.

상황은 이렇다. 협력업체에서 서버 사이드를 개발하고 우리 회사에서 클라이언트 사이드 (웹 앱)를 개발하고. 그 상황을 1여년 간 지속해오다, 우리 회사에서 둘 다 맡게 된 것. 단 새로운 개발은 안하고, 유지보수 및 버그 픽스만!

근데 하필 이 업체에서 Java 로 , 그것도 전자정부프레임워크를 이용해서 개발을 했다고 한다.

음… ……

기존에도 실 프로덕션 서버의 SSH 권한은 있었기 때문에 사실 이런 저런 CGI 프로그램을 개발해야 해서 JSP 로 몇 개 구현해서 넣은 적이 있었다. JSP 파일 이용해서 CGI 개발하는거야 사실 큰 일도 아니니깐 금세 하곤 했다.

근데 기존에도 이따금씩 서버 CPU 에 스파이크 치는 것을 본 적이 있었다. 아마도 원인은 가비지 컬렉션으로 유추되는데, 꽤나 고오오급 성능의 컴퓨터를 쓰는데도 그 순간이 되면 CPU의 3~40 % 는 거의 아무 것도 못하고 멈추더라. 내가 본 클라우드 컴퓨터 중 단일로 운영하는 컴퓨터 중에서는 제일 고급이었다. 대개 요즘에는 마이크로 아키텍처를 많이 가는 추세니까, 작은 단위로 개발해서 수평 확장하는 걸로 알고 있었기 때문이다.

어쨌든 그래서 그 순간부터 마음에 들지는 않았다. 서비스 초기부터 이 정도를 써야 하나? 그리고, 이 정도의 사양인데도 성능이 이것 밖에 안나온다고?? 뭐, 내가 내는 돈이 아니니까 그냥 그러려니 했다.

대망의 인수인계 날이 왔다. 협력업체로 출근해서, 환경 구성을 했다.

JDK 1.7 로 개발했다고 했다. Oracle 에서 JDK 1.7 SE 를 받아서 설치했다.

요즘 한참 말이 많은, Oracle 의 Java 라이센스 문제는 딱히 없다고 하더라. JDK 1.8 부터니까 1.7은 괜찮다고. 그런가? 음 그런가보다.

그리고 드디어 전자정부프레임워크!

매번 말로만 듣다가 마침내 써보는구나.

구글에 전자정부프레임워크를 검색하니 딱 나오더라. 오우, 좀 관리되는 놈인가? 전용 페이지도 있고 말이야. 근데 왜 정부에서 아직도 HTTP 를 쓰는지는 의문…

인수인계 해주시는 분이 버전 3.7과 3.6이 있다고 하더라. 3.7이라고 해봐야 올해 2월 달에 나온거니 6개월 간 문제 없이 검증된 거면 괜찮겠지, 하고 사용하려고 했다.

어? 실행이 안된다. ㅎㅎ 이런, 전자정부프레임워크 3.7은 JRE 1.8을 설치해야만 한다.

라이센스 문제를 피하고자, LTS 느낌으로 전자정부프레임워크 3.6을 설치했다.

아~ 전자정부프레임워크는 Eclipse 에 별도 개발 도구들을 추가한 도구이구나! 처음 알았다. Eclipse 는 2012년 이후로 처음 써보는 것 같다. 더 나아진 것 같기도 하고, 아닌것 같기도 하고…

SVN 에 연결하고, 코드를 Checkout!

그리고 실행을 시켜보자. Tomcat 7.0 서버를 추가하고, 실행을 시키려고 했더니 에러가 100개가 넘게 뜬다.

Maven 프로젝트가 뭔가 문제가 있었다.

검색을 해보니 초기에 Maven 패키지를 받아오는데 실패하면 이런 문제가 발생한다고 한다. 협력업체로 간거라 노트북을 들고 갔는데, 그 즈음에 와이파이가 끊겼었기 때문이다. 이런~!

그러면 HOME 디렉토리 밑의 .m2/repository 폴더를 지우고 다시 Maven 업데이트를 하라고 한다. 오케이…

오, 지우려고 하니 Eclipse 에서 디렉토리를 사용 중이어서 지울 수가 없다고 한다. Eclipse 를 종료하고 지우자… 이런? 종료하려니 뭔가 Eclipse 에서 작업을 끝내고 있다. Eclipse 는 종료도 마음대로 안되는군… 흠. 30초 가량 지난 후 Eclipse 가 종료되었다.

디렉토리를 지우고 다시 Maven clean, Maven update 업데이트를 한 후 Build 를 했더니 되었다. Yeah!

생각보다 잘 되서 전자정부프레임워크에 놀랐다. 예전에 고생을 많이 했던 것 같은데, 어쨌든 되었으니.


인수인계하러 외근이 다 끝난 후… 이런 저런 일들이 있어서 차주에는 좀 바빴다.

그 다음 주에 다시 회사 PC 에 전자정부프레임워크 개발 환경을 갖추려고 했다.

당시 기록해놓은 동일한 단계를 따라서 진행을 하는데…

??? 안 된다. 왜 안 되는지 영문을 모름.

과장님이랑 같이 인수인계 받으러 갔었는데 과장님도 안 되더라. =_= 왜 안되는거야!!!

3일 뒤, 과장님은 간신히 성공하셨다. 원인은 도대체가 알 수 없지만, 회사 네트워크에서 Maven 의 특정 레포 파일을 읽어올 수가 없다. 파일이 다운로드가 안됨. 브라우저에서 그냥 해당 URL 로 다운로드 하면 99% 에서 완료가 안되고, curl 로 땡겨와도 99% 에서 완료가 안된다. 그래서 그 파일들만 별도로 다른 미러에서 다운 받아서 직접 build path 를 설정해주고 pom.xml 파일에서 해당 디펜던트 내용만 지워주면 됐다. 사실 이 build path 설정하는 개념도 처음에는 이해가 안되서 골칫덩이었지만 =_=;; 쨌든 과장님이 그런 식으로 해서 되셨다니까, 나도 그렇게 했다.

그렇게 했는데도 나는 안된다. 왜!!!!


진짜 매번 느끼는 거지만 Java 는 리소스를 참 많이 먹는다. 특히나 안될 때마다 다시 단계 별로 진행 해보려고 하면 특정 순간에 Disk IO 를 거의 다 잡아먹어서, 그 순간에는 다른 일을 할 수가 없다.

될때까지 10일동안 이 경우 저 경우를 다 시도해보았다.

Could not transfer artifact org.apache.maven:maven-archiver:pom:2.5 from/to central (https://repo.maven.apache.org/maven2): Received fatal alert: protocol_version

일단 처음 발견한 문제는, Maven 의 레포에서 TLS 버전을 1.2로 올렸는데, JDK 1.7 에서는 기본적으로 TLS 버전이 1.1이다. 그래서 안되는 것이었다. =_=;;; 그 버전 업이 비교적 아주 최근에 이루어진 모양이다. 그래서 인수인계 받으러 간 순간에는 된 것 같은데, 지금은 안되더라. 아오!

그래서 해결책은 Maven 커맨드라인 옵션에 -Dhttps.protocols=TLSv1.2 을 주면 된다고 한다. 그래서 mvn -Dhttps.protocols=TLSv1.2 -U clean install 을 하려고 보니 난 Maven 을 설치한 적이 없다. 전자정부프레임워크에 Maven이 같이 딸려온 것! (EMBEDDED 되어 있다…)

직접 Eclipse 에 arguments 에 입력해서 시도했다. 안된다! 왜 안되는지 모르겠다. Eclipse 가 원래 그런가?

이미 실행조차 못하고 일주일이 넘게 지났기 때문에 짜증이 많이 났다.

다음으로는 Maven 의 JRE 버전만 특별하게 올려보았다. Oracle JDK 1.8 쓰지 말고, Open JDK 1.8 을 썼다. Workspace 내의 기본 JDK 버전은 Oracle JDK 1.7 SE 를 쓰고, Maven 만 Open JDK 1.8 을 썼다. 여전히 안된다.

이거 하나 하나 시도할 때마다 몇 시간씩 걸리니 환장할 지경이었다.

그리고 Eclipse 가 너무 잘 멈추더라. 하루는 하다가 멈춰서 ‘다시 되겠거니’ 하고 퇴근했는데, 다음 날 아침에도 멈춰있어서 강제로 종료했음 ㅡㅡ;;;;;;;;;;;;;

결론적으로는 다음을 했다.

  • JDK 1.7 SE 지워버림.
  • Open JDK 1.8 이용
  • 전자정부 프레임워크 3.7 설치
  • 프로젝트 Build Automatically 꺼버림
  • Project –> Clean
  • Run As –> Maven clean
  • Maven –> Update Project
  • Build

그 외에도 정말 많은 짓거리를 했지만, 결국은 전자정부 프레임워크 버전과 JDK 버전을 올리는 것으로 마무리 되었다.

정말로 이걸 겪고 나니 Java 로 웹 개발을 왜 하는지 더욱 모르겠더라.

너무 별로다.