본문 바로가기
네이버클라우드/JAVA 웹 프로그래밍

JAVA 2일차 (2023-05-23) 프로그래밍 개론 DAY2

by prometedor 2023. 5. 23.

사용 OS => MacOS - M1 

NaverCloud Server 이용하여 terminal 에서 접속하기

ㄴNaverCloud Server 의 공인 IP 복사

 

ㄴ ssh root@'NaverCloud Server 공인 ip' 입력하여 접속

 

 

ㄴ compile 시 문법 검사와 명령어 최적화를 함

ㄴ compile 시 OS 에 맞춰서 machine code 로 변환하므로 OS 에 종속적임을 알 수 있음

 

 

 

 

gcc hello.c

=>   아래 과정을 한 번에 실행하고, 이름을 지정하지 않으면 a.out 이라는 출력파일이 생성되며 ./a.out 실행 시 파일이 실행됨

=> a.out 에는 instruction Set 이 들어있음

 

ㄴ gcc -E hello.c > hello.i

=> hello.c 파일을 분석하여 전처리된 소스 코드인 hello.i 파일을 생성 (전처리)

 

(hello.i -> hello.ll  => low level language 로 파일이 만들어짐)

=> compiler 는 hello.i 파일을 분석하여 중간 언어인 LLVM 어셈블리 코드인 hello.ll 파일을 생성 (문법 검사, 타입 검사, 최적화 등의 작업이 수행)

 

ㄴ gcc -S -emit-llvm hello.i

=> hello.ll  파일을 분석하여 기계어 코드가 아닌 Assembly Language인 hello.s 파일을 생성함

=> 중간 언어를 해당 플랫폼의 기계어로 번역하는 작업이 수행됨

 

ㄴ gcc -o hello.s

=> Assembler 가 hello.s 파일을 분석하여 목적 파일인 hello.o 파일을 생성 (목적 파일은 실행 가능한 파일이 아님)

 

ㄴ gcc hello.o -o hello.exe

=> linker 는 hello.o 파일과 필요한 라이브러리 파일들을 결합하여 실행 가능한 바이너리 파일인 hello.exe를 생성

=> linker 는 목적파일들 사이의 의존성을 해결하고, 메모리 주소 할당, 심볼 해결 등의 작업을 수행하여 최종적으로 실행 가능한 형태로 만듦

 

 

기계어를 변환하지 않고 소스를 읽어서 실행

실행할 때마다 소스파일이 있어야 하고, 문법 검사를 해야해서 실행 속도가 느림

OS 에 독립적이어서 OS 에 영향을 받지 않음

 

=> js 파일은 Linux OS 에서 바로 읽을 수 없으므로 HTML 에 담아서 HTML Renderer 에서 처리하고, JavaScript 코드를 해석하고 실행하여 웹 페이지의 동작을 구현시킴

 

Web Browser

JavaScript Engine

ㄴ chrome 의 v8 engine, Safari 의 webkit, JDK 의 nashorn, FireFox 의 스파이더 몽키 등이 있음

https://ko.wikipedia.org/wiki/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8_%EC%97%94%EC%A7%84

 

interpreter

ㄴ engine, player, viewer, Virtual machine, runtime 등

ㄴ engine 과 runtime 은 JavaScript 실행과 관련있음

    ㄴ JavaScript Engine :  JavaScript 코드를 읽어들이고 실행하는 엔진 역할을 수행

    ㄴ runtime : JavaScript 엔진의 실행을 지원하는 환경을 제공

ㄴ virtual machine 은 Java 를 읽어들여 실행

 

 

ㄴ Java 는 Hybrid 방식(컴파일 방식 + 인터프리터 방식)을 사용함

ㄴ Java 컴파일러에 의해 Java source code(.java 파일)가 byte code (.class 파일)로 변환되고, 이후 JVM(Java 가상 머신)에서 바이트 코드를 실행하는 방식

ㄴ 이 과정에서 Java 소스 코드는 미리 컴파일되어 바이트 코드로 변환되기 때문에 실행 속도가 인터프리터 방식보다 빠름

ㄴ 바이트 코드는 JVM에서 해석되고 실행되며, JVM은 플랫폼에 맞게 설치되어 Java 프로그램을 실행


ㄴ 컴파일 시간과 실행 시간 사이의 장점을 가지고 있음

ㄴ 소스 코드를 한 번 컴파일하면 컴파일된 바이트 코드는 운영체제 상관없이 실행 가능하므로 반복적인 컴파일 과정이 필요하지 않음

ㄴ "Write once, run anywhere"

 

=> Java는 하이브리드 방식으로 실행되며, 컴파일러를 통해 바이트 코드로 변환된 후 JVM에서 실행됨

