Book/개발서적

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

개발자하소서 2022. 6. 3. 14:41
728x90
반응형
SMALL

최원영 지음

 

📌2022-05-27(금) 

 

- 1장 오리엔테이션 

 * 상위 카테고리 

운영체제 프레임워크, 라이브러리 프로그래밍 언어 데이터베이스
Android
IOS
리눅스
우분투
Browser
Bootstrap
CSS
HTML
Angular.js
Express.js
React.js
JAVA
PHP
Python
Ruby
MySQL
MariaDB
RDB
Table

 

 * 직군 기준 용어 구분 

애플리케이션 개발자 웹 개발자 네트워크 서버 개발자 데이터베이스 개발자
Android
IOS
JAVA
Swift
Browser
Bootstrap
CSS
HTML
React.js
API
JSON
리눅스
우분투
Express.js
MySQL
MariaDB
RDB

 

 

- 2장 프로그래밍 언어 & 운영체제(OS)

P.38

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

  컴파일러는 코딩한 문서를 0과 1로 바꿔서 컴퓨터에게 전달해 줍니다. 컴퓨터는 그대로 행동합니다. 

 

P.39

 어떠한 프로그램에는 앞의 몇 글자만 치면 자주 쓰이는 문장을 추천해주거나, 

 코드가 아니라 그림으로 작업할 수 있게 해주는 등 개발자들의 작업을 도와주는 기능들이 있습니다. 

 이러한 프로그램들을 IDE(Integrated Development Environment) 즉, 통합 개발 환경이라 부릅니다. 

 

 * IDE(통합 개발 환경) 

  - Android Studio - 안드로이드 애플리케이션 개발용도 

  - Xcode - 애플 운영 체제 위의 애플리케이션 개발 용도 

  - Eclipse - c/c++/자바개발/웹개발 용도 

  - PyCharm - 파이썬 개발 용도 

 

 

📌2022-05-30(월) 

P.49

CPU는 컴퓨터의 머리이고 보조기억장치인 HDD와 SSD는 컴퓨터의 창고라고 볼 수 있다. 

CPU는 따로 데이터를 저장하지 않기때문에 데이터를 연산하거나 처리하려면 저장된 데이터를 

CPU로 보내줘야 한다. 이때 기억장치인 HDD와 SSD에 처리할 데이터를 보내달라고 신호를 보낸다.

보조기억장치는 CPU보다 속도가 매우 느리기에 , '메모리'라는 CPU의 개인 작업 공간을 만들어 

CPU가 그때그때 필요한 데이터를 보조기억장치에 요청하지 않아도 

메모리에 한번 옮겨놓고 메모리에서 작업하면 되기에 시간이 크게 줄어들었다.

 

 

- 3장 네트워크, 클라이언트, 서버

p.71

파일을 달라고 보채는 컴퓨터를 '클라이언트' 라고 한다. 

그리고 파일을 주는 컴퓨터를 '서버'라고 한다.

서비스를 사용하는 사용자들이 소유한 컴퓨터를 클라이언트라 뜻한다.

고객의 입장에 보면 클라이언트 컴퓨터를 직접 볼 수 있고, 만질 수 있다. 

고객의 바로 앞에 있는 이 클라이언트 컴퓨터를 바로 '프론트엔드'라 한다. 

반면, 서버는 고객이 볼 수 없는 곳에 있다.

고객에게 보이지 않는 곳, 즉 고객의 뒤에 있디. 

그래서 서버를 다른 말로 '백 엔드'라고 부른다. 

 

p.76

서버는 클라이어트의 요청에 응답하는 컴퓨터다.

요청의 종류는 다양할 수 있습니다. 로그인, 회원가입, 상품 리스트 요청 등등 

만약 로그인 요청이 있다면 아이디와 비밀번호가 필요하다. 

이때 컴퓨터는 생각한다.

'이 아이디가 존재하나?'

'존재한다면 비밀번호는 이게 맞나?'

컴퓨터가 생각한다는 건 코딩된 프로그램이 동작한다는 것을 의미한다.

프로그래밍 언어로 컴퓨터에 일을 시킨 거다.

하드웨어를 직접 컨트롤하지 않으려면 운영체제 위에서 프로그램을 돌려야한다. 

