순간을 기록으로

[코드스테이츠] 백엔드 부트캠프 2일차 본문

코드스테이츠 백엔드 부트캠프

[코드스테이츠] 백엔드 부트캠프 2일차

luminous13 2022. 4. 26. 11:00

 

2일차

2일차에는 본격적인 실습을 진행하기에 앞서 컴퓨터에 대한 정의와 구성요소 그리고 학습 툴 설치 방법에 대해 배웠다.

 

컴퓨터란?

컴퓨터(compute)를 사전에 검사하면 '계산하다'라는 의미가 나온다. 즉 입력이 들어오면 규칙에 맞게 처리해서 처리결과를 저장한 후, 결과를 출력하는 기계라고 생가하면 된다. 이때 각 임무를 처리하기 위해 컴퓨터는 여러 구성요소로 구성된다.

 

  • 입력이 들어오면 --> 입력장치(키보드, 마우스 등)
  • 규칙에 맞게  --> 프로그램(프로세스, 앱, 애플리케이션)
  • 처리해서 --> CPU(중앙처리장치, 프로세서)
  • 처리결과를 저장한 후 --> 기억장치(주기억장치, 보조기억장치)
  • 결과를 출력한다 --> 출력장치(모니터, 스피커 등)

소프트웨어란?

소프트웨어는 하드웨어를 제어하는 명령어의 집합이다. 소프트웨어는 시스템 소프트웨어, 응용 소프트웨어로 나뉜다.

 

  • 시스템 소프트웨어
    • 응용 소프트웨어를 실행하기 위해 하드웨어와 응용 소프트웨어 사이에서 중계해주는 역할을 한다.
    • 예를 들어 운영체제, 드라이버 등이 있다.
    • 응용 소프트웨어 대신 하드웨어와 직접 소통하며 하드웨어를 관리한다.
  • 응용 소프트웨어
    • 시스템 소프트웨어를 제외한 모든 소프트웨어를 말한다.
    • 줄여서 앱, 애플리케이션이라고도 한다.

 

하드웨어란?

컴퓨터를 구성하는 물리적인 장치의 집합이다. 하드웨어는 크게 CPU, 기억장치, 입력장치, 출력장치, 시스템버스가 있다.

 

CPU

CPU는 프로그램의 제어와 연산을 담당한다. 프로세서라고도 불리기도 한다. CPU는 크게 제어장치, 연산장치, 레지스터로 구성된다.

 

  1. 제어장치
    • CPU는 프로그램의 모든 동작과 데이터를 관리한다.
    • 운영체제와 상호 소통한다.
  2. 연산장치
    • 프로그램에 저장되어 있는 명령어를 실행한다.
    • 코드를 실제로 처리하는 공간이다.
  3. 레지스터
    • CPU 안에 있는 기억장치 중 가장 빠른 장치다.
    • 연산하는데 필요한 데이터들을 임시적으로 저장하여 빠르게 가져올 수 있도록 도와준다.

기억장치

데이터를 저장하는 공간이다. 기억장치는 크게 주기억장치와 보조기억장치로 나뉜다. 

 

  1. 주기억장치(메인메모리, 램)
    • 보조기억장치보다 읽고 쓰는 속도가 빠르다. 그래서 cpu와 직접적으로 소통한다.
    • 프로그램이 종료되면 데이터가 사라진다.
    • 보조기억장치보다 용량이 상대적으로 적다.
  2. 보조기억장치(HDD, SDD)
    • 읽고 쓰는 속도가 느려서 CPU와 간접적으로 소통한다.
    • 전원이 꺼져도 데이터가 사라지지 않는다.
    • 주기억장치보다 상대적으로 용량이 크다.

기억장치를 계층적으로 나눈다면 다음과 같이 나눌 수 있다.

레지스터 > 캐시 > 주기억장치 > 보조기억장치

 

캐시 메모리

주기억장치가 보조기억장치보다 빠르지만 cpu 연산속도만큼 빠르지는 않다. 따라서 cpu가 주기억장치에 계속 직접적으로 접근하게 되면 주기억장치에서 데이터가 빠르게 빠져나가지 못하고 쌓이게 되는 병목현상이 발생하는 문제점이 생긴다. 따라서 캐시 기억장치가 탄생하게 되었다. 캐시 기억장치는 cpu가 주기억장치에서 사용하는 데이터 중 많이 사용하는 데이터를 미리 저장시킨다. 이렇게 하면 어느 정도 주기억장치에 접근하는 횟수가 줄어들어 병목현상이 해결된다.

 

