기록하며 성장한다 - 개발, 회고

독서

[IT기초] 비전공자를 위한 이해할 수 있는 IT지식

전대홍 2023. 6. 15. 16:40

 

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

 

0. 머리말

💬 API, 클라, 서버, 프레임워크...? 도대체 뭐라는 거야?

📕 《비전공자를 위한 이해할 수 있는 IT지식》 📕

이 책은 개발자이자 강사를 하고있는 '최원영'이라는 분께서 만드셨다.

나와 똑같은 비전공자 출신이었던 저자는 '기획' 일을 하던 도중, 개발자들이 이야기하는 대화를 이해하기 어려워 '말이 통하기 위해' 개발 언어를 독학하기 시작한다. 그리고 우연한 계기로 'NHN NEXT'라는 학교에 들어가 IT에 대한 많은 것들을 배우게 된다.

여기서 저자가 느낀 것은 'IT의 전반적인 큰 그림'을 이해해야 한다는 것이었고, 그래서 이 책을 쓰게 되었다.

저자는 기획자들도 IT의 큰그림을 알아야 하기에, 본인과 같은 시행착오를 다른 사람들이 겪지 않길 바라며 이 책을 출간하였지만, 나는 기획자가 아닌 개발자가 되기 위해서도 이 책은 꼭 읽어야 한다고 생각했다. 특히나 이제 막 IT계에 발을 들여 공부를 시작한 '비전공자'라면, 해당 포스트를 통해, 그리고 이 책을 통해 IT지식의 큰 그림을 그려볼 수 있으면 좋겠다. 적어도 나에게는 아주 큰 도움을 준 책이다.

내가 추후 이 책에 대해서 다시 공부해야 할 일이 있을 때, 오늘 올린 Velog의 글을 보며 다시 공부를 할 것이다.

 😄 나는 이 책을 구매하여 정독하였고, 내가 포스트하는 부분이 책의 전부가 아니다.
    그러니 이 포스팅을 읽고, 혹시 생각이 있으면 직접 구매하여 읽었으면 좋겠다.

 😄 또한 이 책은 정말 기본적인 큰 틀을 잡아주기 위한 정보들로 모여있다.
    네트워크면 네트워크, 서버면 서버 등 '큰 줄거리 요약' 정도의 정보들만이 있기에,
    세부적으로 알고 싶은 분들은 해당 부분에 대하여 강의나, 책을 구매하여 공부하기 바란다.

필자는 비전공자이며 IT에 발을 들이기전에 이 책을 통하여 IT의 큰 틀을 잡는데 도움을 많이 받았다.


 

1. 프로그래밍 언어

(1) 프로그래밍 언어는 '언어'이다.

한국말 밖에 못하는 한국인과, 아랍어 밖에 못하는 아랍인은 서로 대화가 통하지 않는다. 대화가 이어지기 위해서는 한국어와 아랍어를 둘 다 할 줄 아는 사람이 중간 다리 역할을 해주어야 하는 것이다.

컴퓨터와의 관계도 그렇다. 컴퓨터는 0과 1밖에 모르는데, 그런 컴퓨터에게 일을 시키기 위해서는 프로그래밍 언어를 컴퓨터 언어로 바꿔 전달해주는 '컴파일러'라는 것이 필요하다. 그리고 우리가 배우는 Java, C, 파이썬과 같은 프로그래밍언어가 컴파일러에게 명령을 전달하는 언어가 된다.

즉, 사람이 컴퓨터에게 일을 시키는 과정은,
사람(개발자) → 프로그래밍언어(자바 등) → 컴파일러 → 컴퓨터인 것이다.

 

(2) IDE란?

통합 개발 환경을 의미하며, 앞의 몇 글자만 치면 자주 쓰이는 문장을 추천해주거나, 코드가 아니라 그림으로 작업할 수 있게 해주는 등 개발자들의 작업을 도와주는 기능들이 들어있다.

