JAVA 시작하기

1. JAVA 설치

a. JAVA 설치

JAVA 공식 사이트 : https://www.java.com/ko/

  • [무료 Java 다운로드] => 화면 하단의 [모든 Java 다운로드 보기] => Windows 오프라인 (64비트)

b. JDK 설치 및 환경 변수 설정

JAVA를 설치하면 디렉토리에 JDK와 JRE가 생성된다. 설치된 JDK를 환경 변수로 설정해주어야 한다.

  • 환경변수 설정 : 제어판 - 시스템 - 고급 시스템 설정 - [고급] - 환경 변수

상단의 환경 변수는 OS 사용 계정에 대한 것 / 하단의 환경 변수는 시스템 전체에 대한 것(권장)

<환경변수 새로 만들기>
변수 이름: JAVA_HOME
변수 값: C:\Program Files\Java\jdk1.8.0_311		# jdk의 경로 사용

변수 이름: CLASSPATH
변수 값: C:\Program Files\Java\jdk1.8.0_311\lib 또는 %JAVA_HOME%\lib

변수 이름: Path
변수 값: C:\Program Files\Java\jdk1.8.0_311\bin 또는 %JAVA_HOME%\bin

c. JAVA 버전 확인

<자바 버전 확인 방법>
Windows: 제어판 - Java - [일반 사항] - 정보

Linux: 
$ java -version
---------------
java version "1.8.0_311"
Java(TM) SE Runtime Environment (build 1.8.0_311-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.311-b11, mixed mode)
---------------

$ javac -version
----------------
javac 1.8.0_311
----------------
  • 컴파일된 .class파일의 자바 버전 확인하기
$ javap -verbose /경로/파일명.class | find "version"
--------------------------------------------------
minor version: 0
major version: 50
--------------------------------------------------
jdk1.1 => 45
jdk1.2 => 46
...
jdk1.7 => 51
jdk1.8 => 52

.

.

자세한 설명…

  1. JDK - JRE - JVM

jdk-jre-jvm

JDK(Java Development Kit)에는 컴파일러(compiler), 디버깅 도구, 플랫폼 라이브러리 등이 들어있고, JRE(Java Runtime Environment)에는 자바API, 런타임 라이브러리 등이 들어있으며, 자바 언어를 사용해 개발하기 위해선 JDK가 필수적이다.

예를 들어, [c. 버전 확인]에서 입력한 명령어 javac -version에서 javac는 자바 컴파일러(java compiler)를 의미한다. 자바 프로젝트는 JDK의 컴파일러에 의해 컴파일된 파일들이 실행되어 작동하며, 컴파일된 파일(.class)은 프로젝트 내 디렉토리에 저장된다.

  • javac (java compiler) : .java 파일 => .class파일로 compile
  1. JDK 환경 변수 설정

JDK활용을 용이하게 하기 위해 환경 변수를 설정한다. 만약, 환경 변수를 설정하지 않으면 아래와 같이 JDK를 제대로 인식하지 못할 수 있다.

<JDK 디렉토리 외부>
C:\Users\username> javac -version
---------------------------------
'javac'() 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다.
---------------------------------

<JDK 디렉토리 내부>
C:\JDK\jdk-16.0.1\bin>javac -version
------------------------------------
javac 16.0.1
------------------------------------

JDK 디렉토리 내부에서만 javac를 인식할 수 있으므로 JDK를 환경변수로 설정해주어야 한다. 환경 변수를 수정한 뒤, 이를 확인하기 위해서는 command를 재실행해주어야 한다. 환경변수는 OS가 실행될 때 읽어들이는 것이고 command prompt는 도스형 환경변수이기 때문이다.

여기서 /bin 디렉토리까지 환경변수로 설정하는 이유는 /bin디렉토리 안에 실행파일이 들어있기 때문이다. 하나의 프로그램이 실행되기 위해선 많은 파일들이 필요하지만, 프로그램을 실행시키는 파일은 실행파일 하나다. 자바에서는 bin디렉토리에 실행파일이 존재한다.

참고로, Command Prompt는 명령에 대해, 첫번째로 command를 통해 내장 명령어 중 해당하는 것이 있는지 찾는다. 두번째로 path라는 환경변수를 통해 확인할 수 있는 경로 중 ‘;(세미콜론)'으로 구분되는 경로까지 확인하여 해당하는 것이 있는지 찾는다. 두 과정을 거쳐도 찾지 못할 경우 'javac'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다.와 같은 메시지를 출력한다. 즉, 내장 명령어에 존재하지 않으며, path 환경변수 경로에도 존재하지 않는다는 것을 의미한다. 이러한 command의 탐색과정을 command resolving이라 한다.


