Book review

비전공자를 위한 이해할 수 있는 IT 지식 - 최원영

synergy 2022. 2. 23. 23:59

에너지공학을 전공하고 어쩌다 데이터 분석가로 채용되어 일을 하고 있다. 하지만 회사에서 질문을 할 때도 어떤식으로 질문해야하는지도 막연하고 IT 지식이 너무 부족한 것 같아서 주변 친구에게 '나 회사에서 어떻게 질문을 해야하는 조차도 모르겠어.. 나 뭐부터 공부해야하는 걸까 너무 막막하다..'라고 털어놓은 적이 있다. 그 친구가 '그럼 비전공자를 위한 이해할 수 있는 IT 지식'이라는 책이 있던데 그거부터 읽어보는 건 어때?'라고 책을 추천해주어 이 책을 읽게 되었다.

책의 목차는 다음과 같다.
1. 오리엔테이션
2. 프로그래밍 언어 & 운영체제(OS)
3. 네트워크, 클라이언트, 서버
4. API와 JSON
5. 애플리케이션
6. 웹(Web)
7. 데이터베이스와 이미지 처리
8. 프레임워크와 라이브러리
9. 협업, 소스관리, 디자인
10. 정리

목차별로 인상깊었던 문장들과 느낀점을 적어보았다.

1. 오리엔테이션

저자는 경영학과 출신으로서 개발공부를 하여야 개발자와 일을 같이 할 수 있다고 생각하여 개발자공부를 하였다. 그리고 현직에 있으면서 과연 비전공자가 IT 산업에서 일하기 위해 'C 언어, 자바, 파이썬'을 배워야 할지 다시 생각해 봤을 때 '아니다'라는 결론을 얻었다고 한다.
IT 산업에서 일하는 기획자에게 가장 먼저 필요한 건 '파이썬'이나 '자바'가 아니라 바로 '커뮤니케이션'이라고 한다. 그래서 '커뮤니케이션을 위한 IT 지식'을 공부해야한다.

다음그림은 책에서 다루는 주제들이다.

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


의사소통이 안되는 인간과 컴퓨터 사이에는 '컴파일러'가 있어서 인안의 요구를 컴퓨터에게 전달해준다. 자바, 파이썬, 루비, 스위프트 등 영어로 되어 있는 프로그래밍 언어를 사용해 컴파일러에게 명령을 전달하면, 컴파일러가 기계어인 0과 1로 변환해 컴퓨터에게 전달을 하는 방식이다.

몇 글자만 치면 자주 쓰이는 문장을 추천해주거나, 코드가 아니라 그림으로 작업할 수 있게 해주는 등 개발자들의 작업응 도와주는 기능들이 있는 프로그램들을 IDE(Integrated Development Environment), 즉, 통합 개발 환겅이라고 부른다. 쉽게 말해 개발을 위한 모든 것들을 제공해주는 환경이다.

프로그래밍 언어를 구분하는 하나의 기준이 있다면, 바로 '저수준'과 '고수준'입니다. '저수준'은 '컴퓨터 친화적인 언어'입니다. 고수준은 '인간 친화적인 언어'죠.
컴퓨터 친화적인 언어들은 배우기 쉽지 않습니다. 컴퓨터가 어떻게 일해야 하는지 구체적으로, 꼼꼼하기 적어줘아 하죠. 대신 장점이 있습니다. 낮은 사양의 컴퓨터에서도 원활히 작동합니다.
반면, 인간 친화적인 언어들은 사람들 학습하기 쉽습니다. 하지만 고수준 언어는 컴퓨터의 사양에 따라 잘 작동할 수도, 그렇지 않을수도 있습니다.

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

파일을 달라고 계속 보채는 컴퓨터를 '클라이언트'라고 합니다. 그리고 파일을 주는 컴퓨터를 '서버'라고 합니다.

4. API와 JSON

서버는 요청에 따라 적합한 처리를 해서 응답을 줄 겁니다. 하지만 컴퓨터는 한글을 모릅니다. 어떤 요청이 '메시지를 달라'는 요청인지, '로그인 시켜줘'라는 요청인지 알 수 없습니다. 요청을 구분할 수 있도록 하는 '체계'가 필요합니다. 바로 그 체계가 API입니다. API는 클라이언트, 서버와 같은 서로 다른 프로그램에서 요청과 응답을 주고 받을 수 있게 만든 체계입니다.
API는 요청을 보내는 쪽과 응답을 주는 쪽이 나뉘어 있습니다. 여러분의 스마트폰은(클라이언트 컴퓨터) 요청을 보내고, 서버 컴퓨터는 요청을 받아서 응답을 줍니다.

'타임라인에 사진을 올리는' 요청이라고 생각하면 이 요청을 크게 4가지 요소로 나눌 수 있습니다. CRUD라고 불리는 이 4가지 요청은 데이터를 다룰 때 기준이 되는 요청으로, 프로그래머에게 아주 중요합니다.
C는 Create 약자로 타임라인에 사진을 '올리는' 요청을 뜻합니다. R은 Read의 약자로 타임라인에 사진을 '불러오는' 요청을 뜻한다. U는 Update의 약자로 '바꾸는' 요청을, D는 Delete의 약자로 '지우는' 요청을 뜻합니다.

그리고 요청을 보낼 때 다음과 같이 어떤 요청을 보냈는지 파악할 수 있는 스티커를 붙여서 함께 전송합니다.
- Create(생성해줘) : POST
- Read(불러와 줘) : GET
- Update(바꿔줘) : PUT(전체)/PATCH(일부)
- Delete(지워줘) : DELETE

