0608. 소프트웨어와 컴파일

hyunn·2021년 6월 15일

Java-basic

목록 보기
2/26
post-thumbnail

#자주쓰는 cmd 명령어

  • cd - 폴더변경

    ex. $cd .. → 상위폴더로 이동

  • dir - directory 현재 디렉토리 파일 전체 불러오기

  • mkdir - make 폴더생성

  • rmdir - remove 폴더 삭제

  • del - 파일 삭제

  • echo - 출력

    ex. $echo %path% 입력시 path 환경변수에 설정된 모든 경로 출력

  • cls - clear

path 환경변수 설정

파일 관련 명령어 줄 때 어느 경로에서 찾아보라고 변수를 설정해주는 것

변수 등록 시 파일 서치할 때 일일히 디렉토리 지정안해도 됨

명령창, 콘솔창, 터미널 (cmd같은 CLI)

  • GUI - 마우스 키보드 이용해 OS에 접근

  • CLI(Command Line Interface) – 키보드로만 접근 가능

실행파일과 운영체제

notepad.exe → windows 에서 실행하려면? → cmd 에서 notepad 입력하면 바로 실행

!! 실행파일에 들어있는 명령어는 특정 CPU나 OS에서만 인식할 수 있음

왜? → 컴파일 시 그렇게 변환해서. 컴파일에서 결정됨

프로그래밍 소스파일 → 컴파일 → 윈도우용, 맥용, 리눅스용 각각 컴파일

각 OS의 실행파일은 각 OS에서만 실행 가능

실행파일과 CPU

프로그래밍 언어로 된 소스파일 -컴파일→ 기계어로된 실행파일 (특정 CPU에서 인식하는 명령어)

  • CPU (cpu마다 명령어다름)

  • 소스파일 -인텔cpu 컴파일러→ 인텔cpu 명령어로 변환된 실행파일 → 인텔cpu만 실행

실행파일과 운영체제

CPU같아도 명령어 배치 형식에 차이 → 다른 OS에서 컴파일한 프로그램은 실행불가능

운영체제마다 명령어 구성, 배열 방식에 차이

운영체제사이 호환XXX

MinGW 설치 – gcc (C언어용)

http://mingw-w64.org/doku.php/download/mingw-builds 에서 설치

https://brunch.co.kr/@mystoryg/56 참고

Node.js 설치 (JavaScript 용)

https://nodejs.org/ko/

실행파일 만드는 방식 3가지

컴파일방식 : hello.c  -컴파일→  hello.exe  →  실행

인터프리터 방식 : hello.js  -읽기→  node.exe 인터프리터 (java script 엔진)  →  실행

자바 hybrid 방식 : hello.java  -컴파일→  hello.class  -읽기→  java.exe JVM →  실행

1. 컴파일 방식

VScode 에 hello.c파일 생성

c언어 코드 작성 printf 로 출력. 코드 끝에 ; 세미콜론 필수

c언어는 소문자로 작성

cmd에서 gcc -o hello.exe hello.c 로 실행파일 exe 생성

생성 후 hello 실행파일명만 적어주면 실행됨

이 exe 파일이 진짜 기계어파일 Native Application

	#include <stdio.h>
	int main() {
	printf("Hello, world!");
	return 0;
	}

특징
- 실행 시 별도의 SW 필요X
- CPU 와 OS 에 맞춰서 변환한 것 → 다른 CPU, 다른 OS 실행불가
- 진짜 기계어 → 실행속도 제일 빠름

2. 인터프리터 방식

VScode 에 hello.js (Java script) 작성

	console.log("Hello, world!");

js 파일을 바로 읽어서 = Loading 해서 실행

  • 실행 : node hello.js

특징
- 실행 시 소스파일을 읽어서 처리할 인터프리터 필요
- 소스파일이 꼭 있어야함
- 매번 소스파일 읽고 문법 검사 → 실행속도 제일 느림
- 소스파일을 바로 읽어서 처리 → 소스파일.js 하나로 다른 CPU, OS 에서 실행 가능
- 운영체제의 OS 나 CPU 에 종속XX
- 단, 실행할 pc에서 그 운영체제용 nodejs 따로 설치해줘야함

3. 자바의 Hybrid 방식

class파일은 가상의 기계어코드. 진짜X – 바이트코드 → 직접 실행 불가

읽어서 실행해줄 JVM 이 필요

Hello.java 파일 생성

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

javac Hello.java 명령어로 java 파일을 컴파일

컴파일 결과로 Hello.class 파일 생성 → 진짜 기계어X 바이트코드

JVM (바이트코드 인터프리터) 설치해 실행

java Hello 코드로 실행

특징
- 컴파일 + 인터프리터 두가지 방식의 결합
- 인터프리터만 사용하면 매번 실행때마다 소스를 직접 읽어 실행해 속도느림
- 컴파일 시 문법검사를 진행 → 실행파일을 실행할 때 인터프리터 방식보다 빠름

실행파일 만드는 방식 속도 비교

  • 컴파일 방식 >> Hybrid 방식 >> 인터프리터 방식

인터프리터의 대체방식으로 hybrid 탄생

Android에서 Hybrid 방식의 느린 속도 해결방안으로 나온게 JIT, AOT 컴파일 방식

JIT 컴파일과 AOT 컴파일

JIT. Just-In-Time

실행 시점에 native code 로 변환 → 실행속도 향상

실행하려는 바이트코드 중 자주 쓰는 일부를 실행할 때 native code로 변환 후 실행
실행할 때마다 native code로 바꿔야함 → 실행시간 조금 지연되는 문제 발생

AOT. Ahead-Of-Time

프로그램 설치할 때 native code 로 변환 → 실행속도 향상

실행할때는 코드 변환 없이 native code를 바로 실행 → JIT보다 속도 빠름
단, 설치 시간이 더 걸림

Android 5.x부터 ART JVM 사용 → AOT방식
이하는 Dalvik Java Vitual Machne 사용 → JIT 방식

!! 느리면 처음부터 컴파일해서 나오면 안되나?

  • 안됨! 같은 안드로이드 운영체제여도 스마트폰마다 CPU차이 존재
  • 바이트코드로 올려야 다운받아도 호환됨

안드나 아이폰 둘 다 폰마다 CPU차이 있어서 앱스토어에는 바이트코드만 올리는 방식 선택

Software Configratoin Management. 소프트웨어 형상관리 시스템

형상 (소스코드의 변화)를 관리 = 백업

1. local 형상관리

pc의 project를 local 저장소(reposirtory = Repo.)에 백업

2. 중앙집중형 형상관리

remote 저장소에 각각의 pc에서 작업한 project를 백업

여럿이 백업된 파일 공유가능 , 백업(checkin)한 pc아니어도 다운로드(checkout) 가능

협업 가능, 팀플가능

서버에 문제 발생시 변경내역 모두 소실 가능

CVS, SVM

3. 분산저장

local pc 저장소에 백업 → 백업파일을 remote 저장소에 업로드

저장소를 local에도 둬서 분산 저장

다른 local pc에서 저장소 백업파일 복제 가능

복제 후 필요한 프로젝트파일 체크아웃

작업후에 프로젝트 다시 백업 가능 – 재업로드 가능

백업 push / 복제 clone

서버에 문제 발생시 로컬저장소에 있는 것을 다시 올리면됨 - 서버오류 위험 제거

변경내역 보존 가능

GIT

0개의 댓글