아무런 생각없이...

엔티티 객체를 모델매퍼ModelMapper(http://modelmapper.org/user-manual/property-mapping/) 를 이용해서 매핑처리를 했는데...

디버깅을 하다보니 계층구조가 복잡한 엔티티 객체를 매핑할 때면 속도가 느려지는 현상(아마도 엔티티 객체의 지연로딩LazyLoading)이 나타나는 것을 발견했다. 귀찮기는 하지만... 복잡한 객체에 대해서는 모델매퍼를 이용해서 매핑하는 것은 자제해야할 듯 하다.

그래도... 필드가 많은 객체는 매퍼를 사용하는게 속도저하 현상이 있더라도 피할수 없는 유혹이긴 하다....!!

아니면, 매핑에 사용하는 목적지 클래스를 간단한 형태로 정의하고 사용하는 방법도 있겠지.

20140527 Jenkins 재시작 후 데이터 초기화 증상 해결

사내에서 사용하던 Jenkins가 구동되고 있는 서버가 정전으로 재가동 후 최초 설치상태로 초기화되는 현상이 나타났다.

멘붕!!!

Jenkins의 이런 증상을 처음 경험한 나로서는 어찌해야하는 물어볼 사람도 없고 인터넷 검색으로 뒤지기 시작한다.
그러다가 [Jenkins 관리 - 환경설정] 부분 상단에 HOME Directory 라는 항목의 값이 눈에 들어온다.

/{USER_HOME}/.hudson

이녀석! 이상하다! 내가 쓰고 있는 건 jenkins 인데!?

라는 생각과 함께 JENKINS_HOME 과 관련된 검색에 들어간다. +_+) 그러다가 아래 녀석을 찾았다.

여기서 말하는 JENKINS_HOME은 젠킨스가 실행되는 경로가 아닌, 젠킨스가 사용자 디렉토리에 생성한 ~/.jenkins 폴더를 가리키는 것이었다.
이후 이를 해결하는 방법은 어려움이 없었다. 환경설정에서 ‘홈 디렉토리Home Directory’ 항목의 오른쪽 물음표(?)를 클릭하면 JENKINS_HOME을 WAS에 설정하라는 안내를 한다.

Jenkins stores all the data files inside this directory in the file system. You can change this by either:
    1. Using your web container's admin tool to set the **JENKINS_HOME** environment entry.
    2. Setting the environment variable **JENKINS_HOME** before launching your web container.
    3. (Not recommended) modifying web.xml in jenkins.war (or its expanded image in your web container).
This value cannot be changed while Jenkins is running. This entry is mostly for you to make sure that your configuration is taking effect.

이후 문제는 쉽게해결 가능하다. 톰캣 서버의 ‘./bin’ 폴더에서 catalina.sh를 열어서

set JENKINS_HOME=/{USER_HOME}/.jenkins

항목만 추가해주고 톰캣을 구동시켜주면 끝이났다. +_+)b That's OK~!

이 문제를 해결하면서 젠킨스의 버전도 스리슬쩍 1.564 버전으로 변경했다.

데이터가 분리되어 있으니 젠킨스를 업그레이드 해도 별문제가 없을 거라고 생각했다.

찍었는데 맞았다!


 

 작업전 확인사항 

 

  • 사용자 폴더 밑에 '~/.jenkins' 라는 폴더가 있는지 확인
    • 젠킨스 설정 데이터가 저장되는 폴더다
  • 젠킨스를 구동하는 WAS의 실행환경변수로 'JENKINS_HOME'이 추가되어 있는지 확인



[File - New - Spring Starter Project]를 선택하면 다음의 창이 뜬다. 

다음[Next]을 누르면 spring starter를 다운로드 받는다. Spring Boot를 이용해서 starter 프로젝트를 다운로드 받고 프로젝트를 구성한다.

 


이 spring-starter의 핵심은 @EnableAutoConfiguration 이다.

이 Spring starter 의 핵심은 @EnableAutoConfiguration 이지 싶다. 프로젝트에 사용되는 @Annotation의 타입을 스캔해서 관련된 라이브러리를 자동으로 추가하여 구동시키는 것으로 보여진다. 오늘 잠깐 살펴보며 짐작한 것은 그렇다.

