The Pursuit of Happyness

Java 개발환경을 위해서, JDK 와 Maven 을 사용하여 개발하는 부분에 대해서 정리합니다.


회사 네트워크 환경은, 

1. Firewall 을 사용하며 제한된 인증서를 통해 개발툴에서 https 프로토콜로 필요한 repository 에 접속할 수 없는 상태이며, 

2. Active Directory 로 관리되어 install 하는 프로그램은 Administrator 권한 없이 설치할 수 없는 상태 입니다.


일단 JDK 를 설치해야하는데, Oracle 홈페이지에서 다운로드 받은 JDK 설치 파일은 권한 문제로 설치를 할 수 없는 상태에서 최적의 해결책은 Portable JDK 입니다.

Portable JDK는 portableapps.com 사이트에서 다운로드가 가능합니다.


32bits 버전

https://portableapps.com/apps/utilities/jdkportable

 

64bits 버전

https://portableapps.com/apps/utilities/jdkportable64


PortableApp의 경우 exe형태로 배포되지만 실제로는 압축파일로, 실행시 해당 애플리케이션을 지정한 폴더에 압축을 풀어줍니다.

원래 용도는 USB 드라이브에 필요한 프로그램을 넣어가지고 다녀서 필요할 때 사용하게 하기 위해서 만들어졌지만, 

프로그램을 설치하지 않고 사용해야 하는 환경에서도 사용할 수 있습니다.


Portable JDK는 특이하게도 압축이 풀리고 나서 Oracle 사이트에서 JDK  파일을 다운로드 받아서 해당 폴더를 JAVA_HOME 으로 사용할 수 있게 만들어 줍니다.

Portable JDK는 환경변수 설정이 되지 않기 때문에, eclipse 등의 IDE에서는 JDK 경로를 지정해 주어야 하며, cmd 상에서 이용하기 위해서는 JAVA_HOME 및 PATH를 지정해 주어야 합니다.


다음은 eclipse 를 설치합니다.

eclipse 의 경우 압축만 풀어서 사용하는 버전을 다운로드 받아서 사용합니다.


Java EE 개발자용을 다운로드 해서 압축을 풀어 줍니다.

https://www.eclipse.org/downloads/packages/release/2018-09/r/eclipse-ide-java-ee-developers


eclipse JDK 경로를 지정해 줍니다.

혹시나 JRE만 설치가 되어 환경변수에 등록되어져 있는 경우 아래의 메뉴에서 설정을 변경해 줍니다.


Window > Preferences > Java > Installed JREs > Search (or Add) - 새 경로 지정

Window > Preferences > Java > Installed JREs > Execution Environments : [설치한 JavaSE 버전 선택] > Compatible JREs : [체크 박스 선택]


마지막으로 Maven repository 를 설정합니다.

Maven을 다운로드해서 압축을 풀어서 사용할 수도 있지만, 여기서는 eclipse 기본 플러그인 버전을 사용합니다.


보통 Firewall 로 네트워크를 제한하는 환경에서는 자체 인증서를 사용하는데, 

개발자용 인증서를 따로 제공해 주지 않는 경우 repository 접속시 https 인증서 오류가 나올 수 있습니다.

이 경우 개발용 proxy 서버를 제공해 주면 그것을 사용하면 되지만 제공해 주지 않는다면, 보안상 좋지는 않지만 인증서 오류를 피해서 사용하는 방법이 있습니다.


Maven은 기본 repository 경로를 https 로 제공하고 있으나, http 로 연결해도 필요한 artifact 들을 가지고 올 수 있습니다. 

repository 경로를 변경하기 위해서 Maven 설정 파일인 settings.xml 를 편집합니다.

settings.xml 파일은 .m2 폴더 안에 있어야 하는데, 특별한 설정이 없는 경우 (혹은 처음 세팅하는 경우) settings.xml 파일이 없을 수도 있습니다.

.m2 폴더는 보통 개인 홈 디렉터리에 있습니다. (ex - C:/Users/[사용자계정]/.m2)

settings.xml 에서 mirrors 부분에 다음과 같이 repository 경로를 http 프로토콜로 적어 주면됩니다.



  <mirrors>

    <mirror>

        <id>central-no-ssl</id>

        <name>Central without ssl</name>

        <url>http://repo.maven.apache.org/maven2</url>

        <mirrorof>central</mirrorof>

    </mirror>

  </mirrors>  


settings.xml






Comment +0

CentOS7에서는 기본으로 firewalld 라는 방화벽 솔루션이 제공됩니다.

