Book

「비전공자를 위한 이해할 수 있는 IT 지식」IT 시대 필수 교양서

성중 2021. 6. 21. 00:39

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

“API, 클라, 서버, 프레임워크… 도대체 뭐라는거야?”

이 책은 IT 산업에서 개발자와 일하는 비전공자를 위한 ‘IT 기초 문법서’로, 일하면서 한 번쯤 들어봤을 프로그래밍 언어, 운영체제, 네트워크, API, JSON, 데이터베이스, 이미지 처리, 프레임워크, 라이브러리, 깃(Git), 디자인 이슈 등 다양한 지식을 담고 있습니다.

- <비전공자를 위한 이해할 수 있는 IT 지식> 프롤로그 中

 

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

개발자는 프로그래밍 언어로 컴파일러에 명령을 전달하고
컴파일러는 그 명령을 기계어로 변환해 컴퓨터에 전달한다

기계어에 가까운 저수준 프로그래밍 언어는 가전제품에,,
인간의 언어에 가까운 고수준 프로그래밍 언어는 애플리케이션에 활용

다양한 IDE(통합 개발 환경)에서 코딩에 필요한 기능을 제공한다
ex) Android Studio, Xcode, Eclipse, PyCharm

컴퓨터의 구성요소

  • CPU: 컴퓨터의 머리 역할, 데이터를 따로 저장하지 않는다
  • 메모리: CPU의 개인 작업공간, 보조 기억장치에서 데이터를 옮겨와(로딩) 작업한다
  • 보조기억장치(HDD, SSD): 데이터 창고 역할

~ 이 부품들을 메인보드에 끼워 조립식 컴퓨터를 만드는 것!

운영체제(OS)가 데이터를 주고받는 컴퓨터 구조를 대신 처리해준다
ex) Windows, Mac OS, iOS, Android

각 운영체제별로 개발에 지정한 언어들이 있다.

  • Google ~ Android -> Java, Kotlin
  • Apple ~ iOS –> Objective-C, Swift
  • Microsoft ~ Windows -> C#, Visual Basic, C++, JavaScript…


운영체제별로 프로그램을 만드는 것은 매우 비효율적이므로,,
Java는 JVM(Java Virtual Machine)을 통해 각 운영체제 위에서 프로그램을 실행하며 Python등 다양한 언어가 이와 비슷한 컨셉을 활용하고 있다
*모바일은 안드로이드와 iOS가 양분하고 있기 때문에 그냥 두 가지 버전을 만든다!

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

컴퓨터가 연결된 작은 지역인 LAN(Local Area Network)이 모여서 MAN(Metropolitan Area Network)을 형성하고, MAN이 모여 WAN(Wide Area Network)을 형성한다

컴퓨터들은 각각의 IP 주소를 가지며 케이블을 통해 초고속 인터넷망에 연결 되어있고 이후 2G, 3G, 4G, 5G 등 무선 네트워크가 등장한다!

 

각각의 클라이언트(프론트엔드)가 서버(백엔드)에 파일을 주고받는 구조

서버 프로그램은 무료 OS인 리눅스(Linux) 위에서 돌아가는데 대표적으로 우분투나 레드햇 등의 개량형이 사용되며 안드로이드도 리눅스를 기반에 두고 있다
*서버에는 그래픽UI가 딱히 필요 없기 때문에 리눅스는 보통 명령어로만 동작한다

개인이 서버를 운영하는 것은 여러가지 리스크가 있기 때문에 호스팅 업체를 사용한다
대표적으로 아마존의 AWS(Amazon Web Services)가 있다

API와 JSON

API(Application Programming Interface)클라이언트, 서버 및 서로 다른 프로그램에서 요청과 응답을 주고받을 수 있게 만든 체계이며 보통 서버 개발자가 API를 개발하고 클라이언트 개발자가 API를 사용한다.
데이터를 주고 받는 API의 핵심은 CRUD다!

 

본래 CRUD요청은 각각의 주소에서 처리되었지만 RESTful API는 하나의 주소에서 메소드를 붙여 관리한다.

 

요청 변수(파라미터)에 스티커를 붙여 전송하는 개념이다

요청에 응답하는 관점에서 서버는 반응을 HTTP 상태 코드로 보내는데,,
성공적인 경우 200번대의 코드, 클라이언트 요청에 문제가 있는 경우 400번대 코드, 서버에 문제가 있는 경우 500번대 코드가 반환된다!

 

