multi-thread step

- thread pool executor
- simpleAsyncexecutor - thread pool관리의 어려움

step 실행 시 chunk 단위로 각 개별 thread에서 실행

parallel step
- step간의 병렬 처리
- 싱글 프로세스


remote-chunk
- 스텝을 다수의 프로세스로 실행
- master / slave로 나누어서 slave에서 처리

partitioning
- step을 파티션 단위로 분할

프로세스 vs 쓰레드
프로세스 : 운영체제로 부터 자원을 할당 받는 작업의 단위
              주소공간, 메모리 등 자원 할당
쓰레드 : 프로세스가 할당받은 자원을 이용하는 실행의 단위
            프로세스 내의 주소 공간 자원들을 같은 프로세스 내에 공유


https://brunch.co.kr/@kd4/3
스레드의 장점을 정리하면 다음과 같다. 
- 시스템의 throughput이 향상된다. 
- 시스템의 자원 소모가 줄어든다 
- 프로그램의 응답 시간이 단축된다. 
- 프로세스 간 통신 방법에 비해 스레드 간의 통신 방법이 훨씬 간단하다.

출처: http://ralf79.tistory.com/34 [진형아빠이야기]

 


 기본적으로 하나의 프로세스가 생성되면 하나의 스레드가 같이 생성된다.이를 메인 스레드라고 부르며, 스레드를 추가로 생성하지 않는 한모든 프로그램 코드는 메인 스레드에서 실행된다.또한 프로세스는 여러개의 스레드를 가질 수 있으며 이를 멀티 스레드라고 한다.
http://ralf79.tistory.com/34


 스레드는 장점만 갖고 있는 것이 아니라 다음과 같은 단점도 지니고 있다. 
- 여러 개의 스레드를 이용하는 프로그램을 작성하는 경우에는 주의 깊게 설계해야 한다.     미묘한 시간 차나 잘못된 변수를 공유함으로써 오류가 발생할수 있다.  
- 프로그램 디버깅이 어렵다. 
- 단일 프로세서 시스템에서는 효과를 기대하기 어렵다.

출처: http://ralf79.tistory.com/34 [진형아빠이야기]

-jackson 기반
(프로퍼티)
@JsonProperty 

 

(null관련)
@JsonInclude 

 

 

* 필드 : JsonSerialize.Inclusion
(default)NON_DEFAULT  NON_NULL ALWAYS NON_EMPTY
int 0            X                   O              O          O   
""                X                   X              O          X
null             X                   X              O          X


serialize/deserialize 제외 필드
@JsonIgnoreProperties({"d1", "d2"})

 

*참조 : 다른 필드 추가 시 에러

 

-gson 기반
(프로퍼티)
@SerializedName 

 

(null관련)
@Expose 
int 0  O
""     O
null   X

 

* 다른 필드 추가되도 관계없음/파싱안함.

 

* 성능 jackson > gson

 

nexus를 이용한 library deploy 하는 방법에 대한 간략하게 설명한다.
설명에 앞서 간략한 소개이다.

  • nexus란?
    Nexus는 maven에서 사용할 수 있는 가장 널리 사용되는 무료 repository 중의 하나이다

  • nexus를 사용하게된 계기
    프로젝트는 여러 컴포넌트로 구성되는데, 공통으로 사용하는 라이브러리 등이 존재하기때문에 nexus를 이용해 repository에 올리는 작업을 진행한다.
    nexus를 이용하면 빠르게 라이브러리를 끌어올 수 도 있고, 반대로 개발팀내에서 사용하는 공통 라이브러리들을 nexus에 배포해서 팀간의 공유가 가능하기 때문에 편리하게 사용할 수 있다.

  • nexus 저장소의 구성
    group : nexus에 설정되어 있는 다른 저장소들을 하나로 묶은 저장소로 생각하면 되는데 그렇게 해야 메이븐의 저장소 설정을 간추릴 수 있다.
    proxy: 다른곳에 있는 기존의 메이븐 저장소를 등록하는 것. jboss와 spring 저장소를 proxy 형태로 등록해두면 이 Nexus에서 필요한 의존성을 jboss와 spring 저장소에서 받아올 수 있다.
    hosted: 다른 저장소에 없는 파일 또는 proxy를 통해 제공받을 수 없는 파일인 경우에 직접 메이븐 저장소에 올려줘야 하는데 그럴 때 사용하는 저장소 형태가 바로 hosted 이다.
    admin 계정으로 로그인을 하면 repository 정보들을 확인할 수 있다.

  • 기타 설정 관련 URL
    http://free4pm.tistory.com/11 등 참조.

  • pom.xml 파일 설정
    배포 대상 레파지토리 설정하기

