제목 : 비전공자를 위한 이해할 수 있는 IT지식
저자 : 최원영
1장
1 왜 자꾸 파이썬(Python)을 배우라고 하는 거죠? (feat. C언어, 자바(JAVA)를 배워봐)
2 가장 먼저 알아야 할 지식은 '프로그래밍 언어'가 아닙니다.
2장
1 프로그래밍 언어가 '언어'라고? (못 알아듣겠는데...)
2 개발자는 앉아서 뭐하는 거지 (뭔가 치긴 치는데...)
3 뭐가 이렇게 많아? (C언어, 자바, 파이썬... 등)
4 컴퓨터 구매해보셨나요? (컴퓨터의 구성 요소)
5 우린 왜 이 이야기들이 낯설까?
6 우리가 자바 최신 버전을 설치해야 하는 이유
3장
1 국민학교와 초등학교 시절 이야기
2 한강에서 카카오톡을 다운로드하고, 실행하면 일어나는 일들
3 당신은 계속 뭘 달라고 하고, 누군가는 계속 뭘 준다
4 도대체 우분투가 뭐죠?
5 개인 서버를 운영하면 힘든 이유
독서 목표
1. IT 산업의 전체적인 큰 그림을 그릴 수 있다.
2. 개발 커뮤니케이션에 필요한 지식을 커뮤니케이션할 수 있는 수준으로 익힌다.
2장 프로그래밍 언어 & 운영체제 OS
■ 컴파일러 (compiler)
순화 용어는 해석기, 번역기이다. 고급언어로 쓰인 프로그램을 그와 의미적으로 동등하며 컴퓨터에서 즉시 실행될 수 있는 형태의 목적 프로그램으로 바꾸어 주는 번역 프로그램. (출처 : 네이버 지식백과)
■ 프로그래밍 혹은 코딩
프로그래밍 언어로 문서 작업하는 행동을 일컫는다.
(굳이 따지자면 코딩이 하위 개념이다. 그러나 현업에서는 혼용하여 사용한다.)
■ IDE (Integrated Development Environment)
통합 개발 환경. 쉽게 말해 개발을 하기 위한 모든 것들을 제공해주는 환경을 말한다. 예를 들어 한글과 컴퓨터 프로그램에서 문서 작업을 할 때 표 만들기, 자간 및 장평 조절 등 다양한 기능을 활용해서 원하는 문서를 쉽게 만드는 것과 비슷하다. IDE도 코딩에 필요한 다양한 기능이 들어있고, 그 기능을 통해 쉽게 코드를 만들 수 있다. Android Studio, Xcode, Eclipse, PyCharm 등이 여기에 해당된다.
■ 저수준 언어, 고수준 언어
☞ 저수준 언어 : 컴퓨터 친화적. 구체적으로 꼼꼼하게 적어야 한다. 컴퓨터 사양이 낮아도 잘 돌아간다. 비용 절감 가능.
☞ 고수준 언어 : 인간 친화적. 쓰기 편리하고 유지 보수도 쉽다. 컴퓨터 사양이 높아야 한다. 비용이 상승.
■ 하드웨어 (Hardware)
키보드, 모니터, 프린터 등과 같이 일정한 형체가 있는 유형의 장치를 의미한다. 컴퓨터는 크게 입력, 연산, 제어, 기억, 출력 등의 기능을 수행하는데 이러한 기능을 수행하는 기반이 되는 것이 하드웨어이다. 구성요소로는 CPU, 기억장치, 입출력장치 등이 있다.
■ 메인보드
☞ CPU (중앙처리장치)
따로 데이터를 저장하지 않는다. 데이터 연산, 처리만 한다.
☞ RAM (메모리)
기억장치가 너무 느려서 만든 CPU 개인 작업 공간이다. 사용자가 그래픽UI를 클릭하면 기억장치에서 보낸 데이터를 여기에 담는다. 이후 CPU가 필요한 것을 여기서 그때그때 꺼내 작업을 한다.
☞ HDD,SSD (보조 기억장치)
창고 역할. 동작이 느리다. 전원이 꺼져도 안에 데이터(값)가 남아 있다.
■ 운영체제 (Operating System = OS)
컴퓨터 하드웨어를 제어하고 응용 소프트웨어를 위한 기반 환경을 제공하여, 사용자가 컴퓨터를 사용할 수 있도록 중재 역할을 해주는 프로그램이다. ( = 시스템 소프트웨어이다.)
가장 많이 쓰이는 OS로는 Microsoft Windows, Apple macOS, Google's Android OS, Apple iOS, Linux Operating System이 있다.
■ 소프트웨어
컴퓨터 프로그램과 여기에 수반되는 문서 등으로 이루어진 컴퓨터 시스템의 핵심 구성 요소.
■ JVM (Java Virtual Machine)
각 운영체제 위에 JVM이라는 소프트웨어를 설치하여 그 위에서 Java로 만든 프로그램이 돌아갈 수 있도록 자바 개발팀이 만든 것. 다만 프로그램 위에 또 프로그램을 돌리는 것이기 때문에 느려지는 단점이 있어서 장비가 컴퓨터보다 좋지 못한 모바일에서는 선호하지 않는다.
여러 IT기업에서 운영체제를 만드는데, 기업마다 채택하는 개발 언어가 다르다. JVM이 없다면 운영체제별로 코딩 개별 작업을 해주어한다. 하지만 이는 매우 번거로운 일이므로 JVM으로 어느 운영체제 위에서든 돌아가게 만든 것이다.
3장
LAN → MAN → WAN
PC : personal computer
■ IP
위치와 기기에 따른 고유 주소. 12자리 숫자가 마침표로 구분되어 표기되며 0 ~ 255만 사용가능하다. 그래서 한계가 존재한다.
IPv6
IP 업그레이드한 것. 숫자 구분을 4개에서 6개로 늘렸다.
■ 요청하는 컴퓨터와 주는 컴퓨터
클라이언트, 프론트엔드 = 달라고 요청하는 컴퓨터(고객)
백엔드, 서버 = 주는 컴퓨터.
■ 서버
클라이언트 요청에 응답하는 컴퓨터. 데이터를 주는 컴퓨터이다. 서버는 안정적인게 제일 중요해서 GUI는 쓰지 않는다.
리눅스 운영체제가 무료라서 서버 컴퓨터에서는 리눅스를 많이 사용한다. 리눅스는 리누스 토발즈가 만들었으며 Git도 만들었다.
컴퓨터가 생각한다는 것은 코딩된 프로그램이 동작한다는 의미이다.
■ 리눅스
리눅스는 무료라서 많은 사람이 사용해서 응용 버전도 출시되었다. Android, Redhat, Ubuntu 는 리눅스 기반으로 발전한 프로그램이다.
C 언어는 C++, Objective-C, Python 으로 발전했다.
리눅스는 무료이고, 윈도우와 맥OS는 가격대가 높다. 전자와 후자 차이는 그래픽 UI이다.
■ 호스팅 업체
하드웨어를 관리해주는 운영체제OS가 있는 것처럼 서버를 개인이 관리하기는 복잡하다. 그래서 cafe24, 가비아 같은 호스팅 업체를 이용한다. AWS는 서버 컴퓨터를 대여하는 것이다. 다양한 기업에게 여러 솔류션도 함께 제공해준다. 그래서 AWS에서 제공하는 기능만 잘 사용해도 안정적이고 효율적인 서버를 쉽게 구축할 수 있다.
4장 API와 JSON
■ API (Application Programming Interface)
클라이언트, 서버와 같은 서로 다른 프로그램에서 요청과 응답을 주고 받을 수 있게 만든 체계.
+) 소프트웨어가 다른 소프트웨어의 기능을 쓰기 위해 중간에 필요한 체계이다. 쉽게 말해 기능을 사용하기 위해 주소로 요청을 보내면 응답을 해주는 소프트웨어끼리의 체계라고 이해하면 된다.
■ CRUD
4가지 요청. 데이터를 다룰 때 기준이 되는 요청이다. 개발자라면 CRUD 관점에서 데이터를 바라보아야 한다.
C - Creat 올리는
R - Read 불러오는
U - Update 바꾸는
D - Delete 지우는
■ RESTful API
Creat(생성해줘) : POST
Read(불러와줘) : GET
Update(바꿔줘) : PUT(전체), PATCH(일부)
Delete(지워줘) : DELETE
■ 메소드와 함수
메소드 = 함수 = 방법.
함수는 입력하는 값(변수 = 파라미터)에 따라 결과가 나오는 것.
■ HTTP 응답 코드
클라이언트가 서버에 요청(Request)한다. 이 때 서버가 응답(Response)하는데 성공하면 200번대 코드로 답이 간다. 잘 안 됐을 경우에는 클라이언트 문제라면 400번대로, 서버 내부 문제라면 500번대로 응답이 간다. 클라이언트가 요청하고 서버가 응답하면 API요청이 완성된다.
■ SDK (Software Development Kit )
소프트웨어를 개발하기 위한 도구이다. 어떤 소프트웨어를 개발할 때 도움을 주는 '다른 소프트웨어'라고 생각하면 된다.
■ JSON (데이터 형식)
클라와 서버는 요청과 응답을 주고 받고 그 때 필요한 데이터들을 JSON형식으로 주고 받는다.
■ 도메인
도메인 name은 IP주소와 같다.
집마다 주소가 있는 것처럼 컴퓨터도 고유한 주소를 가지는데 그 주소는 IP주소라고 불리며 숫자로만 이루어져 있다. 그러나 일일이 숫자를 외워서 접속하기는 번거롭다. 그래서 IP를 도메인 네임으로 대체한다.
예를 들어 네이버 홈페이지에 들어가려면 IP를 쳐야하지 ' www. naver.com '으로도 접속할 수 있으며 이 편이 훨씬 가독성 높다. 이 도메인 네임은 숫자 즉 IP로 변환되어 컴퓨터가 이해할 수 있도록 한다.
' http:// api.cakes. com '까지는 도메인 네임이다. v1/cakes/:id는 CRUD요청을 받을 주소이다. API문서를 읽을 줄 알면 서버가 얼마나 진행됐는지 확인할 수 있다. 기업에서는 자신들의 API를 쓸 수 있게 허용한 Open API를 제공한다. 예를 들어 네이버 지도 기능을 다른 곳에서도 사용할 수 있는 이유는 네이버가 API를 허용해주었기 때문이다.
5장 애플리케이션
■ 애플리케이션
설치해서 사용하는 모든 프로그램. 앱, 어플 등으로도 불린다. 애플리케이션을 윈도우에서는 응용 프로그램(Application Software)이라고 불렀다.
■ 버전
버전은 1.0.0처럼 숫자 세 자리로 표현한다. 첫 번째 자리는 하위 버전과 호환이 안되는 큰 변화를 뜻한다. 두 번째 자리는 하위 버전과 호환이 가능한 큰 변화를 뜻한다. 세 번째 자리는 작은 변화를 뜻한다. 애플리케이션을 업데이트하면 새로 다운 받아야한다. 하지만 사용자에 따라 업데이트 하지 않는 사람이 있을 것이다. 그러나 구독같은 결제 가격은 중요한 사항이다. 그래서 변동 가능한 회사 정책에 관한 정보는 업데이트 하지 않는 모든 사용자에게도 동일하게 보여질 수 있도록 애플리케이션에 넣지 않고 API로 서버에서 불러오게 만든다.
■ 애플과 구글 스토어
App store - 애플에서 만든 모바일 스토어이다. 신청 후 검토가 길다. 꼼꼼한 검토 덕에 어플 공식 등록 후에 반려되는 경우가 적다. 만약 규정에 어긋난 어플이 발견된다면 바로 거절(reject)된다.
Play store - 구글에서 만든 모바일 스토어이다. 애플과 달리 빠르게 심사를 통과할 수 있다. 그래서 반려되는 빈도가 높다. 규정을 위반한 어플이 발견되어도 느리게 검토하고 내린다.
6장 웹
■ 브라우저 파편화
정말 많은 브라우저가 존재하는데 이를 브라우저 파편화라고 부른다. 개발할 때 이러한 파편화를 잡아야 하는데 일일이 잡는 게 아니라 브라우저 점유율을 확인하고 대응한다. Caniuse.com 사이트에서 브라우저별로 적용되는 CSS기능을 확인할 수 있다.
■ 반응형
가로 길이에 반응하여 구성요소가 변한다.
■ 앱을 만드는 3가지 방법
1. 네이티브 애플리케이션 - 브라우저 내장, 해당 모바일 운영체제에 맞는 언어로 개발. 예를 들어 구글은 자바와 코틀린.
2. 모바일 웹 앱 - 웹 기반
3. 하이브리드 애플리케이션 - 웹과 앱이 혼합
7장 데이터 베이스와 이미지 처리
■ 데이터
0.00001%도 달라서는 안되는 무결성이 특징이다. 데이터는 곧 텍스트이다. 데이터를 잘 다루기 위해서는 API문서를 잘 읽어야 한다. 데이터는 클라에도 백에도 있다.
■ RDB
관계형 데이터 베이스이다.
로컬 = 내부DB = 네이티브 = 클라/클라이언트 = 프론트/프론트엔드
서버 = DB = API요청 = 백/백엔드
■ 이미지
이미지는 같은 이름으로 저장할 수 없다. 즉 각각 고유한 URL 경로를 가지고 있다는 소리이다. 어플에 들어갔을 때 보이는 이미지는 서버 또는 클라이언트에 있을 수도 있고, 데이터 베이스에 있을 수도 있다.
8장 프레임 워크와 라이브러리
프로그래밍 언어 | 프레임 워크, 라이브러리 | |
애플 | swift objective-c | CoCoa |
구글 | Java Kotlin | Android Frame Work |
웹 | JS | Angular.js (구글 운영) Vue js (Evan You 중국인이 만듦) React (페이스북이 만듦) |
(웹은 누구의 소유도 아니다. 그래서 기업이 프레임 워크를 만들기도 하고 개인이 만들기도 한다.)
프로그래밍 언어 | 프레임 워크, 라이브러리 |
JS | Express |
Java | Spring |
Ruby | RAILS |
Python | django |
(서버쪽 프레임 워크와 라이브러리다. 서버도 특정 회사 소유가 아니다.)
9장 협업, 소스관리, 디자인
■ Git
리눅스를 만든 리누스 토발즈가 제작했다.
commit - 작업 과정 중에 깃발을 꽂는다고 생각하면 된다.
log - log는 메모 내용이다.
checkout - 원하는 깃발로 이동할 수 있다.
branch - 분기, 가지이다. 작업시 서로 충돌(conflict)하지 않도록 브랜치를 만들어서 작업한다.
merge - 브랜치로 나누어서 작업한 파일을 합칠 때 사용하는 명령어이다.
push - 원격 저장소로 올린다. (구글 드라이브, 깃허브 같은 곳)