2020년 11월 18일 수요일

Java 개발 환경 구성 Recklessly Handson


라떼(Latte)의 선배님은 훌륭한 목수는 연장탓을 하지 않는다며 emacs 또는 vim 편집기만 쥐어 주면 뭐든지 가능 하다고 했었다. 

IDE 가 등장한 뒤부터 이 소리는 개 풀 뜯어먹는 소리 이다. (bullshit) 

SW 를 빠르게 구현 / 테스트 / 빌드 / 구동 할 수 있는 애자일한 개발자로 거듭나기 위해 쾌적한 개발 환경을 구성 해 보자.

  

개발 환경 구성

개발 환경을 구성 하는 몇가지 편리한 툴 들을 아래와 같이 소개 한다.

이름 기능 사용 가능한 OS
YUM / APT 범용 패키지 관리 도구 Linux
alternatives 범용 패키지 버전 선택 도구 Linux
Homebrew 범용 패키지 관리 도구 macOS
Chocolatey 범용 패키지 관리 도구 Windows
SDKMAN 범용 패키지 관리 도구 Linux

macOS

Windows
jabba JDK 설치 특화 도구 Linux

macOS

Windows
jEnv JDK 버전 선택 특화 도구 Linux

macOS
direnv 범용 디렉토리별 환경 변수 관리 도구 Linux

macOS

Windows


이들 중 macOS에 "sdkman" 을 통해 JAVA 개발 환경에 필요한 도구(jdk, graalvm, maven, gradle, scala)을 설치 하자.


sdkman 설치

zsh 사용자는 $HOME/.zshrc 파일에 추가

curl -s "https://get.sdkman.io" | bash

https://sdkman.io/sdks 에 관리 가능한 패키지 목록을 확인 가능 하다.


sdkman 실행 환경 구성

zsh 사용자는 $HOME/.zshrc 파일에 추가

source "$HOME/.sdkman/bin/sdkman-init.sh"
(새로운 터미널을 열고 버전을 확인 하자)sdk version


JDK 설치 

sdk list java 명령을 통해 사용 가능한 패키지 및 현재 설치된 패키지 정보를 확인 할 수 있고, 필요한 모듈을 설치 하려면 install 명령을 사용 한다.


sdk list java
sdk install java 11.0.9-zulu (OpenJDK Zulu-11 버전 설치 예시)


GraalVM 설치

Graalvm 은 고성능 자바, Polyglot을 기반으로 다양한 언어의 통합 기능, Native 자바의 특성을 통해서 빠른 startup time을 제공 하며 Cloud-Native-Application 을 위한 런타임 환경으론 최적이라고 생각 된다.

sdk install java 20.2.0.r11-grl
java -version (설치된 garrlvm 버전을 확인)
openjdk version "11.0.8" 2020-07-14OpenJDK Runtime Environment GraalVM CE 20.2.0 (build 11.0.8+10-jvmci-20.2-b03) OpenJDK 64-Bit Server VM GraalVM CE 20.2.0 (build 11.0.8+10-jvmci-20.2-b03, mixed mode, sharing)


Maven 설치

sdk list maven 을 통해 패키지를 확인하고 원하는 버전을 설치 하자.

sdk list maven
sdk install maven 3.6.3 (3.6.3 버전 설치)


Gradle 설치

sdk list gradle
sdk install gradle 6.5.1 (6.5.1 버전 설치)


Scala 설치

sdk list scala
sdk install scala 2.13.4

sdkman과 같은 패키지 관리 툴을 이용 하면 패키지(오픈소스) 들에 대해 쉽고 간편하게 설치 및 특정 환경을 선택 할 수 있다.


sdkman 을 통한 패키지 관리

동일한 패키지로 여러 버전을 설치 할 수 있고 사용 중인 환경(터미털 세션)에서 원하는 버전을 언제든 switching 할 수 있다.

특정 version 으로 switching 하는 명령 
  • 현재 세션(터미널) 에서만 특정 버전으로 사용: sdk use java {version}
  • 영구적으로 특정 버전을 사용: sdk default java {version) 
sdk use java 11.0.9-zulu (현재 세션(터미널)만 Zulu11.43+21-CA 으로)sdk default java 20.2.0.r11-grl (GraalVM CE 20.2.0 으로)

통합 개발 툴(IDE: eclipse, intellij, v-code, ...)

통합 개발 환경(IDE)을 제공 하는 대표적인 애플리케이션으로 IntelliJ 와 eclipse가 있다. 이 중 IntelliJ 의 Java 개발 환경을 위한 기본 환경을 설정 한다.


IntelliJ 신규 프로젝트 구성







"New Project" 를 클릭 하여 신규 프로젝트를 생성 한다.



프로젝트 유형을 Maven 으로 선택하고 Project SDK 는 원하는 JDK 버전을 선택 하면 된다.


Maven 프로젝트 속성을 기입하고 Finish 를 눌러 완료 한다.


Maven 프로젝트가 아래와 같이 구성 된다.




Java와 같은 컴파일러를 언어를 IntelliJ와 같은 IDE 환경에서 개발을 하려면 JDK 버전을 3가지 환경에 맞추어야 한다.

  • Project SDK: Java 편집기에서 참조 하는 JDK 설정으로 프로젝트 생성시에 이미 정의 하였다.
    (File > Project Structure > Project Settings > Project SDK 에서 설정 한다.)
  • Java Compile: 컴파일에 사용되는 JDK 설정 이다.
    (Preferences > Build, Execution, Deployment > Compiler > Java Compiler 에서 설정 한다. )
  • 외부 플러그인 모듈: Maven과 같은 외부의 툴을 사용 하는 경우 별도의 설정 파일을 통해 JDK 버전을 맞추어야 한다. (예: pom.xml)  


pom.xml 파일 설정 예시 

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>first-example</artifactId>
<version>1.0-SNAPSHOT</version>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>

</project>


프로젝트 구성을 마쳤다면 아주 간단한 클래스를 구현 하고 IDE 에서 컴파일과 Runtime 실행이 정상적으로 동작 하는지 확인 하자.


package org.example;

public class FirstApp {

public static void main(String[] args) {
System.out.printf("Hello %s", "World!");
}

}


그리고 Maven 의 package, clean 과 같은 기본적인 명령이 정상 동작 하는지 확인 하자.





댓글 1개:

  1. https://sdkman.io/jdks (JDK 배포판)
    https://engineering.linecorp.com/ko/blog/line-open-jdk/ (OpenJDK 적용 경험)
    http://taewan.kim/post/position_of_graalvm/ (Graalvm 소개)
    https://medium.com/graalvm/graalvm-20-1-7ce7e89f066b (GraalVM 20.1 퍼포먼스 비 교)

    답글삭제

Build AWS Golden Image using Packer + Ansible

AWS Golden Image 이미지는 Immutable 특성으로 런-타임 환경 적용에서 환경 변수나 설정 파일 조정 등의 개입이 없습니다. 이는 서비스 환경의 애플리케이션 런-타임 환경의 일관성을 보장 합니다. 또한, 빠른 start-up 구성 하므...