IT (Information Technology)

[IT] 비전공자를 위한 이해할 수 있는 IT 지식

Yeoymar 2022. 8. 21. 23:38

안녕하세요.

최근에 '코딩'에 관심이 생겨 기본 지식을 얻고자 책을 한 권 구매했습니다.

 

도서명 : 비전공자를 위한 이해할 수 있는 IT 지식

저자 : 최원영

출판 : 티더블유아이지 (2020.07.14)

 

초보자들이 이해하기 쉽게 설명되어 있고, 전공분야는 아니지만 메카트로닉스과 출신으로서 C언어와 C++과목이 있었기에 마냥 어렵지는 않았습니다. 책에 나온 정보들을 기반으로 공부한 내용들을 정리하기 위한 목적으로 작성한 글이니 참고하시기 바랍니다.


프로그래밍 언어

 컴퓨터는 0과 1로 이루어진 기계어를 씁니다. 인간은 인간의 언어를 사용합니다.

그렇기에 컴퓨터와 인간은 서로 소통할 수 없습니다. 그래서 개발된 것이 중간역할을 해주는 컴파일러(Compiler)입니다.

컴파일러는 프로그래밍 언어로 작성된 프로그램을 컴퓨터의 언어인 기계어로 번역해주는 시스템 소프트웨어입니다.

프로그래밍 언어로 문서 작업하는 행동을 '프로그래밍' 혹은  흔히 부르는 '코딩'이라고 합니다.

 어떻게 프로그래머는 위 사진과 같은 단어와 기호들을 쉽게 작성할 수 있을까요?

답은 바로 코딩을 도와주는 프로그램들이 있기 때문입니다. 이런 프로그램들을 IDE(Integrated Development Environment)

즉, 통합 개발 환경이라고 부릅니다. 쉽게 개발을 하기 위한 모든 것들을 제공해주는 환경이라고 생각하시면 됩니다.

IDE의 종류를 간단하게 예로 들면 다음과 같습니다.

안드로이드 : 안드로이드 스튜디오(Android Studio)
애플 : 엑스코드(Xcode)

 이렇듯 IDE는 대부분 어떤 분야에 특화되어 있습니다(특정 IDE는 여러 언어 및 분야를 지원하기도 합니다).

 

운영체제(OS)

 운영체제에 대해 이야기하기 앞서 컴퓨터(PC : Personal Computer)에 대해 얼마나 알고 계신가요? 컴퓨터의 구성요소로는 CPU와 주기억장치인 메모리와 보조기억장치인 HDD, SDD를 메인보드라고 하는 판에 장착하고 전원을 붙이면 컴퓨터가 됩니다.

 - 중앙처리장치(CPU : Central Processing Unit) : 컴퓨터의 '머리' 역할로 명령어를 해독하고 실행하는 장치로, 제어장치, 연산장치, 레지스터들로 구성된다.
 - 메모리(Memory) : 램(RAM)으로 불리기도 하며, 용량이 높을수록 한번에 처리할 수 있는 데이터의 용량이 커져 빠른 속도를 낼 수 있습니다. 컴퓨터를 끄면 정보가 사라지며 이것을 '휘발성'이라고 부릅니다.
 - HDD(Hard Disk Drive) : 둥근 자기 디스크를 회전시켜 데이터를 읽고/저장할 수 있는 저장장치입니다. 디스크를 회전시켜야 하는 물리적 한계 때문에 SSD보다 데이터 전송속도가 느립니다.
 - SSD(Solid State Drive) : 반도체를 이용하여 정보를 저장하는 장치이다. 하드디스크드라이브에 비하여 속도가 빠르고 기계적 지연이나 실패율, 발열·소음도 적으며, 소형화·경량화할 수 있는 장점이 있다.
 - 메인보드(Mainboard) : 마더보드(motherboard) 또는 주기판(主基板)이라고도 한다. PC의 실행 환경을 설정하고 그 정보를 유지해 주며, PC가 안정적으로 구동되게 해주고, PC의 모든 장치들의 데이터 입출력 교환을 원활하게 해주는 부분이다.

 CPU는 따로 데이터를 저장하지 않기 때문에 데이터를 연산하거나 처리하려면 저장된 데이터를 CPU로 보내줘야 합니다.

이 때 CPU는 창고 역할을 하는 기억장치인 HDD, SSD에 신호를 보냅니다. 그런데 창고가 워낙 크고 CPU보다 속도가 느리기 때문에 CPU의 속도가 하향 평준화가 됩니다. 그래서 메모리라는 CPU의 개인 작업 공간을 만들었습니다. 작업이 필요한 큰 데이터 뭉치를 보조기억장치에서 메모리로 한 번 옮겨놓고 메모리 안에서만 작업하는 방식으로 속도가 느려지지 않게 합니다. 가끔 메모리에 큰 데이터 뭉치만 전달해주면 됩니다.

