예전에는 Spring 프로젝트 시작하기에 설정이 반이라고 했다.

프레임웍 자체는 잘 되어 있지만, 버전 업그레이드를 하기 위해서 할 것이 많고, 기타 플러그인 설정하기가 힘들었기 때문이다.


하지만 혼자서 웹 프로젝트를 만들어보려 하니, 매우 쉬운 방법으로 Spring 프로젝트를 만들 수 있었다.

우선 많이 사용되는 Maven은 잘 알려져 있지만, pom.xml 파일이 너무 복잡하다는 사소한 단점이 있어서 이번에는 Gradle으로 Build 환경을 구축하기로 했다. 이 모든 것은 https://start.spring.io/ 에서 쉽게 프로젝트를 만들 수 있다.

기본적인 JDBC Driver로부터 mybatis와 같은 plugin도 한줄이면 프로젝트에 넣을 수 있다.

 


 

우선 이클립스는 설치했다는 가정 하에서 캡쳐 위주로 설명하겠다.

 

1. 이클립스 MarketPlace에서 BuildShip 설치

 -기존의 Gradle 플러그인 (Gradle IDE Pack)은 더이상 지원하지 않는다고 한다. 별 차이는 없겠지만, 권장하는 Buildship을 사용한다.


 


2. (선택) 이클립스 MarketPlace에서 SpringIDE 설치

 -기존 Spring에는 이클립스에 Tomcat 서버를 추가해서 Add/Remove 한 다음 서버를 구동했다. 하지만 이러한 수고를 줄이기 위해서 Springboot은 자체적으로 WAS를 가지고 있다 (Tomcat로 알고 있음). 이를 원활하게 사용하기 위해서는 Spring IDE 설치도 좋다.

 -설정을 변경해서 기존에 사용하던 Tomcat에서 구동할 수도 있다.

 

 

 

3. https://start.spring.io/ 에서 프로젝트 생성하기

 -앞에서 말한 바와 같이, 웹에서 클릭 몇번으로 꽤 많은 설정이 된 패키지 파일을 다운로드 받을 수 있다.

 

 

4. 다운로드 한 프로젝트 파일을 Import 한다

 -여기서부터는 기존 방식과 유사하다. Existing Gradle Project 로 프로젝트를 import 한다.

 

 

 

 

5. (2번을 사용한 경우) 내장 WAS를 사용해 즉시 프로젝트를 띄울 수 있다.

 -Boot Dashboard에서 start 버튼 클릭으로 기동이 가능하며, 포트는 src/main/resources 폴더의 application.properties 파일에서 server.port=8888 으로 포트를 지정해서 기동할 수 있다.

 

 

 

6. Gradle로 Build하기

 - 외부 WAS에서 기동하기 위해서는 jar 또는 war 파일로 export해야한다. Buildship에서는 UI로 쉽게 Build할 수 있도록 제공해준다.

 - Build한 파일은 build/libs 폴더에 생성된다.

 

 

 

 


 


서버는 한 대이고, 돌려야 할 웹 서비스들은 여러개인 상태에서 어플리케이션들은 다른 JDK 기반으로 개발되었다면..?


해답은 쉽지 않을 것이다.

다른 어플리케이션들의 JDK 버전을 올려 통일시키거나, 아니면 서버를 여러 개로 변경하거나.


이런 상황을 맞지 않기 위해서 Tomcat 기동시, JDK를 수동으로 지정할 수 있도록 하는 방안을 소개한다.

스포일러 하자면, Tomcat 실행 파일에 JAVA_HOME을 명시하는 것이다.


1. 준비

1-1 Portable JDK는 이전 포스트인 "Portable JDK 생성하기"를 참조하여 생성한다.