📜 Android Studio : 안드로이드 어플 개발 용도
📜 Xcode : 애플 운영 체제 위의 어플리케이션 개발 용도
📜 Eclipse : C/C++ 가발, 자바 개발, 웹 개발 용도
📜 PyCharm : 파이썬 개발 용도
. . . . .

 

(3) 프로그래밍 언어가 많아진 이유?

프로그래밍 언어가 많아진 이유로는 각각의 장단점을 보완하기 위해 그렇다.

언어에는 '컴퓨터 친화적인 언어'가 있고, '인간 친화적인 언어'가 있다. '컴퓨터 친화적인 언어'는 말 그대로 컴퓨터와 친화되어있기에 저사양 컴퓨터에서도 무리없이 잘 작동한다. 대신 그만큼 사람이 배우기 어려운 언어라고 할 수 있다.

반대로 '인간 친화적인 언어'는 저사양 컴퓨터에서 돌리기엔 처리 속도가 느릴 수 있다. 대신 사람이 배우기에 비교적 쉽다.

종류 특징 언어 사용처
컴퓨터 친화적 언어 ✍컴퓨터와 가까운 언어임
✍저사양 컴퓨터로도 무리 없이 처리
✍사람이 배우기 비교적 어려움
C 언어 PTV ,
컴퓨터달린 냉장고 등
사람 친화적 언어 ✍사람과 가까운 언어임
✍저사양 컴퓨터로는 처리 속도가 느림
✍사람이 배우기 비교적 편함
파이썬 고사양 컴퓨터

 

2. 컴퓨터의 구성 요소 & 운영체제(OS)

(1) 컴퓨터의 구성 요소

✍ CPU : 컴퓨터의 머리와 같고, 데이터를 처리하는 곳
✍ 보조기억장치 : HDD, SSD이며 데이터를 저장하는 곳
✍ 메모리 : CPU의 개인 작업 공간

이 3개가 함께 맹렬히 돌아감으로써 빠른 속도로 컴퓨터가 일을 처리한다.

물론 컴퓨터의 구성요소는 더 세부적으로 있다. 그건 나중에 자세히 다뤄보겠다.
(ex.소프트웨어, 입출력장치 등)

 

(2) 운영체제(OS)

우리 대신 하드웨어를 관리해주고, 보조기억장치를 관리해 준다. 우리가 과거 컴퓨터가 처음 나왔을 무렵처럼 명령어를 입력하여 작동시키는 것이 아니라, 바탕화면에서 클릭 몇 번으로 편하게 프로그램을 설치하고 사용 할 수 있는 것이 '운영체제(OS)' 덕분이다.

운영체제(OS)에는 마이크로소프트의 '윈도우', 애플의 'Mac OS', 구글의 '안드로이드' 등이 있다.


 

3. 네트워크와 서버

(1) 네트워크

💬 " LAN ?? MAN ?? WAN ?? 네트워크는 대체 어떻게 이루어진거지? "

일단 위에 있는 그림에는 큰 의미를 두지 않았으면 좋겠다. 마땅히 넣을 네트워크 그림이 없기에 구글에서 찾아왔다.

 컴퓨터를 연결해주는 '네트워크'에는 규모에 따라 크게 세 가지가 있는데, 컴퓨터가 연결된 작은 지역을 'LAN'이라 하고, 도시의 여러 LAN을 하나로 연결해 'MAN'을 만들었으며, 도시와 도시, 나라와 나라를 모두 연결해서 WAN을 만들었다.

 우리가 학원에서 수업을 받을 때 사용하는 여러 컴퓨터들은 학원에 있는 자체 네트워크인 LAN으로 묶여있다고 보면 편하다. 이 안에서는 서로 데이터를 교환할 때 LAN을 활용하여 교환을 하게 된다. 그리고 다른 네트워크를 사용 중인 옆 도시의 학원에 데이터를 보낼 때는 'IP'를 활용하여 'MAN' 혹은 'WAN'을 타고 데이터를 전달한다고 보면 된다.

 

