선택

자바를 새로 시작하는김에 Eclipse로 시작하였으나 난관이 하나있었습니다. 

jar파일을 하나 만들어서 사용해줘야되는데  gradle 과 Maven 을 쓰지 않으면  Eclipse에서는

jar 파일 생성 -> 생성된 jar파일 에 Dependency jar 다시 merge 하여 jar 다시 생성 의 과정을 거쳐야 합니다.

 

JAVA를 시작한지 일주일도 채 안되었던 상태이기도하고 gradle, maven 형태로 가는거보단 기본적인 jar

생성이라도 간편하게 할수 없을까 찾다보니 Intellij 의 Community 버전의 경우 한번에 Dependency jar도 가능하고 

 

여러가지 편리성도 있고 IDE자체적으로도 많은 차이가 있습니다. (이건 따로 검색해보면 너무많이 나오네요 ㅎㅎ)

 

세팅

https://www.jetbrains.com/idea/ <-- 이 링크에서 인텔리 J Community 

 

IntelliJ IDEA: The Java IDE for Professional Developers by JetBrains

A Capable and Ergonomic Java IDE for Enterprise Java, Scala, Kotlin and much more...

www.jetbrains.com

설치 후 기본 프로젝트 생성

 

Create New Project 

 

자바 버전도 이상하게 나오지만 당황하지 말고 그냥 Next 후 Finish

 

test를 입력후 Shift + F10 ( Run ) 정상적으로 실행됨을 알수 있다. 

 

하지만 제 PC에 설치되어있는 jdk 는 openjdk 1.8을 사용하기 때문에 환경을 변경 해줍니다.

 

Project Structure ( Ctrl + Alt + Shift + S ) 

 

눌러보면 아마 No SDK 로 나타날 것입니다.

JDK 선택 

 

저의 openjdk 의 위치는 위와같습니다.

C:\Program Files\ojdkbuild\java-1.8.0-openjdk-1.8.0.201-1 해당 위치로 선택합니다.

지정후 apply 하게되면

Shift + F10 으로 실행시 jdk 1.8 을 설정함을 확인 하실수 있습니다~

 

단축키

현재까지 확인된 편리한 단축 기능들입니다.

sout

sout = System.out.println  으로 sout을 입력하면 자동완성이 됩니다.

psvm

psvm = public static void main 으로 sout과 마찬가지입니다. ( 함수내에서는 나타나지 않습니다. ) 

 

Ctrl + Shift + F10 or Shift + F10 

Run (Main Class 실행)

Alt + Insert  

클래스를 사용하여 변수들을 관리하게 되는데 이때 getter setter클래스는 변수에 대해 매번 getter setter를 작성해야 하는 불편함이 있습니다. 해당 기능들을 자동완성 시켜주는 단축키입니다.

Ctrl + Shift + F 

프로젝트 전체 검색입니다.

Ctrl + N 

프로젝트의 클래스 전체 검색입니다.

Ctrl + E

최근에 열였던 클래스 검색 (프로젝트가 커지면 쓸모는 없습니다.)

Alt + 1

프로젝트로 이동(navigator) 하게되며 추후 ctrl + shift + 방향키 선택시

해당 네비게이션의 사이즈가 변합니다.

ESC로 다시 프로젝트 이동후 Alt + 방향키 로 탭을 이동하면서 코드를 작성할 수 있습니다.

Ctrl + Alt + L 

중요합니다. 코드 작성후에 계속 써주면 코드를 정리해줍니다.

 

F2

에러가 있는 곳으로 넘겨서 이동합니다. (에러가 없을 경우엔 메서드 단위로 이동합니다.)

혹은 Ctrl + B 는 사용된 함수로 이동합니다.

Alt + 6

Todo List 체크하기가 됩니다.

잘못된 To do 의 예

 

정상 투두 스타일

// TODO 대문자로 적어 주셔야 정상 투두스타일이며 Alt + 6 에 걸립니다 

 

Ctrl + F11

브레이크 포인트 대신 단축 포인트를 지정합니다.

1번으로 지정하게 된 후에 다른 코드에서 작성 하다가 Ctrl + 1 (Ctrl + 북마크 문자)을 하게되면