포토샵을 예로 들어볼까요?
포토샵 실행파일은 윈도우(OS) 기준으로 'C 드라이브 - Program files - Adobe - Photoshop'에 저장되어 있습니다.
바탕화면에 있는 포토샵 아이콘은 위 경로에 있는 실행파일의 '바로 가기' 파일입니다.
'바로 가기'를 '더블클릭' 하면 위 경로에 저장된 실행파일이 '더블클릭' 되어 실행된 것입니다. 결국 보조기억장치에 저장된 프로그램을 CPU가 실행한 것이죠. '더블클릭' 후 포토샵이 바로 나오지 않고 로딩화면 후에 나오게 되는데 로딩시간에 보조기억장치에서 '실행에 필요한 데이터'가 메모리로 올라가고 있는 겁니다. 이후 부터는 포토샵에서 어떤 작업을 하든 CPU가 메모리 위에서 빠르게 작업을 수행할 수 있게 됩니다.

 위 과정이 프로그램이 실행되는 과정입니다. 그렇다면 이 과정들을 누가 해주고 있는 걸까요?

바로 운영체제(Operating System)이라는 소프트웨어입니다. 대표적으로 '윈도우', '맥 OS', 'iOS', '안드로이드'가 있죠.

이 모든 운영체제는 우리 대신 하드웨어를 관리해 줍니다.

네트워크

 컴퓨터가 연결된 작은 지역을 LAN(Local Area Network)이라고 표현합니다. 학교 컴퓨터실 하나, 아파트 하나, 커피숍 하나하나가 모두 LAN입니다. 또 여러 LAN을 하나로 연결해 MAN(Metropolitan Area Network)을 만들었습니다. 그리고 도시와 도시, 나라와 나라를 연결해 WAN(Wide Area Network)을 만들었습니다. 범위가 커지면서 유선으로 연결하기엔 한계라고 느껴 무선신호인 3G, 4G, 5G를 만들기 시작했습니다.

 'IP(Internet Protocol) 주소'라는 말을 많이 들어 보셨을 텐데요. 말 그대로 해당 컴퓨터가 위치한 주소입니다.

최근까지 32비트로 이루어져 약 40억개의 주소를 만들어 낼 수 있는 IPv4(Internet Protocol Version 4)를 사용했었는데요. 컴퓨터가 기하급수적으로 늘어남에 따라 많은 IP주소가 필요하여 128비트로 이루어져 거의 무한대의 주소를 만들 수 있는 IPv6 체제 도입을 위해 개발중에 있다고 합니다.

클라이언트 & 서버

 스마트폰도 하나의 컴퓨터입니다. 카카오톡으로 파일을 받는 상황이라고 하면 '스마트폰 컴퓨터'가 파일요청 신호를 보내고,  '카카오톡이 켜놓은 컴퓨터'가 신호를 받아 파일을 보내주게 됩니다. 여기서 '스마트폰 컴퓨터'를 클라이언트(프론트 엔드), '카카오톡이 켜놓은 컴퓨터'를 서버(백 엔드)라고 합니다. 서버는 클라이언트의 요청에 데이터를 주는 컴퓨터입니다.

  서버 프로그램들은 리눅스라는 운영체제에서 사용됩니다. 그런데 윈도우나 맥 OS를 두고 왜 리눅스 버전들을 사용할까요? 윈도우나 맥 OS는 일반인들이 사용하기 쉽게 바탕화면과 폴더, 파일이라는 개념을 만들어 그래픽UI를 더했습니다. 하지만 서버는 24시간, 365일 안정적으로 돌아가는 게 중요하기 때문에 굳이 그래픽 UI가 필요없습니다. 그렇기에 더욱 저렴하고 사람들이 서버에 리눅스 버전을 사용하는 이유입니다.

API(Application Programming Interface)

 클라이언트가 서버에게 요청하면 서버는 요청에 따라 적합한 처리를 해서 응답을 줍니다.
하지만 컴퓨터는 한글을 모르기에 어떤 요청이 '메시지를 달라'는 요청인지, '로그인 시켜줘'라는 요청인지 알 수 없습니다.
요청을 구분할 수 있도록 하는 체계가 바로 API(Application Programming Interface)입니다.
API는 클라이언트, 서버와 같은 서로 다른 프로그램에서 요청과 응답을 주고 받을 수 있게 만든 체계입니다. 추가로 주고 받을 때 데이터를 주고 받는 기능도 함께 넣습니다.
  클라이언트의 관점에서 API를 살펴보겠습니다. 클라이언트 소프트웨어는 서버에 요청을 보냅니다. '타임라인에 사진을 올리는' 요청이라고 생각하면 이 요청을 CRUD라고 불리는 4가지 요청으로 나눌 수 있습니다.

