비전공자를 위한 이해할 수 있는 IT지식
[책 요약] 비전공자를 위한 이해할 수 있는 IT 지식
2024. 1. 9. 22:25

프로그래밍 언어 & 운영체제(OS)
- 컴퓨터는 0과 1로 이루어진 기계어를 사용한다. 인간은 인간어를 사용하기 때문에 의사소통이 되지 않는다 이럴때 '컴파일러'를 통해 인간의 요구를 컴퓨터에게 전달해준다.
- 개발자는 컴파일러에게 문서로 일을 시키는 사람이다.
- 프로그래밍 언어를 사용해 컴파일러에게 명령을 전달하면 -> 컴파일러가 명령을 기계어인 0과 1로 변환해 컴퓨터에게 전달 하는 방식이다.
- IDE(Integrated Development Environment) (통합 개발 환경) : 개발자가 코드를 좀 더 편하게 작업하게 만들어 주는 기능이 들어있다.
ex) Androdid Studio, Eclipse, Pycharm, Entelij - 프로그래밍 언어는 여러 사람들이 계속해서 더 좋은 언어를 만들면서 종류가 다양해졌다. 그러면서 많은 사람들이 선택한 언어가 계속해서 살아남으며 발전하고 있다.
- 저수준 : 컴퓨터 친화적 언어 (학습이 어렵고 작성시 구체적으로 꼼꼼하게 작성해야 한다. 낮은 사양의 컴퓨터에서도 원활히 작동한다)
- 저수준을 사용하는 이유 : 가격이 저렴해진다.
- 고수준 : 인간 친화적 언어 (학습이 쉽다. 조금만 설명해줘도 컴퓨터가 알아서 행동한다. 그만큼 컴퓨터가 더 고민해야 하기에 사양에 따라 작동이 느리거나 안될 수 있다. )
- 프로그래밍 언어를 구분하는 기준은 '저수준', '고수준'으로 나뉜다`
- 저수준 : 컴퓨터 친화적 언어 (학습이 어렵고 작성시 구체적으로 꼼꼼하게 작성해야 한다. 낮은 사양의 컴퓨터에서도 원활히 작동한다)

- 컴퓨터 구성 요소
- CPU : 컴퓨터의 머리 역할을 한다. 데이터를 따로 저장하지 않는다.
- MEMORY : cpu의 개인 작업 공간, 보조기억장치에서 큰 정보를 메모리에 옮겨놓고 안에서 작업한다.
- 보조기억장치(HDD, SSD) : '창고 역할' 전원이 꺼져도 데이터는 남아있다.
ex) 포토샵을 쓰려고 저장 되있는 파일을 찾는다
c드라이브 - programfiles - Adobe - Photoshop에 있는 포토샵을 클릭 = 보조기억장치에 저장된 프로그램 실행
로딩하는 동안 보조기억장치에서 '실행에 필요한 데이터'가 메모리로 올라가고 있다. -> 로딩 후 , 메모리에 올라가있는 포토샵을 cpu가 유저가 원하는대로 움직이며 작업을 수행한다.
- 위에서 말한 과정은 우리가 직접하지 않는다. '어떤 소프트웨어'가 모든 과정을 대신 해준다. 바로 운영체제다
대표적으로 '윈도우', '맥 OS', 'IOS','안드로이드'가 있다. 우리는 이 운영체제를 이용해 프로그램을 설치, 제거하고 카카오톡을 실행할 수 있다.- 각 운영체제 위에 돌아가는 프로그램을 만들려면 정해진 언어로 프로그램을 만들어야한다.
Apple : Object-c, Swift / Google : Java, Kotlin...
- 각 운영체제 위에 돌아가는 프로그램을 만들려면 정해진 언어로 프로그램을 만들어야한다.
- JVM : Java언어로 만든 프로그램이 돌아갈 수 있게 만든 소프트웨어 (모든 운영체제에서 수정 없이 사용 가능해짐)
네트워크, 클라이언트, 서버
- LAN : 컴퓨터가 연결된 작은 지역 (학교 컴퓨터실, 아파트 하나, 커피숍)
- 이런 LAN들을 연결하는 선 : LAN선
- MAN : 도시의 여러 LAN을 하나로 연결
- WAN : 도시와 도시, 나라와 나라를 모두 연결
- 이 신호들을 무선으로 만들어 냄 (3g, 4g, 5g)


- IP주소 : 컴퓨터 위치 주소 , 이동에 따라 주소가 바뀐다.
- 클라이언트 : 사용자가 소유한 컴퓨터, 고객의 컴퓨터 (프론트엔드)
- 서버 : 데이터를 주는 컴퓨터, 고객에게 보이지 않는 컴퓨터 (백엔드)
- 리눅스 : 서버 프로그램을 돌리는 운영체제다.
- 리눅스에서 프로그램을 하루죙일 돌리는 이유 : 무료고 잘 만들어진 운영체제다.
리눅스를 발전시켜 다양한 운영체제가 만들어졌다.
- 리눅스에서 프로그램을 하루죙일 돌리는 이유 : 무료고 잘 만들어진 운영체제다.
- 호스팅 업체 : 집에서 서버를 운영하면 여러 문제에 봉착하기 때문에(전기세, 데이터 손실 등) 대신 관리해주는 업체가 있다
ex) 국내 : 가비아, cafe24 / 해외 : AWS
API와 JSON
- API : 클라이언트, 서버와 같은 서로 다른 프로그램에서 요청과 응답을 주고 받을 수 있게 만든 체계
- 요청하는 곳에 따라 (서버주소/A) -> 로그인 기능 수행, (서버 주소/B) -> 회원 가입 기능 수행으로 응답 한다.
(이러한 기능은 서버 개발자(백엔드)가 만들며 클라이언트 개발자는 그 API를 사용한다)
- 요청하는 곳에 따라 (서버주소/A) -> 로그인 기능 수행, (서버 주소/B) -> 회원 가입 기능 수행으로 응답 한다.

- API를 통해 요청과 응답을 주고 받을 때 데이터도 같이 담겨온다.
- 데이터를 다루는 요청 4가지 (CRUD)
ex) 타임 라인에 사진을 올리는 요청을 예로 들어 보자- C (Create) : 사진을 '올리는' 요청
- R (Read) : 사진을 '불러오는' 요청
- U (Update) : 사진을 '바꾸는' 요청
- D (Delete) : 사진을 '지우는' 요청
- CRUD는 각각의 주소를 가지고 있다. 하지만 각각의 주소를 구성하면 주소가 너무 많아지기에 관리하기 힘들어진다.
또한 기능이 겹칠 수 있고 버그의 위험성이 있다. 그래서 좀 더 체계적인 API를 만들게 되는데 그러한 API를 RESTful API라고 부른다 - RESTful API : CRUD를 하나의 주소로 관리한다. 그리고 요청을 보낼 때 어떤 요청을 보냈는지 파악할 수 있게 Method를 보낸다.
- Create : POST
- Read : GET
- Update : PUT (데이터 전체 수정 시) / PATCH (데이터 일부 수정 시)
- Delete : DELETE
- 서버로 응답이 올때 잘됐다는 응답은 여러가지의 표현으로 올 수있다 (잘됨, 완료, Good 등)
이러한 응답들을 200번대 코드로 표현한다.- 200 : 잘 됐어
- 400 : 클라이언트 요청에 문제가 있다
- 500 : 서버에 문제가 있다
- SDK : API를 제공해 주는 다른 소프트웨어

- 데이터를 응답 혹은 요청할때 각각의 형식이 다름을 방지하기 위해 유명한 형식을 쓰는데 그중 하나가 JSON이다

- 클라와 서버는 요청과 응답을 주고 받고, 그때 필요한 데이터들을 JSON 형식으로 주고 받는다.

웹(Web)
- HTML
- 운영체제에 상관없이 브라우저만 있으면 어디서도 동일한 정보를 볼 수 있다.
- 프로그래밍 언어가 아닌 브라우저가 볼 수 있는 문서를 적는 언어다.
- CSS코드로 디자인을 입힐 수 있다
- HTML + CSS = 퍼블리싱 작업 --> 퍼블리셔, 마크업 개발자라고 부른다
- JavaScript언어로 동적이고 세밀한 화면을 구현 할 수 있다.
- 우리가 보는 웹은 HTML사본이다. 따라서 코드를 수정하거나 지워도 '새로고침'을 하면 다시 HTML사본을 다운 받는다.
- 웹은 수정이 용이해 원본만 수정하면 유저가 업데이트를 하지 않아도 '새로 고침'하면 반영된다.
- 웹은 네트워크가 느린 환경에 민감해 주변에 인터넷 사용량이 많아지면 영향을 크게 받는다
- 애플리케이션은 업데이트를 하기 위해 사용자가 다운로드 해야 한다.
- 앱은 용량이 커지면 저장 공간을 비워서 용량을 확보해 속도를 개선 시킨다.
2. 브라우저
- 크롬, 익스플로러, 파이어폭스, 사파리 등이 있다.
- 브라우저들은 HTML,CSS,JavaScript를 받아서 읽는다.
- 위 브라우저들은 설치를 통해 실행할 수 있다 (즉 애플리케이션이다)
- 시간이 흐르면서 새로운 기능들이 추가 되면 추가된 기능은 이전 버전에서 사용할 수 없다.
따라서 프론트엔드 개발자는 소비자의 브라우저 버전과 종류에 맞춰 추가 코드를 작성해야 한다.
이 문제를 브라우저 버전의 파편화라고 부른다. - 모든 브라우저의 파편화를 잡을 수 없기에 '점유율'이 높은 브라우저 위주로 파편화 작업이 돼있다.
- 시간이 흐르면서 새로운 기능들이 추가 되면 추가된 기능은 이전 버전에서 사용할 수 없다.
3. 반응형 웹
- 브라우저의 가로 넓이에 '반응'하여 구성 요소가 변하는 기술이다.


4. 하이브리드 애플리케이션
- 브라우저를 소유한 회사들은 자신의 브라우저를 더 많이 사용하길 바란다.
그래서 자신들이 만든 운영체제(윈도우, 맥OS,IOS)에 브라우저를 내장 시켜서 출시해 자연스럽게 사람들이 더 많이 사용하게 만든다.
(단, 안드로이드는 내장 + 스마트폰 제조사의 브라우저도 함께 설치 되있는 경우가 많다) - 네이티브 애플리케이션 : 운영체제별 프로그램을 개발하기 위해 각자 정해놓은 언어들과 자체 기능을 사용해 개발한 프로그램
- 수정 후 심사 과정이 복잡하고 사용자들이 직접 업데이트를 해줘야 한다.
- 네트워크를 최소한으로 이용하도록 코딩하면 인터넷이 느린 환경에서도 빠르게 동작한다.
- 하이브리드 애플리케이션 : 애플리케이션의 특정 부분에 '브라우저'를 올리는 방식
(브라우저를 올리고 HTML 파일을 불러 올 URL을 설정한다 --> 브라우저가 뜨면서 HTML에 연결된 파일을 보여준다 )- 이러한 방법은 수정하고 '새로 고침'을 하면 바로 반영된다 (네트워크에 종속 되기에 느린 곳에선 시간이 걸린다)

- 웹과 앱의 개발 작업 과정


데이터베이스와 이미지 처리
- 데이터는 텍스트 정보이다.
- 데이터 무결성 : 데이터는 단 1%의 결점도 없어야한다. 데이터의 손실은 막대한 손해를 겪기 때문이다.
- 관계형 데이터 베이스 : 데이터 관리 기법으로 1행에 '이름','성별','생일','주소' 같은 구조를 정한 후 데이터를 하나씩 쌓는다.
각 데이터 행에는 고유 번호가 있기에 동명이인 이슈를 관리할 수 있다.

- 관계형 데이터 베이스 관리 시스템 : MySQL, Oracle DB, MariaDB등 이 있다.
- 클라이언트 데이터는 인터넷이 연결되지 않아도 동작하며 서버가 필요하지 않기에 데이터가 클라이언트에 있다
(로컬, 내부DB, 네이티브, 클라/클라이언트, 프론트/프론트엔드 라고도 부름) - 서버 데이터는 데이터가 서버에 있기 때문에 데이터를 변경하면 다른 모든 기기에 변경된 데이터가 표시된다
(서버, API, DB, 백/백엔드 라고도 부름) - 클라이언트, 서버의 컴퓨터에 있는 이미지는 내부 주소를 통해 이미지에 접근한다. 이 이미지들을 수정하려면 파일을 바꾸거나 다른주소로 지정 하면 된다. (보통 서비스 제공 이미지)
고객이 만들어 낸 이미지(프로필 사진) 같은 경우는 데이터 간의 관계가 맺어져있기 때문에 '무결성'이슈에 따라 따로 관리가 필요하다
이미지 주소를 DB에 넣어 관리한다.

프레임워크와 라이브러리
- 프레임워크 : 회사들이 자사의 애플리케이션을 쉽고 빠르게 개발할 수 있도록 틀을 만들어 놓은 것
- 웹 프레임워크 및 라이브러리는 큰 회사뿐만 아니라 개인이 만들기도 한다.


- 라이브러리도 다른 사람이 만들어놓은 코드를 이용해 해당 기능을 간편하게 사용한다.
그런 라이브러리와 각종 코드들이 모여 프레임워크를 만든다 - 한 프로젝트에서 프레임워크는 하나만 쓸 수있다. (두 자동차를 동시에 운전 못하는 것과 같다)
- 라이브러리는 더 작은 개념이기에 (망치나 가위 같은 도구)한 프로젝트에서 여러개의 라이브러리를 사용 할 수 있다.
협업, 소스관리, 디자인
- 개발자가 코드를 새로 만들고, 수정을 반복할 때 만약 코드가 100개의 파일에 나눠서 넣어져 있다면 하나하나 열어서 수정과 삭제를 하기엔 여간 힘든 일이 아니다. 새로운 내용을 추가 할 때 '덮어쓰기'를 많이 하는데 내용이 잘 못 될 경우 되돌려야 할 때가 있다
이 문제는 깃(GIT)이 해결해준다. - 깃에서는 계발 단계별로 깃발을 꽂을 수 있는데 이러한 행위를 커밋(Commit)이라고 한다
- 커밋에는 무슨 개발을 했는지 적어주는 메모가 따라 다니는데 그 메모를 커밋 로그 (Commit Log)라고 부른다.
- 깃은 깃발과 깃발 사이의 변화를 모두 추적해준다. 더불어 체크아웃(Check Out)기능을 통해 깃발이 꽂힌 부분의 코드로 옮겨 다닐 수 있다.
- 브랜치(Branch) : '분기','가지'라는 뜻으로 개발을 하던 중 새로운 방향의 개발을 추가해야 할 때 기존 개발을 '덮어쓰기' 하지 않고 새롭게 가지를 쳐서 작업할 수 있다
이렇게 하면, 기존 브랜치에 커밋을 하는 결이 새로운 브랜치에 영향을 주지 않는다.

- 하나의 프로젝트를 진행할 때 브랜치를 사용하면 서로 동시에 충돌 없이 작업을 할 수 있다.
각 코드는 다른 코드에 영향을 주지 않기에 작업 후 코드를 합쳐 주기만 하면 되는데 이 기능을 머지(Merge)라고 부른다.
책 후기
난 전반적인 IT지식을 아예 몰랐고 학원을 다니기 전 이 책을 샀다
안읽고 있다가 학원 다닌지 3개월이 지난 후에 이 책을 읽게 됐는데
공부를 조금 해본 입장에서 본 이 책은 기초만 적혀있는 편이다.
전반적인 소프트웨어가 돌아가는 방법이나 기본 용어 설명만 간단하게 돼있다
그래서 조금이라도 컴퓨터 공부를 한 사람에겐 비추한다. 알고 있는 내용이 많을 것 이다!
하지만 컴퓨터에 대해 1도 모르고 정말 기본 지식을 얕게 입문 해 보고 싶은 사람
그리고 개발자와 가까이 일하거나, 개발자 업무 과정의 큰 틀을 알고 싶은 사람에게 추천한다
작가가 예를 잘 들어서 설명해주기에 이해하기 쉽다
나도 학원 다니면서 헷갈렸거나 이해가 잘 안갔던 상태로 넘어갔던 웹 동작 방법들을
이 책을 읽으면서 다시 한번 이해 했다
'💻 IT > 책 및 영상 요약' 카테고리의 다른 글
프로그래밍 사전 지식 (Feat. NEW LECTUERE) (0) | 2024.01.04 |
---|