즉, 리눅스 위에 이런 생각을 하는 프로그램을 24시간 365일 돌려놓는 거다.

 

 

📌2022-06-02(목) 

- 4장 API와 JSON

p.91

클라이언트는 서버에서

" 로그인, 회원가입 시켜줘 "

" 이 메세지 삭제해줘" 와 같은 요청을 보내면, 서버는 요청에 따라 

적합한 처리를 해서 응답을 줄 것이다. 

그러나 컴퓨터는 한글을 모르기에 어떤 요청인지 알 수가 없다.

이 때 요청을 구분할 수 있도로고 하는 '체계'가 필요한데 그 체계가 바로 API다. 

API는 Application Programming Interface(애플리케이션 프로그램 인터페이스) 의 약자이다.

API는 클라이언트, 서버와 같은 서로 다른 프로그램에 요청과 응답을 주고 받을 수 있게 만든 체계다.

 

 

p.93

예로 들어 클라이언트 소프트웨어는 서버에 '타임라인에 사진을 올리는' 요청을 보낸다고 가정해보자.

이 요청은 크게 4가지로 CRUD 라고 불리는 요청으로 나눌 수 있는데, 

C는 Create의 약자로 타임라인에 사진을 '올리는' 요청을 뜻한다.

R은 Read의 약자로 타임라인에 사진을 '불러오는' 요청을 뜻한다.

U는 Update의 약자로 '바꾸는' 요청을 뜻한다.

D는 Delete의 약자로 '지우는' 요청을 뜻한다.

CRUD는 아주 중요하기에 개발자들은 데이터를 볼 때 항상 CRUD관점에서 생각한다. 

만약 CRUD 중 특정 기능이 없는 기획이라면, 그 기획 의도가 명확해야하며 이유도 설명할 수 있어야 한다.

 

p.94

CRUD요청은 각각의 주소를 가집니다. 그러나 전부 별개의 주소를 가지게 된다면 너무 많아지고 

관리하기 힘들어집니다. 그래서 그 영향으로 좀더 체계적으로 API를 관리하기위해 

RESTful API가 만들어집니다.

이는 CRUD를 하나의 주소로서 관리합니다. 

 

Create(생성해줘) : POST

Read(불러와 줘) : GET

Update(바꿔줘) : PUT(전체)/ PATCH(일부) 

Delete(지워줘) : DELETE

 

p.98

컴퓨터는 코딩된 대로 생각하고 응답을 보냅니다. 응답에는 2가지 경우가 있다.

하나는 '잘됐어'고, 다른 하나는 '잘 안됐어' 다.

잘됐어는 200번대 코드로,

잘안됐어는 400,500번대 코드로 정하였다.

클라이언트 요청에서 문제가 있는 경우는 400번대 코드,

서버에 문제가 잇는 경우는 500번대 코드로 표현하기로 정했다.

 

p.101

정리하면 API는 소프트웨어가 다른 소프트웨어의 기능을 쓰기 위해 중간에 필요한 체계이다.

쉽게말해, 기능을 사용하기 위해 주소로 요청을 보내면 응답을 해주는 소프트웨어끼리의

체계라고 이해하면 된다. 

즉, API는

클라이언트가 서버로 보내는 요청(Request)

서버가 클라이언트로 보내는 응답(Response) 에 활용한다.

 

API는 응답을 보내는 쪽에서 만들고, 요청을 보내는 쪽은 활용할 뿐이다.

이때 새로운 용어가 하나 더 등장하는데 바로 'SDK'이다. 

API를 제공해주는 다른 소프트웨어를 SDK라고 부른다.

SDK는 Software Development Kit의 약자로, 소프트웨어를 개발하기 위한 도구다.

예로들어 구글지도는 구글에서 만든 소프트웨어이다.

이때 다른 회사들도 구글에서 제공하는 지도 SDK를 설치하면 

자신의 소프트웨어에 구글 지도 기능을 넣을 수 있다.

 

 

p.104

클라이언트가 서버로 '아이디, 요청일자, 다른정보'를 보낸다고 가정해보자.

그 정보들은 다양한 형식으로 보낼 수 있다.

무한한 형식으로 만들어 낼 수 있기에 문제가 발생한다.

