리마인드
다시 뭘 배우는지 리마인드.
웹 / 서버 애플리케이션에 대한 개발을 다루는 게 이번 교육과정이다.
클라이언트가 브라우저를 통해 다운로드 받아가는 html, css, js를 만드는 방법과
백엔드에 돌아가는 자바와 이를 위한 서블렛 컨테이너와 스프링 프레임워크, 그리고 그걸 묶은 스프링 부트,
클래스 패키지 모듈, 다형성, 상속, 캡슐화와 같은 반복을 줄이기 위한 객체지향 프로그래밍을 배운다.
Java와 JVM의 등장
플랫폼(CPU와 OS)과 실행
실행되는 애플리케이션 프로그램은 기계어로, 명령어 집합이 호환되는 CPU에서 실행될 수 있다.
명령어 집합이 호환되지 않는 다른 CPU에서는 같은 실행 파일을 실행할 수 없다.
같은 CPU를 사용하더라도 OS가 다른 경우에도 호환되지 않을 수 있다. 왜?
OS 위에서 돌리는 실행파일들은 OS의 형식에 따라 구성하기 때문이다.
*정확히는 윈도우에서는 그 형식이 PE이고, MacOS에는 Mach-O(Mach Object) 이다. 실행 파일 포맷이 PE 이거나 Mach-O 이거나..
만약 OS가 같아서 포맷이 같더라도 CPU가 사용하는 명령어 집합이 달라서 기계어가 다르면 호환 불가하다.
어플리케이션을 만드려고 한다면 어떤 CPU에서 실행될지, 어떤 OS에서 실행될지 생각을 해야 한다는 것이다.
다만 개발자는 기계어를 작성하지 않는다. 기계어를 좀 더 쉽게 표현한 어셈블리어도 쓸 일이 사실상 거의 없다.
기계어와 어셈블리어
아트멜 AVR CPU의 Instruction Set을 보면, 16비트 컴퓨터인데 기계어는 이러한 Instruction Set에서 나온다.
xx비트 컴퓨터는 핀이 xx개고, 이 핀 각각에 전류를 넣고 안넣고 하는게 신호이자 명령어다. xx비트 컴퓨터는 명령어 길이가 xx비트다.
Instruction Set이 01011과 같이 전류로 신호의 유무를 표현하며 이는 binary code라고도 한다.
Instruction Set을 보다 편하게 작성하기 위해서 어셈블리언어가 나왔다. 기계어에 대응하는 언어이다.
기계어는 언어와 전혀 연관성이 없어서 너무 어렵다.
어셈블리 언어는 Low-Level Language라고도 부른다. 좋다 나쁘다의 의미가 아니라 기계어에 가깝다는 것이다.
사람을 고차원으로, 기계를 저차원으로 본 것이다.
어셈블리 언어는 기계어와 대응되나 기계어 그 자체는 아니므로 기계어로 번역하는 과정이 필요하다.
Add r1, r2 ==> 0000 xxxx xxxx xxxx 이렇게 번역을 해줘야 한다. 이 번역 과정은 ‘컴파일’ 이다.
보통 어셈블리 컴파일러는 CPU 제조사에서 제공한다.
단 컴파일러에 OS가 관여하기 시작하면 그 컴파일된 실행 파일은 OS 종속성이 생긴다.
OS에 종속성이 있다는 것은 OS마다 약간씩 다르게 컴파일이 되고, OS마다 따로 작성해줘야 한다는 의미가 된다.
OS에 상관없이 같은 문법으로 명령을 작성할 필요가 있어서 이 문제를 해결하기 위해 새로운 언어가 등장한다. C가 그렇게 등장한거다.
C는 OS에 그 문법이 종속되지 않으며, 좀 더 인간에 친숙한 문법이므로 고차원 언어라는 의미에서 High-Level Language 라고 부른다.
시스템 프로그래밍을 하는 사람들은 C나 Assembly같은 기계에 가까운 저차원 언어를 많이 사용하나 애플리케이션 개발자들은 High-Level Language를 주로 사용한다.
어셈블리어나 고차원 언어건 간에 기계어가 아니기 때문에 언제나 번역이 필요하다. 컴파일이 필요하다는 것이며 이것은 CPU나 OS에 따라서 다르게 해야 한다.
다만 작성된 고수준 언어를 다른 CPU와 OS를 위해 재컴파일 하려고 하면 그대로 할 수 없는 경우가 많다. 특히 OS는 종속성이 있기 때문에 수정해야 할 부분이 상당히 많을 수 있다.
C언어로 작성한 것이 기계어로 컴파일 되는 과정은?
고급 언어는 두 단계로 번역이 된다. 고급 언어가 바로 기계어로 번역되지 않고, 어셈블리어로 번역된다. 어셈블리어는 다시 어셈블리어용 컴파일러를 통해 기계어로 번역된다.
고급 언어로 작성된 코드를 원천 코드라고 하여 Source code라고 부른다
자바도 컴파일이 필요해요
자바도 컴파일이 필요하다. 다만 C와 조금 다르다.
자바는 소스코드(~~~.java)를 자바 언어로 작성하고 나면, 자바 컴파일러를 통해 바이트코드를 만든다. 이는 ~~~.class 파일이며 바이트코드(Bytecode)는 P-Code라고도 부른다. 여기서 P는 Portable이다.
https://en.wikipedia.org/wiki/P-code_machine
바이트코드는 진짜 기계어가 아니다. 어셈블리어도 아니다. 바이트코드는 mp4, jpeg와 같은 데이터다.
이런 데이터들은 보려면(실행하려면) 이미지, 무비 플레이어가 필요하듯이 바이트코드도 플레이어가 필요한 데이터이다.
바이트코드를 입력받아 실행해주는 별도의 프로그램이 필요한 것이다. 이것은 자바의 Engine, Interpreter, Viewer라고 비유할 수 있다.
이들은 모두 특정 형식으로 된 명령이나 데이터를 입력받고 해석하여 실행하는 것이기 때문이다.
비유가 아닌 공식적인 명칭은 Java Virtual Machine 이다. JVM이라고 약어로 부를 때도 많다.
왜 JVM이 등장하게 되었나? 위에서 말했듯이 각 OS, CPU마다 매번 컴파일 해주는 것이 힘들어서 그렇다.
Write Once, Run Anywhere. 이것이 자바의 Catch Praise이다.
원래는 가전제품용 언어였는데 초 초 초 대박을 쳤다.
가전제품은 CPU와 OS가 다 다를 수 있는데 이 문제를 JVM으로 해결하니 가전제품 영역 밖에서도 개발자들이 열광을 한 거다ㅋㅋ
Write Once, Run Anywhere.
자바 캐치프레이즈를 더 풀어서 말하면, 모든 플랫폼(OS와 CPU)에서 하나의 코드로 동일한 결과를 얻고자 한 것이다.
Jpeg, mp4 같은 데이터들은 플레이어만 맞춰서 설치되어 있으면 리눅스에서도 볼 수 있고 맥에서도 볼 수 있고 윈도에서도 볼 수 있고 안드로이드나 iOS에서도 볼 수 있는 것처럼
java로 작성한 코드는 JVM이라는 플레이어를 이용해서 모든 플랫폼에서 java코드를 쓸 수 있게 하자는 것이다.
이러한 목적을 달성하기 위해서 java는 컴파일을 통해 java->Assembly->Instruction Set 으로 번역하지 않는다.
Java->Bytecode->JVM->OS->CPU가 되는 것이다.
그래서 소스코드의 컴파일은 문제가 되지 않으나 JVM이 OS와 CPU에 종속된다.
이로 인해 두가지 단점이 생긴다.
- 기계어를 직접 실행하는 방식보다 느리다.
- JVM을 설치해야한다.
그래서 개발자는 JDK(JVM + 실행 관련 파일 + JVM + Compiler, Debugger, Profiler…etc)를 설치해야 하고
Java로 개발된 프로그램을 사용하려는 사용자는 JRE(Java Runtime Environment)를 설치해줘야 하는 것이다.
그래서 배포용 Java SE(Standard Edition)은 2가지다. JRE, JDK로 나뉜다.
배포 에디션은 추가로 두 가지가 더 있다.
Java EE(Enterprise): 기업용으로 서버 어플리케이션 제작에 필요한 도구
Java ME(Micro): 임베디드용
참고사항, 타르볼
참고로 다운로드 받을 때 tar.gz로 받는 경우도 있다.
tar를 타르볼이라고 하는데, 이 타르볼 쓰는 이유는 뭘까?
지금도 쓰고 있는 대용량 저장장치인 테이프로 저장할 때 쓰는 포맷이다.
테이프 아카이브의 약자로 tar를 쓰는 것. 타르를 다시 압축하면 .gz가 더 붙는다.
tar.gz 압축을 풀면 tar가 된다.
tar를 풀면 디렉토리로 나온다.
JDK의 설치와 설정
이 부분은 사진이나 영상 자료로 설명하시는 분들이 많이 있다.
공부할 때 도움이 될 수 있는 부분이 있어 남겨두는 것으로
JDK나 JRE를 설치 및 설정하시려는 분들은 다른 좋은 자료를 찾아보시기 바랍니다.
JDK 설치 후 설정
웹 개발 공부를 위한 장비 추천
직원으로서 웹 개발을 위한 장비는 본인이 선택하기보단 회사가 주는 걸 쓸 수 밖에 없는 상황일 것이다.
개인으로서 선택하는 장비는 공부를 위한 장비일 것이다.
결론부터 이야기하면, 별도 기준이 없는 경우 맥북이 추천된다.
1. 유닉스 환경으로 리눅스에 익숙해질 수 있음
2. iOS 개발 시 xcode 사용을 위한 필수재가 됨
3. 가지고 다니기 쉬운 사이즈, m시리즈 애플실리콘으로 오면서 성능&배터리 좋음
4. 화면, 키보드가 비교적 우수한 편