CREATE (올려줘) ▶ 컴퓨터주소/timelinecreate
READ (불러와줘) ▶ 컴퓨터주소/timelineread
UPDATE (바꿔줘) ▶ 컴퓨터주소/timelineupdate
DELETE (지워줘) ▶ 컴퓨터주소/timelinedelete

타임라인의 CRUD 요청은 각각의 주소를 가지게 되는데 이런 구성은 주소가 너무 많아지고 관리하기가 힘들다는 단점이 있습니다. 사람들은 좀 더 체계적으로 관리하고자 사회 운동이 만들어 집니다. 이 API를 REST(Representational State Transfer)한 API 즉, RESTful API라고 부릅니다. RESTful API에서는 CRUD를 하나의 주소로 관리합니다.

CREATE (생성해줘) ▶ POST
READ (불러와줘) ▶ GET
UPDATE (바꿔줘) ▶ PUT(전체) / PATCH(일부)
DELETE (지워줘) ▶ DELETE
 메소드(Method) : 메소드는 수학의 '함수'와 같은 의미로 사용합니다. 요청을 보내면 결과가 나오는 API의 모습이 함수와 같아서 메소드라고 표현합니다.
 요청 변수 or 파라미터(Parameter) : 예를 들면 로그인 요청에서 필요한 ID와 비밀번호를 '로그인 요청에 필요한 요청 변수' 혹은 '파라미터'라고 표현합니다.

 서버의 관점에서 API를 살펴보겠습니다. 서버의 응답에는 2가지 경우가 있습니다. '잘 됐어', '잘 안됐어'입니다.
사람마다 '잘 됐어'와 '잘 안됐어'의 표현이 다르기 때문에 모두가 알 수 있도록 체계를 만들었습니다.
'잘 됐어'는 200번대 코드(201, 202··· 등등)로 표현하기로 정합니다. '잘 안됐어'는 2가지 경우가 있을 수 있습니다.
클라이언트의 요청문제 혹은 서버 내부의 문제입니다. 클라이언트의 문제인 경우 400번대 코드, 서버의 문제인 경우 500번대 코드로 사용합니다.
 API 개념을 조금 확장하여 한 컴퓨터에 여러 소프트웨어가 함께 있는 경우가 있습니다. 예를 들어 1번 소프트웨어에서 2번 소프트웨어의 기능을 사용하고 싶습니다. 1번 소프트웨어가 2번 소프트웨어에게 요청을 보내 2번 소프트웨어가 응답을 하면 됩니다. 단, 응답을 하는 2번 소프트웨어에서 해당 기능의 API를 미리 만들어 두어야만 사용할 수 있습니다. 이처럼 API를 제공해주는 '다른 소프트웨어'를 SDK(Software Development Kit)라고 부릅니다. 구체적인 예로 구글에서 제공하는 지도 SDK를 설치하면 자신의 소프트웨어에 구글 지도 기능을 넣을 수 있습니다.

JSON(JavaScript Object Notation)

 API에서 클라이언트가 서버로 보내는 요청(Request)와 서버가 클라이언트로 보내는 응답(Response)에 대해 배웠습니다.
요청과 응답을 할 때에는 데이터가 담길 수 있기에 데이터를 넣을 수 있는 '기능'을 같이 개발해야 한다는 것도 배웠습니다.
그런데 데이터를 넣을 수 있는 '기능'은 여러가지 형식이 있습니다.
 클라이언트가 서버로 '아이디, 요청 일자, 다른 정보'를 보낸다고 가정해 봅시다.

첫번째 형식    두번째 형식                 세번째 형식
[아이디,          {아이디:sejohn1022,    [(아이디:sejohn1022),
요청일자,        요청일자:20220821,    (요청일자:20220821),
다른정보////     다른정보:뭐시기}         (다른정보:뭐시기)]
sejohn1022,
20220821,
뭐시기

위와 같이 무한개의 형식을 만들어 낼 수 있다는 것이 문제입니다. 이 또한 모두가 같은 형식을 사용하면 좋지 않을까하여
가장 많이 사용하는 형식이 JSON입니다. JSON 형식은 아래와 같습니다.

{
   키1(Key): 값1(Value),
   키2(Key): 값2(Value),
   키3(Key): [ 값3, 값4, 값5 ]
}
{
   "category": "음료",
   "sort": "desc",
   "items": [ "카페모카", "카페라떼", "아메리카노" ]
}