💬 " IP 주소는 대체 뭘까? "

 우리에게는 IP주소라는 것이 있다. 우리가 속한 네트워크의 고유 식별 번호라고 생각하면 된다. 우리는 이 IP주소를 통해 데이터를 보내기도 하고, 받기도 한다. " 등으로 더 정확하게 내 네트워크의 위치를 알 수 있지만 이건 다음에 네트워크를 공부하며 더 이야기하겠다.

 예시를 들어보자. 우리가 집에서 내 휴대폰으로 '앱스토어'를 이용하여 '카카오톡 어플'을 다운받으려 한다면, 현재 내 휴대폰은 집에 있는 공유기를 이용하여 LAN으로 묶여있는 상황이다.

 이럴 경우 아래와 같은 절차로 카카오톡을 다운 받을 수 있는 것이다.

● 내휴대폰 ( 💬 : 애플 컴퓨터IP로 앱스토어에서 카카오톡을 다운받고 싶다고 보내)
● LAN → (사설IP → 공인IP) → MAN → WAN 네트워크를 타고 이동
● 애플의 컴퓨터의 IP 도착 (이 안에 카카오톡 원본 설치파일이 있음)
● 애플의 컴퓨터 (💬 : '내휴대폰'이 있는 IP로 카카오톡 설치파일 보내)
● LAN → (사설IP → 공인IP) → MAN → WAN 네트워크를 타고 역순으로 이동
● 내 휴대폰 카카오톡 설치 파일 도착

 또 하나의 예시를 들어보자면, 내가 카카오톡을 통해 친구에게 동영상을 보내고 싶다. 그러면 아래와 같은 과정을 거치게 된다.

● 내 휴대폰 ( 💬 : 친구에게 동영상 파일을 보내줘)
● 내 휴대폰 ( 💬 : 카카오톡 서버 컴퓨터 IP에 우선 이 파일을 보내야겠지)
● LAN → (사설IP → 공인IP) → MAN → WAN 네트워크를 타고 이동
● 카카오톡 서버 컴퓨터에 파일 도착 및 업로드

● 친구 휴대폰 ( 💬 : 그 동영상 파일 나 줘)
● 친구 휴대폰 ( 💬 : 카카오톡 서버 컴퓨터에 파일을 달라고 요청해야겠지 )
● LAN → (사설IP → 공인IP) → MAN → WAN 네트워크를 타고 이동
● 카카오톡 서버 컴퓨터에 "파일을 달라는 요청"이 도착
● 카카오톡 서버 컴퓨터 ( 💬 : 이 동영상 파일을 "친구 휴대폰 IP"로 전송 )
● LAN → (사설IP → 공인IP) → MAN → WAN 네트워크를 타고 이동
● 친구 휴대폰에 동영상 파일 도착

 

(2) 서버 프로그램

👉 서버 프로그램에는 대표적으로 "리눅스"라는 것이 있다. "리눅스"는 윈도우나 MaxOS 처럼 "운영체제(OS)인데, 일반적인 OS와는 다르게 서버를 관리하기 위한 OS라고 생각하면 된다. 리누스 토발스라는 사람이 개발을 하고 무료로 배포하였으며, 우리가 흔히 알고 사용하는 "리눅스"는 이를 개량하여 만든 것들이다. 그 중 우리가 제일 많이 사용하는 것으로는 "우분투" 혹은 "안드로이드"가 있으며, 기업들 등에서는 "Red hat"이라는 버전을 많이 사용하기도 한다.

  👉 서버 컴퓨터는 상시 돌아가고 있어야한다. 그래서 개인이 서버를 운영하기는 힘들다 보면된다. 아마 처음 서비스를 시작해서 운영하는 사람이 개인 서버를 운영한다면, 전기세 조차 감당하기 힘들 것이고, 만약 서비스가 잘 된다면 수 많은 클라이언트들의 요청을 버티지 못하여 컴퓨터가 다운되는 경우도 생길 것이다.
  그래서 우리는 AWS(아마존 웹 서비스) , Cafe 24와 같은 '호스팅 업체'에 돈을 내고 대신 서버를 운영해달라고 하는 것이다. 그곳에는 여러 컴퓨터를 한 대 모아 서버를 운영하기 때문에 웬만한 클라이언트의 요구에도 끄떡 없을 뿐더러 전기세등의 고민도 하지 않아도 된다.


 

