Facebook Server Side Architecture Group #SSAG

https://www.facebook.com/groups/serverside/

subversion-background

원래는 Part3에서  SVN 과 Git에 대한 설명을 하려고 했습니다.
그런데 SVN 관련 부분이 생각보다 많아서
Part를 나누기로 했습니다.그래서 Part3은 SVNPart4는 Git으로
진행할 예정 입니다.

지금까지

을 설명 드렸습니다.

※ Part1, Part2를 보시지 않으신 분들은 꼭 보셨으면 합니다.  그렇지 않으면
Part3의 내용이 이해가 어려울 수 있습니다.

기존에 Eclipse 또는 유사한 IDE를 사용 하셨다면 Part2까지만 보셔도
스스로 충분히 학습이 가능 할 것이라고 생각 합니다.

제 경험상 VCS (Version Control System) 중에서
가장 많이 사용 하고 있는 것이 SVN, Git이 아닐까 합니다.

얼마전 제 페이스북 그룹인 SSAG 에서도 SVN vs Git에 대한 토론을 했었습니다.
그 당시 서로 공감했던 부분은 SI 또는 TFT 성향이 강한 프로젝트 경우
learning curve 등을 고려해서 SVN이 낫고, 스타트업 또는
스마트 worker가 가능한 곳은 Git이 낫지 않을까 였습니다.

누가 낫건 IntelliJ는 둘다 지원을 합니다.

※ IntelliJ가 focus이기 때문에 SVN, Git에 대한 자세한 설명을 생략 하고자 합니다.
최근에 한글로 된 좋은 자료들을 참고 하시기 바랍니다.

[– Pre – Requirements ——]

IntelliJ에서 SVN를 사용할 때 유용한 플러그인들이 있습니다.

  • SVN bar : commitaddupdatediff 등의 기능을 편하게 제공하는 툴바

Settings – plugins 에서 플러그인을 설치 합니다.
※ 플러그인 설치 방법은 Part1을 참고 하시기 바랍니다.

z이미지 60


[– Part3, Part4 에서 구현할 디렉토리 구조 ——]
module1module2는 SVNmodule3modue4는 Git 를 사용할 예정입니다.

dir

[– SVN Repositories ——]
SVN Repositories” 은 직관적인 GUI를 통해서 원격에 있는 SVN 레파지토리
를 추가, 삭제, 조회 할 수 있도록 제공해주는 플러그인 입니다.

※ IntelliJ에서는 기본적으로 제공을 하기 때문에 별도의 플러그인 설치는 없습니다.

VCS – Browse…. – Browse Subversion…를 선택 합니다.

이미지 8--

계정을 입력 합니다.
※ SVN 정책에 따라서 계정을 묻지 않을 수 있습니다.

이미지 12--

SVN Repositories 콘솔이 오픈 됩니다.

이미지 9--

+ 버튼을 선택 후 SVN 주소를 입력 합니다.

이미지 11--

원격 폴더를 생성해 보겠습니다. New – Remote Folder..를 선택 합니다.

이미지 14--
폴더명을 입력 합니다.

이미지 15--

정상적으로 생성이 되었는지 확인 하기 위해서 순환 아이콘를 선택해서 서버로 부터
동기화를 합니다.  폴더가 생성 되었는지 확인 합니다.

이미지 16--

방금 생성한 test 폴더를 삭제 해보겠습니다.
폴더 선택 – 오른쪽 클릭 – Delete..를 선택 합니다.

이미지 18--

이미지 20--

SVN Repositories에 추가 했던 Location 정보를 삭제 하려면
Repositories 선택 – 오른쪽 클릭 – Discard Location
선택 하시면 됩니다.

※ 화면에서만 단지 삭제가 된 것이지, 원격에 있는
SVN 레파지토리 삭제가 된 것은 아닙니다.

이미지 22--

이미지 9--


[– SVN Import ——]


Import기능은 작성한 소스를 최초 원격 저장소에 소스를 등록 하는 것을 말합니다.
또 다른 말로는 “first commit” 이라고도 합니다.

IntelliJ에서는 기본적으로  VCS 적용 범위가 Project 단위 입니다.
예를 들어서 project에서 SVN를 사용하면 포함된
모든 module들은 svn을 사용 하도록 됩니다.

하지만 IntelliJ에서는 project 단위가 아니라 각 module 단위로
사용하는 VCS 타입을 설정 할 수 있습니다.

Project 단위 관리 vs Module 단위 관리는 어디까지는 각자의 몫 같습니다.

저 같은 경우는 Module 단위 관리를 권고해 드립니다.

또한  Eclipse 와 IntelliJ를 같이 사용 하는 팀이라면
Eclipse로 Import 하고 IntelliJ에서는 Checkout만 하는 운영“을 권고 드립니다.
※ 이유는 IntelliJ가 Eclipse로 생성된 프로젝트들에 대해서 호환이 훨씬 좋기 때문 입니다.

자바 모듈 module1module2를 생성 합니다.
※  project type은 empty 입니다.

z이미지 1

각 모듈이 svn을 사용하도록 개별 설정을 합니다.
※ import 할때만 설정하고, checkout 할때는 설정 할 필요가 없습니다.

Settings – Version Control – 선택

z이미지 2

module1의 디렉토리를 설정 합니다.

z이미지 3

동일한 방법으로 module2도 설정을 합니다.

z이미지 4

설정이 완료되면 module1module2의 폰트 색깔이 빨강색으로 변경 됩니다.
빨강색의 의미는 VCS를 SVN으로 사용할 예정인 것이지 실제 원격 레파지토리에
저장된 뜻은 아닙니다.

