에뛰드 블로그
article thumbnail

🩷 03-1 컴퓨터는 어떻게 일하나요?

🩵 CPU

CPU (Central Processing Unit) : 컴퓨터를 통제하고 주어진 작업을 수행하는 장치

  • 다른 컴퓨터의 구성 요소와 정보를 주고받으면서 컴퓨터에서 이뤄지는 모든 일을 관할함
  • 컴퓨터에 저장된 프로그램을 불러와서 기계어로 작성된 명령문을 해석하고 실행함

 

🩵 코어, 스레드, 클럭

🤍 코어

코어 : CPU 중 가장 핵심이 되는 부품

멀티코어 : 여러개의 코어가 이루어졌다는 것

  • 요즈음 CPU 제조사들은 코어 자체의 속도를 높이기보다 여러 개의 코어를 탑재하는 방식을 택함
  • 코어 앞에 오는 숫자나 수식어는 코어의 수를 의미
    • 듀얼 (2), 쿼드 (4), 헥사 (6), 옥타 (8) 등

 

🤍 스레드

스레드 : 하나의 프로세스 안에서 돌아가는 한 개 이상의 작업 단위

 

🤍 클럭

클럭 : 기가헤르츠 (GHz) 단위로 표시되는 정보

  • 코어의 속도를 의미함
  • 기가헤르츠의 숫자가 클수록 코어의 속도가 빨라짐

 

🩵 메모리

메모리 : 컴퓨터의 작업에 사용되는 데이터를 일시적 또는 영구적으로 저장하는 장치

 

🤍 주기억장치

주기억장치 : 컴퓨터 내부에서 현재 CPU가 처리하고 있는 내용을 저장하고 있는 기억장치

  • 비교적 용량이 크고 처리속도가 빠름
  • CPU의 명령에 의해 기억된 장소에 직접 접근하여 읽고 쓸 수 있음

 

🤍 보조기억장치

보조기억장치 : 물리적인 디스크가 연결되어 있는 기억장치

  • 컴퓨터의 전원을 끄더라도 저장된 데이터가 사라지지 않고 영구적으로 보관할 수 있음

 

🤍 램

램 (RAM : Random Access Memory) : 메모리 어느 위치에 있는 데이터든지 같은 속도로 읽고 쓸 수 있음

 


기억 장치 속도는 캐시 > 메인 메노리 > 보조 기억 장치 순으로 빠름

 

🤍 휘발성 메모리와 비휘발성 메모리

휘발성 메모리 : 전력이 끊겼을 때 데이터가 손실되는 메모리

비휘발성 메모리 : 전력이 끊겨도 데이터가 유지되는 메모리

 

🩵 입출력 장치

입출력 장치 (I/O : Input/Output) : 컴퓨터에 신호와 정보를 보내는 입력장치와 컴퓨터의 연산을 결과로 내보내는 출력 장치

  • 모니터, 프린터, 키보드, 마우스 등이 해당됨

 

🩵 프로세스, 스레드

🤍 프로세스

프로세스 : 프로그램이 메모리에 올려져 CPU에 의해 실행되는 상태

여러 프로세스를 함께 처리하는 방법

  • 병렬 처리 방법
    • 병렬 처리 : 여러 작업을 동시에 실행하는 방법
    • 2개 이상의 코어가 각기 다른 프로세스의 명령을 실행해서 각 프로세스가 같은 순간에 실행되도록 하는 방법
    • 멀티 코어 환경에 맞게 프로그래밍만 잘 되어 있다면 코어의 개수만큼 빠른 일 처리 가능
  • 병행 처리 방법
    • 병행 처리 : 하나의 코어가 여러 프로세스를 돌아가면서 조금씩 처리하는 것
    • 작업을 조금씩 나누어 실행하면서 컴퓨터가 마치 여러 작업을 동시에 실행하는 것처럼 보이게 하는 처리 방법
    • 컨텍스트 스위칭 : 진행 순서를 바꾸는 것
      • 컴퓨터에서는 컨텍스트 스위칭이 매우 빠르게 일어나기 때문에 사람 눈에는 여러 프로그램이 동시에 실행되는 것처럼 보임
    • 멀티 프로세싱 : 여러 프로세스를 함께 진행하는 것

 

🤍 스레드

스레드 : 하나의 프로세스 안에서 돌아가는 한 개 이상의 작업 단위

  • 프로세스와 같이 컨텍스트 스위칭을 통해 병행 처리
  • 멀티 스레딩 : 여러 스레드가 함께 실행되는 것

 

