일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 2단계 Page Table
- 코드스테이츠 백엔드 과정 39기
- Effective Access Time
- Shared Page
- 자바 문제풀이
- 스프링부트
- Allocation of Physical Memory
- Inverted Page Table
- 다단계 페이지 테이블
- 프로세스 불연속 할당
- jpa
- 메모리 관리
- annotation
- 알고리즘
- Page Table의 구현
- 자바 알고리즘
- 메모리의 불연속적 할당
- 프로세스 동기화
- 운영체제
- springboot
- 스프링
- 웹개발
- Segmentation with Paging
- CS
- 리눅스
- 웹 프로그래밍
- 프로세스 할당
- 문제풀이
- spring
- linux
- Today
- Total
GrowMe
TIL : 컴퓨터와 프로그래밍 본문
학습목표
# 컴퓨터의 구성 요소에 대해서 설명할 수 있다.
# 프로그램을 실행하면 컴퓨터 내부에서 어떤 일이 일어나는지 이해할 수 있다.
# 프로그래밍과 관련된 개념들을 설명할 수 있다.
-프로그램, 프로그래밍, 프로그래밍 언어, 컴파일, 빌드, 통합개발환경
# 웹 클라이언트와 웹 서버가 무엇인지 설명할 수 있다.
# 자신의 운영체제에 맞는 개발 도구를 설치하고, 환경설정을 할 수 있다.
# IntelliJ의 기본적인 기능들을 사용할 수 있다.
컴퓨터의 이해
# 컴퓨터란?
# 컴퓨터의 구성요소
# 소프트웨어
# 하드웨어
# 컴퓨터의 동작
*컴퓨터란?
- 입력 받은 데이터를 정해진 규칙대로 처리해서 처리 결과를 저장하고 출력하는 전자 장치
- ‘입력 받은 데이터를’
- 컴퓨터는 사람으로부터 데이터를 받아들입니다.
- 즉, 컴퓨터는 데이터를 입력장치를 통해 입력받습니다.
- ‘정해진 규칙대로’
- 정해진 규칙은 프로그램을 의미합니다.
- 프로그램은 소프트웨어 및 애플리케이션이라고도 합니다.
- ‘처리해서’
- 위에서 언급한 정해진 규칙대로 연산을 수행합니다.
- 즉, 컴퓨터는 중앙처리장치를 통해 연산을 수행합니다.
- ‘처리 결과를 저장하고’
- 컴퓨터는 데이터를 저장할 수 있는 장치를 가지고 있습니다.
- 즉, 컴퓨터는 처리 결과물을 기억장치에 저장합니다.
- ‘출력하는 전자 장치이다’
- 컴퓨터는 데이터 처리 결과를 사람이 감각할 수 있는 형태의 정보로 사람에게 전달해줍니다.
- 즉, 컴퓨터는 처리 결과물을 출력장치를 통해 출력합니다.
*컴퓨터의 구성 요소
- ‘정해진 규칙대로’ → 소프트웨어
- ‘입력 받은 데이터를 처리해서 처리 결과를 저장하고 출력하는 장치이다’ → 하드웨어
→ 즉, 컴퓨터는 소프트웨어와 하드웨어로 구성되며, 이 둘의 상호작용을 통해 동작
*소프트웨어
- 어떻게 동작해야 하는지 규정해놓은 명령어의 집합
1. 시스템 소프트웨어(System Software)
- 응용 소프트웨어의 실행 환경
Ex) Mac, Windows, Linux와 같은 운영체제 및 Node.js, JRE와 같은 런타임 환경 - 하드웨어 장치를 관리
Ex) 키보드 드라이버, 마우스 드라이버, USB 드라이버와 같은 각종 장치 드라이버
2. 응용 소프트웨어(Application Software)
- 시스템 소프트웨어를 제외한 모든 소프트웨어
- 줄여서 애플리케이션 및 앱(== 프로그램)
*하드웨어
- 손으로 만질 수 있는 컴퓨터의 물리적인 장치. 각 장치는 시스템 버스로 연결되어져 있다.
1. 중앙처리장치 (Central Processing Unit, CPU)
- 프로그램의 실행과 데이터 처리를 담당하는 컴퓨터의 핵심 장치로, 프로세서라고도 함
- 제어장치
- CPU의 모든 동작과 데이터 흐름을 통제하고 관리
- 운영체제와 소통하며 컴퓨터의 자원을 관리 - 연산장치
- 프로그램에 기술되어져 있는 명령어를 수행
- 코드를 실질적으로 실행시키는 장치 - 레지스터
- CPU 내에 존재하는 작고 빠른 기억장치
- 연산장치의 동작에 필요한 데이터들을 임시적으로 보관하며 제공
2. 기억장치(Memory Device)
- CPU의 동작에 필요한 데이터들을 장기적으로 또는 단기적으로 보관
- 보조기억장치
- 컴퓨터에게 필요한 모든 정보를 반영구적으로 저장
- 큰 용량의 데이터를 저장할 수 있지만, 데이터를 읽고 쓰는 속도가 느림
- CPU의 연산 속도는 엄청나게 빠른 반면, 보조기억장치는 느리기 때문에 CPU는 보조기억장치와 직접적으로 소통하지 않음
- Ex. SSD(Solid State Drive), HDD (Hard Disk Drive) - 주기억장치
- 컴퓨터가 프로그램을 수행하는 동안 필요한 모든 데이터들을 저장
- 큰 용량의 데이터를 저장할 수 없지만, 데이터를 읽고 쓰는 속도가 빠름
- CPU의 연산 속도를 어느 정도 따라 잡을 수 있을 정도로 빠르기 때문에 CPU는 주기억장치와 직접적으로 소통
- Ex. RAM(Random Access Memory), ROM (Read Only Memory)
💡캐시 메모리 (Cache Memory)
주기억장치는 보조기억장치에 비해 빠른 속도를 가졌지만, CPU의 연산 속도만큼 빠른 것은 아님. 캐시 메모리는 한 번 CPU가 사용한 데이터와 관련된 데이터 중, 재사용 가능성이 높은 데이터를 주기억장치로부터 미리 불러와서 대기시켜놓는 역할을 함. 데이터를 현금이라고 할 때, 주기억장치 = ATM, 캐시 = 지갑.
💡기억장치의 계층구조
기억장치는 용량, 속도, 가격에 따라 아래와 같이 분류

