728x90
나는 전공자이지만 IT 지식은 비전공자와 비슷하다고 생각하기 때문에..^^
이 책을 읽었다. 예약 꽉 차서 빌리기 힘들었다.
전반적인 IT 기본지식을 쌓을 수 있어서 좋았다.
들어보기는 했지만 대충 알고 있었던 것들 부터
잘 몰랐던 개념까지 전부 쉽고 간결하게 설명해준다.
원래 하고 있던 클론코딩에서 뭔지 잘 알지도 못하면서 사용했던
get, post, json, 200, 400 등에 대해 알게 되면서
퍼즐이 맞춰진 느낌이 들었고 나 혼자 뒷북치고 신기해했다.
하지만 얼마 후면 또 까먹을 것 같기 때문에 정리해놓으려 한다.
목차
더보기
1장 오리엔테이션
1-1. 왜 자꾸 파이썬(Python)을 배우라고 하는 거죠? (feat. C 언어, 자바(JAVA)를 배워봐) 14
1-2. 가장 먼저 알아야 할 지식은 ‘프로그래밍 언어’가 아닙니다 21
2장 프로그래밍 언어 & 운영체제(OS)
2-1. 프로그래밍 언어가 ‘언어’라고?(못 알아듣겠는데…) 32
2-2. 개발자는 앉아서 뭐하는 거지(뭔가 치긴 치는데…) 37
2-3. 뭐가 이렇게 많아?(C 언어, 자바, 파이썬… 등) 41
2-4. 컴퓨터 구매해보셨나요?(컴퓨터의 구성 요소) 47
2-5. 우린 왜 이 이야기들이 낯설까? 51
2-6. 우리가 자바 최신 버전을 설치해야 하는 이유 55
3장 네트워크, 클라이언트, 서버
3-1. 국민학교와 초등학교 시절 이야기 62
3-2. 한강에서 카카오톡을 다운로드하고, 실행하면 일어나는 일들 66
3-3. 당신은 계속 뭘 달라고 하고, 누군가는 계속 뭘 준다 70
3-4. 도대체 우분투가 뭐죠? 75
3-5. 개인 서버를 운영하면 힘든 이유 84
4장 API와 JSON
4-1. POST는 뭐고, GET은 뭐죠?(feat. 개발자의 암호문) 90
4-2. 요청과 응답을 주고 받을 때의 형식 104
4-3. API 문서 살펴보기 112
5장 애플리케이션
5-1. 설치한 뒤 실행하는 애플리케이션의 특징 120
6장 웹(Web)
6-1. 웹은 어떻게 이루어져 있고, 어떻게 동작할까? 128
6-2. 웹 개발하다가 못해 먹겠다고 말하는 이유 143
6-3. 반응형으로 코딩하면, 더 비싸나요?(그게 뭔데요?) 148
6-4. 애플리케이션 이야기를 하는데, 왜 자꾸 웹 개발자에게 말하라는 거죠? 153
7장 데이터베이스와 이미지 처리
7-1. 쇼핑몰을 생각해봅니다. 여기서 데이터는 대체 뭘까요? 162
7-2. 클라가 들고 있다는 게 뭐죠?("클라에 저장돼요. 클라가 가지고 있어요") 169
7-3. 배너 좀 바꾸려는데, 자꾸 자기한테 말하면 안 된대요. (왜 자꾸 사람이 바뀌는 건데…) 175
8장 프레임워크와 라이브러리
8-1. 코코아요? 그거 먹는거잖아요. 그리고 자꾸 왜 도서관 얘기를 하는거죠?(프레임워크, 라이브러리) 186
9장 협업, 소스관리, 디자인
9-1. 커밋이요? 머지요? 뭐요? 198
9-2. '왜 말을 저렇게하지.. 둘이 싸웠나?'(feat. 디자이너와 개발자) 204
10장 정리
10-1. 개발을 시작하면 일어나는 일들 214
10-2. 아웃트로 222
부록- API 문서를 통해 서비스 분석하기 226
정리
- 1장 오리엔테이션
1-1. 왜 자꾸 파이썬(Python)을 배우라고 하는 거죠? (feat. C 언어, 자바(JAVA)를 배워봐) 14
1-2. 가장 먼저 알아야 할 지식은 ‘프로그래밍 언어’가 아닙니다 21
커뮤니케이션을 위한 IT 지식을 공부해야함 -> 개발자와 대화 가능. - 2장 프로그래밍 언어 & 운영체제(OS)
2-1. 프로그래밍 언어가 ‘언어’라고?(못 알아듣겠는데…) 32
- (개발자) -> 프로그래밍 언어 -> (컴파일러) -> 기계어 -> (컴퓨터)
: 개발자가 영어로 되어있는 프로그래밍 언어를 사용해 컴파일러에게 명령을 전달하면,
컴파일러가 그 명령을 기계어인 0과 1로 변환해 컴퓨터에게 전달함.
즉, 개발자는 컴퓨터가 해야 하는 일에 대한 문서를 작성하는 일을 함.
2-2. 개발자는 앉아서 뭐하는 거지(뭔가 치긴 치는데…) 37
- 프로그래밍, 코딩 : 프로그래밍 언어로 문서 작업하는 행동.
- IDE(통합 개발 환경) : 개발자들의 작업을 도와주는 기능을 제공해주는 환경.
ex) Android Studio, Xcode, Eclips, PyCharm
2-3. 뭐가 이렇게 많아?(C 언어, 자바, 파이썬… 등) 41
- 저수준 언어 : 컴퓨터 친화적, 배우기 어려움, 낮은 사양의 컴퓨터에서도 원활히 작동, 가격 저렴.
- 고수준 언어 : 인간 친화적, 배우기 쉬움, 작동이 느림.
2-4. 컴퓨터 구매해보셨나요?(컴퓨터의 구성 요소) 47
- CPU : 컴퓨터의 '머리' 역할, 데이터 저장X, 데이터 연산/처리
- 메모리 : CPU 개인 작업 공간, 메모리에 저장된 데이터들은 전원이 꺼지면 없어짐
- HDD(하드디스크), SSD : 보조기억장치, 컴퓨터의 '창고' 역할, 전원이 꺼져도 이 안의 데이터는 남아있음.
이 세가지 부품들을 메인보드에 끼우고 전원을 붙이면 컴퓨터가 됨.
CPU가 필요한 데이터를 그때그때 보조기억장치에 요청하는게 아니라,
작업이 필요한 큰 데이터 뭉치를 보조기억장치에서 메모리로 한 번 옮겨놓고 메모리 안에서만 작업함.
-> 시간 절약
2-5. 우린 왜 이 이야기들이 낯설까? 51
운영체제가 위의 모든 과정을 대신해줌.
- 운영체제(OS) : 우리 대신 하드웨어를 관리해줌 ex) 윈도우(Microsoft), 맥OS, iOS, 안드로이드(Google)
각 운영체제마다 지정된 언어를 사용해서 개발해야함.
2-6. 우리가 자바 최신 버전을 설치해야 하는 이유 55
각 컴퓨터에 JVM을 설치하면 그 위에서 자바 언어로 만든 프로그램이 돌아갈 수 있음.
즉, 운영체제별로 여러 개의 프로그램을 만들 필요 없이
자바로만 프로그램을 만들어도 모든 운영체제에서 사용 가능 (주로 PC에서만 씀, 속도 느림).
- 개발자 : 운영체제 위에 돌아가는 소프트웨어를 개발하는 사람. - 3장 네트워크, 클라이언트, 서버
3-1. 국민학교와 초등학교 시절 이야기 62
네트워크 -> 컴퓨터를 서로 연결
- LAN : 컴퓨터가 연결된 작은 지역
- MAN : 도시의 여러 LAN을 하나로 연결
- WAN : 도시와 도시, 나라와 나라를 모두 연결
신호들을 무선으로 만들기 시작 -> 3G, 4G, 5G
3-2. 한강에서 카카오톡을 다운로드하고, 실행하면 일어나는 일들 66
스마트폰 -> 가까운 기지국으로 신호 -> WAN을 따라 신호가 이동 -> 카카오톡이 켜놓은 컴퓨터
- IP주소 : 해당 컴퓨터가 위치한 주소, 컴퓨터에 따라 고유함, 0~255의 숫자 사용, IPv6은 숫자 구분 6개
3-3. 당신은 계속 뭘 달라고 하고, 누군가는 계속 뭘 준다 70
- 클라이언트 : 파일을 달라고 계속 보채는 컴퓨터 (= 프론트 엔드)
- 서버 : 파일을 주는 컴퓨터 (= 백 엔드)
3-4. 도대체 우분투가 뭐죠? 75
- 리눅스 : 서버에서 주로 사용하는 운영체제, 서버 컴퓨터는 리눅스 위에서 서버 프로그램을 돌림,
무료, 리누스 토발스가 만듦, 윈도우/맥OS와 달리 그래픽 UI없고 명령어로만 동작시킴, 안정적
- 우분투 : 리눅스의 버전 중 하나
- 리눅스의 여러 버전 : 우분투, 레드햇, 안드로이드
3-5. 개인 서버를 운영하면 힘든 이유 84
- 개인서버 : 컴퓨터를 24시간 365일 돌리므로 전기세 폭탄,
정전되거나 고장나면 망함(데이터 날아가면 복구 불가능) 등등의 여러 리스크 있음
-> 대신해주는 서비스!
- 호스팅 업체 : 서버 제공 서비스 ex) AWS
안정적이고 효율적인 서버를 쉽게 구축할 수 있음 - 4장 API와 JSON
4-1. POST는 뭐고, GET은 뭐죠?(feat. 개발자의 암호문) 90
- API : 소프트웨어가 다른 소프트웨어의 기능을 쓰기 위해 중간에 필요한 체계,
기능을 사용하기 위해 주소로 요청을 보내면 응답을 해주는 소프트웨어끼리의 체계,
API를 통해 요청과 응답을 주고 받을 때는 데이터도 같이 담김.
- 서버 주소 : 서버 컴퓨터가 위치한 곳의 IP주소.
클라이언트 프로그램은 정해진 주소('서버주소/A')에 요청을 보냄, 서버 개발자가 개발한 API를 사용.
- CRUD : Create(올려줘/생성해줘), Read(불러와줘), Update(바꿔와줘), Delete(지워줘) 클라->서버 요청
- RESTful API : CRUD별로 주소가 생기면 관리하기 힘드므로
CRUD를 하나의 주소로 관리하는 체계적인 API.
요청을 보낼 때 어떤 요청을 보냈는지 파악할 수 있는 스티커(메소드)를 붙여서 함께 전송함.
Create : POST, Read : GET, Update : PUT(전체)/PATCH(일부), Delete : DELETE
- 응답 : '잘 됐어'는 200번대 코드로 표현,
'잘 안됐어'는 400번대(클라의 요청에서 문제)/500번대(서버 문제) 코드
ex) 404 : 서버에 없는 정보를 클라이언트에서 요청을 보냈을 때 (서버는 문제없는데 요청이 이상함)
- SDK : API를 제공해주는 다른 소프트웨어, 즉 소프트웨어를 개발할 때 도움을 주는 다른 소프트웨어
-> Software Development Kit
4-2. 요청과 응답을 주고 받을 때의 형식 104
- JSON : 클라와 서버가 요청과 응답을 주고받을 때, 필요한 데이터들을 JSON형식으로 주고받음.
중괄호로 시작하고 콜론으로 구분되는 키와 값으로 이루어짐, 배열은 대괄호로 표시
4-3. API 문서 살펴보기 112
- 깃 북 : 깔끔한 API 문서 작성을 도와주는 서비스
- 도메인 네임 : 요청을 보내려면 IP 주소를 알아야하는데 숫자를 모두 외우기 힘드니까
숫자대신 문자로 표현한 도메인 네임이 생겨남(즉, 도메인 네임 == IP 주소),
도메인 네임만 치면 우리가 알지 못하는 사이에 IP로 바뀌어서 컴퓨터의 위치를 찾음.
- 파라미터 : 메소드를 보낼 때 요청에 필요한 요청 변수.
- Open API : 서버가 제공하는 다양한 기능을 일반 사람들이 쓸 수 있게 API 문서를 오픈해둠. - 5장 애플리케이션
5-1. 설치한 뒤 실행하는 애플리케이션의 특징 120
- 애플리케이션 : 설치해서 사용하는 모든 프로그램 (데스크탑: 응용 프로그램, 스마트폰: 앱, 어플)
- 버전 : 1.0.1 -> 1.0.2 오른쪽 끝자리 : 작은 변화가 있을 때,
중간 숫자 : 하위 버전과 호환이 가능하지만 큰 변화,
왼쪽 끝자리 : 하위 버전과 호환 불가능한 큰 변화
-> 개발자가 버전 업데이트해도 사용자의 애플리케이션에 바로 반영되는 것은 아님. 업데이트 해줘야 함.
- 앱 마켓 : 애플리케이션을 올려놓고 판매할 수 있는 시장.
iOS에서는 '앱스토어', 안드로이드에서는 '구글 플레이 스토어' 라고 부름.
- iOS(애플) : 사전 테스트, 버그가 있으면 앱스토어에 올리는 걸 거절함(=리젝), 심사기간 긺
- 안드(구글) : 사전 심사 느슨함, 구글 지침에 맞지 않다면 예고 없이 마켓에서 내려감, 복구 오래걸림 - 6장 웹(Web)
6-1. 웹은 어떻게 이루어져 있고, 어떻게 동작할까? 128
웹 구성 3요소 : HTML(내용, 구조), CSS(디자인), JavaScript(프로그래밍 언어)
- HTML : 서로 다른 운영체제나 애플리케이션을 사용하면 각각의 환경에서만 호환되는 파일을 서로 열지 못함.
이를 해결하기 위해 운영체제나 프로그램에 상관없이
언제나 동일하게 보이도록 일정한 형식(HTML)으로 문서를 작성.
운영체제에 상관없이 브라우저만 있으면 어디서든 웹사이트에 접속하여 동일한 정보 볼 수 있음.
-> 태그로 정보 체계화 : <h> 대제목, <p> 문단, <ol> 순서있는 목록, <ul> 순서 없는 목록, <a> 링크
-> 프로그래밍 언어가 아님, 컴퓨터에게 특정 일을 시킬 수 없음,
단지 브라우저가 볼 수 있는 문서를 적는 언어(정보 교환 목적!)
- CSS : HTML에 디자인을 입힐 수 있는 코드
- 퍼블리싱 : HTML+CSS, 퍼블리셔 : 퍼블리싱 작업을 하는 사람
- 마크업 : HTML 작업, 마크업 개발자 : HTML 작업을 주로 하는 분들 (CSS를 함께 작업하기도 함)
- JavaScript : 웹에서 프로그래밍 언어 역할
웹의 특징 : HTML, CSS, JavaScript의 완성본은 모두 서버에 있음,
GET요청으로 서버에 있는 HTML 문서를 불러온 뒤, 연결된 파일들을 다시 다운로드 함.
즉, 우리 컴퓨터의 HTML, CSS, JavaScript는 모두 사본임.
애플리케이션은 버전 변경위해 업데이트가 필요하고 유저가 다운로드 해야 변화가 반영되지만,
웹은 그냥 서버의 원본을 바꾸면 됨. 새로고침할 때 바뀐 파일들이 다시 다운로드 됨.
심사과정도 없고 유저의 업데이트 과정도 없이 새로 고침하면 자동 반영. 빠른 적용.
그러나 웹은 네트워크의 영향을 크게 받음.
6-2. 웹 개발하다가 못해 먹겠다고 말하는 이유 143
- 브라우저 : HTML에 적힌 대로 정보를 보여주고, CSS에 적힌 대로 디자인을 입혀주며,
JavaScript에 적혀있는 그대로 동작함, 브라우저는 애플리케이션임(다운로드와 설치 필요)
ex) 크롬(구글), 익스플로러(마이크로소프트), 파이어폭스, 오페라, 사파리(애플)
- 브라우저 버전의 파편화 : 언어와 브라우저의 버전이 계속 업그레이드 되면서 정상작동을 위해서는
추가 코드 작성이 필요 (caniuse.com : CSS의 사용 가능 여부를 찾아볼 수 있는 서비스)
-> 모두를 만족시킬 필요는 없음, 점유율 조사 후 의사 결정
6-3. 반응형으로 코딩하면, 더 비싸나요?(그게 뭔데요?) 148
- 반응형 웹 : 브라우저의 가로 넓이에 '반응'하여 구성 요소가 변하는 기술.
공통으로 사용할 CSS 코드들은 그냥 두고, 레이아웃 위주로 나눠 작업해 각 기기의 디자인 구현.
서로 다른 기기의 넓이에 따른 CSS를 추가로 코딩. 시간 오래 걸리고 비용 더 많이 들어감.
웹페이지의 크기(비울)가 사용자의 기기에 맞춰 자동 변형됨.
6-4. 애플리케이션 이야기를 하는데, 왜 자꾸 웹 개발자에게 말하라는 거죠? 153
- 네이티브 애플리케이션 : 스위프트/Objective-C로 iOS프로그램을 또는
자바/코틀린으로 안드로이드 프로그램을 개발한 애플리케이션.
-> 새로운 방식으로 애플리케이션 개발 가능! -> 애플리케이션 특정 부분에 '브라우저'를 올리는 방식
- 하이브리드 애플리케이션 : 웹과 애플리케이션이 혼합된 애플리케이션
-> 웹과 네이티브 애플리케이션 구분 방법? : API 문서 확인! - 7장 데이터베이스와 이미지 처리
7-1. 쇼핑몰을 생각해봅니다. 여기서 데이터는 대체 뭘까요? 162
- 데이터의 무결성 : 데이터는 단 1%의 결점도 없어야 함. 관리 까다로움
- 관계형 데이터베이스 : 엑셀 시트(테이블)을 사용한 데이터 관리 기법(실제론 엑셀이 아니라 RDBMS사용)
- 관계형 데이터베이스 관리 시스템(RDBMS) :
데이터들을 파일로 만들어서 저장하고 관리해주는 소프트웨어.
관계형 데이터베이스의 철학으로 만들어진 관리 시스템.
ex) MS SQL, Oracle DB, MySQL, MariaDB
7-2. 클라가 들고 있다는 게 뭐죠?("클라에 저장돼요. 클라가 가지고 있어요") 169
클라이언트와 서버 컴퓨터 위에는 모두 데이터 베이스 관리 시스템을 돌릴 수 있고, 데이터를 저장할 수 있음.
- 데이터의 위치 : 클라이언트(로컬, 내부DB, 네이티브, 프론트엔드), 서버(API요청, 그냥DB, 백엔드)
ex) 알람 어플의 데이터는 클라이언트 DB에서 관리함, 인터넷 연결되어있지 않아도 동작.
ex) 에버노트는 클라,서버 두 곳 모두에 데이터가 있음, 클라와 서버의 데이터를 맞추는 동기화 과정 필요,
서버에도 데이터를 놓기 때문에 다른 기기에서도 같은 노트의 내용을 볼 수 있음.
7-3. 배너 좀 바꾸려는데, 자꾸 자기한테 말하면 안 된대요. (왜 자꾸 사람이 바뀌는 건데…) 175
- 클라이언트 이미지 : 이미지 다운받지 않아도 됨, 네트워크보다 빠름, 이미지 바꾸려면 어플 업데이트 필요.
- 서버 이미지 : 다운로드 하려면 시간 오래 걸림, 이미지의 성격에 따라 서버에서 가져와야 할 필요 있음.
-> 구분방법? : API를 통해 이미지의 주소(URL)을 서버에서 받아온다면 서버에 있는 이미지임.
유저가 업로드한 사진은 데이터베이스에 이미지 주소 관리,
서비스에서 제공하는 이미지는 클라이언트 혹은 서버에 있음(이미지 주소를 통해 접근) - 8장 프레임워크와 라이브러리
8-1. 코코아요? 그거 먹는거잖아요. 그리고 자꾸 왜 도서관 얘기를 하는거죠?(프레임워크, 라이브러리) 186
- 프레임워크 : 프랜차이즈 가게와 비슷한 개념. 이미 만들어놓은 코드를 개발자가 사용함.
애플은 프레임워크 사용법을 웹 페이지로 제공해줌. 기기별로 프레임워크들이 존재.
- 코코아 프레임워크 : 애플의 프레임워크들을 통칭한 말 ex) UIkit, AppKit
모바일 프레임워크 : Cocoa(애플), Android Framework(구글)
웹 프레임워크 및 라이브러리 : ex) Angular.js(구글), React.js(페이스북), Vue.js(중국인)
서버 프레임워크 : 각 언어별로 유명한 프레임워크 있음
ex)자바-스프링, 파이썬-장고, 루비-레일스, js-익스프레스
- 라이브러리 : 다른 사람이 만들어놓은 코드를 이용한다는 측면에서 프레임워크와 같음,
프레임워크가 더 큰 개념임. 각종 라이브러리와 코드들이 모여 프레임워크가 됨.
한 프로젝트에서 프레임워크는 하나만 쓸 수 있음, 라이브러리는 여러개 사용 가능. - 9장 협업, 소스관리, 디자인
9-1. 커밋이요? 머지요? 뭐요? 198
- 깃 : 리누스 토발즈가 개발한 소스코드 버전관리 프로그램.
개발자들이 개발 단계별로 '깃발'을 꽂을 수 있음(= 커밋).
커밋에 무슨 개발을 했는지 메모도 적어줌(= 커밋 로그).
체크아웃을 통해 깃발이 꽂힌 부분의 코드로 옮겨 다닐 수 있음.
브랜치를 하면 기존 개발에 덮어써서 작업하지 않고 새롭게 가지를 쳐서 작업가능.
이후 각각의 브랜치에서 작업한 코드들을 머지하면 합칠 수 있음.
- 원격 저장소 : 깃을 기반으로 함. ex) 깃허브, 비트버킷 등
개발자들이 자신의 컴퓨터(로컬)에서 작업을 한 뒤 커밋을 하면, 그 결과를 원격 저장소에
보낼 수 있고, 원격 저장소에서 이미 작업된 결과물을 가져올 수도 있음.
9-2. '왜 말을 저렇게하지.. 둘이 싸웠나?'(feat. 디자이너와 개발자) 204
디자이너는 주로 포토샵과 일러스트로 작업함
-> 애플리케이션이나 웹 디자인에 최적화된 프로그램이 아니라서
개발자가 요소의 수치를 하나씩 파악해야함. 불편. -> 가이드 요구 -> 디자이너 힘듦 -> 갈등.
- 스케치, 재플린, XD : 위의 문제를 해결하기 위한 프로그램.
디자이너 작업 결과물의 수치를 보여줌.(가이드 만들 필요X) - 10장 정리
10-1. 개발을 시작하면 일어나는 일들 214
10-2. 아웃트로 222 - 부록- API 문서를 통해 서비스 분석하기 226
728x90
댓글