그래서 개발자들은 JSON 형식을 고안하였다.

JSON은 중괄호로 시작한다.

그리고 키(key)와 값(value)로 이루어져있고, 둘은 콜론(:)으로 구분한다.

만약 여러 상품의 정보를 불러와야 한다면 이땐, 배열 형식이 필요하다.

JSON에서 배열은 대괄호로 표시한다.

// JSON 형식

{
        키1(key) : 값1(value),
        키2(key) : 값2(value),
}

// JSON 예시
{
        "id" : "coldbrew",
        "pw" : "a12345"
}

// JSON 배열 예시 
{
        "category" : "음료",
        "sort" : "desc",
    "items" : ["카페모카", "카페라떼", "아메리카노"]
}

 

즉, 한문장으로 이해하자면

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

 

 

- 5장 애플리케이션

 

p.120

애플리케이션은 설치해서 사용하는 모든 프로그램이다. 우리가 사용하던 윈도우에서는

이를 응용프로그램(Application Software)라고 불렀다.

그런데 어느순간 스마트폰이 등장하고, '앱', '애플리케이션' 이라는 용어가 나오면서 

데스크탑에 설치하는 프로그램은 '응용 프로그램' 이라 부르고 

스마트폰에 설치하는 프로그램은 '앱' 혹은 '어플'이라고 부르게 되었다.

부르는 명칭은 다르지만 모두 같은 특징을 가지는 '애플리케이션'이다.

 

 

📌2022-06-03(금) 

 

- 6장 웹(WEB)

 

p.131

HTML과 CSS를 합쳐서 '퍼블리싱' 작업이라고 표현하고, 이 작업을 하는 사람들을 '퍼블리셔'라고 부른다. 

 

p.139

애플리케이션을 1.0.0에서 2.0.0으로 변경하기 위해서는 업데이트가 필요하다. 모바일이라면 심사도 필요하다. 

그렇게 업데이트 된 결과를 유저는 다시 다운로드 해야 한다. 그래야 변화가 반영되기때문이다.

하지만 웹은 다르다. 그냥 서버의 원본을 바꾸고 새로고침하면 된다.

 

p.155

IOS 프로그램을 개발하기 위한 프로그래밍 언어는 스위프트, Objective-C이다. 

안드로이드 프로그램을 개발하기 위한 프로그래밍 언어는 자바, 코틀린이다 

이 언어들로 개발한 애플리케이션을 '네이티브 애플리케이션'이라고 한다.

원래 정해놓은 언어들을 사용해 운영체제 자체의 기능을 사용하기 때문에 

'원주민'이라는 뜻을 가진 '네이티브'가 붙는 것이다.

 

하지만 운영체제 안에 브라우저가 내장되자 새로운 방식으로도 애플리케이션 개발이 가능해졌다. 

바로 애플리케이션 특정 부분에 '브라우저'를 올리는 방식이다. 

이처럼 네이티브와 브라우저가 혼합된 애플리케이션을 '하이브리드 애플리케이션' 이라고 한다.

 

 

- 7장 데이터베이스와 이미지 처리 

p.164

데이터는 단 1% 결점도 없어야 한다. 그래서 데이터를 관리하는게 어렵다. 

이러한 데이터의 속성을 '무결성'이라고 한다. 

따라서 데이터를 다루는 사람들은 보수적일 수 밖에 없다.

 

p.169

CPU, 메모리, 보조기억장치는 하드웨어이다.

CPU는 컴퓨터의 머리이고, 보조기억장치는 컴퓨터의 창고다.

메모리는 CPU의 개인 작업 공간이다. 

하지만, 메모리에 저장된 데이터들은 전원이 꺼지면 없어진다.

그렇기에 데이터는 보조기억장치에 저장된다. 

 

반면 데이터베이스 관리시스템(DBMS)는 소프트웨어이다.

즉, CPU와 메모리가 있다면 DBMS를 실행할 수있다는 것이다.

 

- 서버 : API 요청/ 그냥 DB / 백엔드

- 클라이언트 : 로컬/내부 DB/네이티브/클라-클라이언트/프론트엔드

 

p.178

컴퓨터라면 모두 이미지 파일을 보관할 수 있다.