해당 단축 포인트로 포커싱이 이동됩니다.  생각보다 유용한 단축키입니다.

 

원래 FE개발을 좋아하기에 아래와 같은 겉멋 로딩 창 문자열 생성기 주소도 넣어봤습니다

 

겉멋 로딩 창 문자열 생성기
http://patorjk.com/software/taag/#p=display&f=Slant&t=App%20Start

불러오는 중입니다...

마지막 으로 저는 Material Theme를 사용하는 데요 

 

Material Theme 변경 시 

 

Ctrl + Shift + A   > plguins 입력 후 Material theme 검색해서 설치

Ctrl + Shift + A > settings 입력시 세팅창 

 

변경된 Material Theme

Material Oceanic Theme

즐거운 JAVA 되세요~

'개발일지(Language) > Java 일지' 카테고리의 다른 글

JAVA 기본기 - 변수  (0) 2019.12.02
JAVA ? 프로그래밍 언어? JAVA 시작하기 (QA)  (0) 2019.11.20
낙서장  (0) 2016.06.15

JAVA는 정말 맨땅에 헤딩 한다는 생각으로 책을 정독 하려고합니다.

 

 

변수 타입

1. primitive type (기본형 )

     논리형(boolean) , 문자형(char) , 정수형 (byte,short,int,long) 실수형 (float,double)

 

2. reference type ( 참조형 )

     1번에 primitive type이 아닌 모든 것들  ex:) String 

 

자료형의 범위는 byte,short,int,long 의 경우만  -2 n-1 ~ 2 n-1 -1 (n은 bit의 수) 

                       (1    2    4    8) byte

                       (1    8    32   64)  bit  -> n 에 대입하여 범위 추측 가능 

** n 비트로 표현할수 있는 정수의 개수 2n 개 ( 2 n-1승 + 2 n-1승 )

** n 비트로 표현할수 있는 부호있는 정수 범위 -2 n-1 승 + 2 n-1승 -1 

(-1의 이유는 0이 포함되기 때문 )

8비트일 경우 -2(7승) ~ 2(7승)-1 -> -128 ~ 127 

short나 byte의 경우 내부적으로 계산시 4byte로 변환하여 연산이 수행되기 때문에  숫자는 그냥  int를 사용하는게 낫다 ( int = 4byte 라 변환되는 연산이 수행되지않습니다. )

 

 

 

javac 로 .java 파일 빌드시 오류 

error: unmappable character (0xEB) for encoding x-windows-949

에러 내용을 보면 for encoding ~ 뒷 부분을 확인하실수 있는 경우가 있습니다.

에디터로 작성된 encoding이 x-windows-949 로 되어있어서 

해당 에러가 발생할 수 있습니다.

실행 뒤에 -encoding "UTF-8" 을 붙여서 실행 해서 해결 할수 있습니다~

JDK 1.6 에서 변화점

final int STATUS = 1; 

// 상수의 경우 선언과 함꼐 초기화가 되어야 하지만 

JDK 1.6 이후로는 필수는 X

 

2진수 변경 하는 메소드

Integer.toBinaryString(10진수 값)

 

- 논리형 ( boolean ) 

true와 false 중 하나이며 기본은 "false"   True X False

- 문자형 ( char )

char ch = "A" 는 ch 에 A가 저장되는것이 아닌 65(유니코드) 가 저장됨 

그렇기 때문에 char ch = 65; 로 선언해서 사용가능 

** 유니코드를 알기 위해서는

 char ch = 'A';
 int unicode = (int)ch; // (int)'A' 로 하여도 괜찮습니다.

System.out.println("유니코드 값 " + unicode);

// 결과  :  유니코드 값 65 

특수 문자 입력은 javaScript 와 똑같은 것으로 보입니다.

\r = carriage return

\n = new line

\f = form feed

\t = tab

\' = 싱글쿼터

\" = 더블쿼트

 

char의 경우 0 ~ 65536

short 의 경우 ( 음의 정수 까지 표현하기 때문에 ) -32768 ~ 32767

 

 

encoding and decoding