3. 입력장치(Input Device)
- 사용자로부터 컴퓨터 내부로 데이터를 입력 받는 장치. Ex) 키보드, 마우스, 마이크, 트랙패드 등
4. 출력장치(Output Device)
- 컴퓨터 내부로부터 사용자에게 사람이 감각할 수 있는 형태로 데이터를 출력해주는 장치.
Ex) 모니터, 스피커, 프린터 등
5. 시스템 버스(System Bus)
- CPU를 포함한 각 하드웨어 장치 간의 통로. 즉, 각 하드웨어 장치를 물리적으로 연결한 전선을 의미하기 때문에 시스템 버스 또한 하드웨어에 포함됨.
- 데이터 버스
- 하드웨어 간에 데이터를 전달하는 통로
- 주소 버스
- 데이터가 어디에 도착해야 하는지에 대한 정보를 전달하는 통로
- 제어 버스
- CPU의 제어장치가 생성한 제어 신호를 다른 장치로 전달하는 통로
*컴퓨터의 동작
계산기를 켜봅시다. 계산기를 켜면 여러분의 운영체제가 보조기억장치에 저장되어 있던 계산기 프로그램을 주기억장치인 RAM에 로드시킵니다. 여러분이 흔히 알고 있는 로딩(Loading)이 바로 이 과정입니다. 메모리에 적재한다는 의미이죠. 즉, 로딩은 CPU가 작업할 수 있도록 보조기억장치에서 주기억장치로 프로그램 파일을 옮겨오는 과정입니다.
로딩이 완료되면 이제 계산기가 모니터 상에 출력되어져 나타나는데, 참고로 이렇게 실행 중인 프로그램을 프로세스라고 합니다. 여러분이 작업관리자를 열면 ‘프로세스’라는 항목이 있는데, 이 프로세스가 바로 메모리에 로드되어 실행 중인 프로그램들을 나타낸 것입니다.
이제 여러분은 키보드 및 마우스와 같은 입력장치를 통해 계산기에 데이터를 입력할 수 있습니다. 1 + 1이라는 데이터를 입력하고 엔터를 누른다고 가정하면, CPU는 1 + 1을 계산기 프로그램의 소스 코드에 작성된대로 해석하고, 소스 코드에 작성된 명령어들을 적용하여 계산을 시작합니다.
복잡한 연산이 아니므로 순식간에 계산이 이루어집니다. 계산이 완료되면 계산 결과는 주기억장치에 저장되며, 모니터를 통해 여러분에게 보여지게 됩니다.
프로그래밍의 이해
# 프로그래밍
# 프로그램
# 프로그래밍 언어
# 컴파일
# 빌드
# 통합개발환경
*프로그래밍
- 프로그램을 만드는 과정으로서, 특정 목적을 달성하기 위해 설계된 알고리즘을 프로그래밍 언어를 사용하여 코드로 작성하는 과정을 의미
*프로그램
- 프로그래밍의 결과로 만들어진 것. 즉, 프로그램은 어떠한 목적을 달성하기 위한 컴퓨터 명령문의 집합체
*프로그래밍 언어
- 컴퓨터는 기계어를 사용. 기계어는 사람이 이해하기 어려움. 컴퓨터의 언어와 사람의 언어를 매개해 줄 무언가가 필요
b8 21 0a 00 00 a3 0c 10 00 06 b8 6f 72 6c 64 a3 08 10 00 06 b8 6f 2c 20 57
a3 04 10 00 06 b8 48 65 6c 6c a3 00 10 00 06 b9 00 10 00 06 ba 10 00 00 00
bb 01 00 00 00 b8 04 00 00 00 cd 80 b8 01 00 00 00 cd 80
-> 컴퓨터의 언어와 사람의 언어를 매개해주는 언어가 바로 프로그래밍 언어
System.out.println("Hello World!");
참고로, 기계어와 같이 컴퓨터에게 가까운 언어일수록 저수준 언어라고 하며, 반대로 Java 및 C언어와 같이 사람과 가까운 언어일수록 고수준 언어라고 함.
*컴파일
프로그래밍 언어는 그저 사람의 언어와 컴퓨터의 언어를 매개할 뿐, 컴퓨터는 프로그래밍 언어로 작성된 소스 코드를 이해하지 못함. 그래서 소스 코드를 작성한 후에 컴퓨터에게 내용을 전달하려면 소스 코드를 기계어 코드로 변환시켜주어야 함. 이처럼 프로그래밍 언어로 작성된 소스 코드를 컴퓨터가 이해할 수 있는 기계어 코드로 번역하는 과정을 컴파일(Compile)이라고 함.
*빌드
컴파일은 빌드(Build)라는 과정의 일부. 빌드는 작성한 소스 코드를 실행할 수 있는 산출물로 변환시키는 과정을 의미.
컴파일을 마친 코드는 기계어 코드로 번역되어 컴퓨터가 이해할 수 있을 뿐, 아직 사용자가 소스 코드를 실행할 수는 없음. 프로그램이 실행되려면 .exe또는 .msi 확장자를 가진 실행 파일로 만들어주는 빌드 과정이 필요. 빌드가 완료되어야 소스 코드가 비로소 실행시킬 수 있는 하나의 프로그램으로 완성됨.
*통합개발환경 (Integrated Development Environment, IDE)
IDE는 코드를 작성할 때 사용하는 프로그램. 프로그래밍에 필요한 모든 작업을 하나의 프로그램 안에서 처리할 수 있도록 만들어진 프로그램. 단순히 코드를 작성하고 편집하는 것뿐만 아니라, 디버깅, 빌드 등의 작업을 하나의 IDE 안에서 할 수 있음. Ex) Visual Studio Code, IntelliJ, Eclipse 등
웹 클라이언트와 웹 서버
# 웹 클라이언트와 웹 서버
# 프론트엔드와 백엔드
# 클라이언트와 서버 종류
*웹 클라이언트와 웹 서버