🤍 프로세스와 스레드의 차이

프로세스 스레드
자기 영역을 명시해 둠 서로의 공간 구분하지 않음
멀티 프로세싱을 하면 메인 메모리가 배로 필요 스레드가 많아져도 메모리 추가로 차지하지 않음

 

 

 

🩷 03-2 바이트는 뭐고 자료형은 왜 쓰나요?

🩵 비트와 바이트

비트 (bit) : 2진 숫자 (binary digit) 의 약자로, 컴퓨터가 다루는 데이터의 최소단위이며 0 또는 1 이라는 2개의 값을 가짐

 


바이너리 파일
바이너리 파일 : 사람이 읽을 수 있는 텍스트 형식이 아니라 컴퓨터가 읽을 수 있는 이진 (바이너리) 숫자 형식으로 작성된 파일
      ● 이미지 파일, 동영상 파일, 각종 프로그램 실행 파일들이 해당됨

 

불리언 (boolean, 불) : true 혹은 false의 값만 가질 수 있는 값

 

바이트 : 비트 8개가 모인 것

0부터 255까지 총 256가지의 값을 가질 수 있음

 

🩵 자료형

자료형 : 프로그래밍 언어에서 여러 종류의 데이터를 저장하는 방식

자료형 비트 바이트 설명
byte 8 1 -2⁷ ~ -2⁷ - 1 사이의 정수 (-128 ~ 127)
short 16 2 -2¹⁵ ~ 2¹⁵ - 1 사이의 정수 (-32,768 ~ 32,767)
int 32 4 -2³¹ ~ 2³¹ - 1 사이의 정수
long 64 8 -2⁶³ ~ 2⁶³ - 1 사이의 정수
float 32 4 소수점 6~7자리까지 정확도를 갖는 실수
double 64 8 소수점 15자리까지 정확도를 갖는 실수
boolean 1 1 true, false (참 또는 거짓)
char 16 2 유니코드 문자 데이터

 

 

🩵 유니코드

유니코드 : 전 세계에서 사용되는 대부분의 문자를 포함한 문자열 셋

 

45 - 65 A 97 a
46 . 66 B 98 b
47 / 67 C 99 c
48 0 68 D 100 d
49 1 69 E 101 e

 

문자열 셋 : 사용자가 입력한 문자나 기호들을 컴퓨터가 이용할 수 있는 숫자로 만든 것

문자 인코딩 : 문자열 셋을 사람이 입력하는 문자를 그에 해당하는 숫자로 변환하는 것

 

아스키 코드 (ASCII code) : 0 ~ 127까지의 7비트 공간 안에 대문자와 소문자 알파벳, 스페이스와 탭, 각종 부호 값들이 지정되어 있음

 

유니코드 : 하나의 (Uni) 의 표 안에 한글, 한자, 히라가나를 비롯한 세계 각국의 문자, 고대 문자, 이모티콘까지 문자를 포함하고있음

 

 

🩷 03-3 프로그래밍 언어 분류

🩵 컴파일 언어, 인터프리터 언어

컴파일 언어 : 실행되기 전 다른 형식으로 번역되는 언어

인터프리터 언어 : 작성된 코드 그대로 통역되어 실행되는 언어

 

컴파일 : 코드를 실행하기 전에 기계어나 다른 코드로 먼저 번역한다는 것

컴파일러 : 소스 코드를 다른 언어나 형태로 번역해 주는 프로그램

 

 

🤍 컴파일 언어와 인터프리터 언어 비교하기

컴파일 언어 인터프리터 언어
컴파일에 많은 시간 소모  
업데이트 과정에서 수정 후 전체를 다시 빌드해서 배포해야 함  
오류를 미리 발견해 배포 후의 문제를 어느 정도 방지할 수 있음 오류가 잘 발견되지 않음
배포된 후에는 빠르게 실행됨 프로그램 실행 속도 느림

 

통합 개발 환경 (IDE : Integrated Development Environment) : 프로그래머가 소프트웨어 코드를 효율적으로 개발하도록 돕는 소프트웨어 애플리케이션

 

런타임 : 프로그램이 배포된 다음 실행되는 시점

런타임 오류 : 프로그램 실행 중에 오류가 생기는 경우

 

정적 타입 : 자료형이 고정된 것, 컴파일 언어에 사용

동적 타입 : 자료형이 고정되지 않은 것, 인터프리터 언어에 사용

 