ㄴ 이를 통해 Java는 높은 실행 속도와 OS 독립성을 제공

 

 

ㄴ Java가 Hybrid 방식으로 동작하는 이유는 Java 언어의 설계와 Java 가상 머신(JVM)의 역할 때문임

ㄴ Java 언어는 "Write once, run anywhere"를 목표로 설계됨

=> 이는 Java 소스 코드를 한 번 작성하면 어떤 플랫폼 에서도 실행할 수 있다는 의미임
=> 이를 가능하게 하는 핵심 개념은 바로 JVM과 바이트 코드

 

ㄴ Java 소스 코드는 자바 comiler 에 의해 byte code 로 변환됨

ㄴ byte code 는 JVM에서 해석되고 실행되기 때문에 JVM이 설치된 어떤 플랫폼 에서든 실행 가능

ㄴ JVM은 Java 프로그램의 실행을 담당

ㄴ JVM은 플랫폼 에 종속적인 binary code 를 생성하고, byte code 를 플랫폼에 맞는 기계어로 변환하고 실행함

ㄴ JVM은 byte code 를 해석하고 필요에 따라 Just-In-Time 컴파일을 수행하여 실행 속도를 향상시킴

ㄴ 이러한 JVM의 역할로 인해 Java는 컴파일러에 의해 미리 바이트 코드로 변환되고, JVM에서 해당 바이트 코드를 실행하는 방식인 Hybrid 방식으로 동작함

ㄴ Java 의 Hybrid 방식은 소스 코드를 한 번만 컴파일하면 되므로 반복적인 컴파일 과정이 필요하지 않음

 

 

ㄴ JIT(Just-In-Time) 컴파일러는 실행 시점에서 필요한 부분만을 컴파일하여 기계어 코드를 생성하고, 이후에는 해당 코드를 반복적으로 실행하여 성능을 향상

 

 

ㄴ AOT(Ahead-of-Time) 컴파일은 프로그램 코드를 미리 컴파일하여 실행 전에 기계어로 변환하는 컴파일 방식

ㄴ AOT 컴파일은 프로그램을 실행하기 전에 전체 코드를 한 번에 컴파일하여 기계어로 변환하므로 실행 시간에 컴파일 과정이 필요하지 않음
ㄴ 컴파일된 코드는 실행할 때 추가적인 변환 과정 없이 직접 실행되기 때문에 실행 속도가 빠르고 효율적임

 

=> 설치 시점에서 저네 코드를 기계어로 변환하므로 설치하는 데 배터리와 시간이 소요되지만 실행 시간은 빨라짐

 

 

ㄴ OS 가 다른 경우 CPU 가 같다고해서 기계어를 그대로 실행할 수 있지 않음

ㄴ 기계어 배치 포맷(형식)이 다르기 때문에 불가능

 

 

ㄴ Windows 용 compiler 와 Linux 용 compiler, macOS 용 compiler 가 CPU 가 모두 Intel 일 경우 기계어는 같지만 각각 OS 가 다르므로 기계어 배치형식이 다름 

ㄴ Intel CPU 인 macOS 용 compiler 와 M2 CPU 인 macOS 용 compiler 는 OS 가 mac 으로 같지만 CPU 가 다르므로 기계어가 다름

=> 컴파일은 OS 형식에 맞춤

 

 

 

ㄴ Java SE => Standard Edition

ㄴ Java 플랫폼의 기본 에디션으로서, 일반적인 Java 애플리케이션 개발에 사용됨

ㄴ Java 개발 도구, 실행 환경 및 라이브러리를 포함하고 있으며, Java 애플리케이션을 만들고 실행하는 데 필요한 기능을 제공함

 

ㄴ JRE, Server JRE, JDK 가 있음

 

JRE

ㄴ JVM + 라이브러리로 여기서 라이브러리에는 java 에서 제공하는 명령파일이 있음

ㄴ 일반 사용자가 PC 에 설치함

 

Server JRE

ㄴ JRE 에서 PC 용 기능인 UI 출력 기능을 빼고, 여기에 서버 기능을 넣어 서버 실행을 최적화 시킴

ㄴ 서버 관리자가 서버에 설치함

(서버 관리자도 JDK 설치함)

 

JDK

ㄴ JRE 에 개발도구(컴파일러, 디버거, 배포 생성, 문서 생성)를 추가함

ㄴ 개발자가 PC 나 서버에 설치함

 

 

 

ㄴ JAVA EE = Enterprise Edition

 

ㄴ Java EE API

ㄴ Java EE 구현 서버

=> 기업용 App 을 제작할 때 필요한 명령이나 도구를 포함하고 있음

=> 동시, 멀티 유저용 App 제작 기술

 