[Run as - Spring Boot App]을 선택하면 자동으로 실행된다.


spring.io에서 Spring을 이해할 수 있도록 잘 작성된 가이드를 제공한다.

STS 자체에서도 spring.io/guide에서 제공하는 콘텐츠들을 바로 다운로드 받아서 열어볼 수 있는 기능을 제공한다.


1. 사용방법은 [File - New - Import Spring Getting Started Content]를 선택한다.

2. 자신이 받고 싶은 튜토리얼을 선택한다. 이때, 비동기식으로 선택받은 프로젝트를 다운로드 받는 과정을 진행하기 때문에, 하단에 있는 [Finish] 버튼이 바로 활성화되지는 않으니 잠시 기다린다. 'Maven'이나 'Gradle' 중 하나를 선택하면 되는데, 몇몇 프로젝트들은 build.gradle 파일이 존재하지 않는다는 메시지와 함께 [Finish] 버튼이 비활성화된다.


3. 선택한 튜토리얼 다운로드가 끝나고 나면 프로젝트가 임포트import 되고 내부 브라우저창으로 해당 튜토리얼관련 페이지가 뜬다.


이렇게 간단하게 스프링과 관련된 튜토리얼을 다운로드 받고 살펴볼 수 있다. 최근에 작성된 프로젝트의 경우에는 Spring boot를 이용해서 바로 실행가능한 형태를 취하고 있다.

어느 스터디에서 개발환경 구축과 관련된 이런저런 이야기가 오고가는 것을 보다가, 문득 생각이 나서 다시 찾은 'OPENSFHIT'

https://www.openshift.com/

보는 것처럼, 개발, 호스팅, 스케일 확장의 기능을 제공하는 플랫폼이다. 익숙한, Java, Maven, Git, Tomcat, Jenkins를 제공하여 기어(Gear, 가상머신 인스턴스의 개념)로 제공한다. 협업자들을 추가하여 사용가능하다.


Free plan으로 사용

최초 'My app' 선택시

사용가능한 Gear(인스턴스 개념)

Tomcat7 기어 선택 예

Tomcat 기어 설치 후, 자바를 기반으로 한 웹애플리케이션 프로젝트가 추가된 git 저장소도 함께 추가됨

git에 대한 접근은 'Settings - Public Keys' 항목에 개인 public key를 생성하면 됨

- SSH public key 생성방법: https://help.github.com/articles/generating-ssh-keys

Tomcat7 기어 생성 완료후



Tomcat7 기어를 통해 생성한 프로젝트의 초기 디렉토리 구조

Tomcat7 기어가 실행된 URL을 통한 동작확인

- 기본 동작은 git을 통해 push가 실행되는 순간 빌드 및 배포가 이루어진다.

Tomcat7 기어 밑에 'Continous Integration' 에 있는 'Enable Jenkins'를 선택하면 Tomcat7 기어에 대한 빌드잡(Job)을 가진 Jenkins 기어가 생성된다.

젠킨스 기어의 공개 URL을 정의한다.

젠킨스 기어가 생성되고 최초 계정 admin과 비밀번호가 노출된다.

젠킨스 기어에 추가된 'tomcat7ews-build' 작업





MySQL 5.5 카트리지를 tomcat7 기어에 추가하는 모습

추가 완료 후, MySQL 5.5 생성정보가 노출

생성된 URL과 계정을 통해 로그인한 phpMyAdmin

기어 사용이 완료된 tomcat7의 내부 모습

이 과정에서 나는 2개의 기어를 생성했다.

- Tomcat7

- Jenkins

아직 1개의 기어가 남아있다.

Free plan으로는 3개의 기어가 사용가능하다.

협업도 가능한데, [Application]을 선택한 화면에서 'Available in domain XXXXX' 를 선택하고

오른쪽에 있는 'No one else can see this domain. Add members...'에서  'Add members`를 선택하고

OpenShift에 가입해있는 사용자 id와 권한 [View, Edit, Administrator] 권한 중 하나를 할당하면 된다.

굿럭!

+ Recent posts