4. "API"와 "JSON"

(1) API

ㄱ. 클라이언트와 서버 관계에서의 API

💬 "메시지, 비디오 파일, 이미지 파일을 줘."
💬 "로그인, 회원가입 시켜줘"
💬 "이 메시지 삭제해줘"

👉 클라이언트는 서버에게 위와 같은 요청을 한다. 그러면 서버는 요청에 따라 적합한 처리를 해서 응답을 준다. 하지만 컴퓨터는 한글을 모르기에, 뭐가 달라는건지 삭제해달라는건지 모른다. 그래서 해당 요청을 구분할 수 있도록 하는 "체계"를 API 라고 한다. 즉, API는 클라이언트와 서버와 같이 서로 다른 프로그램에서 요청과 응답을 주고 받을 수 있게 만든 체계이다.

👉 "페이스북 타임라인에 사진을 올리는" 요청을 예시로 들어보면, 해당 요청은 크게 4가지로 나눌 수 있다. CRUD라고 불리는 이 요청은 C(Create = 올리는 요청) , R(Read = 불러오는 요청) , U(Update = 바꾸는 요청) , D(Delete = 지우는 요청) 으로 이루어져있다. 그리고 해당 요청은 각각의 주소를 갖는다. 예를 들자면, Create면 Create에 대한 서버 컴퓨터의 주소가 따로 있다는 것이다.

👉 하지만 이렇게 하다보니 API 주소가 너무 많아지게 되었고, RESTful API라는 체계를 통해 주소의 개수를 줄인다. 이 특징은 CRUD를 하나의 주소로 관리하는 대신, 어떤 요청을 보냈는지 알 수 있는 '스티커'를 함께 전송하는 것인데, Create에는 POST / Read에는 GET / Update에는 PUT(전체)이나 PATCH(일부) / Delete에는 DELETE가 붙어서 온다.

👉 이제 이러한 요청을 받았으면, 서버 컴퓨터에서는 개발자가 작성한 프로그래밍에 따라 계산을 시작한다. POST를 받았으면 사진을 업로드해줘야하는데, 이 사람이 로그인을 했는지? 비밀번호는 맞게 썼는지? 등을 파악한 후 해당 요청을 처리하는데에 문제가 없다면 200번대 코드로 표현한다. 그럼 개발자들은 이걸보고 문제가 없다는 것을 판단한다. 하지만 400번대 & 500번대로 응답한다면, 문제가 있다는 것인데, 400번대는 클라이언트가 잘못된 요청을 보냈을때 응답받는 코드이며, 500번대는 서버컴퓨터에서의 문제가 있을 때 응답받는 코드이다. 우리가 흔히 볼 수 있는 응답코드로는 404가 있을 것이다. 아마 잘못된 주소로 들어갈 경우 많이 보이는데, 이는 우리가 요청을 잘못했다는 의미가 된다. 더 자세한 이야기는 책에도 나와있으며, 다음에 더 이야기하겠다.

 

ㄴ. 더 넓은 의미의 API

💬 "아.. 지도 프로그램을 어떻게 만들지. . . ??"

👉 우리가 새로운 프로그램인 "ㅇㅇ소프트웨어"를 개발하려하는데, 여기에 지도를 넣어야한다. 그러면 세계지도가 나와있는 프로그램을 직접 만들어야 할까? 그건 시간도, 돈도 버리는 일이 될 수 있다. 물론 둘 다 여유가 된다면 자회사만의 지도를 만드는 것도 좋을 수 있으나 대부분의 회사는 그렇지 않다.

👉 그럼 구글이나 이런곳에서 만든 지도를 가져다 쓰는 방법을 써야되는데, 여기서는 우리가 만들고 있는 "ㅇㅇ소프트웨어"에서 구글의 API를 사용하여 정해진 방법대로 구글의 소프트웨어에 요청을 보낸다. 그러면 구글에서는 "어~ 사용해~" 이렇게 응답을 해줄 것이다. 이렇게 API를 제공하는 다른 소프트웨어를 SDK라고 부르는데 소프트웨어를 개발하는데 도움을 주는 다른 소프트웨어를 말한다.

 