서버의 관점에서 클라이언트에서 요청을 보내면 서버는 응답을 보냅니다. 응답에는 2가지 요청이 있습니다. 하나는 '잘 됐어'고 다른 하나는 '잘 안 됐어'입니다. 그런데 '잘 됐어'라는 표현의 경우의 수는 엄청 많습니다. 이때 문제가 발생할 수 있습니다. 그래서 개발자듯은 '잘 됐어'나 '잘안 됐어'에도 체계가 필요라다고 생각했습니다.
그래서 '잘 됐어'는 200번대 코드로 표현하기로 정합니다. '잘 안됐어'는 두 가지 경우가 있을 수 있습니다. 클라이언트 요청 때문에 잘 안 된 경우가 있고, 서버 내부적으로 잘 안된 경우가 있습니다. 이 두 가지 경우를 다르게 표현하면, 문제가 생겼을 때 원인을 찾기 쉽겠죠. 그래서 클라이언트 요청에서 문제가 있는 경우, 400번대 코드로 표현하기로 정했습니다. 반면 문제가 서버에 있는 경우, 500번대 코드로 표현하기로 정했습니다.

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

5. 애플리케이션

6. 웹(Web)

주의해야 할 사항은 HTML이 프로그래밍 언어가 아니라는 점입니다. HTML은 컴퓨터에게 특정 일을 시킬 수 있는 언어가 아닌 단지 브라우저가 볼 수 있는 문서를 적는 언어입니다.
문제는 HTML이 정보 전달에만 초점을 맞추다보니, 디자인 기능이 부족하다는 것이였습니다. 사람들은 포토샵이나 일러스트레이터 같은 디자인 기능을 원했기 때문에 HTML에 디자인을 입힐 수 있는 코드인 CSS(Cascading Style Sheets)를 붙였습니다.
웹이 더욱 널리 쓰이게 되면서 또 다른 기능을 원하는 사람들이 생겨났습니다.
'링크 말고 좀 다른 기능을 붙이고 싶은데..'
'API 요청을 주고받고 싶어'
'장바구니에 물건을 넣고 싶은데... 어떻게 만들지?'
'로그인과 회원 가입을 어떻게 시키지?'
위 기능들은 HTML과 CSS로 힘든 기능들로, 프로그래밍 언어가 필요합니다. 그래서 웹 쪽에서는 'JavaScript'라는 언어가 프로그래밍 언어의 역할을 하게 됩니다.

그렇다면 JavaScript와 자바는 무슨 관계일까요? 사실 이름만 비슷할 뿐 이 둘은 아무 관계가 없습니다. 돌아다니는 우스갯소리로는 이 둘의 관계를 '코끼리와 바다코끼리의 관계'라고 이야기하기도 합니다.

애플리케이션을 1.0.0에서 2.0.0으로 변경하기 위해서는 업데이트가 필요합니다. 모바일이라면 심사도 필요하죠. 그렇게 업데이트된 결과를 유저가 다운로드해야 합니다. 그래야 변화가 반영됩니다. 하지만 웹은 다릅니다. 그냥 서버의 원본을 바꾸면 됩니다. 그럼 '새로 고침'할 때, 바뀐 HTML, CSS, JavaScript, 이미지 등등의 파일이 다시 다운로드됩니다. 심사 과정도 없고 유저의 업데이트 과정도 없습니다. 새로 고침하면 자동으로 반영됩니다.

웹과 애플리케이션은 각각 장점과 단점을 가지고 있습니다. 먼저 웹은 수정이 용이합니다. 원본만 수정하면 유저가 업데이트하지 않아도 새로 고침하면 반영됩니다. 빠르게 적용할 수 있죠. 하지만 애플리케이션은 그렇지 않습니다. 오래 걸리죠.
재미있는 건, 웹의 장점이었떤 '새로 고침'이 사실 웹의 단점이기도 하다는 것입니다. 웹은 항상 새로 고침을 해야합니다. 매번 HTML, CSS, JavaScript를 다운로드받아야 하죠. 웹은 네트워크의 영향을 크게 받습니다. 반면 애플리케이션은 웹보다 효율적으로 네트워크의 영향을 조금만 받도록 만들 수 있습니다. 대표적인 애플리케이션이 카카오톡입니다.

iOS 프로그램을 개발하기 위한 프로그래밍 언어는 스위프트, Objective-C입니다. 안드로이드 프로그램을 개발하기 위한 프로그래밍 언어는 자바, 코틀린이죠. 이 언어들로 개발한 애플리케이션을 '네이티브 애플리케이션'이라고 합니다. 원래 정해놓은 언어들을 사용해 운영체제 자체의 기능을 사용하기 때문에 '원주민'이라는 뜻을 가진 '네이티브'가 붙게 됩니다.

하지만 운영체제 안에 브라우저가 내장되자 새로운 방식으로도 애플리케이션 개발이 가능해졌습니다. 바로 애플리케이션 특정 부분에 '브라우저'를 올리는 방식입니다. 그리고 HTML 파일을 불러올 URL을 설정해두는 거죠. 그럼 브라우저가 뜨고 그 브라우저는 HTML과 HTML에 연결된 파일들을 불러와서 보여줍니다. 그 부분은 HTML, CSS, JavaScript로 구성되어 있죠. 네이티브와 브라우저가 혼합된 애플리케이션입니다. 이렇게 웹과 애플리케이션이 혼합된 애플리케이션을 '하이브리드 애플리케이션'이라고 합니다.






조금이라도 개발자의 언어를 이해해보고자 읽은 책이었다. 아직 생소한 부분은 많지만 전체적인 흐름을 파악한 느낌이다. 아는 부분도 있었지만 아는걸로 착각한 부분도 많이 있었던 것 같다. 개발공부를 해야할까 시작하는 초심자들에게 호기심을 유발시키고 어렵지 않게 개념을 잡아주는 책이라고 생각든다.