위에 문자가 유니코드로 변환이 되는 경우에 'A'  -> 65로 변환되는 과정을 인코딩이라고 합니다.

반대로 변환이 된 65를 다시 'A'의 문자로 변화되는 것을 디코딩 

알기 쉽게 되어있는 'A'를 보기 힘든 유니코드로 변경되는 과정을 인코딩이라고 했으니 암호화하다라는 뜻과도 일맥상통 한다고 볼수 있습니다.

 

- 정수형 ( byte, short, int, long )

소수점 에 대한 범위 및 사용법

 

- 실수형 ( float, double )

소수점 에 대한 범위 및 사용법 

 

 

 

** 추가적으로 기본기 다지기에서 따로 작성해야 할 내용

(진수 변환법, 아스키 코드, 유니코드 ) 

자바! 자바! 이클립스라는 IDE자체에 별 생각이 없었기에 자바를 굳이 시작하진 않았습니다. 

 

(Node.js 로 웬만한건 다 구현이 됐었고 심지어 자동화도 *Node.js에서 *selenium도 메이저 버전이고 아주 급격하게 성장하고있는 퍼펫티어도 Node.js기반입니다.)

 

새로운 프레임워크 (Integrated Automation Framework) - Fitnesse

 

이번에 새로 들어온 회사에서 통합 테스트 프레임워크인 Fitnesse 라는것을 만나게 되었는데

 

정말 자동화에 대한 아이디어가 샘솟는 프레임워크 였습니다.

 