(2) JSON

👉 쉽게 말해서 API에서 요청과 응답을 주고받을 때 사용하는 양식이다. 누구는 A양식으로 보내고, 누구는 B양식으로 보낸다면, 이걸 처리할때 각 양식에 따른 응답을 다 따로따로 설정해두어야 하는 번거로움이 있다. 그래서 가장 좋은 양식 하나로 통일을 하게 되었고, 그 양식을 JSON이라고 한다.

👉 { String key : String Value } 혹은 { String Key : ["value1 , value2, ...] }의 양식을 가지고 있으며, 이 양식에서 하나의 파라미터라도 누락이 된다면 문제가 된다. JSON에 대한 더 자세한 설명은 다음에 하도록 하겠다. 웹 개발에서 그리고 API를 다루는데에 있어 팥빵 속 팥과 같은 존재라 보면 된다. 정말 중요한 녀석이다.

👉 API는 읽을 줄도 알아야 한다. 여기서는 " GitBook 서비스에서 제공하는 API 샘플 페이지 "를 이용하는 것이 좋다. 여기서 API를 완전히 읽을 줄 알게되면, 추후 큰 도움이 될 것이다.


 

5. "웹"과 "애플리케이션"

(1) 웹

👉 웹에 대해서 알아보기 전에 우리는 '팀 버너스리' 라는 사람이 만든 HTML (Hyper Text Markup Language)에 대해서 알아야한다. 이건 과거 서로 다른 OS나 어플리케이션을 사용할 때 파일을 주고받는 다면 서로 그 파일을 열지 못해 문제가 생기곤 했다. 그래서 '팀 버너스리'는 모든 OS 모든 어플에서 열 수 있는 일정한 형식을 제안하는데 그것이 바로 HTML이다. 즉 웹을 통해 누구나 쉽게 정보에 접근 할 수 있게끔 HTML을 만들었고, 체계화 하였다. 여기서 우리가 주의해야 할 점은 HTML은 프로그래밍 언어가 아니라 단지 브라우저가 볼 수 있는 문서를 적는 언어라는 것을 알아야 한다.

👉 하지만 정보전달에만 초점이 맞춰진 HTML이기에 디자인이 부족하다는 문제가 또 발생하게 된다. 그래서 디자인을 입혀주기 위해 탄생한 것이 CSS (Cascading Style Sheets)이며, HTML과 CSS를 합쳐서 ' 퍼블리싱 ' 작업이라고 표현하고 그 작업을 하는 사람들을 ' 퍼블리셔 ' 라고 일컫는다. 또한 HTML 위주의 작업을 하는 사람들을 ' 마크업 개발자 ' 라고 한다.

👉 위와 같은 이유로 공용화 된 '웹'은 더욱 널리 쓰이게 되었다. 하지만 그러면서 또 다른 기능을 원하는 사람들이 생겨났는데, 그 때문에 웹에 입히기 위한 프로그래밍 언어가 필요하게 되었고, 그렇게 탄생한 것이 JavaScript (Java랑은 연관 x)이다. 이로써 웹이 완성이 되었는데, 쉽게 구분해보자면 우리에게 전달 되고 있는 글자나, 표 등은 HTML을 통해 만들어졌으며 거기에 색깔을 입히고 그림자 효과 등을 넣는것은 CSS, 마지막으로 버튼을 눌렀을 때 무언가 상호작용 등이 되는것이 JavaScript를 이용한 것이라고 볼 수 있다. 물론 추후 JSP 등으로 이용이 된다면, 추가가 되는 부분들이 있지만 우선은 이 정도면 충분하다.

👉 웹의 특징으로는, 본 서버에 저장 된 웹의 정보를 우리가 이용하는 컴퓨터에서 그대로 쓰는 것이 아니라는 것이다. 우리는 그걸 복사해 온 사본을 보고 있는 것이다. 그렇기 때문에 우리가 아무리 웹을 건드려도 새로고침(F5) 한 번이면 다시 원래 페이지가 보이는 것이다.

 

(2) 애플리케이션

👉 애플리케이션의 중요한 점은, 우리가 휴대폰에서 사용하는 앱만이 애플리케이션이 아니라는 점이다. 또한 웹은 서버에서 웹에 대한 것들을 복사해와서 우리가 이용하는 것이지만, 애플리케이션은 서버에서 설치 파일을 받아와 우리 PC나 휴대폰에 설치하여 사용하는 것이다. 그 차이를 명확히 알아야 한다.

👉 애플리케이션의 버전이란 무엇일까? 우선 우리가 사용하고 있는 버전이 'v1.0.0'이라고 하자. 이제 업데이트가 진행이 되는데, 회사마다 정책이 약간씩은 다르겠지만 대부분 v1.0.1로 업데이트가 되었다는 것은 우리가 몰라도 이 어플리케이션을 이용하는데에 지장이 없을만큼 작은 변화를 의미한다. 하지만 v1.1.0 이런식으로 중간 숫자가 올라가게 된다면, 중규모의 업데이트가 생겼다는 것을 의미한다. 이건 대부분 하위버전에서 업데이트를 하지 않아도 호환은 되지만 그래도 충분히 신경써야될 만큼의 업데이트가 되었음을 의미한다.
     마지막으로 v2.0.0이 되었다면? 우리는 이 서비스를 계속 이용하기 위해서는 스토어에 들어가 어플을 업데이트해야 될 것이다. 업데이트를 하기 싫더라도, 개발자 측에서는 아마 '업데이트 하러 가기' 팝업 버튼 하나를 제외하고는 하위버전의 모든 프로그램을 막아두었을 것이다.

👉 그런데 가끔 버전이 크게 바뀐 것도 아닌데도 업데이트를 통해 고객들의 모든 버전을 맞출 필요가 생긴다. 어떠한 경우일까?

💬 " 뭐야.. 1만원이라고 해서 결제했는데, 왜 2만원이 빠져나가지..? "

바로 이런 경우이다. 무언가 서비스 하던 것의 가격이 변동되었는데, 고객들의 어플리케이션 버전을 맞추지 않는다면, 누군가에게는 계속 이전 버전에서의 가격이 나올 것이고, 그걸 보고 구매한 소비자들은 그것과는 다른 가격의 돈이 빠져나가 혼란을 겪게 된다. 이 역시 하나의 예시일 뿐이며, 어플리케이션 서비스를 제공하는 쪽에서는 그 규모에 맞게 버전을 올려야하고, 필요에 의해서 모든 소비자들의 어플 버전을 맞추게끔 유도할 필요가 있다.

👉 마지막으로 요즘은 웹과 앱을 합쳐 놓은 하이브리드 애플리케이션이라는 것이 있다. 우리에게 즉시 제공해야 하는 정보들은 웹을 사용하였기에 어플이 버전 업이 되었을 때 우리가 그것을 업데이트 하지 않아도 우선 정보는 제공받을 수 있다. 즉, 네이티브 애플리케이션의 장점과 모바일 웹의 장점을 한 데 모으기 위해 개발 되었다고 보면 된다. 어느 부분이 앱이고 어느 부분이 웹인지는 'API'를 통해 더 정확히 알 수 있다.


 

6. 데이터베이스

(1) 데이터베이스란 뭘까?

👉 우리가 제공한 서비스를 이용하는 사람들에 대한 "데이터"는 절대 틀려서는 안된다. 데이터는 단 1%의 결점도 허용되지 않는데, 이 속성을 데이터의 "무결성"이라고 한다. 정말 극단적인 예시를 하나 들어보자. 만일 데이터가 바뀌게 된다면, 특히 은행에서 그러한 일이 벌어진다면 우리의 돈이 다른 사람의 통장에서 인출이 되는 등 아마 난리가 나게 될 것이다.

👉 그런데 그 수많은 사람들의 데이터를 대체 어떻게 관리하는 걸까? 만약 컴퓨터가 A라는 사람에 대한 데이터를 찾기 위해 움직인다하였을 때 1번~n번까지 돌아다니며 그 데이터를 찾고, 수정 요청이 들어왔다면 수정까지 해야한다. 우리의 서비스를 이용하는 고객이 적다면 상관이 없을 이야기지만, 만약 100만명의 사람들이 이용한다면 어떻게 될까. 1번~10,000번 까지의 데이터를 읽는데 1초가 걸린다고 가정하면, 100만번째 데이터까지 가는데에는 100초의 시간이 걸린다. 우리는 3~4초만 늦어져도 난리가 나는데 그 시간을 기다릴 수 있을까? 또한 이것은 사람에 대한 데이터만을 나열하였을 때이지 만약 다른 데이터까지 합쳐진다면 1억개가 넘는 데이터가 모이게 될 텐데, 몇 시간이라는 시간을 고객들이 기다릴 수 있을까? 그리고 동명이인이 있다면...?

👉 데이터베이스는 이런 데이터를 빠르게 활용하기 위해, 그리고 무결성의 속성을 지키기 위해 체계적으로 관리가 가능하게끔 해준다. 예를 들어 "홍길동"이라는 유저가 "사과"를 "10개" 구매한다는 데이터를 넣는다고 가정하자. 데이터베이스에서는 유저를 관리하는 Table과 제품을 관리하는 Table을 따로 두며 홍길동이라는 이름으로 관리하는 것이 아닌, 홍길동이라는 사람에 대한 정보를 가지고 있는 'n번'이라는 번호로 관리를 한다. 제품쪽 역시 마찬가지이다. 그러면 결국 "유저 테이블의 n번이 제품 Table의 n번을 10개 구매한다"는 데이터를 주문 Table에 입력하는 것으로 마무리 된다. 이러면 훨씬 빠르고 체계적으로 데이터를 관리 할 수 있게 된다.

💬 여기서 Table은 엑셀의 Sheet와 같은 역할을 해준다.

우리는 이걸 "관계형 데이터베이스"라고 일컫는다.

 

(2) 클라이언트에서의 데이터와 서버에서의 데이터

👉 모든 데이터를 서버에서만 관리하다면 아마 서버 데이터는 힘들어서 죽으려고 할 것이다. 또한 클라이언트 측에서도 더 빠르고 원활하게 데이터를 활용하기 어려울 것이다. 실제로 클라이언트와 서버 컴퓨터 위에는 모두 데이터 베이스 관리 체계를 돌릴 수 있고, 데이터를 저장할 수 있다.

👉 예시를 들자면, 우리가 알람을 맞춘다고 치자. 다음날 08:40 알람을 맞춘다는 것 역시 하나의 데이터이다. 이건 클라이언트에 저장된 데이터이다. 왜 그럴까? 가장 찾기 쉬운 이유로는 인터넷이 연결되어 있지 않아도 알람이 작동한다는 것이다. 우리가 서버에서 데이터를 가져오려면 우선 인터넷 네트워크가 연결이 되어있어야 하는데, 클라이언트 자체에 저장된 데이터는 그럴 필요가 없다는 것이다.

👉 그럼 우리 페이스북에 올라가있는 타임라인을 보자. 그건 어디에 저장되어있는 데이터일까? 당연히 서버에 저장되어있는 데이터이다. 이유 역시 간단한데, 인터넷이 연결되어있지 않다면 여러분은 여러분의 타임라인을 확인 할 수 없을 것이기 때문이다.

👉 이 역시 명확하게 알 수 있는 것이 'API'이다. 만약 여러분들이 일을 하다가 데이터의 위치에 대해서 물어보았을 때, "로컬" "내부 DB" "네이티브" 라는 말이 들린다면, 클라이언트에 데이터가 있다는 것이고, "API로 가져왔다." "DB에 있다" 라고 이야기를 듣는다면 서버에 데이터가 있다는 것을 기억하자.

👉 개발을 할 때 위와 같은 질문을 많이 하게 된다. 어플리케이션을 개발 할 때 특히 그런데, 한 화면에 3개의 이미지가 있다고 가정했을 때, 그 이미지 3개가 모두 서버 데이터에 있을 거라는 생각을 하면 안된다. 어떤 이미지는 설치 파일과 함께 클라이언트 데이터도 관리되고 있으며, 어떤 이미지는 필요에의해 비공개로 설정해야되기 때문에 서버에서 관리를 할 수도 있다. 이것을 확실히 알기 위해서는 여러분들이 'API'를 읽을 줄 아는 연습이 필요하다. 계속 API이야기가 나오고 있는데, 정말 중요하다.

👉 마지막으로 "에버노트"와 같이, 데이터가 클라와 서버 둘 다 있는 경우가 있다. 인터넷이 연결되어 있지 않을 때에도 클라의 데이터를 활용하여 수정하고 이용가능하면서, 인터넷이 연결되면 서버의 데이터와 맞추는 '동기화' 작업을 진행한다.


 

7. "프레임워크"와 "라이브러리"

👉 우리가 도넛 가게를 창업한다고 했을 때, 하나부터 열까지 다 새로 하는 것보다는 던킨도너츠 프랜차이즈로 들어가는 것이 훨씬 빠를 것이다. 이처럼 개발자도 하나하나 전부 코딩을 하지 않는다. 이미 누군가가 만들어놓은 코드를 수정만 하여 이용하기도 한다. 우리는 그렇게 이미 만들어진 코드 등을 제공해주는 것을 프레임워크 라고 부른다.

👉 몇 개 예시를 들자면, Java에서는 Spring이라는 프레임워크를, Python에서는 django라는 프레임워크를, 애플에서 사용하는 언어인 Swift는 같은 애플에서 제공하는 Cocoa 등을 프레임워크로 사용한다. 프레임워크는 해당 코드가 무슨 역할을 하는지, 어디서 코드를 바꿔야하는지까지 친절하게 알려주며, 우리가 원하는 코드를 찾기 위해 검색또한 할 수 있다.

👉 그럼 라이브러리는 뭘까? 프레임워크과 라이브러리는 같은 개념이지만, 차이를 가지고 있다. 우선 공통점으로는 둘 다 개발에 좋은 역할을 하기 위해 우리가 가져다 쓸 수 있는 것들이다. 하지만 프레임워크가 라이브러리보다 훨씬 더 큰 개념이다. 한 프로젝트에서는 "단 하나의 프레임워크"만을 사용 할 수 있다. 자동차로 따진다면 자동차 그 자체인 셈이다. 우리가 동시에 두 대의 자동차를 몰 수 없듯이 말이다. 하지만 라이브러리는 망치나 가위 등의 도구인 셈이기에 한 프로젝트에서 여러개 함께 사용이 가능하다.

👉 마지막으로 프레임워크와 라이브러리는 사용하기 전에 꼭 설명을 봐야한다. 사용료를 받는 것부터 출처를 남겨야만 사용할 수 있거나, 그냥 무료인 것 등 다양하기 때문이다.


 

8. 마무리

👉 어느정도 배운 사람이고, 지식이 있는 사람이라면 이 글을 읽고 고개를 갸웃거릴 수도 있었을 것이다. 단순이 내가 잊고싶지 않아 적을 글이지만 그래도 읽는 사람을 좀 생각하고 적었어야됐는데.. 너무 메모장에 끄적이듯 끄적인 것 같다. 하지만 IT계에 처음 발을 들이는 사람이나, 비전공자면서 개발자는 아니지만 IT계에서 일을 해야하는 사람들에게는 읽어보기를 추천하는 책이다. 나는 이걸 기초로 Java웹 개발자를 준비하고 있다. 나를 포함하여 IT계를 꿈꾸는 모든 사람들의 등에 승승장구라는 날개가 돋아나기를 원하며, 글을 마친다.