z이미지 5

module1을 원격 저장소에 import 하기 위해서
module1 오른쪽 클릭 – Subversion – Share Directory..를 선택 합니다.

z이미지 7

원격 저장소 URL를 설정 합니다. Define share...는 개인이 원하는 type으로 설정을 합니다.

z이미지 8

z이미지 9

완료가 되면 module1의 폰트 색깔은 green로 변경이 됩니다. 그리고 module1 디렉토리에
.svn 디렉토리가  생성 됩니다.

폰트 색깔의 의미는 아래와 같습니다.

  • green  : new file
  • blue  : updated file
  • white : commited file
  • gray : delete file

z이미지 10

이제 commit을 하겠습니다.  둘중 하나의 아이콘을 선택 합니다.

--이미지 20

커밋할 파일 과 메세지를 입력 후 Commit 버튼을 선택 합니다.

z이미지 11

커밋이 완료 되면 module1의 폰트 색깔은 white 변경 됩니다.
정상적으로 완료가 되었는지 SVN Repositories를 통해서 확인 합니다.

z이미지 12

module2도 동일한 방법으로 커밋 합니다.

z이미지 13

[– SVN Checkout ——]

SVN Checkout에 대해서 설명 하겠습니다.
테스트를 위해서 module1, module2를 삭제 하겠습니다.
module1, module2를 선택 하고 DEL 키를 누릅니다.

z이미지 14

intelliJ에서 module 삭제는 메타 삭제 입니다. 완전하게 삭제를 하려면 물리 디렉토리
삭제를 해야 합니다.

z이미지 15
SVN Repositories에서 Checkout 받을 디렉토리르 선택 하고 Checkout.. 메뉴를 선택 합니다.

z이미지 17

project 디렉토리를 설정 합니다.

z이미지 18

두 번째를 선택 합니다.

z이미지 19

No를 선택 합니다. 이유는 이미 project가 존재 하기 때문입니다.
※ 되도록 checkout 후 수동으로 import 하시길 권고 드립니다.

z이미지 20

checkout 받은 소스를 IntelliJ에서 인식을 시키기 위해서 Import Module..
를 실행 합니다.

File – Import Module..를 선택 합니다.

z이미지 23

 module1.iml 파일을 선택 합니다.

z이미지 24

정상적으로 동작을 확인 하기 위해서 파일을 수정 합니다.

z이미지 25

z이미지 27

commit이 완료되면 폰트 색깔은 white로 변경 됩니다.

z이미지 28

module2도 동일한 방식으로 checkout 받습니다.

z이미지 29

[– SVN 기능들 (add, commit, update, diff, history, revert ——]

지금까지는 원격 레파지토리 생성SVN Import , SVN Checkout  기능에 대해서
설명 했습니다.

이번에는 SVN의 기본 동작에 대해서 말씀 드리겠습니다.

(1) add

add 기능은 신규 파일을 생성 후, 추후 커밋 대상이 되는 파일을 설정 하는 기능입니다.
IntelliJ에서는 파일 생성 과 동시에 add가 실행 됩니다.
즉, 파일만 추가 하시면 됩니다.

z이미지 30

(2) update

update 기능은 원격 저장소에 있는 파일 과 로컬에 있는 파일이 동기화 되는 기능 입니다.

z이미지 31

(3) commit

commit은 현재 작성한 파일을 원격 저장소에 저장 하는 기능 입니다.

z이미지 32

(4) diff

svn은 리비전으로 관리가 됩니다. 로컬 파일 과 특정 리비전 파일을
비교해주는 기능 입니다.

z이미지 33

z이미지 35

(5) history

history 현재 까지 저장된 리비전들의 지난 기록들을 확인 하는 기능 입니다.

z이미지 36

z이미지 37

(6) revert

현재 로컬에 작업한 파일들을 취소하는 기능을 합니다.

z이미지 38

svn 기능에 대해서는  이 정도만 설명 드리도록 하겠습니다. 나머지 기능들은
개인적으로 충분히 하실 것이라 판단 됩니다.

[– Eclipse Project Checkout ——]

Eclipse에서 import한 프로젝트를 IntelliJ에서 Checkout 하는 방법에 대해서 설명 하겠습니다.

이클립스에 있는 project를 SVN에 import 합니다.

z이미지 44

z이미지 45

IntelliJ에서 Checkout를 받습니다.

z이미지 46

체크아웃 받을 project 폴더를 지정 합니다.

z이미지 47

z이미지 48

No를 선택 합니다.

z이미지 49

Import Module를 실행 합니다.

z이미지 51
checkout 받은 module 디렉토리를 선택 합니다.
※Eclipse에서 생성된 프로젝트는 “.iml” 파일이 존재 하지 않습니다.

z이미지 52

Import module… 체크, Eclipse 선택

z이미지 53

z이미지 54

z이미지 55

Eclipse JDK 설정 과 IntelliJ JDK 설정이 일치 하지 않아서 생기는 에러 입니다.
OK를 선택 합니다.

z이미지 56

Settings – Modules – Dependencies 에서 설치된 JDK를 설정 합니다.

z이미지 57

정상적으로 설치가 되었는지 확인 합니다.

z이미지 58

z이미지 59


Conclusion

Part3에서는 IntelliJ에서 SVN 사용법에 대해서 알아 봤습니다.
이번 Part3에서는 중요한 점은  SVN Import 팁 과 Eclipse에서 Import한
프로젝트를 IntelliJ에서 Checkout 하는 기능 입니다.

Part4에서는 IntelliJ에서 Git을 사용 하는 방법에 대해서
설명 하도록 하겠습니다.