🩵 절차지향, 객체지향 프로그래밍

🤍 절차지향 프로그래밍

절차지향 프로그래밍 : 소스 코드를 위에서부터 차례대로 읽는 방법

  • 소스 코드의 순서가 매우 중요
    • 소스 코드의 순서가 바뀌면 결과가 달라질 수 있음
  • 프로그램 전체가 유기적으로 연결되어 있음
    • 사소한 문제 하나만 생겨도 시스템 전체가 작동하지 않음

 

🤍 객체지향 프로그래밍

객체지향 프로그래밍 : 프로그램을 다수의 객체로 만들고 이 객체끼리 서로 상호작용하는 방법

장점

  • 각 객체의 역할이 나누어져 있음
  • 사용하고자 하는 부분에서 각각의 객체가 따로 작동
    • 하나의 객체가 고장 나더라도 해당 객체만 교체하면됨
  • 유지 보수가 쉽고 생산성이 좋음

 

단점

  • 모든 객체의 역할과 기능을 이해해야 하기 때문에 설계에 많은 시간이 걸림
  • 처리 속도가 느림
  • 대채로 난도가 높음

 

🤍 설계도

클래스 : 스펙을 정의하는 명세서

 

🤍 상속

상속 : 상위 클래스의 기능을 하위 클래스가 물려받아 기존 클래스에 기능을 추가하거나 재정의하는 것

  • 기존에 작성된 클래스를 재사용해서 코드의 중복을 줄일 수 있음
  • 상위 클래스를 수정하면 하위 클래스의 코드도 수정 효과를 보기 때문에 유지 보수에 드는 시간도 줄어듬

 

🩵 함수형 프로그래밍

함수형 프로그래밍 : 변수 사용을 최소화함으로써 스파게티 코드의 오류를 줄이는 프로그래밍

 

스파게티 코드 : 정상적으로 작동하긴 하지만, 코드의 구조를 파악하기 어려운 코드를 부르는 명칭

 

함수 (function) : 특정한 기능을 하는 소스 코드를 따로 빼서 묶어 놓은것

  • 코드를 기능별로 구분해서 코드 분석이 편리해짐
  • 같은 코드를 여러 번 사용하는 코드 중복을 줄일 수 있음

 

🩵 매니지드 언어, 언매니지드 언어

매니지드 언어 : 언어 자체에서 메모리를 관리해 주는 언어

언매니지드 언어 : 개발자가 직접 메모리를 관리해야 하는 언어

 

메모리 관리 : 메인 메모리를 관리하는 것

 

 

🩷 03-4 오류라는 위험에 대비하기

🩵 컴파일 오류, 런타임 오류

🤍 컴파일 오류

컴파일 오류 : 소스 코드를 컴파일하는 과정에서 일어나는 오류

  • 해결하지 않으면 빌드 자체가 되지 않음
  • 오류 발생 원인이 뚜렷하기 때문에 파악하기도 쉬움

 

🤍 런타임 오류

런타임 오류 : 프로그램 실행 도중 발생하는 오류

 

런타임 오류 발생 원인

  • Null에 의한 오류
  • 0으로 나눠서 생기는 오류
  • 의도하지 않은 무한 루프

버그 : 개발자에 의해 발생

오류 : 프로그램 사용자에 의해 발생

 

🩵 논리 오류

논리 오류 : 컴파일과 실행 모두 성공하지만 실행 결과가 올바르지 않은 오류

  • 알고리즘상의 논리적 결함이나 코드상의 문제로 발생함
  • 눈에 띄지 않는 오류이기 때문에 가장 경계해야할 오류

 

🩵 예외처리

예외처리 : 오류 발생 시에도 프로세스를 지속시킬 수 있는 수단

  • try - catch 구문 사용
    • try : 오류를 예상
    • catch : 해당 오류의 대처 방법

 

🩵 메모리 누수

메모리 누수 : 사용하지 않는 데이터가 비워지지 않고 메인 메모리 공간에 쌓여있는 현상

가비지 컬렉션 : 메인 메모리상 불필요한 데이터를 자동으로 치우는 기능

  • 메모리 데이터 중에 사용할 일이 없는 데이터를 컴퓨터가 판단해서 주기적으로 치워주는 것
  • 프로그램이 동작하는 도중 불특정 시점에 실행됨
    • 프로그램이 부분적으로 혹은 전체적으로 중단됨
    • 어떤 데이터가 더 이상 사용되지 않을지 또한 컴퓨터가 판단해야하므로 시간이 소요됨