javac.exe는 도스형 프로그램이기 때문에 실행해도 창이 떴다가 꺼진다.

java -version으로 확인하는 것은 자바의 버전이고 JDK 버전을 확인하는 것은 javac -version을 사용한다. 그러나 자바 버전 확인과는 달리 JDK 버전을 확인하기 위해선 정확한 경로가 필요하다.

cf. 현재 디렉토리 목록 : dir

command 화면 지우기 : cls (clear screen)

참고)

그러나 Oracle JDK가 유료화 되면서 오라클 사에서 제공하는 마감 처리가 되지 않은 OPEN JDK를 사용한다.

(마감 처리가 된 JDK는 각각의 벤더들(Azul, Amazon 등)이 가져간다.)

ref) https://developer.okta.com/blog/2019/01/16/which-java-sdk

Oracle JDK는 유료화가 진행되어 상업적 사용이 어렵다. 그러므로 우리는 이를 고려해 Oracle사에서 제공하는 OPEN JDK를 사용할 것이다.

오라클 OPEN JDK : https://jdk.java.net/archive/

원하는 JDK 버전의 Windows 64-bit용 zip파일을 다운로드 받아 압축을 풀어 사용한다.

eclipse는 개발 툴이자 자바로 만든 응용 프로그램이다. 그러므로,

"Version 1.8.0_271 of the JVM is not suitable for this product. Version: 11 or greater is required."

와 같은 경고창이 나올 수 있다. 이는 자바 11 이상의 버전을 사용하라는 말인데, 해석하면 JDK를 높은 버전으로 사용하면 해결된다.

참고로 현재(2021.07) spring의 jdk지원 버전은 8버전이며, 이클립스는 Java 11이상을 런타임 환경으로 사용한다.

SDKs : Softwatre Development Kits ~ 소프트웨어 개발 도구 키트

JDK : JAVA Development Kit ~ Java SDK를 JDK라 부를 수 있다

Java SE : Java Standard Edition

JDK에는 컴파일러, 디버깅 도구, 플랫폼 라이브러리, 기타 등 등이 있다. 그러나 Oracle JDK가 유료화 되면서 오라클 사에서 제공하는 마감 처리가 되지 않은 OPEN JDK를 사용한다.

(마감 처리가 된 JDK는 각각의 벤더들(Azul, Amazon 등)이 가져간다.)

ref) https://developer.okta.com/blog/2019/01/16/which-java-sdk

JVM : Java Virtual Machine

추가 정리 필요 — https://asfirstalways.tistory.com/158

JPA : Java Persistent API … ORM(Object Relational Mapping)기술의 자바 표준. RDB(단순 표table 형태로 표현하는 DB)의 정보를 객체지향으로 쉽게 활용할 수 있도록 도와주는 도구, Object(자바 객체)와 Relation(관계형 DB) 사이의 맵핑을 통해 적용할 수 있는 기술 제공 (쉽게 말해, 자바 객체를 통해 DB작업을 하는 것)

JCP : Java Community Process

TCK : Test Compatibility Kit


2. Eclipse 설치

a. Eclipse 설치

공식 : https://www.eclipse.org/ ~ 사용 OS 환경에 알맞은 버전 다운로드

Eclipse 설치시에 요구되는 자바 버전이 존재한다. 필자의 경우 eclipse 4.20(2021-06)를 설치할 때, 자바 11버전 이상이 필요했다. 우선적으로 eclipse 설치에 필요한 자바 버전을 선택하고, 이후 프로젝트 별로 사용하는 JDK를 다르게 설정할 수 있다.

참고로, eclipse는 프로젝트 단위로 관리하기 때문에 .java파일 하나만으로는 실행이 불가능하다.

unable to find an ant file to run 오류 발생

b. Eclipse 사용 Java 버전 설정

  • Eclipse : [Window] - [Preferences] - [Java]
[Installed JREs] : 설치된 JRE 버전 설정 및 Apply

[Compiler] : Compiler compliance level(JDK 버전) 설정 및 Apply
  • 프로젝트 : [Properties]
[Java Build Path] - [Libraries] : JRE System Library 편집

[Java Compiler] - Compiler compliance level(JDK 버전) 설정 및 Apply

c. Eclipse 제거

