728x90
네트워크를 중심으로 개발자를 '프론트엔드'와 '백엔드'로 구분하고, 그 둘 사이의 경계점에 API가 존재한다.
[ IDE ]
- Intergrated Developmen Environment
- 통합 개발 환경, 개발을 하기 위한 모든 것들을 제공해주는 환경
[ 고수준 언어 ]
- 인간 친화적인 언어
- 사람들이 학습하기 쉬우며 쓰기에도 편리하고 유지보수도 저수준 언어에 비해 쉽다.
- 하지만 그만큼 컴퓨터의 사양이 중요할 수 있다.
[ 저수준 언어 ]
- 컴퓨터 친화적인 언어
- 배우기 쉽지 않으며, 컴퓨터가 해야할 일을 구체적으로 꼼꼼히 적어줘야 한다.
- 컴퓨터 입장에서는 일하기 쉽기 때문에 낮은 사양의 컴퓨터에서도 원활히 작동한다.
[ 컴퓨터 구조 ]
- CPU : 컴퓨터의 머리 역할
- 메모리 : CPU의 개인 작업 공간으로, 보조기억장치에 필요한 데이터를 그때그때 요청하지 않아도 된다.
- 보조기억장치 : HDD(하드디스크), SSD -> 컴퓨터의 창고 역할을 하며 전원이 꺼져도 데이터는 남아 있는다.
- 위의 모든 부품들을 '메인보드'라고 하는 판에 끼운다.
- 실행한다 = CPU가 일한다
[ 운영체제 (OS) ]
- 프로그램 실행을 위한 모든 과정을 대신 처리해주는 소프트웨어
- 윈도우, 맥OS, 리눅스 등이 있다
[ JVM ]
- Java Virtual Machine
- 자바를 만든 팀은 각 운영체제 위에 JVM이라는 소프트웨어를 통해, JVM 위에서 자바 언어로 만든 프로그램이 돌아갈 수 있도록 한다
[ 네트워크 ]
- LAN (Local Area Network) : 컴퓨터가 연결된 작은 지역으로 컴퓨터실, 아파트, 커피숍 등과 같은 로컬의 작은 지역이다.
- MAN (Metropolitan Area Network) : 도시의 여러 LAN을 하나로 연결한 것
- WAN (Wide Area Network) : 도시와 도시, 나라와 나라를 모두 연결하여 만든 것
[ IP 주소 ]
- 해당 컴퓨터가 위치한 주소
- IP 주소는 위치에 따라, 컴퓨터에 따라 고유하다
- 이동하면 IP 주소는 계속 바뀐다
- IP는 보통 0~255의 숫자만 사용하였지만, 최근에는 숫자 구분을 4개에서 6개로 늘린 IPv6를 함께 사용한다
[ 우분투 ]
- 리눅스는 운영체제(OS)이며, 리눅스 위에서 '서버 프로그램'을 돌린다. -> 리눅스가 기본적으로 무료이기 때문!
- 즉, 리눅스위에ㅓㅅ 프로그램을 24시간 365일 돌린다!
- '서버'는 '클라이언트'의 요청에 응답하는 컴퓨터로, 데이터를 주는 컴퓨터이다.
- 우분투는 리눅스의 유명한 버전이다 -> 즉, 우분투는 리눅스다
- 리눅스가 발전하여 안드로이드가 되었다.
[ 서버 ]
- 서버에는 그래픽 UI가 별로 필요하지 않으며, 명령어로 동작한다
- 서버 프로그램은 24시간, 365일 '안정적'으로 돌아가는게 중요하다
- 호스팅 업체 : 서버 운영을 위한 모든 일을 대신해주는 서비스를 제공하는 업체 (Cafe24, 가비아 등..)
- AWS (Amazon Web Sercices) : 서버 컴퓨터 대여뿐 아니라 다양한 분야의 기업들에게 여러 솔루션을 함께 제공한다
- 서버는 요청(Request)에 따라 적합한 처리를 해서 응답(Response)을 준다
- 응답 성공시 200번대 코드, 문제 발생 시 400, 500번대 코드를 전송한다
[ API ]
- 요청을 구분할 수 있도록 하는 체계
- 소프트웨어가 다른 소프트웨어의 기능을 쓰기 위해 주소로 요청을 보내면 응답해주는 소프트웨어끼리의 체계
- 클라이언트, 서버와 같은 서로 다른 프로그램에서 요청과 응답을 주고 받을 수 있게 만든 체계이다
- API는 서버 개발자가 개발하고, 클라이언트 개발자는 그 API를 사용한다
- API를 만들 때는 데이터를 주고받는 기능도 함께 넣는다
- 즉, 응답을 받을 때도 데이터가 함께 와야 한다.
- API를 통해 요청과 응답을 주고 받을 때는 데이터도 같이 담긴다!
- CRUD 관점에서 데이터를 바라봐야 한다
- 깃 북(GitBook) : 깔끔한 API 문서 작성을 도와주는 서비스
- Open API : 서버가 제공하는 다양한 기능을 일반 사람들이 사용할 수 있도록 오픈해둔 API (영향력이 높아진다)
[ SDK ]
- Software Development Kit의 약자로, 소프트웨어를 개발하기 위한 도구이다
- API를 제공해주는 다른 소프트웨어를 SDK라고 부른다
[ REST API ]
- Representational State Transfer
- 이전 API 체계에서 CRUD가 체계적으로 나뉘지 않아 발생하는 문제를 방지하고자, 체계적으로 API를 관리하기 위해 탄생
- 이전보다 주소 개수가 줄어들며, CRUD를 하나의 주소로 관리한다
- 절대 규칙이 아니기 때문에 상황마다 다양한 방식으로 변형해서 사용한다
- 요청을 보낼 때 어떤 요청을 보냈는지 파악할 수 있도록 메소드를 함께 전송한다
[ JSON ]
- 데이터를 보내는 형식 중 하나로, 과거에는 XML이라는 형식이 많이 쓰였지만 요즘에는 JSON을 더 많이 사용한다
- {중괄호} 로 시작하며 키(Key)와 값(Value)로 이루어져 있고, 키와 값은 콜론(:)으로 구분한다
- JSON에서 배열(Array) 형식 사용 시에는 [대괄호] 로 표시한다
=> 클라와 서버는 요청과 응답을 주고받고, 그 때 필요한 데이터들을 JSON 형식으로 주고받는다
[ 애플리케이션 ]
- 설치해서 사용하는 모든 프로그램
- 응용 프로그램(Application Software) : 윈도우에서의 애플리케이션을 부르는 명칭
[ 애플리케이션 버전 ]
- 1.0.0 과 같이 점(.)을 기준으로 숫자가 3부분으로 나뉜다
- 오른쪽 끝자리는 작은 변화를 의미한다
- 중간 숫자는 하위 버전과 호환이 가능하지만 큰 변화를 의미한다
- 왼쪽 끝자리는 하위 버전과 호환이 가능하지 않은 큰 변화를 의미한다
[ 앱 생태계 ]
- 안드로이드 - 구글 플레이 스토어, 애플 - 앱스토어
- 리젝(Reject) : 앱스토어 심사과정을 까다로운데, 직원이 직접 애플리케이션을 살펴보고 버그가 있으면 앱스토어에 올리는 걸 거절하는 것을 의미한다
- 안드로이드는 상대적으로 심사과정이 거의 없어서 빠른시간 안에 마켓에 반영이 가능하나, 그만큼 이상한 애플리케이션이나 동작하지 않는 애플리케이션도 많다
- 또한 플레이 스토어는 구글의 지침에 맞지 않는 애플리케이션이 있다면, 예고 없이 마켓에서 내려버리고 복구에 대해 논의하려면 오랜 시간이 걸린다
- 앱스토어는 심사과정이 깐깐하여 플레이 스토어보다 앱의 개수가 적으나 대부분의 애플리케이션이 정상 동작하고 깔끔하다
[ HTML ]
- Hyper Text Markup Lauguage
- 각각의 OS에서만 호환되는 파일을 주고받는다면 서로 파일을 열지 못해 문제가 생긴다.
- 이를 해결하기 위해 운영체제나 프로그램에 상관없이 일정한 형식으로 문서 작성을 제안하였는데, 그게 HTML이다.
- 따라서 HTML 문서는 OS 상관없이 브라우저만 있다면 어디서든 동일한 정보를 볼 수 있다
- 태그 : 정보를 표현하기 위한 코드로, HTML을 구성하는 코드이다
- HTML은 프로그래밍 언어가 아니다! -> 브라우저가 볼 수 있는 문서를 적는 언어지, 컴퓨터에게 특정 일을 시킬 수 있는 언어가 아니다
[ CSS ]
- Cascading Style Sheets
- HTML에 디자인을 입힐 수 있는 코드이다
- HTML과 CSS를 합쳐 '퍼블리싱' 작업 또는 '마크업'이라고 한다
[ Javascript ]
- 웹에서 HTML과 CSS로는 힘든 기능을 구현하는 프로그래밍 언어이다
- 줄여서 js라고 부르기도 한다
- Javasript와 Java는 아무 관계가 없는 언어이다!
[ 웹 vs 애플리케이션 ]
- 웹은 원본만 수정하면 유저가 업데이트하지 않아도 새로고침하면 반영되기 때문에 수정이 용이하고 빠르게 적용이 가능하다
- 하지만 웹은 항상 새로고침을 해야하며, 네트워크의 영향을 크게 받는다
- 애플리케이션은 웹보다 효율적으로 네트워크의 영향을 조금만 받도록 만들 수 있다
[ 브라우저 버전의 파편화 ]
- HTML, CSS, Javascript의 특정 기능이 버전별, 브라우저별로 작동여부가 달라진다
- 따라서 크로스 브라우징을 통해 파편화를 잡아야한다
- "caniuse.com" : CSS의 사용가능 여부를 찾아볼 수 있는 서비스
- 하지만 모든 브라우저를 만족시키는 힘들기 때문에 점유율을 고려하여 잡으면 된다
[ 반응형 웹 ]
- 브라우저의가로 넓이에 반응하여 구성요소가 변하는 기술
- 웹페이지의 크기(비율)가 사용자의 기기에 맞춰 자동으로 변형된다
[ 네이티브 애플리케이션 ]
- 원래 정해놓은 언어들을 사용해서 개발한 어플리케이션을 말한다
- iOS - 스위프트, Objective-C / 안드로이드 - 자바, 코틀린
- 원래 정한 언어를 사용하여 운영체제 자체의 기능을 사용하기 때문에 '원주민'이라는 뜻의 '네이티브'가 붙게 된다
[ 하이브리드 애플리케이션 ]
- 웹과 애플리케이션이 혼합된 애플리케이션
- 운영체제 안에 브라우저가 내장되면서 가능해진 개발이다
- 애플리케이션의 특정 부분에 '브라우저''를 올리는 방식으로, HTML 파일을 불러올 URL을 설정해둔다
- 즉, 네이티브와 브라우저가 혼합된 애플리케이션이다
[ 모바일 애플리케이션 수정 방법 ]
- 브라우저 위에서 돌아가는 부분은 서버에 있는 원본 HTML, CSS, Javascript를 수정하면 바뀐다
- 네이티브 부분은 운영 체제별로 다른 프로그래밍 언어를 통해 수정한 뒤 심사를 신청해야 한다
[ 하이브리드 앱에서 각각의 장단점 ]
- 브라우저 방식은 서버의 HTML, CSS, Javascript만 수정하면 따로 심사를 받거나 설치할 필요 없이 새로 고침할 때 반영되기 때문에 수정이 용이하다
- 하지만 네트워크에 종속되기 때문에 사용자 입장에서는 파일을 받는 동안 기다려야 한다
- 네이티브 : 수정을 위한 심사과정이 까다로우며, 심사가 끝나도 사용자들이 직접 업데이트를 해줘야 한다
- 하지만 잘 만들면 사용성이 좋으며, 네트워크를 최소한으로 이용하면 인터넷에 종속되지 않고 빠르게 동작한다
[ 데이터 ]
- 무결성 : 데이터는 단 1%의 결점도 없어야 한다
- 이러한 특성떄문에 쉽게 변화를 허용하지 않으며, 데이터 작업 시에는 점검 시간을 잡아두고 안전하게 작업한다
[ 관계형 데이터베이스 ]
- 데이터를 관리하기 위한 방식으로, 데이터마다 고유 번호를 부여하고 테이블과 스키마로 관리한다
- 관계형 데이터베이스의 철학으로 만들어진 관리 시스템을 '관계형 데이터베이스 관리 시스템(RDBMS)'라고 부른다
- MSSQL, Oracle DB, MySQL, MariaDB 등이 있다
[ 클라이언트의 데이터 ]
- 클라이언트와 서버는 모두 컴퓨터이기 떄문에 CPU, 메모리, 보조기억장치를 가지며 그 위에서 DBMS 또한 돌릴 수 있기 때문에 클라이언트에도 데이터 저장이 가능하다
- 따라서 클라이언트의 데이터와 서버의 데이터를 맞추는 '동기화' 과정이 필요하다
- 클라이언트 데이터 : 로컬, 내부 DB, 네이티브
- 서버 데이터 : API로 가져온 데이터, DB
[ 프레임워크 ]
- 개발을 할 떄 빠르고 쉽게 하도록 도와주는 뼈대, 구조
- 한 프로젝트에서 프레임워크는 하나만 쓸 수 있다
- 각종 라이브러리와 코드들이 모여 프레임워크가 된다
[ 깃(Git) ]
- 깃을 통해 소스코드의 버전 관리가 가능하다
- 깃을 통해 개발자들은 개발 단계별로 깃발(기록)을 꽂을 수 있다 -> 커밋(Commit)
- 또한 커밋 시에 메모도 가능한데 이를 커밋 로그(Commit Log)라고 한다
- 체크 아웃(Check Out)을 통해 깃발이 꽂힌 부분의 코드로 옮겨 다닐 수 있다
- 브랜치(Branch) : 새로운 방향의 개발을 추가해야 할 때, 기존 개발에 덮어쓰지 않고 새롭게 가지를 쳐서 작업하는 것
- 이를 이용하면 새로운 브랜치에 커밋하는 것이 기존 브랜치에 영향을 주지 않는다
- 머지(Merge) : 각각의 브랜치에서 작업한 코드들을 합치는 것
[ 총정리 ]
- 우리가 사용하는 스마트폰, 태블릿, 데스크톱, 노트북 등은 모두 "컴퓨터"이다
- 컴퓨터는 CPU, 메모리, 보조기억장치(HDD, SSD)와 같은 부품을 갖는다
- 컴퓨터의 부품들은 사용자가 직접 동작하지 않고, 운영체제(OS)가 제어해준다
- OS에는 윈도우, Mac OS, iOS, 안드로이드 등이 있다
- 이 운영체제 위에 올라가는 프로그램을 개발하는 사람을 '클라이언트 개발자'라고 부른다
- 서버 사이드에는 서버 컴퓨터가 있는데 여기에도 컴퓨터의 모든 부품들이 있다
- 또한 서버에도 운영체제가 필요한데 서버에서는 안정적이고 무료인 리눅스를 많이 사용한다
- 서버 프로그램을 개발하여 서버 컴퓨터에 돌리는 사람이 '서버 개발자'이다
- 클라이언트와 서버는 API를 통해 요청과 응답을 주고받는다
- 기능을 제공하는 쪽은 서버이고, 클라이언트는 이 기능을 사용한다
- API는 특정한 주소와 메소드(GET, POST, PATCH, PUT, DELETE)로 이루어져 있다
- 메소드는 각각 CRUD(Create, Read, Update, Delete)와 매치된다
- 서버에서는 요청에 대한 응답을 해주는데 성공은 200번대 숫자로, 실패는 400, 500번대 숫자로 표현한다
- 이 때 클라이언트에서 요청을 잘못 보내면 서버는 400번대 에러코드를, 서버의 동작 중 문제가 발생하며 500번대 에러 코드를 보낸다
- 개발자들은 이 모든 내용을 API문서에 정리한다
- 웹 개발자는 HTML을 통해 웹페이지의 뼈대를 잡고, CSS를 통해 디자인을 입히고 Javascript를 통해 기능을 붙힌다
- 이를 빠르고 쉽게 개발하기 위해 React.js 라는 라이브러리를 사용한다
- 애플리케이션 개발자는 '코코아'라는 프레임워크를 통해 iOS위에 돌아가는 프로그램을 쉽고 빠르게 만들 수 있다
- 서버에서는 각 요청에 맞는 기능을 만들고, 각 기능들은 대부분 데이터베이스(DB)를 거쳐야 한다
- SQL은 데이터베이스 관리시스템(DBMS)에 데이터를 CRUD 하기 위한 언어이다
- 서버 개발자는 기능을 만든 뒤, 각 기능에 맞춰 API 문서를 작성한다
- 그 후 웹 결과물은 아마존 AWS와 같은 서버에 올리고, 애플리케이션은 앱스토어에 심사 신청을 한다
비록 나는 전공자이지만 베스트셀러길래 한번 읽어봤다
사실 용어나 개념은 모르고 냅다 개발만 하느라 용어정리가 안되어있었는데 확실히 기본 용어 정리에는 도움이 많이 된 듯 싶다
진짜 졸립고 재미없었지만 재밌는 책이다(?)
728x90
'야미스터디 > Backend' 카테고리의 다른 글
[Etc] 좋은 개발자란 무엇일까요? 📌 ~ing (0) | 2022.08.28 |
---|---|
[보안] 암호화, 해시함수 (0) | 2021.12.23 |
OOP (객체지향 프로그래밍) (0) | 2021.09.09 |
얄팍한 코딩사전 - 기본 개발 용어 알아보기 (0) | 2021.07.31 |
소프트웨어공학 OOP 참고 공부(2) (0) | 2021.04.20 |
댓글