1-2 Tomcat8 파일을 다운로드 한다. ( http://tomcat.apache.org/download-80.cgi  /  64-bit Windows zip )

*Zip 파일을 선택한 이유는, 여러개의 WAS를 실행할 때를 대비해, 설치 경로를 직접 설정하기 위함이다.


2. Service.bat 수정

2-1 사용할 폴더에 Tomcat8을 압축 해제하고, bin 폴더의 service.bat 파일을 수정한다. 

2-2 주석처리 된 경로 아래 setlocal 이라는 문구가 보인다. set "SELF ~~  문구 사이에 아래와 같이 Portable JDK 경로를 입력한다

* 예시로 D:\tomcatDir\service1\13_jdk-8u65 의 위치로 가정함




3. Tomcat8 Service 등록


3-1 마지막으로, 아래와 같은 명령어로 Tomcat을 Window 서비스에 등록하면 된다.

      * 예시로 D:\tomcatDir\service1\bin 폴더에 service.bat 파일이 있다고 가정함

* 서비스로 등록해본 사람은 알겠지만, service는 service.bat 파일을 지칭하며, tomcat8Portable은 Window 서비스에 등록될 서비스 명이다. 목적에 맞게 변경해서 등록/관리하면 된다.





4. 기타

* 서비스로 등록하기 위해서 service.bat 파일을 수정했다. 하지만, startup.bat 파일을 통해서도 당연히 실행이 가능하다.

* startup.bat 파일에도 당연히 같은 위치에 JAVA_HOME을 지정하면 된다.


Java를 사용하는 프로그램/어플리케이션을 사용할 때, 블로그를 검색하면 항상 JAVA_HOME부터 설정한다.

그런데, Java를 별도로 설치하고 싶지 않거나 각각 다른 버전의 Java를 설치하고 싶다면?



해답은 Java를 Portable로 각각 사용하면 된다.

Portable JDK / JRE 를 사용하는 방법은 3가지가 있다.


1. 인터넷에서 Portable으로 만들어진 파일 다운로드

- 가장 손쉬운 방법이다. 하지만 어떤 파일일지 신뢰가 가지 않는다. 혹시 바이러스라도 있으면...?


2. OpenJDK Portable 다운로드

- https://sourceforge.net/projects/openjdkportable/

- OpenJDK 의 Portable 버전을 다운받는다. 하지만 Oracle의 '순수한' Java를 보통 사용하기 때문에, OpenJDK는 생소할 수 있다.

- 사용상 크게 차이는 없겠지만, 만약 조금의 차이라도 있어서 어플리케이션이 동작하지 않는 것을 찾기 힘들지도...


3. Oracle의 JDK을 다운로드 받아 직접 만들기


1번과 2번은 모두 큰 이슈 없이 사용 가능하다.

하지만 3번의 JDK를 직접 만드는 방법은 생각보다 매우 쉽기 때문에, 굳이 1번과 2번을 선택하지 않아도 될 정도이다.



Portable JDK를 만들기 위한 방법이다.

- 사용한 JDK는 8u65 버전이며, 64bit Window Binary이다.

- 코드계의 구글인 stackoverflow에서 참조한 방법이다. 


1. JDK 다운로드

1.1 http://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase8-2177648.html  에 접속한다.

1.2 jdk-8u65-windows-x64 을 다운로드 받는다.


2. 다운로드 받은 파일(jdk-8u65-windows-x64)을 압축 해제한다 (7-zip 등 사용)





3. 압축 해제한 jdk-8u65-windows-x64 폴더에 들어가 tool.zip 파일을 한 번 더 압축 해제한다


4. 해당 위치에서 CMD 창을 오픈한다

4.1 폴더에서 Shift + 마우스 우클릭 하면 아래 사진과 같이 "여기서 명령창 열기"를 선택할 수 있다.





5. 명령창에서 아래 커맨드를 복사하여 붙여넣고, 실행한다.

     for /r %x in (*.pack) do .\bin\unpack200 -r "%x" "%~dx%~px%~nx.jar"






위 작업이 완료되었으면, 이제 tools 폴더는 JDK 8의 Portable 파일이 생성된 것이다.

이 폴더의 경로를 각 프로그램별로 JAVA_HOME으로 설정하면 된다.


Tomcat에서 JAVA_HOME 으로 설정하는 것은 다음 포스트에서 다루기로 하겠다.





덧1. 보통 Java 설치 후, Update가 되지 않도록 설정을 변경한다. 하지만 Portable 버전이면 업데이트 자체가 무의미하기 때문에, 유지보수 측면에서 더 좋다고 볼 수 있다.

덧2. Java 업데이트를 비활성화하는 이유는, Java 업데이트창이 실행되면서 Java 전체가 먹통이 되는 경우가 있기 때문이다. 또는 강제로 업데이트가 되는 경우도 있기 때문에, 갑자기 Java 버전이 달라지기도 한다.

덧3. 하지만 보안 이슈로 인해서 Java 버전을 최대한 높여 놓는 것을 권고한다.

덧4. JDK8의 버전을 jdk-8u65 으로 한 이유는, 그 이상의 버전에서는 압축을 해제해도 tools.zip 파일이 생성되지 않기 때문이다.

보통 iOS 앱은 Appstore에서 다운로드 받는다.
그런데, 기업에서 사용하기 위한 용도로 Enterprise Program에 가입하여 iOS 앱을 만들고, 배포한다.

iOS 앱을 빌드하는 것은 인증서의 차이이므로 크게 어려울 것은 없으나,
Enterprise Program의 앱을 배포하는 것에는 차이가 있다.
바로 웹을 통한 ipa 파일 다운로드이다.
이를 위해서는 3가지가 준비되어야 한다. (html 파일도 필요한데, 아래에서 확인!)

1. iOS앱을 배포할 수 있는 SSL 인증서 + 인증서가 적용된 웹서버
2. 신규로 Build된 iOS의 ipa 파일

3. 신규 Build된 iOS의 ipa파일에 맞는 plist 파일

 


ipa 파일과 plist 파일은 iOS 앱을 빌드하게 되면 생성되는 파일이다.

그런데 이 두개의 파일은 SSL 환경에서만 배포가 가능하다. 

(SSL 인증서 중, iOS 앱을 다운받지 못하는 인증서가 있으니, 미리 확인이 필요하다.)


위의 3가지가 준비되었으면, 



우선, .ipa 파일과 .plist 파일을 웹서버에 업로드한다. 

(ex. https://www.chohyunsu.com/iosPub/target_ios.plist)

(ex. https://www.chohyunsu.com/iosPub/target_ios.ipa)



그리고  .plist 파일에서 ipa 파일의 위치를 수정한다.

 



.pist 파일 수정이 완료되었으면, 또다시 plist 파일을 가리키는 html 파일을 생성하고, 아래의 script를 삽입하고, body의 onload시에 호출한다.

( 사용자 → .html → .plist → .ipa   의 순서로 호출하는 방식이다.)

 


이때, html 파일의 위치는 plist와 ipa 파일의 SSL 웹서버에 위치하지 않아도 된다.

즉, plist와 ipa 파일만 SSL 웹서버에 있으면 http 파일은 다른 도메인이어도 문제가 없다.

(관리를 위해서 같은 위치에 있는 것도 나쁘진 않다)



이제 iOS Enterprise Program에서의 앱 배포 준비는 모두 끝났다.
iPhone이나 iPad에서 방금 만들었던 html 의 주소로 입력하게 되면 앱 설치를 물어본다.
설치하겠냐는 것에 승인을 클릭하면 앱 설치가 시작된다.
(html 화면이 자동적으로 닫히진 않으므로, 홈 버튼으로 바탕화면을 확인하면 된다.)


* plist 파일로 바로 접근해서 다운로드 받으면 편할텐데, 지금은 html 파일로 접근하는 방법밖에 모르겠다.
* iOS 9.0 이상 버전의 기기에서는 html로 앱 다운로드 후, 설정→일반→기기관리 에서 승인을 해줘야 한다.


VPP (Volume Purchase Program)란 Apple에서 제공하는 기업용 앱스토어라고 생각하면 된다.

기존의 AppStore는 판매자의 동의가 없어도 다운로드가 되지만, VPP는 조금 다르다.

우선 앱을 사용하겠다는 것을 판매자에게 요청하고, 판매자가 사용자의 iTunes ID를 등록해야지만 사용자는 앱을 사용할 수 있다.

https://volume.itunes.apple.com/us/store )


하지만, 가장 중요한 것은, VPP는 한국에서 지원되지 않는다는 것이다.

( VPP 대상 국가 http://www.apple.com/business/vpp/ )

VPP의 존재를 처음 알았을 때는 B2B 솔루션 판매가 가능할 것으로 생각되었는데, 안타깝게도 한국은 대상이 아니었다.
( Apple Developer Program Support에 문의를 하니, 아직까지는 대상이 아니라는 답변만 받았다. )

나중에 한국에도 VPP가 적용될 때를 대비해서 iOS의 Enterprise Program과 비교한 것을 정리해본다.



VPP 

-하나의 계정 (iOS Developer Program) 을 사용하며, 고객사별 Enterprise Program 불필요

-Business AppStore에 배포하며, AppStore보다 낮은 앱 검토

-배포 서버를 별도로 운영하지 않아도 되며, 회사별 배포용 인증서 연별 갱신 불필요



Enterpris Program

-보안 검토 없는 개발. 개발의 자유도가 높음 (Customizing)

-업데이트 버전 즉시 사용자에게 배포 가능

-회사별 Enterprise 계정 갱신 (1년 주기 갱신) 및 앱 갱신 필요 (앱의 유지보수 필수!)





* 웹에서 Apple VPP 프로그램을 확인하면, 적용 대상 국가가 아니라고 한다. 

( https://deploy.apple.com/qforms/open/register/index/avs )

*VPP 개발 가이드

( https://developer.apple.com/library/ios/documentation/LanguagesUtilities/Conceptual/iTunesConnect_Guide/Appendices/B2B.html )


프로젝트를 하다보면 보안 이슈로 인해서 SSL을 사용하는 경우가 많다.

SSL은 해당 사이트를 인정받는 목적이 가장 크지만, 웹 패킷이 종단간에 암호화되는 것도 SSL 적용에 큰 이유가 되기도 한다.


외부망에서만 SSL 서버에 접근한다면 문제가 없겠지만, 내부망에서도 SSL을 사용해서 통신을 하는 경우가 있다.

내부망에서 사설 IP로 접근하게되면 아래와 같은 경고 문구가 표시된다.





SSL 인증서가 확인되지 않았지만, 브라우저에서는 이를 무시하고 해당 경로로 이동할 수 있다. 

하지만 매번 접근하기에는 매우 번거롭고 귀찮다.


이 상황에서 SSL 인증서를 정상적으로 인식되도록 하는 방법은 여러가지가 있다.

1. Loopback을 지원하는 스위치 (공유기)를 사용한다

2. 사설 대역에서의 DNS 서버 구축 후, SSL 인증서의 도메인 주소를 사설 IP로 지정한다.

3. Window 네트워크 어댑터에서 제공하는 Microsoft Loopback Adapter를 설정한다

4. Windows의 Hosts 파일에 도메인을 추가한다.


이중에 가장 간단한 것은 아무래도 4. Host 파일 설정이다.



현재 내가 가지고 있는 도메인은 http://www.chohyunsu.com 이다.

SSL 인증서 또한 www.chohyunsu.com 의 주소로 인증을 받았다.


동일한 사설망에서 위 도메인으로 접근하려면 현재 상황에서는 주소를 찾을 수 없다고 표시된다.




그렇다면 C:\Windows\System32\drivers\etc 경로에서 hosts 파일을 텍스트 에디터로 수정한다. (관리자 권한)

작성법은 간단하다.

왼쪽에 사설 IP를 입력하고, 스페이스나 탭으로 공간을 띄운 다음, 도메인 주소를 입력한다.

(파일 수정 전, 원본 파일은 항상 백업하는 습관을 가지자)



수정이 완료되었으면 수정 사항을 저장하고 닫는다.

그리고 CMD 창에 아래와 같은 명령어를 입력한다.


ipconfig /flushdns



이렇게 해서 아래와 같이 사설 대역에서도 SSL 인증서 오류 없이, 깔끔하게 웹페이지에 접속할 수 있다.






* Loopback이라는 기술은 자기 자신의 공인 IP를 입력하면 공유기에서 패킷을 자기 자신으로 인식하는 기술이다.

* Hosts파일을 수정함에 있어서 포트까지 지정할 수는 없다. 만약 지정하려면 스위치에서 PortForwarding하는 방법이 있다.

+ Recent posts