기존의 iptables의 경우 룰 변경시 서비스를 중지해야 하는데, OpenStack이나 KVM 같은 가상화 호스트 환경에서는 네트워크 변화가 수시로 발생되어 필터링 정책 변경이 빈번해서 iptables 정책과 충돌되는 문제점 들이 발생했습니다. 이러한 문제점을 보완하기 위해서 firewalld 서비스가 활성화 되고 있는 것으로 볼 수 있습니다.

이 포스팅에서는 firewall-cmd를 이용해서 방확벽을 구성하는 간략한 방법을 정리해 보았습니다.


firewalld 에는 신뢰 수준에 따라 다음의 zone들이 미리 준비되어 있습니다.

drop - block - public - external - internal - dmz - work - home - trusted


firewall-cmd 를 이용해서 설정 변경시에는 --permanent 옵션을 사용하면, firewalld 서비스를 재시작해도 설정을 유지할 수 있습니다. 그렇지 않으면 firewalld 서비스를 재시작하면 설정이 사라집니다.


@ firewalld 서비스가 작동하고 있는지 확인하기

$ firewall-cmd --state


서비스가 작동하고 있다면 콘솔에 "running" 이라고 나올 것입니다.


@ active zone을 확인하기


$ firewall-cmd --get-active-zones


그리고 --list-all 옵션을 이용해서 각 zone 별로 구성되어 있는 firewalld 설정을 확인합니다. (public 자리에 위에서 확인한 zone 이름을 입력하면 됩니다.)


$ firewall-cmd --zone=public --list-all


앞서 이야기했던 zone들로 zone을 바꿔가며 입력해보면 각 zone 별로 어떤 서비스들을 이용할 수 있는지 확인할 수 있습니다.


@ 특정 (네트워크) 인터페이스의 zone을 변경하기


$ firewall-cmd --zone=internal --change-interface=enp0s3


enp0s3 인터페이스를 internal zone으로 설정하는 명령이었습니다.

참고로 /etc/sysconfig/network-scripts/ifcfg-enp0s3 파일을 편집해서 zone을 설정할 수도 있습니다.


$ vi /etc/sysconfig/network-scripts/ifcfg-enp0s3


다음 라인을 추가합니다.


ZONE=internal


@ 새로운 zone을 추가하기


$ firewall-cmd --new-zone=newzonename


새로 추가한 zone을 인식할 수 있게 재로딩 합니다.


$ firewall-cmd --reload


@ zone에 서비스 추가하기

firewalld에서는 IP나 Port를 추가할 수도 있지만, 이미 잘 알려진, 많이 사용되고 있는 서비스에 대해서는 서비스 이름으로 추가가 가능합니다.

추가 가능한 서비스 목록은 다음의 명령어로 확인이 가능합니다.


$ firewall-cmd --get-services


public zone에 http 서비스를 추가해 보겠습니다.


$ firewall-cmd --zone=public --add-service=http --permanent


firewalld 서비스를 재시작해도 public zone에서는 http 서비스를 이용 가능하게 됩니다.


@ zone에 특정 IP 추가하기


$ firewall-cmd --zone=public --add-source=192.168.100.0/24


@ zone에 포트 추가하기

아래 명령어로 public zone에 tcp 방식의 5000번 포트를 추가합니다.


$ firewall-cmd --zone=public --add-port=5000/tcp


열려 있는 포트를 확인합니다.


$ firewall-cmd --zone=public --list-ports


포트 대역을 추가할 때는 "-" 를 이용해서 대역을 지정할 수 있습니다.


$ firewall-cmd --zone=public --add-port=5001-9999/utp


@ 서비스 지정하기

위에서 언급된 잘 알려진 서비스 이외에 특정 포트에 해당하는 서비스를 등록할 수 있습니다.

/usr/lib/firewalld/services 폴더에 있는 잘 알려진 서비스들 중에 하나를 선택해서 /etc/firewalld/services로 복사합니다. (확장자를 제외한 파일명이 서비스명이 되므로 기존의 서비스들과 이름이 겹치지 않게 해줍니다.)


$ cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/custom_service.xml


복사한 파일을 엽니다.


$ vi /etc/firewalld/services/custom_service.xml


아래와 같이 내용을 편집합니다.  (tcp 방식으로 9999 포트를 사용하는 서비스로 custom_service가 등록됩니다.)


<?xml version="1.0" encoding="utf-8"?>

<service>

    <short>Custom Service</short>

    <port protocol="tcp" port="9999"/>

</service>


firewalld 서비스가 새로 추가한 서비스가 사용하는 프로토콜과 포트를 인식할 수 있게 재로딩 합니다.


$ firewall-cmd --reload


새로 추가한 서비스를 public zone에 추가합니다.


$ firewall-cmd --zone=public --add-service=custom_service



Comment +0