이미지는 클라이언트에도, 서버에도 있을 수 있고 그 모두는 주소를 가지고 있다.

클라이언트에서 서버에 있는 이미지를 불러온다는 것은 네트워크를 통해 이미지 파일을 

다운 받는 것을 의미한다.

이미지가 클라이언트에 있는 지 서버에 있는 지 확인하는 가장 좋은 방법은

API 문서를 보는 것이다. API를 통해 이미지 주소(URL)를 서버에서 받아온다면 

그 이미지는 서버에 있는 이미지라고 판단할 수 있다. 

 

 

- 8장 프레임워크와 라이브러리 

 

p. 189

IOS, MacOS, WatchOS 등의 애플의 애플리케이션을 개발하기 위해서는 Swift 혹은 Objective-C라는 

언어를 사용해야 한다. 여기에 애플에서 제공해주는 프레임워크인 코코아를 사용하면 

애플의 애플리케이션을 더 쉽고 빠르게 만들 수 있다.

거대 IT 회사들은 개발자들이 자사의 애플리케이션을 쉽고 빠르게 개발할 수 있도록 

프레임워크를 만들어 제공해 주고 있다. 

하지만 웹은 다르다. 웹은 특정회사의 소유가 아니다. 

그렇기에 웹의 프레임워크와 라이브러리는 여러 사람들이 만든다. 

그 중 가장 유명한 세개는

Angular.js(구글), React.js(페이스북), Vue.js(중국) 이다. 

 

p.193

 각 언어마다도 프레임워크가 존재한느데 

자바는 스프링(spring)이 유명하고, 파이썬은 장고(Django)가 유명하며 

루비는 레일스(Rails), 자바스크립트는 익스프레스(Express.js)라는 프레임워크를 많이 사용한다.

 

라이브러리와 프레임워크 중에서 프레임워크가 더 큰 개념이다. 

각종 라이브러리와 코드들이 모이면 프레임워크가 된다. 

더불어 한 프로젝트에서는 프레임워크는 하나만 사용 가능하다. 

 

 

- 9장 협업, 소스관리, 디자인

p.199

깃을 통해 개발자들은 개발 단계별로 '깃발'을 꽂을 수 있다. 그 행위를 커밋(commit)이라고 한다. 

커밋에는 항상 메모가 따라다닌다. 이는 무슨 개발을 했는지 적어주는 메모이며 

그 메모를 커밋 로그(commit log)라고 한다.

 

p.200

브랜치(Branch)는 분기, 가지라는 뜻으로 새로운 가지를 뻗는 것을 의미한다. 

한창 개발을 하고 있는데. 새로운 방향의 개발을 추가해야 할 때,

개발자는 기존 개발에 이어서 작업하지 않고 새롭게 가지를 쳐서 작업할 수 있다.

이렇게 하면 기존 브랜치에 커밋을 하는 것이 새로운 브랜치에 영향을 주지 않고,

마찬가지로 새로운 브랜치에 커밋을 하는 것이 기존 브랜치에 영향을 주지 않는다. 

그렇기에 각각 서로 다른 곳에서 따로 개발이 가능하고 

이후 각각의 브랜치에서 작업한 코드들을 합치기만 하면 된다. 

이렇게 코드를 합치는 기능을 머지(Merge)라고 한다. 

깃은 똑똑하기에 작업된 부분이 겹치지 않으면 자연스럽게 합쳐준다. 

만약 겹치는 부분이 있다면 깃은 충돌(Conflict)을 알려주고, 어떤 부분이 충돌되었는지 보여준다.

 

p.203

개발자 역시 일종의 문서를 적는 사람이기에, 하나의 프로젝트를 여러 명에서 함께 작업한다면 

같은 이슈가 발생할 수 있다. 이에 개발자들은 깃을 기반으로 한 

깃허브, 비트버킷 등의 원격 저장소를 만들었다. 

개발자들이 자신의 컴퓨터(로컬)에서 작업을 한 뒤 커밋을 하면 그 결과를 원격저장소에 보낼 수 있고, 

원격저장소에서 이미 작업된 결과물을 가져올 수도 있다. 

 

 

- 10장 정리 

p.214