인터넷 연결이 없다면 쇼핑몰 앱은 정상적으로 동작할 수 없다. 그 이유는 상품 정보를 인터넷 어딘가에 존재하는 서버로부터 받아오기 때문. 서버(server)는 영어 단어 그대로 제공(serve)하는 주체.
- 판매 상품 정보가 전부 앱안에 담긴 경우 : 현실에서 이런 경우는 없지만, 만약 앱과 연결된 서버가 존재하지 않는다면 어떤 문제가 생길까??
끊임없이 앱을 업데이트를 해야함. 쇼핑몰 앱 1.0 버전을 잘 사용하더라도 새로운 상품을 업데이트하면 1.0 버전 내에는 신상품에 대한 정보가 없어서 앱 자체를 전부 업데이트해야함. 이 외에도 서버가 없다면 "결제"라는 행동을 할 수 없다. "결제"도 결국 금전 정보를 주고받는 은행 서버와의 연결이 필요.

이렇게 상품 정보 같은 리소스가 존재하는 곳과 리소스를 사용하는 앱을 분리시킨 것을 2티어 아키텍처, 또는 클라이언트-서버 아키텍처라고 부름. 리소스를 사용하는 앱이 바로 "클라이언트", 리소스를 제공(serve)하는 곳은 "서버"

일반적으로 서버는 리소스를 전달해 주는 역할만 담당. 리소스를 저장하는 공간을 별도로 마련해 두는데 이 공간을 "데이터베이스"라고 부름. 데이터베이스는 창고와 같은 역할. 이처럼 기존 2티어 아키텍처에 데이터베이스가 추가된 형태를 3티어 아키텍처라고 부름.
*프론트엔드와 백엔드

*클라이언트와 서버 종류

- 클라이언트
- 보통 플랫폼에 따라 구분됨. 브라우저를 통해 주로 이용하는 웹(Web) 플랫폼에서의 클라이언트는 웹사이트 또는 웹 앱이라고 부름. Ex) IOS, AOS, 윈도우 등 - 서버 : 무엇을 하느냐에 따라 종류가 달라짐
1. 파일 서버는 파일을 제공하는 앱
2. 웹 서버는 웹사이트에서 필요로 하는 정보들을 제공하는 앱
3. 메일 서버는 메일을 주고받을 수 있도록 도와주는 앱
4. 데이터베이스도 데이터 제공자로서 일하므로 일종의 서버
'TIL(Today I Learn)' 카테고리의 다른 글
TIL : 학습의 방법 (0) | 2022.04.25 |
---|