[Java] 개발환경 구축

Jay Mild Lee·2022년 11월 7일
0

Java

목록 보기
1/10
post-thumbnail

I. Atom, Windows PowerShell

1. IDE(Integrated Development Environment)란?

공통된 개발자 툴을 하나의 GUI로 결합하는 애플리케이션을 구축하기 위한 소프트웨어로, 대표적인 기능들은 다음과 같다.

1) 소스 코드 편집기

시각적 신호를 활용한 구문(Syntax) 강조와 같은 기능을 포함하여 소프트웨어 코드를 작성하도록 돕는 텍스트 편집기로서, 언어별 자동 완성 기능과 코드 작성 중 버그 검사를 제공한다.

2) 로컬 빌드 자동화

컴퓨터 소스 코드를 바이너리 코드로 컴파일링하고, 바이너리 코드를 패키징하고 자동화 테스트를 실행하는 등 간편하고 반복 가능한 태스크를 개발자가 사용하는 소프트웨어의 로컬 빌드를 생성할 때 자동화한다.

3) 디버거

원본 코드에 있는 버그 위치를 그래픽으로 표시할 수 있는 다른 프로그램을 테스트하는 프로그램

2. IDE의 장점

  1. 여러 유틸리티를 수동으로 하나씩 설정할 필요가 없다.
  2. 협력할 경우, 팀의 표준 툴 및 워크플로우를 익힐 수 있다.
  3. 안그래도 바쁜 인생에서 디렉토리 하나씩 만들고 있는 건 뻘짓이다.

2. Java 개발에 대표적인 IDE

1) Eclipse

2001년 개발이 시작된 전통적인 IDE. Java를 기반으로 하며 운영체제의 제한 없이 다양한 환경에서 이용 및 수정, 배포가 가능하다. 다양한 플러그인을 지원하기 때문에, 커스터마이징에 따라 강력한 기능을 발휘한다. 그리고 공짜다. 하지만 대부분의 오픈소스소프트웨어가 그렇듯, 버그 픽스나 자잘한 부분들에 대한 업데이트가 느린 편이다.

2) intelliJ IDEA

JetBrains 사에서 개발한 IDE. 전반적으로 Eclipse보다 뛰어나다고 평가되며, 특히 GUI Git이 자체 내장되어 있어, 별도의 클라이언트를 사용하지 않더라도 버전관리를 간편하게 할 수 있다.

2. 근데 왜 Atom이랑 Powershell?

앞서 서술한 IDE의 장점은 결국 "프로젝트를 구성하고 실행하기 편하다"는 데 있다. 버튼 몇 번 클릭하면 프로젝트가 생성되는 IDE의 특성 상, 프로젝트를 구성하고 소스들을 배치하는 단계는 생략되게 된다. 이러한 틀을 잡아나가는 과정이나 프로젝트의 구성을 이해하는 과정이 없으면, IDE 없이는 아무것도 할 수 없게 된다고 생각한다. 물론 IDE를 쓰는 날이 안쓰는 날보단 더 많겠지만.....

이런 생각을 하게된 계기가 있는데 크게 두 가지다.
첫째, Toy Project를 진행할 때다. 저번 주 Toy Project를 진행하면서 Python Flask의 Blueprint를 사용했었는데, 프로젝트의 틀을 잡아나가는 과정에서 이런 생각이 들었던 것 같다. 모듈이든 뭐든 직접 디렉토리 만들고, 쉘로 돌려보고 시행착오도 겪어봐야 프로젝트를 완전히 이해하고 능숙하게 다룰 수 있겠다는 생각이 들었다.
둘째, 부대에서 네트워크 장비를 다뤘을 때다. 되게 뜬금없는 이야기지만, 복무 당시 사단 내 네트워크 장비를 운용하는 임무를 맡았었고, 이 때문에 L3 스위치나 서버에 SSH로 접속해야할 일이 많았다. 함께 복무했던 용사들을 보면 네트워크의 구성이나 간단한 쉘 프로그램을 이해할 때, CLI에 익숙한 친구들과 익숙하지 않은 친구들의 차이가 컸다. 언젠가 분명 배포 전 서버에서 간단하게 코드를 수정하고 돌려야할 일도 있을텐데, class 파일 하나 컴파일 못해서 못돌리면 슬프지 않을까.