대표적으로 404 에러는 서버는 문제없지만 클라이언트 요청에 문제가 있다는 뜻이다

이 외에도 API는 서로 다른 소프트웨어를 연결해주는 역할을 하고, 이때 API를 제공하는 쪽의 소프트웨어를 SDK(Software Development Kit)라고 한다
ex) 내 소프트웨어에 지도 API를 제공하는 구글 지도 SDK를 설치해서 활용

이렇게 API가 요청을 주고받는 과정에는 통일된 데이터 형식이 필요한데,,
예전에는 XML을 많이 사용했지만 현재는 JSON이 대표적인 데이터 형식이다!

 

대충 이렇게 key와 value로 구성된 형식이다

+++
서버와 클라이언트가 협업하는 회사라면 API문서에 연결구조가 정리되어 있으며,,
네이버, 카카오 등 다양한 기업에서 무료로 공개한 Open API의 API문서를 볼 수 있다!

애플리케이션(APP), 웹(Web)

앱스토어(iOS)와 구글 플레이 스토어(Android)가 애플리케이션 시장을 양분하고 있으며 애플은 심사가 까다로운 반면 안정적이고 구글은 야생(?)같은 느낌이다

애플리케이션 내부의 변동이 가능한 정보는 API로 서버에서 불러오고 앱 자체에 변화가 필요할 때 버전을 업데이트한다 ~> 버전 호환 문제로 업데이트를 강제해야 할 때도 있다
반면 웹은 서버와 실시간으로 연결되어 새로고침 할 때마다 변화가 반영된다

웹은 파편화된 브라우저(크롬>삼성인터넷>사파리>웨일>마이크로소프트 엣지)를 시장과 소비자에 맞게 고려해서 개발할 필요가 있으며 현대의 다양한 디스플레이에 맞게 CSS를 추가한 반응형 웹 페이지도 구현할 필요가 있다

앱은 각 운영체제에 맞게 개발하는 네이티브 앱, 웹 사이트를 앱에 띄우는 웹 앱, 외부 형태는 네이티브면서 특정 부분에만 브라우저를 띄우는 하이브리드 앱으로 나뉜다

 

데이터베이스와 이미지 처리

데이터 오류는 치명적이기 때문에 꼼꼼한 테스트와 백업, 1%의 오차도 용납되지 않는 무결성이 요구된다
또한 방대한 양의 데이터를 단순한 텍스트 파일로 관리할 경우 처리 속도에 문제가 생길 수 있다

따라서 관계형 데이터 베이스라는 방법론이 등장하는데,,
이는 데이터베이스(스키마) 내부 각각 테이블의 데이터들이 key를 공유하며 엮이는 구조이다!

 

key를 매개로 데이터를 불러오는 것이 엑셀 VLOOKUP함수와 유사하다

이러한 관계형 데이터베이스를 기반으로 한 다양한 관계형 데이터 베이스 관리 시스템(RDBMS)이 존재한다
ex) MS SQL, Oracle DB, MySQL, Maria DB..

이러한 DBMS는 클라이언트 or 서버 위에서 모두 돌아갈 수 있는데, 이는 곧 클라이언트에도 데이터가 저장될 수 있다는 뜻이다!
ex) 알람 애플리케이션에 설정한 시간이 저장됨

 

데이터 위치에 따른 용어 구분

*데이터가 서버에 있는지 클라에 있는지 정확히 구분하려면 API문서를 보는 것이 편하다

이미지 또한 고유한 위치(클라 or 서버)를 가지며 애플리케이션에 적용된다
이러한 이미지 주소를 텍스트 형태로 관계형 데이터 베이스에 넣어 관리하는 것이다!

프레임워크와 라이브러리

프레임워크와 라이브러리는 각 분야, 언어별로 애플리케이션을 쉽고 빠르게 개발하도록 돕는다

 

프레임워크, 코드, 라이브러리의 관계

라이브러리는 활용 가능한 도구의 개념이며 제어 흐름의 주도성이 코드에게 있다
프레임워크는 라이브러리보다 포괄적인 개념으로 하나의 프로젝트에 다양한 라이브러리가 쓰일 수 있는 것과 달리 하나만 쓰인다