<distributionManagement>
    <repository>
      <id>레파지토리 release 아이디</id>
      <url>레파지토리 주소</url>
    </repository>
    <snapshotRepository>
      <id>레파지토리 snapshot 아이디</id>
      <url>레파지토리 주소</url>
    </snapshotRepository>
  </distributionManagement>

빌드 시 레파지토리 정보

<repositories>
		<repository>
			<id>release 아이디</id>
			<url>nexus 경로(release)</url>
			<snapshots>
				<enabled>false</enabled>
			</snapshots>
		</repository>

		<repository>
			<id>snapshot id</id>
			<url>nexus 경로(snapshot)</url>
			<snapshots>
				<updatePolicy>always</updatePolicy>
			</snapshots>
		</repository>
	</repositories>
  • ** nexus에 deploy하는 방법**
    deploy 하는 방식은 프로젝트 우클릭 > run As > run configuration (eclipse 기준) deploy 하면 된다.

deploy 하고, URL로 접속하면 실시간으로 반영된 정보를 확인할 수 있다.

 

리눅스 서버 메모리 확인 및 java option 설정

  • jenkins를 다운받아, 빌드서버로 사용하는 과정에서 java option 설정을 하지 않아 permGen 영역의 OOM이 발생한 계기로 글을 작성한다.
  1.              cat /proc/meminfo를 실행하면, 현재 메모리 용량을 확인할 수 있다. 상세는 http://egloos.zum.com/pacemaker/v/3949343참조
  2. /home1/irteam/apps/tomcat/bin/catalina.sh 또는 catalina.bat 파일에서 java option 설정이 가능하다.
    메모리 사이즈 등을 고려하여, 옵션을 설정한다. JAVA_OPTS="-server -Xms2048m -Xmx2048m -XX:PermSize=512m -XX:MaxPermSize=512m"
  3. ps -ef | grep 'java'를 통해 java 메모리 영역이 잘 설정되어있는지 확인한다. 

 

git ssh 설정하기

  • github ssh 등록하기. 최초 repository 생성 시 ssh key 등록이 되어있지 않게된다. jenkins 등 연동을 위해 ssh key 등록이 필요한데 그 과정에 대해 설명한다.
  1. ssh-keygen 을 git bash에 입력하면 ssh key가 생성된다.

 

2.    다음과 같은 경로에 ssh key파일이 생성되며 공개키와, 개인키가 생성된다.

 

3. 공개키를 github에 복사해서 아래 항목에 넣는다. 경로는 프로젝트 > settings > deploy keys 

4. 개인키를 연동하고자 하는 곳에 붙여넣는다.

통신이 정상적으로 완료되면, deploy keys에 파란불이 들어오는 것을 확인할 수 있다.

 

 

* 참조 https://mylko72.gitbooks.io/git/content/remote/repository.html

 

'개발노트 > git' 카테고리의 다른 글

git 저장소 올리기  (0) 2018.05.31
git to git migration  (0) 2017.08.07

git to git migration

  • 기존 git repository에서 신규 git repository로 마이그레이션 할 이슈가 생겨 이 글을 작성한다. github의 "import code" 기능을 통해서도 가능하지만, gitbash를 활용해 직접 마이그레이션을 해보자.  


1. 작업할 임시 디렉토리 만들기 및 경로 이동


2. git clone --mirror 구 repository 주소


3. cd test3.git 접속 및 신규 repository url 설정
git remote set-url --push origin 신규 repository 주소

 

4. 신규 repository에 push 하기

git push --mirror

 

5. 정상적으로 복사되었는지 확인

git remote -v


 

*git 명령어 관련

git clone --mirror: to clone every references (commit, tags, branches)

git push --mirror: to push everything

 

--mirror

소스 repository 의 mirror 를 설정한다. 이 옵션은 --bare 옵션을 포함한다. --bare 옵션과 비교해서 --mirror 는 원본의 지역 브랜치와 타겟의 지역 브랜치에 매핑할 뿐 아니라, 모든 refs (원격 브랜치, notes 를 포함하여)를 매핑한다. 그리고, 모든 refs 는 목적(target) repository 에서 git remote update 를 실행함으로써 refspec 구성(configuration) 을 설정한다.

 

*참고

http://pinocc.tistory.com/138

http://goodtogreate.tistory.com/entry/저장소-통채로-복사하기-bitbucket-to-github



 

'개발노트 > git' 카테고리의 다른 글

git 저장소 올리기  (0) 2018.05.31
git ssh 설정하기  (0) 2017.08.07

+ Recent posts