Eclipse는 사용자가 직접 디렉토리를 삭제해주어야 한다. 이클립스는 제어판의 프로그램 추가/제거 혹은 uninstall.exe와 같은 방법을 사용할 수 없다.

이클립스를 기본 디렉토리에 설치한 경우, C:/Users/username 경로에 존재하는 아래 4개 디렉토리를 삭제해주면 된다.

  • .p2
  • .eclipse
  • eclipse
  • eclipse-workspace

  • 이클립스에서 자바 9버전 이상을 사용할 때, 아래와 같은 오류가 발생한다.
java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to unnamed module...

자바 9버전 부터 정책이 바뀌면서 private 접근자에 대한 강제 접근 처리가 되지 않기 때문에 해당 방식의 코드를 사용한 lombok을 사용할 경우 발생되는 오류이다.

오류 해결을 위해 이클립스 설정파일인 eclipse.ini 파일에 아래 코드를 추가해주면 된다.

--illegal-access=warn
--add-opens java.base/java.lang=ALL-UNNAMED

3. Apache Tomcat 서버 설치

공식 : http://tomcat.apache.org/ 또는 http://archive.apache.org/dist/tomcat/

원하는 Tomcat 버전 다운로드 및 압축 풀기

  • [Window] - [Show View] - [Servers] - [New] - [Server] - Server runtime environment에서 Tomcat 디렉토리 지정

image-20210924111826648


테스트 용도로 Dynamic Web Project 생성해서 실행해보기

image-20210924111129893

image-20210924111344840

4. JDBC API (Java DataBase Connectivity)

각 DBMS(DataBase Management Sytstem)에 알맞은 Interface의 메소드를 구현하여 제공하고 있다(JDBC API)

MySQL을 사용할 경우, mysql-connector-java-8.0.26.jar 파일을 사용하며 경로는 아래와 같다.

C:\Program Files (x86)\MySQL\Connector J 8.0

Data Source Explorer에서 MySQL을 추가하며 jar파일을 넣어주면 된다.

image-20210924110551057

image-20210924110640713

image-20210924110704341

image-20210924110726214

image-20210924110746491

OracleDB를 사용할 경우, ojdbc6.jar 파일을 사용하며 경로는 아래와 같다.

C:\oraclexe\app\oracle\oracle\product\11.2.0\server\jdbc\lib\ojdbc6.jar
  • code
// JDBC 동적 로딩(JDBC driver 로딩)
Class.forName("oracle.jdbc.driver.OracleDriver");

// 예외처리 : 컴파일 에러 대비
try {
    Class.forName("oracle.jdbc.driver.OracleDriver");
} catch(ClassNotFoundException e) {
    e.printStackTrace();
}

try {
    Class.forName("jdbc:oracle:thin:@localhost:1521:xe");
    // 1521 - OracleDB 포트번호, xe - OracleDB 버전
    String url = "";
    String User_id = "hr";
    String User_pw = "hr";
}

// 실제 권한 인정을 받기위해 DB와 Java의 연결을 도와주는 객체
import java.sql.Connection;		// Connection 객체
Connection conn = DriverManager.getConnection(url, User_id, User_pw);		// DriverManager.getConnection() 함수

// 대응하는 try - catch 예외처리 구문    
catch (ClassNotFoundException e) {
    System.out.println("동적로딩 오류!");
    e.printStackTrace();
} catch (SQLException e) {
    System.out.println("데이터베이스 연결 오류!");
    e.printStackTrace();
}

// DB접근 확인
if (conn != null) {
    System.out.println("접속 성공!");
} else {
    System.out.println("접속 실패!");
}

// Java에서 sql문 사용
String sql = "SELECT * FROM members";
PreparedStatement psmt = conn.prepareStatement(sql);
// PreparedStatement 사용함수 : executeUpdate() - 삽입,삭제,수정, executeQuery() - 조회
psmt.executeQuery();
// sql문 실행결과를 ResultSet타입의 rs에 저장. ResultSet의 결과값은 표와 같은 형태.
ResultSte rs = psmt.executeQuery();
while(rs.next()) {
    String id = rs.getString(1);
    String pw = rs.getString(2);
    String name = rs.getString(3);
    int age = rs.getInt(4);
    System.out.println(id + "" + pw + "" + name + "" age);
}
// reference) https://blog.naver.com/gpwls1149/222408726344

위는 단계별로 정리한 것으로 실제 java파일은 위 코드를 바탕으로 구조적으로 설계되어야 함.