옆자리 동현대리님이 빌려주신 책 ㅎㅎ 업무하면서 접하는 어렴풋 알지만 제대로 알지 못하는 용어와 상식 수준의 지식을쉽게 설명해준다. REST API, 네트워크와 서버, 우분투, 레드햇 등등. 정처기 유튜브나 수험서를 볼게 아니라 이런 책 읽는 게 백만배 더 도움되는 듯! 나처럼 IT 문외한이 관련 업무를 보게 됐을 때 입문서로 추천 😊
제 3장 네트워크, 클라이언트, 서버
컴퓨터가 연결되면 (=네트워크가 연결되면) 연결된 컴퓨터끼리 파일도 주고받고, 게임도 함께 할 수 있고 할 수 있는 게 많음.
컴퓨터가 연결된 작은 지역을 LAN (Local Area Network) 라고 표현함.
여러 LAN을 하나로 연결해 MAN (Metropolitan Area Network)
도시와 도시, 나라와 나라를 모두 연결해 WAN (Wide Area Network)
이 모든 것들이 10~20년 안에 일어났고, 이 선을 연결하기 위해 수많은 공사가 이루어짐. ADSL, VDSL, 광케이블 등..
서버 프로그램은 리눅스 위에서 돌린다. 무료이기 때문.
리눅스는 '리누스 토발스'라는 사람이 만들었는데, 개발자들이 가장 많이 쓴다고 할 수 있는 2개의 프로그램, 리눅스와 깃(Git)을 만든 사람.
운영체제 OS에 여러 가지가 있는데,
윈도우는 Windows 95, 98, xp, 7, 19 등, 안드로이드는 A 알파 B 베타 C 컵케익 등, 리눅스는 우분투, 레드햇 등
레드햇은 리눅스를 개량해 유료로 판매하는 회사인데, 운영체제의 품질을 보장해주는 비용임.
그리고 사실 안드로이드는 리눅스를 모바일 운영체제 형태로 개량해서 발전시킨 운영체제
우리 컴퓨터가 윈도우 위에서 포토샵이나 파워포인트 등의 프로그램을 돌리듯,
서버 컴퓨터는 리눅스 위에서 서버 프로그램을 돌림 (서버 프로그램에는 웹 서버, 웹 애플리케이션 서버 등등 세부적인 구분이 있음)
윈도우, 맥OS와 리눅스의 차이 중 하나는 그래픽 UI
서버는 서버프로그램이 24시간 안정적으로 돌기만 하면 되기 때문에 그래픽 UI 없이 명령어로만 동작함. 그래서 이런 리눅스를 다루려면 기본적인 명령어는 알고 있어야 함.
개인이 집에 개인 서버를 두고 운영하기엔 신경쓸 게 많기 때문에 그런 일을 대신해주는 서비스가 나타나기 시작했고, 그런 서비스를 제공하는 업체를 '호스팅 업체'라고 부름. 국내에는 대표적으로 cafe 24, 가비아 등의 회사. 외국에서는 AWS
4장 API와 JSON
클라이언트는 서버에게 이런 저런 요청을 하는데, 이를테면 나 이 사진 저 동영상 줘 / 로인 시켜줘 / 저 메시지 삭제해줘 등등. 컴퓨터는 한글을 모르니까 어떤 요청이 사진을 달라는 요청인지 알 수 없음. 그래서 요청을 구분할 수 있도록 하는 '체계'가 필요함. 그 체계가 바로 API. API는 클라이언트, 서버와 같은 서로 다른 프로그램에서 요청과 응답을 주고 받을 수 있게 만든 체계.
여기로 요청 보내면(서버 IP주소/A) 이런 응답(로그인 기능)을 주고, 저기로 요청하면 (서버 IP주소/B) 저 응답 (회원가입 기능)을 줄게 하고 미리 정해두는 게 API.
API에는 데이터를 주고 받는 기능도 함께 있는데, 이를테면 로그인 기능을 사용하려면 아이디와 비밀번호 데이터가 필요하고, 파일을 주고 받을 때도 데이터가 있어야 하기 때문임. 이처럼 API를 통해 요청과 응답을 주고 받을 때는 데이터도 같이 담긴다는 사실~
API는 서버 개발자가 개발하고, 클라이언트 개발자는 그 API를 사용함.
클라이언트의 요청은 크게 4가지 요소로 나눌 수 있는데, 바로 CRUD이다. CRUD는 아주 중요하기 때문에 개발자들은 데이터를 볼 때 항상 CRUD의 관점에서 생각함. 예를 들면, 데이터를 볼 수는 있는데 만드는 기획이 없게 되면 큰 일이기 때문에 CRUD 관점에서 데이터를 바라봐야 함. 만약 CRUD 중 특정 기능이 없는 기획이라면 그 기획 의도가 명확해야 하며 이유도 설명할 수 있어야 함.
CRUD요청은 각각의 주소를 가짐. 타임라인에 사진을 올리는 요청이라고 생각하면, Create 요청은 '서버컴퓨터의 주소/timelinecreate'라고 지을 수 있고 Read, Update, Delete도 각각의 주소를 가짐. 이렇게 CRUD별로 주소가 생기는데 이렇게 주소를 구성하면 주소가 너무 많아지고 관리하기가 힘들어짐. 이런 주소들이 10,000개가 있다고 가정해보면, 프로그래밍은 사람이 하는 일이기 때문에 몇몇 주소들은 기능이 겹치고, 체계적으로 구성되어 있지 않을수도 있음. 그럼 그 몇몇 API들이 문제를 일으키고 버그가 생김. 따라서 사람들은 더 체계적으로 API를 관리하고 싶어 했고, 그 영향으로 조금 더 체계적인 API를 만들게 됐는데 그게 바로 REST API (Representational State Transfer API). 모든 회사에서 일률적으로 적용되는 절대규칙은 아니고 일종의 사회운동으로 상황마다 다양하게 변형됨.
REST API에서는 이전보다 주소 개수가 줄어드는데, CRUD를 하나의 주소로 관리하고, 요청을 보낼 때 어떤 요청을 보냈는지 파악할 수 있는 스티커(매소드=함수)를 붙여서 함께 전송함. 이를테면, Create(생성해줘) : POST, Read(불러와줘) : GET, Update(바꿔줘) : PUT(전체)/PATCH(일부), Delete(지워줘) : DELETE
그리고 서버에서 잘됐어, 잘안됐어를 간단하게 말해줄 수 있는 규칙을 정합니다. 'HTTP 상태 코드'가 그것인데, 200번대는 잘됐다, 400번대는 클라이언트 요청에 문제가 있다, 500번대는 서버에 문제가 있다는 뜻입니다.
정리하면 API는 소프트웨어가 다른 소프트웨어의 기능을 쓰기 위해 중간에 필요한 체계인데, 예를 들면 내 컴퓨터에서 OO소프트웨어를 개발하는데 어느 부분에서 한영 번역기능이 필요한 상황이면, 어떤 소프트웨어의 '한영 번역 기능'을 사용하면 됨. 이때 서로 다른 시스템의 기능을 사용하는 것이기 때문에 API가 필요함.
이때 새로운 용어가 하나 더 등장하는데 바로 SDK.
API를 제공해주는 '다른 소프트웨어'를 SDK (Software Development Kit)의 약자로 부릅니다. 예를 들어 구글 지도는 구글에서 만든 소프트웨어이고, 다른 회사들도 구글에서 제공하는 지도 SDK를 설치하면 자신의 소프트웨어에 구글 지도 기능을 넣을 수 있습니다. 이 SDK에서 제공해주는 API들을 통해 구글 지도에 요청을 보낼 수 있는거지요.
API는 클라이언트가 서버로 보내는 요청(Request)과 서버가 클라이언트로 보내는 응답(Response)가 있습니다. 그리고 요청과 응답을 할 때는 데이터가 담길 수 있기에 데이터를 넣는 '기능'을 같이 개발해야 하구요. 근데 이 데이터를 넣을 수 있는 '기능'에는 여러가지 형식이 있습니다. 과거에는 XML이라는 형식이 널리 쓰였고, 지금도 종종 쓰이긴 하지만, 현재 가장 유명한 형식은 JSON. JSON형식에 대해서는 아래 링크 참고
https://blog.naver.com/rodpold/222755536654
5장 웹과 애플리케이션
웹 : html css javascript
자바와 자바스크립트는 사실 이름만 비슷할 뿐 아무 관계 없음. 인도와 인도네시아의 관계 정도..