(출처 : http://www.nextree.co.kr/p2613/)  여기서 QA(저희)는 QA담당자와 개발자 둘다 포함하고 있습니다.

 

나중에는 도커로 묶던 어플리케이션 형태로 만들어서 쓰면 될거 같기도 하고

- 테스트코드에 대해서 백엔드에 작업을 해놓고 프론트 앤드 화면에선 파라미터 값을 입력 하면

  백엔드에서는 set이라는 모듈을 통해 파라미터에 따른 함수 실행을 하는 형태 

(하나의 test set 에 이용자가 정하는 여러가지 케이스에 대해 테스트를 하고 History 까지 남길수 있습니다.)

 

Node.js와 연동에 대해서 조금 찾아 보았으나 해당 fitnesse에 대한 자료도 많진 않았고 연동자료들이 있긴하였으나

 

조금 억지스러운 연동들이 많았습니다. ( fitxutre를 파싱하여 쓰는 형태다보니 node에서도 어거지로 맞추면 돌아는 가는형태이지만 이걸 억지로 하는건 기존 저희 팀에 개발된 프로젝트와도 삐걱댈수 있기 때문에 정말 필요한 형태가 아니라면 지양 하고자 했습니다.)

 

그리고 IT인으로 살아가는데 잘하는 언어가 html css, js ts(js수퍼셋) 이라면 뭔가 아쉬울거 같았습니다. (물론 저는 js를 좋아합니다.)

 

학부생을 나오면서 C , C++ , pyhton 맛은 봤지만 어디가서 뭐 이거로 뭐 할수 있습니다. 수준은 아니였기 때문에 한가지를 더 하고 싶었던 생각이 있었습니다. 업무에 적용해서 하면 훨씬 빠르게 성장할수 있었기 때문입니다.

 

그래고 매년 코테를 재미삼아 C,C++ 로 했었는데 이제는 이것도 그만하려고 합니다. 심지어 작년엔 nhn 에도 붙었었지만 지원이력만 남는게 썩 좋지는 않은거같아서  추가적인 언어에 대한 갈망이 있던 찰나에 Fitnesse를 만났고

 

JAVA를 선택하게 되었습니다. 

 

Fitnesse의 메인 언어는 자바입니다.  자바와는 거리가 먼 커리어였기에 이번에 자바의 정석을 통하여

 

기본기를 좀 다지고  멋진 Fitnesse 적용기가 되려고 합니다. 

 

우선 자바의 히스토리 뭐 이런건 책에 있으니 넘어가고 JDK 를 일단 설치 하여야 합니다.

 

오라클 JDK는 유료화 선언이 되었기에 openJDK 를 설치 하도록 합시다.

 

단순히 openjdk 라고 검색하게되면 리눅스 계열 설치는 많이 나오기 때문에 저는 윈도우즈에서 openjdk 를 설치하고

 

진행 해보려고합니다.( 나중에 꼭 MAC을 사서 MAC에서 하는 그날을... )

 

http://jdk.java.net/archive/

 

Archived OpenJDK GA Releases

Archived OpenJDK General-Availability Releases This page is an archive of previously released builds of the JDK licensed under the GNU General Public License, version 2, with Classpath Exception. WARNING: These older versions of the JDK are provided to hel

jdk.java.net

openjdk 링크입니다.

 

* 참고로 LTS버전(안정화 버전)은 1.8버전이고 그다음 LTS버전은 18.9버전입니다. 

JAVA 8 - LTS 

JAVA 18 - LTS ( 예정 )

 

저는 공부용이니 JAVA 10 을 쓰겠지만 프로덕션은 8이 맞습니다.

 

GA Date : Oracle 자바의 출시일을 뜻합니다.

 

저는 10.0.2 (build 10.0.2+13) 로 설치 하도록 하겠습니다.

 

해당 압축을 푼 후 jdk-10.0.2 폴더를 이동 하도록 하겠습니다.

 

 

해당 위치에 openjdk 라는 폴더를 만든 후 위에 압축을 풀어 이동합니다.

 

내 컴퓨터 우클릭 - 속성 - 고급 시스템 설정 - 고급 탭 - 환경 변수 

 

 

앞에서 지정하였던 폴더 경로를 복사후 

 

새 시스템 변수로 등록 합니다.

확인 후에 

 

Path 선택 후 편집 을 이동하여 아까 지정한 JAVA_HOME 변수를 사용한다.

아래와같이 %JAVA_HOME%\bin 을 입력 후 확인 

 

 

후 종료

 

윈도우 로고 + R => cmd 입력 

 

 

java --version 과

 

javac --version 을 입력합니다.

 

 

정상적으로 openjdk 설치를 확인하였습니다.

 

여기서 마지막으로 java와 javac를 입력 하였는데요

 

기본적인 설명만 적어놓고 다음 시간으로 넘어 가도록 하겠습니다.

 

javac  - 자바 컴파일러 로 자바 소스코드 (.java) 를 바이트코드로 컴파일합니다. (.class)

    -> javac Hello.java

java - 자바 인터 프리터 로 컴파일러가 생성한 바이트코드 (.class)를 해석하고 실행합니다.

    -> java Hello 

javap - 자바 역 어셈블러로 컴파일된 클래스파일(.class)을 원래의 소스로 변환합니다. (java) 

    -> javap Hello > Hello.java

 

만약에 같은 프로젝트에 쉘로  build.sh 를 만들어서 빌드한다고 하면 (IDE 없이)

 

#!/bin/sh

javac Hello.java 
# javac Hello.java -encoding=UTF-8    Encoding Settings
java Hello

 

이런 형태가 될것 같습니다.

 

만약에 작성된 에디터와 인코딩이 맞지 않는 다면 빌드시에 -encoding을 사용하여서 맞춰줄수 있습니다. 

 

javadoc - 자동문서 생성기로 소스파일에 있는 주석 /** */을 이용하여 JAVA API 문서와 같은 형식의 문서를 자동으로 생성합니다.

 

jar - 압축 프로그램 클래스 파일과 프로그램의 실행에 관련된 파일을 하나의 jar 파일(.jar)로 압축하거나 압축해제합니다.

 

JDK ( Java Development Kit ) 자바 개발도구

JRE  ( Java Runtime Environment ) 자바 프로그램이 실행하기 위한 최소환경

 

JRE는 JDK 안에 포함되어 있으며 JDK 가 더 큰 영역입니다. 

javac는 JDK 안에 있습니다.

 

여기까지 자바를 시작하기 위한 기본 준비가 되었습니다. 얼른 자바에 기본을 다지고 통합 테스트 자동화까지

 

해보도록 합시다.

'개발일지(Language) > Java 일지' 카테고리의 다른 글

Intellij IDEA ( JAVA IDE ) Community 버전  (0) 2019.12.10
JAVA 기본기 - 변수  (0) 2019.12.02
낙서장  (0) 2016.06.15

type java = 무언가 나오면 자바가 설치 되었거나 설정 되었다는 뜻 


java -version : 자바 버전 확인


Open JDK 와 Oracle JDK 의 차이 


Open JDK 는 2007 년 Java의 오픈소스화를 위하여 Sun 에서 저작권자가 제공을 거부한 컴포넌트들을 제외한 JDK를 제공하여 시작된 프로젝트 이다.


별개로 oracle에서 제공하는 JDK는 Oracle JDK 라고 한다.


OpenJDK Overview

Sun(현재 Oracle)이 JDK 7을 개발하기 시작할 때 이전과 다른 점이 하나 있었는데, Sun이 JDK를 오픈소스화 하기 위해 2007년 OpenJDK를 만들었다는 것이다. (OpenJDK는 완전한 Free의 오픈소스 코드를 기반으로 Fully buildable한 Java Development Kit을 배포하기 위한 Sun의 노력이다.)

Sun이 3rd-Party 라이브러리의 저작권자에게 오픈소스로 공개할 수 있도록 설득하고자 했으나 잘되지 않았고, 저작권자가 오픈소스화를 거부한 일부 컴포넌트를 제외한 나머지 JDK 소스코드 전부를 OpenJDK에 제공했고, OpenJDK는 이를 기반으로 이외의 컴포넌트들의 대안 코드를 마련하면서 JDK7 프로젝트를 시작했다.

Oracle's Plan for OpenJDK

아래는 OpenJDK FAQ (http://openjdk.java.net/faq/) 의 주요 내용을 요약한 내용 이다.

Oracle은 OpenJDK에 참여하는가?

Oracle은 OpenJDK 프로젝트를 주도하는 주체이며, 오픈소스모델은 기술적인 발전을 위한 가장 좋은 방법이기 때문에 OpenJDK를 향상시키기 위한 노력을 계속 할 것이다.

OpenJDK의 License 모델을 변경될수 있는가?

OpenJDK Community는 지속적으로 Oracle에 의해 운영되며, 뿐만 아니라 이외의 기업, 연구원 또는 개인에 의해 GPL-based 라이센스를 가지며, 변경될 계획은 없다.

OpenJDK Users & Contributors

Ubuntu / Fedora / Red Hat Enterprise 와 같은 메이저 리눅스 제공자는 배포시에 OpenJDK를 기본 Java SE 구현체로 제공하고 있다.
추가적으로 Eclipse Community의 2010 설문에서는 개발자의 21%가 OpenJDK를 사용하고 있다고 응답하였다.

OpenJDK 와 OracleJDK 스펙

Oracle JDK는 OpenJDK를 기본으로 하는가?

그렇다. Oracle JDK는 OpenJDK의 JDK7 기반에 추가로 OpenJDK에 포함되지 않은 Component까지 모두 갖춘 프로젝트이다.

아래와 같이 Vendor에 의한 분리된 Version이 존재하는데,

  • Oracle's JDK (Commertial support from oracle)
  • OpenJDK, the open source java

JDK7 이전에는 두 Version간 큰 차이가 존재해 OpenJDK는 Oracle JDK에 비해 누락된 기능 및 성능이슈가 존재 했으나,
현재는 java-web-plugin(http://en.wikipedia.org/wiki/IcedTea - 저작권이 있는 라이브러리의 대안으로 작성된)을 제외하고는 정확하게 같다고 볼 수 있다. 몇몇 사람들은 아직도 OpenJDK가 Oracle JDK에 비해 성능이 떨어진다고 하지만, 이것은 근거없는 말이다.

  • 두 Version은 모두 Java SE 7 JSR(JSR 336) Spec 을 구현하였다.

Dodgy Version History

OpenJDK7를 사용 한다면 Oracle JDK7와 동일하게 안전하다고 볼 수 있지만, 그에 비해 OpenJDK6은 안정적이지 않는 History가 있는데, 진행 중인 프로젝트인 OpenJDK7를 기초로 JDK7 스펙을 제거하는 방식으로 JDK6과 Compatible 하도록 진행 됐기 때문이다.
OpenJDK6에서는 파일 처리와 같은 기본적인 OS-Integration 관련 기능과 네트워크 처리 및 Swing 에서 몇몇 문제점이 Report 되고 있다고 한다. OpenJDK를 사용시에는 꼭 OpenJDK7 를 사용하도록 한다.



  • JDK6을 사용하고 있을 때, OpenJDK로 이관한다면 JDK6 -> JDK7로의 변경시의 이슈가 더욱 중요해 보인다.

JVM

OpenJDK 프로젝트는 아래와 같은 몇몇 Component로 구성되어 있는데,

  • HotSpot VM
  • The Java Class Library
  • Java Compiler

VM 역시 Oracle에 의해 제공되는 HotSpot VM Spec과 동일하다.

이외 Vendors
OpenJDK는 오픈소스이기 때문에 RedHat 과 같은 Vendors에 의해서 Customized 되어 배포된다면 VM에 차이가 있을 수 있다. 하지만 물론 Vendor's VM은 배포시에 Java Trademark를 사용하기를 원한다면 Java TCK에 일치하는 것을 증명해야 한다.

Source 빌드 및 Binary 배포 이슈

OpenJDK는 소스코드만 배포하고 있어, 직접 빌드해야하나? 라는 의문이 생길수 있지만 아래와 같이 리눅스에서 rpm 패키지로 다운로드 및 설치가 가능 하다.


Debian, Ubuntu, etc
$ sudo apt-get install openjdk-7-jre
Fedora, Oracle Linux, Red Hat Enterprise Linux, etc.
$ su -c "yum install java-1.7.0-openjdk"


OpenJDK Quality Metrics

http://openjdk.java.net/groups/quality/metrics/


OpenJDK의 사용 범위

OpenJDK를 통해 JVM기반의 오픈소스를 이용하여 서비스 및 플랫폼 운영 시에 성능 이슈가 있는지 확인한다.



JVM 기반의 오픈소스 플랫폼 및 Spring과 같은 Java기반의 오픈소스

JVM기반의 오픈소스 사용시에는 Requirements 스펙에 JDK Version이 명시되어 있는지 확인한다.

  • Apache Kafka / Netty / MongoDB / Cassandra ...
  • https://github.com/apache/cassandra 페이지를 예를 들면 Requirements 항목에 Java >= 1.7 (OpenJDK and Oracle JVMS have been tested) 라고 명시되어 있는 것을 볼 수 있다.

CI / Build

  • Java 기반의 Ant/Maven/Gradle 과 같은 빌드 도구를 사용하는 빌드서버는 OpenJDK를 이용한다.

Tomcat / Application

  • Tomcat 및 Application 레벨에서 OpenJDK를 이용한다.


OpenJDK 설치

JDK Download

JDK 설치 및 Tomcat 설치 Script


결론 & OpenJDK 이관시 Risk

위의 내용을 바탕으로 OpenJDK 는 Java 플랫폼의 Next Version인 JDK7의 근간이 되는 프로젝트로서, JDK7를 기준으로 Oracle 에서 Binary로 배포되는 JDK와 OpenJDK는 차이가 없다고 봐도 무방하다.
하지만 실제 서비스에 적용하기 위해서는 사내에 OpenJDK 적용 사례가 있는지 확인 할 필요가 있어보이고, 서비스에 직접적으로 영향을 미치지 않는 관리자도구 등에 시범적으로 적용하여 레퍼런스를 쌓아가는 것도 바람직해보인다.

만약 JDK6 기반에서 운영하는 서비스가 있다면 JDK7으로의 변경으로 인한 이슈를 살펴 볼 필요가 있다.
추가적으로 어플리케이션/빌드 및 배포/플랫폼 전반에 JVM기반의 오픈소스를 사용시에는 OpenJDK의 지원여부 및 성능 및 안정성에 대한 이슈를 자세히 체크 해야 한다.

참고

References
FAQ



출처 : http://stunstun.tistory.com/222 


+ Recent posts