Atom은 완전히 사장되기 전까진 쓰기 편한 Vim 처럼 사용하려 한다. Vim은 스크롤이 너무 불편하다 ㄹㅇ.

II. 프로젝트 구성

[16:38:15]   ~\..\..\java lecture on❯ tree /f
폴더 PATH의 목록입니다.
C:.
└─chap01
    ├─bin
    │  │  module-info.class
    │  │
    │  └─sec03
    │      └─exam01
    │              Hello.class
    │
    └─src
        │  module-info.java
        │
        └─sec03
            └─exam01
                    Hello.java

'혼자 공부하는 자바(신용권)'라는 책으로 공부를 진행하려한다. 해당 책은 Eclipse를 기준으로 강의가 진행되는데, 프로젝트 구성 능력이 어쩌고 했던게 모양 빠지긴 하지만 처음 돌려보는데 어쩔 수 없다. Eclipse의 프로젝트 구성을 동일하게 따라 만들었고, 그 과정은 다음과 같다.

1. Java 환경변수 설정

1) JDK : Zulu(Azul)

2) 시스템 변수 추가(변수 이름 : JAVA_HOME)

C:\Program Files\Zulu\zulu-11

3) 시스템 변수 Path의 경로 추가

C:\Program Files\Zulu\zulu-11\bin

4) 설치된 버전 확인

[16:44:26]   ~\..\..\java lecture on❯ java -version
openjdk version "11.0.17" 2022-10-18 LTS
OpenJDK Runtime Environment Zulu11.60+19-CA (build 11.0.17+8-LTS)
OpenJDK 64-Bit Server VM Zulu11.60+19-CA (build 11.0.17+8-LTS, mixed mode)

4-1) Trouble Shooting : 설치한 JDK와 다른 친구가 나옴

높은 확률로 이전에 JDK를 설치했고, 새로 설치한 버전이 Path에서 후순위로 밀려있을 것이다. 간단하게 Path에서 이전에 설치된 JDK의 경로를 삭제하던가, 새로 설치한 JDK의 경로를 맨 위로 올려주면 된다.

5) java, javac 확인

[16:50:46]   ~\..\..\java lecture on❯ java
사용법: java [옵션] <기본 클래스> [args...]
           (클래스 실행)
   또는  java [옵션] -jar <jar 파일> [args...]
           (jar 파일 실행)
   또는  java [옵션] -m <모듈>[/<기본 클래스>] [args...]
       java [옵션] --module <모듈>[/<기본 클래스>] [args...]
           (모듈의 기본 클래스 실행)
[16:56:34]   ~\..\..\java lecture onxERROR ❯ javac
Usage: javac <options> <source files>

2. Directory

각 챕터마다 디렉토리를 생성하고, src라는 폴더 안에 각 섹션의 예시 코드들이 들어간다. 이 때 src 내부의 module-info.java 파일을 통해 각 챕터별 사용된 모듈을 명시한다.

1) module-info.java

module chap01 {
  requires java.se; // Java SE가 제공하는 모든 모듈 호출
}

1-1) Trouble Shooting

컴파일 과정에서 다음과 같은 메세지가 출력되었다.

warning: [module] module name component chap01 should avoid terminal digits

원인을 대충 찾아보니, 컴파일 할 때 오류가 발생할 수도 있기 때문에 경고가 발생한다고 한다. Java에서 차후에 숫자, 언더바(_) 등을 사용할 수 있기 때문이라고 하는데, 당장 컴파일에는 문제가 없다. chap01을 chpaterone으로 변경하니 경고는 더 이상 출력되지 않았다.

2) Package

테스트를 위한 소스 코드는 다음과 같다.

package sec03.exam01;

public class Hello {
  public static void main(String[] args){
    System.out.println("Hello");
  }
}

package 적용을 위해 src->sec03->exam01 순으로 디렉토리를 정리하고, 소스코드는 exam01에 넣었다.

3. Compile

javac -d(생성 디렉토리 설정 옵션) [생성 디렉토리] [컴파일 대상 소스1] [컴파일 대상 소스2]
[17:08:30] chap01 on❯ javac -d bin src/module-info.java src/sec03/exam01/*.java

4. 실행

java -p(모듈 위치 지정 옵션) [모듈 디렉토리] -m(모듈 이름 지정) [모듈이름]/[Class 이름]
[17:23:08]..\chap01 on ❯ java -p bin -m chapone/sec03.exam01.Hello
Hello

0개의 댓글