이번 웹개발(백엔드)를 담당하시는 엄진영 선생님의 깃입니다.
https://github.com/eomjinyoung/bitcamp-20201221.git
[eomjinyoung/bitcamp-20201221
Contribute to eomjinyoung/bitcamp-20201221 development by creating an account on GitHub.
github.com](https://github.com/eomjinyoung/bitcamp-20201221.git)
[엄진영의 코딩스쿨
프로그래밍 입문자를 위한 온라인 프로그래밍 훈련소. 엄진영의 코딩스쿨 has 12 repositories available. Follow their code on GitHub.
github.com](https://github.com/eomcs)
기본적인 git 사용법
먼저 깃 저장소( ex)github )에 회원가입을 하고 개인 레포지토리를 만들어서 개인용으로 관리할 폴더를 생성한다.
그리고 예제를 땡겨올 깃 저장소의 주소를 복사해야된다

code를 누르면 해당 창이 뜬다
그리고 책갈피 버튼을 누르면 해당 레포지토리의 주소 복사가 된다.
터미널에 들어가서
다운을 받을 폴더에 깃을 땡겨온다는 명령어를 입력해줘야 한다.
git clone https://github.com/osk2090/bitcamp-study.git
그러면 깃 저장소에 저장된 코드들을 다운받을 것이다.
이렇게 되면 깃과 로컬에 같은 코드들이 배치될것이다
git 백업 명단 작성
git add .
일반적으로 git add .를 사용하며 변경이 일어난 모든 파일을 추적하게 한다.
git 백업 명단을 로컬 저장소에 백업
git commit -m "백업에 대한 간단한 내용"
로컬 저장소의 변경된 내용을 서버 저장소에 업로드 하기
git push
학습 목표 달성 확인 목록
- [] 서버 컴퓨터와 서버 프로그램의 관계를 이해하는가?
먼저 서버(server)는 클라이언트에게 네트워크를 통해 서비스를 하는 컴퓨터를 의미한다.
서버 컴퓨터는 일반 컴퓨터와 다르지 않지만 다른점은 설계의 목적이 있다
서버는 365일 가동되어야하기 때문에 그만큼 열을 발생시킨다.
그러한 이유로 열을 쉽게 배출할수 있도록 설계되어 있으며 부품이 고장나면 동일한 다른 부품으로 교체하기 용이하도록 되어있다.
이러한 장비를 구동하는 프로그램이 서버 프로그램이며 주로 리눅스와같은 서버관리에 용이한 운영체제를 사용한다
- [] 서버 프로그램과 데스크톱 프로그램을 구분할 수 있는가?
서버 프로그램은 말그대로 서버를 구동하는 프로그램을 말하며
클라이언트에게 네트워크를 통해 정보나 서비스를 제공하는 프로그램이다
반면 데스크톱 프로그램은 대중적으로 쓰이는 운영체제인 윈도우 OS에서 실행되는 모든 소프트웨어를 뜻한다
하지만 서버 프로그램과 반대인 의미로 서버와 상관없이 설치하여 단독으로 사용한다는 의미에서
standAlone app이라고 불리기도 한다
- [] 클라이언트 프로그램이 무엇인지 이해하고 있는가?
클라이언트(고객)는 서버에 접근하여 데이터를 요청하고 응답할수 있게 해주는 프로그램을 뜻한다
대표적으로 온라인 게임을 예를 들수 있다.
- [] 클라이언트/서버 구조로 된 애플리케이션의 예를 들 수 있는가?
앞서 이야기한대로 대표적인 예는 온라인 게임이 있다
사용자가 클라이언트 프로그램으로 서버에 접속하여 사용자의 캐릭터로 몹을 공격을 한다(캐릭터가 몹을 공격했다는 요청을 한다)
그러면 서버에서는 몹의 공격력을 받았다는 데미지와 함께 몹이 죽었다면 경험치와 해당 아이템을 드랍하는 응답을 한다.
- [] git 클라이언트 프로그램을 설치할 수 있는가?
[Git - GUI Clients
GUI Clients Git comes with built-in GUI tools for committing (git-gui) and browsing (gitk), but there are several third-party tools for users looking for platform-specific experience. If you want to add another GUI tool to this list, just follow the instru
git-scm.com](https://git-scm.com/downloads/guis)
해당 사이트에서 OS에 맞게 설치한다
필자는 mac이므로 homebrew 관리자를 통해 윈도우와는 보다 쉽게 설치 할 수 있다
- [] macOS 패키지 관리자 프로그램인 HomeBrew 를 설치할 수 있는가?
Yes
[Homebrew
The Missing Package Manager for macOS (or Linux).
brew.sh](https://brew.sh/index_ko)
- [] HomeBrew 패키지 관리자를 통해 git 프로그램을 설치할 수 있는가?
**Yes**
brew install git
- [] github.com에서 깃 저장소를 생성할 수 있는가?
Yes
먼저 깃헙과 같은 깃 저장소에 회원가입을 하고

new를 누르고 생성을 한다
- [] git 서버의 저장소를 로컬로 복제할 수 있는가?
Yes
git clone https://github.com/osk2090/bitcamp-study.git
- [] 로컬에서 작업한 파일을 로컬 깃 저장소에 백업할 수 있는가?
Yes
**git 백업 명단 작성**
git add .
일반적으로 git add .를 사용하며 변경이 일어난 모든 파일을 추적하게 한다.
git 백업 명단을 로컬 저장소에 백업
git commit -m "백업에 대한 간단한 내용"
- [] 로컬 깃 저장소에 백업한 내용을 깃 서버의 저장소에 업로드 할 수 있는가?
Yes
**로컬 저장소의 변경된 내용을 서버 저장소에 업로드 하기**
git push
- [] 컴퓨터에서 CPU와 RAM, HDD 의 관계 및 역할을 이해하고 있는가?
CPU:중앙 처리장치의 약자로 컴퓨터 시스템을 통제하고 연산을 처리하는 가장 핵심적인 컴퓨터의 제어장치이다(인간의 뇌로 치면된다)
RAM:보조 기억장치로 임의의 영역에 접근하여 일고 쓰기가 가능한 주기억 장치이며 컴퓨터를 끄면 읽은 데이터들이 날라가는 휘발성 메모리이다
HDD:하드 디스크 드라이브의 약자로 컴퓨터의 보조 기억 장치이다 컴퓨터를 꺼도 날라가지않는 비휘발성 메모리이며
종류로는 HDD와 SSD로 나뉘며 속도면에서 차이가 있다
먼저 램은 하드디스크로부터 일정량의 데이터를 복사해 임시 저장한 후 이를 필요시마다 CPU에 빠르게 전달하는 역할을 한다
이후부터는 속도가 느린 하드디스크는 배제하고 빠른 CPU와 램끼리만 데이터를 교환하므로 전반적인 작업을 고속으로 처리할 수 있다.
이래서 램의 용량이 중요한 것이다.
여기서 왜 CPU와 HDD가 한번에 연결할수 없는지 궁금증이 생길 것이다
이해하기 쉬운 예로는 음식점에서 손님에게 직접 음식을 가져가라는 의미와 같다고 생각하면 된다
다 절차가 필요하며 효율적인 업무를 위해 각자 역할을 나눠서 동작하려는 것이다.
- [] OS의 역할을 대략적으로 이해하는가?
운영체제는 프로세스 관리,기억장치 관리,입출력장치,자원관리 네가지로 나눠지는데
이것들을 모두 효율적으로 관리해주며 사용자에게 GUI로 서비스하여 보다 컴퓨터를 사용할수 있도록 도와주는 것을 말한다
대표적으로는 윈도우와 맥이 있다(유닉스와 리눅스)
- [] 명령어를 작성할 때 CPU에 맞춰서 작성해야 하고 또한 OS에 맞춰서 명령어를 구성해야 하는 이유를 설명할 수 있는가?
먼저 CPU는 제조사에 따라 CPU를 동작시킬수 있는 명령어가 다르다 또한 OS에 따라 명령어가 다르다
그래서 프로그램 하나를 설치하더라도 운영체제에 따라 설치파일이 다르고(윈도우는 exe,맥은 dmg)
같은 인텔칩이더라도 x86과 x64로 나뉜다(비트의 차이)
- [] 명령어를 작성할 때 컴파일러의 역할은 무엇인가?
자바를 예로 들면 개발자가 자바언어로 명령어를 작성하면 이것을 기계어와 유사한 바이트코드로 바꿔주는 것이
컴파일러의 역할이다(바이트코드가 각 OS에 맞는 JVM을 동작하여 실행할 수 있게 해준다)
- [] 컴파일러가 OS와 CPU에 따라 구분되는 이유를 아는가?
컴파일러가 기계어로 컴파일 해주면 앞서 말했듯 CPU와 OS를 동작시킬수 있는 명령어가 다르기 때문이다.
그래서 JDK를 설치할때 CPU제조사와 OS에 따라 설치파일이 다른것이다.(오라클 사이트 참조)
- [] 자바 컴파일러가 들어 있는 JDK를 설치할 때 OS와 CPU에 따라 구분해야 하는 이유를 아는가?
컴파일러가 기계어로 컴파일 해주면 앞서 말했듯 CPU와 OS를 동작시킬수 있는 명령어가 다르기 때문이다.
그래서 JDK를 설치할때 CPU제조사와 OS에 따라 설치파일이 다른것이다.(오라클 사이트 참조)
- [] 자바 컴파일러와 JVM의 역할을 설명할 수 있는가?
컴파일러는 개발자가 코드를 작성하면 그걸 기계어가 알아들수 있게 컴파일(변환)을 해주는것이 컴파일러의 역할이다.
JVM은 각OS에 자바 애플리케이션을 실행 해주는 자바가상머신으로 자바와 OS사이의 중개자 역할을 한다.
- [] 소스(source)와 바이트코드(bytecode)를 설명할 수 있는가?
소스는 개발자가 작성한 인간이 읽을수 있는 코드를 말한다.
바이트 코드는 VM에서 돌아갈 수 있는 이진 표현법으로 기계어에 가깝다.
- [] 자바 컴파일러를 사용하여 소스 파일을 컴파일 할 수 있는가?
먼저 해당 디렉토리로 이동하여 xxx.java파일을 터미널을 이용하여
javac xxx.java
컴파일러 작동/클래스파일 생성
- [] JVM을 사용하여 바이트코드를 실행할 수 있는가?
java xxx
로 JVM이 바이트코드를 해석하여 프로그램 실행
- [] 컴파일 방식과 인터프리터 방식의 차이점과 장단점을 이해하는가?(참조)
| 컴파일러 | 인터프리터 | |
| 번역 단위 | 전체 | 한줄씩 |
| 실행 속도 | 빠름 | 느림 |
| 번역 속도 | 느림 | 빠름 |
| 목적 프로그램 | 생성함 | 생성하지 않음 |
| 메모리 할당 | 목적프로그램 생성시 사용 | 사용 안함 |

- [] 자바는 하이브리드 방식으로 프로그램을 개발하고 실행한다. 하이브리드 방식을 설명할 수 있는가?


사진처럼 소스코드->[컴파일]->실행 파일->[인터프리터]->실행
순으로 동작한다