입력장치(Input Device)

입력장치란 컴퓨터 안으로 데이터를 입력받는 장치를 말한다. 예를 들면 키보드, 마우스 등이 있다.

 

출력장치(Output Device)

출력장치란 컴퓨터 밖으로 데이터를 출력하는 장치를 말한다. 예를들면 모니터, 스피커, 프린터 등이 있다.

 

시스템버스(Systme Bus)

하드웨어 간에도 소통을 해야 한다. 예를들어 cpu가 처리할 명령어를 가져오려면 메인 메모리와 소통을 해야한다. 이때 관련된 데이터를 물리적으로 옮겨주는 하드웨어가 시스템 버스다. 시스템 버스는 데이터 버스, 주소 버스, 제어 버스로 나뉜다.

 

  1. 데이터 버스
    • 직접적인 데이터를 전달한다.
  2. 주소 버스
    • 데이터의 주소정보를 전달한다.
  3. 제어 버스
    • 제어 신호를 전달한다.

컴퓨터의 동작 흐름

  • 계산기 앱을 실행한다.
  • OS가 보조기억장치에 있던 계산기 프로그램을 RAM에 로드한다.(=Loading, )
  • 이렇게  메인메모리에 프로그램이 올라가 있으면 프로세스라고 한다. 즉 실행되고 있는 프로그램이다.
  • 2+2 연산을 한다
  • cpu는 2+2에 대한 소스코드를 보고 해석된 명령어를 통해 연산한다.

 


프로그래밍에 대한 이해

프로그래밍 언어가 필요한 이유

컴퓨터는 사람의 언어(영어, 한국어 등)를 이해할 수 없습니다. 컴퓨터가 이해하기에는 너무 어렵습니다. 그렇다면 프로그램을 작성하기 위해서 인간이 컴퓨터가 이해할 수 있는 언어인 기계어(0101001100..)로 작성해야 할까요? 인간에게도 컴퓨터가 쓰는 기계어는 어렵습니다.

 

그래서 컴퓨터의 자세한 동작도 제어할 수 있고 사람도 이해할 수 있도록 설계된 언어가 프로그래밍 언어입니다. 

 

컴파일(Compile)

컴파일은 프로그래밍 언어로 작성된 소스코드를 기계어 코드로 변환하는 것을 말합니다. 아무리 프로그래밍 언어라도 컴퓨터는 소스코드를 바로 이해할 수 없습니다. 왜냐면 컴퓨터는 0과 1밖에 모르거든요. 따라서 컴파일이란 과정이 필요합니다. 컴파일이 완료되어야 드디어 컴퓨터는 이해할 수 있습니다.

 

빌드(Build)

빌드란 작성한 소스코드가 산출물로 나오기까지의 과정을 말합니다. 이 과정에는 컴파일도 포함됩니다. 컴파일만 해서는 기계어 밖에 안 나오니 사용자가 실행할 수 없습니다. 따라서 프로그램이 실행하기 위한 .exe 도는 .msi를 만들어주는 빌드 과정이 필요합니다. 빌드가 돼야 사용자가 실행할 수 있는 하나의 프로그램이 탄생하게 됩니다.

 


웹 클라이언트와 웹 서버

2 Tier 아키텍쳐(클라이언트 - 서버 )

시스템 설계 방식 중 하나인 클라이언트-서버 구조는 리소스의 사용하고 있는 곳과 저장되어 있는 곳이 분리되어 있는 2 티어 아키텍처입니다. 만약 서버가 없고 앱에 모든 기능들이 모여 있다고 한다면 데이터를 추가하는 등의 수정이 생겼을 때 앱을 업데이터 해야 합니다. 업데이트하는 동안 당연히 사용자들은 앱을 사용할 수 없게 되고 큰 불편함이 발생하게 됩니다. 이러한 문제를 해결하기 위해 등장한 것이 2 티어 아키텍처입니다.

 

3 Tier 아키텍쳐(클라이언트 - 서버 - DB)

2티어 아키텍처에서 조금 더 발전한 아키텍쳐입니다. 2티어 아키텍쳐에서는 서버가 데이터를 직접 저장했습니다. 반면에 3티어 아키텍쳐에서 서버는 데이터를 직접 저장하지 않고 DB에서 데이터를 받아 클라이언트에 데이터를 전달해주는 역할을 합니다. 

 

 

Comments