컴파일 오류 컴파일 단계에서 발생하는 경우 ● 키워드, 맞춤법이 틀린 경우
● 필요한 문장 부호가 빠진 경우
● 선언되지 않은 변수를 사용한 경우
런타임 오류 프로그램 실행 중 발생하는 경우 ● 0으로 나누는 경우
● 무한 루프에 빠지는 경우
● Null 경우
논리 오류 컴파일 및 실행은 되지만 사용자가 의도한 결과가 나오지 않는 경우
구문 오류 프로그래밍 언어의 사용법에 맞지 않는 코드로 인해 발생하는 경우

 

 

🩷 03-5 개발에 필요한 여러 가지 도구

🩵 패키지 매니저

패키지 : 소스 코드를 배포하기 위해 사용되는 코드 묶음

패키지 매니저 : 라이브러리의 설치, 업데이트, 삭제 등을 관리하는 소프트웨어 도구

운영체제 패키지 매니저 : 컴퓨터에서 사용할 프로그램들을 관리

프로그래밍 언어 패키지 매니저 : 소프트웨어를 개발할 때 사용할 수 있음

 

🩵 환경변수

환경 변수 : 프로그램이 작동할 환경에 지정된 변경 가능한 값

  • 시스템 실행 파일이 있는 디렉터리를 지정하는 등 운영체제에서 작동하는 응용 프로그램이 참조하기 위한 설정 기록

 

🤍 필요한 프로그램의 실행 경로

path 환경 변수 : 컴퓨터에서 작동하는 프로그램을 필요로 하는 다른 프로그램이나 라이브러리의 위치를 모두가 접근할 수 있는 곳에 적어 두는 용도로 사용하는 환경 변수

 

🤍 개발 환경 용도 구분

 

일반적으로 기업에서는 같은 구조의 데이터베이스를 두 개 이상 두어 하나는 실제 서비스에 사용하고 나머지는 개발용 및 테스트용으로 사용

 

 

만약 환경 변수를 사용하지 않는다면 개발 중에 개발용 데이터베이스를 사용하도록 코드를 작성한 뒤 배포할 때마다 빌드 전 코드를 서비스용 데이터베이스에 맞게 수정해야 함.

위 진행이 번거롭기도 하지만, 실수가 생길 가능성도 높고 어느 과정이든 누락될 경우 큰 문제로 이어질 수 있음

⭐ ∴ 프로그램을 개발할 때는 환경 변수를 사용해서 프로그램이 작동할 환경의 용도를 구분

 

 

🩵 런타임 환경

런타임 환경 : 프로그램이 작동할 수 있도록 해 주는 소프트웨어

런타임 라이브러리 : 프로그램이 실제 환경에서 실행되기 위해 필요한 모듈들

 

🩵 SDK

SDK (Software Development Kit) : 특정 언어나 환경의 소프트웨어를 개발할 수 있도록 제공되는 키트

 

 

🩷 03-6 타임머신을 타고 형팽우주를 누비는 개발자

🩵 VCS

VCS (버전 관리 시스템, version control system) : 프로젝트의 변경 내역을 관리하는 시스템

  • 소프트웨어를 개발할 때 일정 시점과 단위로 프로젝트를 관리
  • 소스 코드 백업과 복구를 쉽게 도와주고 협업을 용이하게 도와줌

🩵 깃

깃 (Git) : 가장 널리 사용되는 VCS

  • 커밋 : 프로젝트 작업 상태를 저장
  • 푸시 : 각 작업을 본 프로젝트에 업로드
  • : 다른 작업자들이 수정한 코드를 가져옴
  • 프로젝트를 관리하고 협업

🤍 리셋과 리버트

리셋 (reset) : 그 이전으로 뒤로 감기

리버트 (revert) : 특정 버전만 거꾸로 돌려 감기

 

🤍 브랜치

브랜치 : 하나의 프로젝트 폴더 안에 여러 차원을 분기할 수 있음

 

머지 (merge) : 버전에서 작업한 내용들을 메인 차원으로 가져오는 것

 

🩵 깃 호스팅 서비스

깃 호스팅 서비스 : 깃으로 관리하는 프로젝트를 저장하는 공용 저장소를 제공하는 서비스

 

 

 

profile

에뛰드 블로그

@MISU 미수

매일매일 1px씩 성장하는 개발자입니다! 성장하면서 알게 된 저의 지식을 공유하고 성장하기 위한 블로그입니다

검색 태그