Facebook Server Side Architecture Group #SSAG
이전 시간 (인텔리J 시작하기 Part1 (Getting Start IntelliJ) -기본 설정편-) 에는
IntelliJ로 프로젝트를 생성 전에 기본적인 Setup 과정을 설명 했습니다.
이번 Part2에서는 앞서 말씀 드렸듯이 “IntelliJ에서 Java 프로젝트를 생성” 하는 방법에 대해서
설명 하고자 합니다.
설명에 앞서 개인적으로 자바를 시작하려는 분들을 만나보면 대부분 아래와 같은 경우 입니다.
이런 분들의 공통된 의견은
Java 자체는 어렵지 않은데 그외에 것들 (이클립스, 프레임웍, Ant, Maven…)이 더 어렵다.
정잘 전적으로 공감 합니다. 자바 개발자인 저조차 그러한 삽질을 통해서
느꼈던 봐이기 때문 입니다. 때론 많이 버거울 정도 입니다.
개인적으로 제가 Java를 바라보는 관점은 “언어라기 보다 아키텍쳐 이자 ecosystem“이라고
생각을 하고 있습니다.
그러다 보니 이제는 자바를 하지 않았던 분들도 조금씩 자바를 하려는 분위기 인 것 같습니다.
그래서 최대한 쉽게 설명을 드리려고 합니다.
[– Part1 놓쳤던 것들 ——]
Part1에서 “Back & Recovery” 에서 “.IntelliJIdea12“를 통해서 백업/복구를 한다고 했습니다.
대부분 팀에서는 한명이 먼저 설정을 하고
그 결과를 공유해서 일괄 적용하는 식으로 진행을 할 것입니다.
이때 배포 하실때 “C:/Users/{OS계정}/.IntelliJIdea12/conf/idea12.key” 파일은
삭제하고 배포를 하시기 바랍니다.
이유는 개인 라이센스 key가 있기 때문 입니다.
만약 idea12.key 파일을 삭제하고 배포하면 팀원들은 개인의 key를 입력 해야만 합니다.
배포시 반드시 유념 하시기 바랍니다.
[– Directory Structure ——]
제가 처음 IntelliJ를 사용할때 제일 이해가 힘들어 했던 부분은 바로 Directory 구조 였습니다.
(오히려 오랫동안 Eclipse를 사용 해왔던 저에게는 적응이 힘들더군요..)
대부분의 IDE의 디렉토리 구조는 아래와 같이 구성이 되어 있을 겁니다.
그림 1. (Eclipse Directory Structure)
System Directory : IDE 구동 및 관리를 위한 디렉토리 (bin, config, plugin..) 입니다.
WorkSpaces : 각 프로젝트들을 묶어주는 디렉토리이며,
한개 이상의 WorkDirectory를 생성 합니다.
Project : 독립된 프로젝트를 의미 합니다. (web 프로젝트, java 프로젝트)
각각의 디렉토리 카디널리티를 보면 아래와 같습니다.
IDE : WorkDirectory => 1: N
WorkDirectory : Project ==> 1: N
왜 디렉토리 구조가 그런지는 아마도 관리때문 아닐까 합니다.
대부분 Workspaces의 단위는 수행했던 실무 프로젝트 단위로 생성을 할 것이고
Project는 업무 단위로 구성을 할 것입니다.
그래서 Workspaces는 프로젝트 당시 JDK 버전, 코드 컨벤션 등이
포함되어 있습니다.
IntelliJ도 Naming만 차이가 있을뿐 실제로 구조는 Eclipse 와
동일한 형태로 구성 되어 있습니다.
(단지 용어가 혼동 될 뿐입니다. ^^)
아래는 Eclipse to IntelliJ 디렉토리 맵핑 입니다.
그림 2. (Eclipse Directory Structure)
IntelliJ에서 신규 프로젝트를 생성 하면 “.idea” 라는 디렉토리가
생성이 됩니다.
만약 현재 디렉토리에 “.idea” 가 있다면 해당 디렉토리는
프로젝트의 홈 디렉토리가 됩니다.
[– Create Project ——]
“File” – “Close Project“를 선택하게 되면 “IntelliJ Dashboard”로 이동 합니다.
꼭 프로젝트를 생성 할때 반드시 “Dashboard“에서만 생성 하는 것은 아닙니다.
이전 화면에서 “File” – “New Project“를 선택 해서 생성 할 수 있습니다.
처음에 저도 “Dashboard” 때문에 많이 혼동이 있었습니다.. 하지만 자세히 보면 그냥 편리함을 제공
하는 기능입니다.
왼쪽 창에는 최신 생성된 프로젝트들이 있고, 선택을 하면 해당 프로젝트 화면이Open 됩니다.
오른쪽 창은 “Config“, “Import Project” 같이 자주 사용하는 것들을 배치 시켰습니다.
결론은 별거 아니라는 것…
IntelliJ에서 프로젝트는 위에서 설명 드렸듯이 이클립스의 Workspace 와 동일한
기능을 제공 하기 때문에 프로젝트 단위로 화면이 전환이 됩니다.
프로젝트는 적당히 생성하고, 대신
모듈을 많이 생성 해서 관리 하는 것이 더욱 실무에 유용하실 것입니다.
이제 프로젝트를 생성해 보겠습니다.
왼쪽 프레임을 보면 특성에 맞는 프로젝트 템플릿들이 존재 합니다.
여기서 “Empty Project“를 선택 합니다.
※ 왜 Empty Project를 선택 했는지는 잠시 후에 설명 하도록 하겠습니다.
오른쪽에 “Project name“은 위에서 말씀 드렸듯이 “Dashboard“에 표시 됩니다.
Project Location은 실제로 프로젝트가 생성되는 위치 입니다.
“OK” 버튼을 선택 합니다.
“Project Settings” – “Project” – “Project SDK” 에서 현재 PC에 설치된
JDK를 선택 합니다.
완료 하게 되면 아래의 화면 처럼 아무것도 존재 하지 않은 “말그대로 빈 화면“을 보게 됩니다.
윈도우 탐색기로 확인 하면 생성된 프로젝트 디렉토리에 “.idea” 라는 폴더가 생성 된 것을 확인 할 수 있습니다.
“File” – “New Module..“를 선택 합니다.
※Eclipse일 경우 Project를 생성 하는 것입니다.
왼쪽 프레임에서 “Java Module”를 선택 한다. 오른쪽 프레임에는 “Module Name” 과
모듈이 저장될 위치를 설정 합니다.
모듈 아이콘에 파랑색 사각형이표시 되면 Java 모듈로 정상적으로
인식이 되었다는 뜻입니다.
만약 그렇지 않을 경우는 다시 확인이 필요 합니다.
패키지를 생성 하고, 클래스를 생성 합니다.
일부러 클래스에 에러를 발생 시켜 보면 “빨강색” 언더라인이 표시됩니다. 그리고
“에디터” 창에는 해당 라인에 대해서 표시가 됩니다.
IntelliJ는 코드에 syntax 에러가 발생 하거나, 또는 code Inspection에 맞지 않을 경우
빨강색 폰트로 표시 됩니다. 즉, 코드에 빨강색 코드가 있다면 코드를 수정 해야 합니다.
그런데 자세히 보면 syntax 에러는 없습니다. 모두 code inspection에 위배
된 것들 입니다. IntelliJ는 짜증날정도로 친절하게 inspection 체크를
해줍니다.
만약 inspection을 나중에 하고 싶을 경우 code inspection 난이도를 수정 할 수 있습니다.
이제 클래스를 실행 시켜 보겠습니다.
“Run” – “Run“을 선택 합니다.
[– Empty Project ——]
위에서 언급 했듯이 프로젝트를 생성시 “Empty Project“로 선택을 했었습니다.
만약에 처음 생성시 “Java Project“로 생성 하게 되면 아래와 같은 실무적 관점에서
단점이 있습니다.
※ 이 부분은 어디까지 저의 개인적은 소견 입니다. 꼭 이렇게 구성 하지 않으셔도 됩니다.
반면, Empty Project로 생성시 아래와 같은 장점이 있습니다.
프로그래밍 된 모듈을 개발 하기 위해서 대부분은 언어는 3가지가 필요 합니다.
SDK, 본인이 작성한 코드 그리고 외부 라이브러리 입니다.
IntelliJ에서 자바 프로젝트를 생성 하면 SDK 와 본인이 작성한 코드는
완료가 됩니다. 하지만 외부 라이브러리는 본인이 직접 설정을 해야 합니다.
모듈 Root 디렉토리에 “lib“라는 디렉토리를 생성 합니다.
※ 다른 디렉토리를 생성해도 무관 합니다. 경험상 대부분 사이트에서
유사하게 구성을 합니다.
외부 라이브러리를 추가 하도록 하겠습니다.
String 처리를 편하게 해주는 “Apache commons-lang” 라이브러리를 추가해 보겠습니다.
메이븐 사이트로 이동 합니다.
검색 창에 “commons-lang“를 입력 후 결과 페이지로 이동 합니다.
라이브러리를 다운로드 합니다.
다운로드 받은 파일을 위에서 생성한 “lib” 디렉토리로 복사를 합니다.
“module“를 선택 후 “F12“를 선택해서 ” Project Stttings” – “Modules” – “Dependencies”
로 이동 합니다.
“+” 버튼 선택 – “Jar or ..“를 선택 합니다.
“lib” 디렉토리에 있는 “.jar” 파일을 선택 합니다.
라이브러리가 제대로 인식이 되었는지 코드를 테스트 합니다.
[– 모듈 패키징 (jar) ——]
자바로 작성된 프로그램을 “.jar” 파일 형태로 패키징 할 수 있습니다.
“jar” 파일은 “zip” 파일 같은 하나의 압축 형태 입니다.
이렇게 패키징 된 “.jar” 파일은 다른 자바 프로그램에서 외부 라이브러리로 참조 됩니다.
“Project Settings” – “Artifacts“를 선택 합니다.
“jar” – “From modules…“를 선택 합니다.
패키징 대상 모듈을 선택 합니다. 만약 Java Daemon 형태를 구동 할 경우
※ “public static void main”으로 선언된 클래스를 말합니다.
Main Class 입력 창에서 설정을 합니다. 없을 경우는 공란으로 설정하고
“OK” 버튼을 선택 합니다.
“Output directory“를 설정 합니다.
여기까지 하면 패키징 설정 부분이 끝난 상태 입니다. 이제 실제 패키징 작업을 해보겠습니다.
“Build” – “Build Artifacts..“를 선택 합니다.
“build“를 선택 합니다.
위에 설정된 “Output Directory“에서 생성된 “.jar” 파일을 확인 할 수 있습니다.
압축을 해제 하면 참조 했던 라이브러리 (commons-lang)도 같이 패키징 된것을
알 수 있습니다. 이 얘기는 본인이 작성한 클래스 + 참조 했던 라이브러리까지
포함되서 패키징이 되었다는 뜻입니다.
이런 구조의 패키징 방식은 본인이 작성한 라이브러리 와 참조하는 외부 라이브러리가
많은 경우 전달 받은 측에서 혼돈이 오기 때문에 하나의 One Pack 형태로
제공할 때 사용 합니다. 실제로 실무에서도 많이 사용을 합니다.
[– Eclipe Project 와 하이브리드 하게 사용하기 ——]
IntelliJ가 Eclipse 보다 여러가지 좋은 점이 많습니다. 하지만 IntelliJ도 아쉬운 부분이 존재 합니다.
때론 어떤 기능은 Eclipse가 훨씬 편하고 유용한 경우도 있습니다.
또한 개인적으로 저 같은 경우는 팀원들을 위해서는 “Eclipse“로 개발환경을 구성하고,
개인적으로는 IntelliJ를 사용을 합니다. 그래서 양쪽다 사용을 하고 있습니다.
그런데 IntelliJ 와 Eclipse 두개다 별도의 프로젝트를 생성 하면 소스간의 sync가
이루어지지가 않습니다.
그래서 각자 IDE 인스턴스는 별로도 실행되고, 프로젝트 디렉토리는 동일하게
사용하는..
일명 “One Source, Multi Use” 방식으로 사용 하는 경우 입니다.
이클립스 프로젝트를 생성 합니다.
IntelliJ에서 “File” – “Import Module..“를 선택 합니다.
IntelliJ에서는 “Project” , “Module” 이라고 생각 되어지는
디렉토리들은 ‘ㅋI‘ 아이콘으로 표시 됩니다.
개인적으로 좀 아쉬운 부분은
둘다 아이콘 모양이 같다는 것입니다.
그런데 자세히 보면
같은 모양이더라도 “큰 아이콘“(Project) 과 “작은 아이콘“(Module)
모양으로 구별 됩니다. (사이즈가 크냐, 작냐)
이클립스에 생성한 프로젝트를 선택 합니다.
“Import….“를 선택 후 “Eclipse“를 선택 합니다.
계속 진행 합니다.
프로젝트가 정상적으로 import 되었는지 실행 합니다.
Conclusion
Part2를 정리 하자면 IntelliJ의 디렉토리 구조를 이해하는 것은 상당히 중요 합니다.
이유는 그래야만 IntelliJ를 자기 환경에 맞게 응용을 할 수 있기 때문 입니다.
특히 empty project는 다양한 type의 프로젝트들을 관리하는데 있어서 중요한 tip 입니다.
IntelliJ에서 자바 프로젝트 생성, 실행, 외부 라이브러리 참조, 패키징 등 기본적인
개발 라이프 사이클에 대해서도 알아 보았습니다.
좀더 많은 부분을 설명 드리고 싶지만 다른 type은 프로젝트 (Maven, Adroid, Web) 동일한
절차를 통해서 프로젝트를 생성 합니다.
Part3에서는 “IntelliJ에서 SVN 과 Git” 연동 하는 방법에 대해서
말씀 드리겠습니다. ^^