ㄴ Java EE는 분산 환경에서의 애플리케이션 개발을 지원

=> 분산 컴퓨팅 모델을 통해 여러 대의 서버나 클라이언트 사이에서 작업을 분산하여 처리 (분산 컴포넌트 생성 및 관리 기술)
ㄴ 웹 App을 개발하기 위한 다양한 API 를 제공

ㄴ 웹 서버와 상호작용하며 동적인 웹 페이지 생성, 데이터베이스 액세스, 보안, 세션 관리 등을 처리 (웹 App 제작 및 관리 기술)
ㄴ 자원 공유 및 관리

ㄴ 배포 관리


=> 다양한 기업 환경에서 사용되는 대규모 애플리케이션의 개발과 운영에 필요한 기능과 도구를 제공하여 생산성을 향상시키고 개발자들이 안정적이고 효율적인 애플리케이션을 구축할 수 있도록 지원


 

 

https://www.oracle.com/java/technologies/downloads/#jdk17-mac

 

Download the Latest Java LTS Free

Subscribe to Java SE and get the most comprehensive Java support available, with 24/7 global access to the experts.

www.oracle.com

 

 

 

ㄴ jdk 파일 다운 받기

 

 

ㄴ sha256 확인 시 아래와 같음

 

ㄴ 다운 받은 jdk 파일의 sha256 와 비교하여 확인

 

 

JDK 설치

ㄴ 다운받은 jdk -17.jdk 확인

cd /Library/Java/JavaVirtualMachines

 

macOS 에서 JAVA_HOME 환경변수 추가하는 방법

ㄴ nano 를 이용해 .zshrc 내용 변경해주기

 

 

ㄴ  JAVA_HOME => jdk-17.jdk 확인

ㄴ javac 와 java version 모두 => 17 버전임을 확인

 

Windows 환경변수 설정(참고)

 

 

 

 

ㄴ [확인] 선택하여 JAVA_HOME 설정

 

ㄴ Path 설정

 

ㄴ %JAVA_HOME%\bin 을 [위로 이동] 버튼을 이용하여 맨 위로 올려주기!

 

 

 

 

VSCode 설치

https://code.visualstudio.com/download#

 

Download Visual Studio Code - Mac, Linux, Windows

Visual Studio Code is free and available on your favorite platform - Linux, macOS, and Windows. Download Visual Studio Code to experience a redefined code editor, optimized for building and debugging modern web and cloud applications.

code.visualstudio.com

 

ㄴ java 플러그인 설치

 

ㄴ Settings 에서 tab 사이즈 2 로 변경

 

ㄴ Settings 에서 ruler > Editor : Rulers > Edit in settings.json

 

ㄴ editor.rulers 안에 100 넣어줌 => 100 자인지 알 수 있는 줄이 생김

 

ㄴ Render Whitespace  를 all 로 변경해줌 => 공백이 몇 칸인지 보기 쉬움

 

 

** 참고

아래 사이트 참고하여 개발자 코드 작성 동향 확인해봄

http://sideeffect.kr/popularconvention/#java

 

Popular Coding Convention on Github

Popular Coding Convention on Github Analyze Github commits to know which convention is popular. Choose language. Dec 27, 2014I made this project about a year ago. At that time, I just started it for The GitHub Data Challenge II. So, it was very simple and

sideeffect.kr

 

VSCode 로 java 파일 실행해보기

ㄴ javac Hello.java 이용하여 컴파일

ㄴ java Hello 이용하여 Hello.java 실행

 

 

참고

ㄴ Shell 은 운영 체제와 사용자 사이의 인터페이스로 동작하는 프로그램

ㄴ Shell 은 명령어를 입력하고 실행하여 운영 체제의 기능을 조작할 수 있도록 도와줌

ㄴ 일반적으로 Shell 은 텍스트 기반 인터페이스를 제공하며, 명령어를 입력하고 그에 대한 결과를 출력함
ㄴ 사용자가 입력하는 명령을 해석하고 해당 명령을 실행하는 역할을 수행
ㄴ Shell 은 명령어 라인 인터페이스(Command Line Interface)를 제공함

ㄴ 사용자는 터미널 또는 콘솔 창에 명령어를 직접 입력하여 실행


각 운영 체제별 Shell 종류

Unix 및 Unix 계통 운영 체제

ㄴ Bash (Bourne Again SHell)

ㄴ sh (Original Bourne SHell)

ㄴ csh (C SHell)

ㄴ ksh (Korn SHell) 등

 

Windows 운영 체제

ㄴ Command Prompt

ㄴ PowerShell 등

 

macOS 운영체제

ㄴ 기본적으로 zsh (Z Shell) 이용