컴퓨터는 CPU, 메모리, 보조기억장치(HDD, SSD)와 같은 부품을 가지고 있다. 

그런 부품들을 우리가 직접 제어하면서 컴퓨터를 사용하진 않고 어떤 프로그램이 

그 역할을 대신 해준다. 바로 Mac, 윈도우, ios, 안드로이드와 같은 운영체제이다.

이 운영체제 위에서 프로그램을 개발하는 사람을 클라이언트 개발자라고 부른다. 

주변에 IOS 개발자, 안드로이드 개발자가 있다면 클라이언트 개발자일 확률이 높다. 

 

p.215

서버에서도 클라이언트와 마찬가지로 CPU, 메모리, 보조기억장치를 가지고 있다. 

또한 운영체제도 있는데 주로 리눅스를 많이 사용한다.

리눅스는 기본적으로 안정적이고 무료이기에 많이 사용하는데 이 

서버프로그램을 만들어 서버컴퓨터에 돌리는 사람이 서버 개발자이다.

 

 그렇게 서버와 클라이언트가 만들어지면 이 둘은 API를 통해 요청과 응답을 주고 받는다.

기능을 제공하는 쪽은 서버이고, 클라이언트는 이 기능을 사용한다.

이때 API는 특정한 주소와 메서드(POST, GET, PATCH, PUT, DELETE)로 이루어져있다.

메서드는 각각 CRUD(Create, Read, Update, Delete)와 매치된다.

 

정확한 곳으로 요청을 보내면 서버는 요청이 온 곳으로 다시 응답해준다. 

응답에는 성공과 실패가 있는데, 성공은 200번대 실패는 400,500번대 이다 

클라이언트측에서 요청을 잘못보내면 서버는 400에러코드를 보낸다.

서버측에서 문제가 생기면 500번대 에러 코드를 보낸다.

 

p.217

클라이언트 프로그램이 만들어지면, 그 프로그램은 서버에 다양한 요청을 보낸다.

" 회원가입 시켜줘"

" 상품 목록을 보여줘"

서버에서는 각 요청에 맞는 기능을 만든다. 각 기능들은 대부분 DB를 거쳐 

정보를 가져오는데, 이때 사용하는 언어가 바로 SQL이다.

SQL은 데이터베이스관리시스템(DBMS)에 데이터를 CRUD 하기 위한 언어다.

 

p.218

서버 개발자는 해당 기능을 만든 다음, 각 기능에 맞춰서 API를 만들고, API 문서를 작성한다.

그럼 클라이언트 개발자는 API 문서를 보며 특정 주소로 요청을 보내고 응답을 받는다.

이 과정에서 API가 없어지거나 수정되기도 한다.

 

웹과 애플리케이션의 결과물은 조금 다르다.

웹같은 경우는 완성 결과물을 서버에 올려둔다. 서버컴퓨터에 원본 HTML. CSS, JavaScript가 있고 

웹 클라이언트 개바라자들은 완성한 작업물을 그곳에 배포한다. 

일반 유저는 특정한 도메인을 쳐서 원본이 있는 서버에 요청을 보내고 

HTML, CSS, JavaScript , 이미지, 폰트 등 파일이 일반 유저의 브라우저로 다운로드 된다.

다운로드된 HTML, CSS, JavaScript 사본은 필요할 시 서버로 api 요청을 보낸다.

그 요청은 데이터베이스가 존재하는 서버 컴퓨터가 받는다. 그리고 요청을 처리한 뒤 응답을 보낸다. 

이게 바로 웹이 동작하는 방식이다.

 

애플리케이션같은 경우는 IOS개발자가 프로그램을 완성하면 앱스토어에 심사 신청을 한다. 

심사에 통과하지 못하면 "리젝(Reject)" 됐다고 한다.

그럼 통과하지 못한 사유를 수정하거나 다시 입증하여 심사에 올리고 

심사에 통과하면 앱스토에서 애플리케이션을 볼 수 있다. 

사람들은 스마트폰에 애플리케이션을 다운로드 한다. 

다운로드 완료되어 설치된 애플리케이션은 필요시 데이터베이스가 있는 서버에 API요청을 보낸다.

그리고 응답을 받아 처리한다.

 

 

728x90
반응형
LIST