🩷 02-1 서버는 뭐고 AWS는 뭔가요?
🩵 서버와 클라이언트
서버 : 정보나 서비스를 저장하고 있다가 필요한 경우 네트워크를 이용해 사용자의 컴퓨터 혹은 스마트폰으로 전달해 주는 것
클라이언트 : 데이터를 받는 것
- 컴퓨터, 스마트폰, 내비게이션, 스마트 홈, 스마트 워치 모두 해당
🤍 웹 서버
웹 서버 : 컴퓨터의 특정 폴더에 담긴 HTML 파일로 웹사이트를 띄울 수 있도록 하는 프로그램
🩵 데이터 센터
데이터 센터, IDC : 해당 조건을 갖춘 전문 시설
- 역할에 적합한 하드웨어 성능을 갖춰야 하며 언제 어디서든 접속할 수 있는 네트워크가 해킹으로부터 안전
- 적절한 온도와 습도 유지
- 정전이 나거나 기기에 물을 쏟거나 화재가 나는 사고를 미연에 방지
- 사고가 났을 경우 빠르게 대처
서버 호스팅 : 서버용 컴퓨터를 임대해 주는 서비스
- 데이터 센터에 설치된 컴퓨터에 원격으로 접속해서 내 컴퓨터처럼 사용할 수 있음
온프레미스 : 회사에서 자체적으로 서버를 갖추고 관리하는 것
- 보안 이슈, 회사의 필요에 따라 서버를 자유롭게 구축하고 통제할 필요가 있을 경우 사용
온프레미스 | 서버 호스팅 | |
장점 | 서버에 관한 모든 것을 직접 구성하고 통제할 수 있음 | 발생하는 비용 절감 |
단점 | 그만큼 서버에 대한 해박한 지식과 경험이 있는 인력 필요 물리적 공간과 환경 갖춰야함 |
유출되어서는 안되는 정보를 외부 컴퓨터에 둔다는 리스크 |
단순 서버 호스팅 : 데이터 센터의 컴퓨터를 한 대 빌려 그 컴퓨터가 서버 역할을 할 수 있도록 소프트웨어를 설치하고 설정한 뒤 온라인 서비스를 제공
- 장점
- 적은 돈을 투자해 서버 컴퓨터를 빌려 원하는 대로 자유롭게 사용할 수 있음
- 단점
- 사용 가능한 용량이 한정적
- 서버에 대한 많은 지식이 필요
🩵 클라우드 컴퓨팅
클라우드 컴퓨팅 : 서버, 저장소, 데이터베이스, 네트워킹, 소프트웨어 등과 같은 컴퓨팅 서비스를 인터넷 (클라우드)으로 제공하는 방식
- 아마존 AWS, 마이크로소프트 애저, 구글 GCP, 네이버 NCP 등
- 장점
- 필요에 따라 사용량을 탄력적으로 조절
- 서버 사용에 필요한 어려운 기술적 요소들도 제공받을 수 있음
- 자체적으로 전문가를 두지 않아도 안정적으로 자사 또는 개인 서비스 손쉽게 운영 가능
- 단점
- 서버가 회사 외부에 있음
- 높은 비용
AWS : 아마존에서 제공하는 클라우드 컴퓨팅 서비스, 네트워킹을 기반으로 가상 컴퓨터와 스토리지, 네트워크 인프라 등 다양한 서비스 제공
🩵 인프라 VS 플랫폼 VS 소프트웨어
🤍 IaaS
IaaS (이아스, 아이아스) : 클라우드를 이용해서 서버용 인프라를 대여해주는 서비스
- 이용자가 대여받은 서버에 보안, 네트워크 등 각종 설정부터 소프트웨어 설치, 서비스 실행 및 관리까지 직접 수행
- AWS 의 EC2, 마이크로 소프트, IBM 등에서 제공
🤍 PaaS
PaaS (파스) : 애플리케이션을 개발하고 서비스하기 위해 필요한 서버, 운영체제, 개발환경 등을 자동으로 설치하고 제공함으로써 사용자가 애플리케이션 개발에만 집중할 수 있도록 플랫폼을 제공하는 서비스
- 인프라 구축과 유지비용등을 고려할 필요 없이 소프트웨어만 개발하면 손쉽게 애플리케이션을 실행, 배표할 수 있음
- AWS의 일래스틱 빈스토크, 헤로쿠 등이 있음
🤍 SaaS
SaaS (싸스) : 소프트웨어가 이미 완성된 형태로 제공되는 클라우드 서비스
- 인프라나 개발 환경을 구축할 필요 없이 사용료만 지불하면 이미 만들어진 소프트웨어를 사용할 수 있음
- 장점
- laaS, PaaS와 달리 초기 구축 비용 줄일 수 있음
- 단점
- 제공 업체가 만들어 놓은 서비스를 그대로 사용해야 하기 때문에 불필요한 기능이 비용에 포함되어 있기도 함
- 구글 드라이브, 네이버 N클라우드, 드롭박스, MS 오피스 365 등이 있음
🩷 02-2 웹사이트는 어떻게 만들어지나요?
🩵 웹 브라우저
웹 브라우저, 브라우저 : 웹사이트를 열어 인터넷 서핑을 하는데 사용되는 소프트웨어
🩵 HTML
HyperText MarkUp Language : 웹 페이지의 각 요소들을 배치하는 역할, 마크업 언어
태그 : '< >' 안에 글자가 들어간 body, div, h1 같은 요소
형식 : <태그> 내용 </태그>
🩵 CSS
특정 요소들의 디자인 속성을 지정해 주는 역할, 스타일 언어
🩵 자바스크립트
동적인 기능을 구현하는 역할
🩵 웹 표준
웹 서핑 : 거미줄과 같은 통신망을 뜻하는 웹 (web)과 바다에서 파도타기를 뜻하는 서핑 (surfing)을 결합해 놓은 합성어
바다에서 파도를 타듯 이리저리 움직이며 여기저기 둘러본다는 의미
웹 표준 : 국제적으로 권고된 사항
🩵 반응형 vs 적응형
🤍 반응형 웹사이트
반응형 웹 : 페이지 내 요소들을 신축성 있게 만들어 기기나 화면 크기에 맞게 너비나 높이, 위치 등을 자동으로 조절하는 웹사이트
🤍 적응형 웹사이트
적응형 웹 : 화면 크기에 따라 PC용과 모바일용 웹사이트를 따로 만드는 것
🩷 02-3 쿠키, 토큰, 캐시는 일상에서 쓰는 그 단어인가요?
🩵 쿠키
쿠키 : 사용자의 브라우저에 저장되는 정보
- 보안 상 민감한 정보를 저장하는 데에는 적합하지 않음
- 혹여 남에게 탈취되거나 사용자에 의해 조작되어도 크게 문제가 되지 않을 정보를 브라우저에 저장함으로써 웹사이트 이용을 편리하게 해 주는 것
🩵 세션
세션 : 서버가 사용자를 기억하고 있는 상태
쿠키 | 세션 | |
저장 위치 | 사용자의 브라우저 | 서버 (세션 쿠키 제외) |
관리 주체 | 사용자 | 서비스 제공자 |
저장 대상 | 가벼운 편의를 위한 정보 | 서버가 관리해야 할 정보 (ex : 로그인) |
유지 기간 | 브라우저를 종료해도 데이터 유지 | 브라우저 종료 시 데이터 삭제 |
요청 속도 | 빠름 | 느림 (서버 처리 필요) |
보안 | 취약 (로컬 기기에 저장) | 좋음 (브라우저 메모리에 저장) |
🩵 토큰
토큰 : 서버가 기억해 둘 필요 없이 사용자가 스스로를 증명할 수 있는 수단
세션 방식 | 토큰 방식 | |
장점 | 사용자의 상태를 원하는 대로 통제 가능 | 상태를 따로 기억해 둘 필요가 없음 |
단점 | 메모리에 로그인되어 있는 사용자의 상태를 보관해야 함 | 한 번 로그인 한 사용자의 상태는 토큰이 만료될 때까지 제어가 불가능함 |
🩵 캐시
캐시 (cache) : 데이터를 다시 가져오지 않도록 가까이 저장해 두는 기술
쿠키 | 캐시 | |
공통점 | 정보를 저장하여 재활용하는 기술 | |
차이점 | 사용자의 수고를 덜어주는데 목적 | 데이터의 전송량을 줄이고 서비스 이용 속도를 높이는데 목적 |
🩵 CDN
CDN (콘텐츠 전송 네트워크) : 각지에 캐시 서버를 두어 부하를 분산시키는 기술
- 본 서버는 캐시 서버에 데이터를 한 번만 전송하면 됨
- 대량의 데이터를 전송하는 서비스, 유튜브나 넷플릭스 같은 동영상 서비스에 필수
🩷 02-4 스마트폰 앱인데 웹사이트라고요?
🩵 네이티브 앱
네이티브 앱 : 기기에 작동하는 운영체제에 특화된 방식으로 제작된 앱
- 장점
- 각 스마트폰의 모든 기능 사용할 수 있음
- 성능을 최대한으로 활용할 수 있음
- 카메라나 GPS, 블루투스 등 기기 내 장치 사용하는 앱, 영상 편집 앱과 같이 성능 최대한 사용해야 하는 앱에 최적화
- 단점
- IOS, 안드로이드에서 돌아가는 애플리케이션을 만들어야 하기 때문에 개발에 소요되는 인력과 시간 많이 필요
- 앱을 공개하거나 업데이트 하는데 있어도 까다로움
네이티브 앱 개발은 각각의 운영체제에 최적화된 앱을 만드는 방법
네이티브 앱으로 개발된 앱은 컴퓨터로는 접속 불가능
🩵 크로스 플랫폼
크로스 플랫폼 : 하나의 소스 코드로 여러 개의 운영체제에서 작동할 수 있는 프로그램을 만드는 방식
- 장점
- 네이티브 앱으로 제작하는 것보다 더 쉽고 적은 자원으로 애플리케이션 제작 가능
- 리액트 네이티브 - 자바스크립트
- 닷넷 마우이 - C#
- 스케줄 관리 앱, 쇼핑 앱, 사진 보정 앱과 같이 캘린더, 카메라 등 스마트폰의 기본 기능을 활용하면서도 높은 성능을 요구하지 않는 앱을 개발하기에 적합
- 스케줄 관리 앱, 쇼핑 앱, 사진 보정 앱과 같이 캘린더, 카메라 등 스마트폰의 기본 기능을 활용하면서도 높은 성능을 요구하지 않는 앱을 개발하기에 적합
- 네이티브 앱으로 제작하는 것보다 더 쉽고 적은 자원으로 애플리케이션 제작 가능
- 단점
- 네이티브 앱에 비해 성능을 100% 끌어올릴 수 없음
- 기기의 활용도 떨어짐
- 주요 기능을 업데이트할 때마다 양쪽 앱의 마켓의 심사를 거쳐야함
🩵 웹 앱
웹 앱 : 모바일 기기의 브라우저에서 접속할 수 있는 모바일 웹사이트로, 모바일 앱과 비슷한 UI/UX를 제공
- 장점
- 웹 개발만으로 모바일용 앱을 만들 수 있음
- 새 기능을 추가할 때 서버에 파일을 업로드해서 사이트 내용만 바꿔주면 업데이트되므로 언제든 최신 버전으로 유지 가능
- 플랫폼 제작 비용도 저렴하고 개발 기간도 짧음
- 단점
- 기기의 활용도와 성능 면에서 네이티브 앱과 크로스 플랫폼보다 뒤쳐짐
- 높은 사양이 요구되는 작업이나 스마트폰 내부의 파일들을 다루는 기능, 각종 하드웨어 장치를 다루는 기능은 구현이 불가능하거나 어려움
- 브라우저를 연 다음 필요한 앱 주소를 입력해서 접속해야 함
🩵 하이브리드 앱
하이브리드 앱 : 네이티브 앱 안에 웹 뷰로 웹사이트를 실행해서 네이티브 앱과 웹 앱의 장점을 취할 수 있는 앱
- 장점
- 제품을 유연하게 운영할 수 있음
- 웹사이트로 구현이 불가능한 필수 기능들만 네이티브 앱으로 개발하고, 나머지 기능은 모두 웹 뷰 안에 들어갈 웹사이트로 만들면 되기 때문에 비교적 개발 부담이 적음
- 앱 기능을 업데이트할 때를 제외하고 앱 마켓의 심사 없이 언제든지 앱의 내용을 수정할 수 있음
- 앱의 특성에 따라 네이티브로 제작할 부분과 웹 뷰로 제공할 부분을 다양하게 구성할 수 있음
🩵 PWA
PWA : 아이콘 추가 등 진보된 브라우저 기능을 활용해서 네이티브 앱 같은 다양한 편의 기능을 제공하는 웹 앱
- 홈 화면에 저장되면 브라우저에서 실행되고 네이티브 앱처럼 작동됨
🩷 02-5 웹의 보이는 곳과 보이지 않는 곳
🩵 프론트엔드
프론트엔드 : 웹사이트 구성 요소 중 클라이언트 컴퓨터의 브라우저에서 작동하는 부분
프론트엔드 개발자, 클라이언트 개발자 : 브라우저에서 자바스크립트로 동작하는 부분을 전문적으로 개발하는 직군
🩵 백엔드
백엔드 : 웹사이트나 모바일 앱과 같은 온라인 애플리케이션의 구성 요소 중 서버에서 작동하는 프로그램
백엔드 개발자, 서버 개발자 : 백엔드 업무를 전문적으로 개발하는 직군
사용 언어 : 자바, 파이썬, 자바스크립트, C#, PHP, 루비 등 다양한 프로그래밍 언어 사용
🩵 프레임워크
프레임워크 : 프로그램의 기본 골격이 갖춰져 있어 개발자가 원하는 제품을 수월하게 만들 수 있도록 출시된 개발키트
라이브러리 : 특정 기능을 수행하는 소프트웨어 조각이자 여러 프로그램에 들어갈 수 있는 부품
🩵 API
API (Appliction Programming Interface) : 여러 소프트웨어의 특정 기능들을 요청하고 호출하기 위한 약속
API는 인터넷으로 연결된 주체뿐만 아니라 컴퓨터 내부의 시스템과 소프트웨어끼리 기능을 호출하는 데도 사용됨
- 일반적으로 하나의 서비스를 만드는 프론트엔드 개발자와 백엔드 개발자 사이에 만들어짐
- 프론트엔드 개발자 : 요청을 보내고 응답으로 반환된 결과를 화면에 반영하는 기능 다룸
- 백엔드 개발자 : 요청된 작업을 수행하는 기능 다룸
REST API
REST API (REpresentational State Transfer API) : 개발자 사이에서 보편적으로 공유되는 방식
REST API를 사용함으로써 개발자들은 '이 기능은 어떻게 요청하겠구나'하고 짐작할 수 있기 때문에 보다 수월하게 개발 참여할 수 있음
🩵 XML, JSON, YAML, AJAX
계층과 구조를 가진 정보를 텍스트로 표현할 수 있는 형식 필요
🤍 XML
XML : 마크업 언어, HTML과 같은 원리이며 동일한 태그가 사용됨
- 각 항목은 해당 이름의 태그 사이에 정보가 들어 있는 형태로 구성되어 있음
- 태그 안에 또다른 태그를 다층적으로 포함할 수도 있음
🤍 JSON
JSON : XML의 단점을 보완한 또다른 형식
- XML 보다 구문이 간단하고 높은 가독성을 가지고 있음
- 각 항목마다 따옴표가 붙고 그 뒤에 [대괄호]로 둘러싸인 배열, {중괄호}로 둘러싸인 또 다른 객체가 오는 식으로 정보 작성
🤍 YAML
YAML : 정보 인식을 위해 줄바꿈과 들여쓰기가 필수 문법 요소
- 주로 프로그램 설정 파일과 같이 개발자가 편리하게 읽고 작성하기 위한 용도로 사용됨
🤍 AJAX
AJAX (Asynchronous JavaScript And Xml) : 자바스크립트를 이용해 서버와 브라우저가 데이터를 교환할 수 있는 통신 기능
🩷 02-6 IP는 뭐고 HTTPS는 뭐죠?
🩵 IP 주소
IP 주소
- 각 기기를 식별할 수 있는 특수한 번호
- 기기 자체의 주소가 아니라 기기와 연결된 네트워크 끝 단의 주소
- 통신을 위해 사용하는 식별 번호
IP (Internet Protocol) : 인터넷 상에서 데이터를 주고받기 위한 통신 규약
IPv4 : 0부터 255까지의 숫자가 네 마디로 구분되는 방식, 현재 주로 사용하는 방식
IPv6 : 0~F로 표현하는 16진수를 4자리 숫자 8개로 표현
🤍 공인 IP 주소
공인 IP 주소 : 지구상 어느 것과도 중복되지 않는 고유 IP 주소
- 인터넷 서비스 제공업체에 의해 회사나 개인에게 부여됨
- 다른 어떤 IP와도 중복되지 않기 때문에 웹사이트 같은 서버를 찾기 위한 용도로 사용
- 외부에 공개된 주소이기 때문에 검색 엔진에서 IP를 검색해 확인할 수 있음
🤍 사설 IP 주소
사설 IP 주소 : IPv4 방식의 공인 IP 주소가 부족해지면서 기기에 서로 다른 주소를 할당할 수 없기 때문에 생긴 개념
- 공인 IP를 공유한 기기에도 각각을 구분할 수 있는 주소
- 로컬 IP, 가상 IP라고도 불림
🤍 고정 IP 주소
고정 IP 주소 : IP 주소가 영구적으로 할당되어 변경되지 않는 주소
- 사용자나 기기에 IP를 고정적으로 부여하지 않고는 일정 주기마다 IP를 회수해서 필요한 곳에 다시 나눠주는 전략
- 인터넷 사이트와 같이 변경되면 안 되는 사용처나 기기에 주로 사용
- 기업이나 기관에서 서버 운영할 때 적
🤍 유동 IP 주소
유동 IP 주소 : 기기에 고정적으로 IP를 부여하지 않고 남아 있는 IP 주소를 골라 그때그때 기기에 할당하는 방법
- 고정 IP 주소보다 저렴하게 이용 가능
- 정기적으로 변동되기 때문에 고정 IP에 비해 보안측면에서도 유리
- 일반적인 클라이언트 용도로 적합
🩵 도메인과 DNS
도메인 : 사람이 기억하기 쉽도록 문자로 만들어 특정 IP에 연결한 인터넷 주소
DNS : IP 주소와 이에 해당하는 도메인의 IP 정보를 갱신하며, 특정 도메인에 대한 요청이 들어오면 IP 주소를 찾아 알려주는 시스템
DNS에서 요청을 처리하는 순서
- 주소창에 URL을 입력하면 브라우저는 DNS에 IP 주소를 요청
- DNS는 해당 도메인에 맞는 IP 주소를 찾아 브라우저에 전달
- 브라우저는 해당하는 IP 주소의 웹 서버에 연결
URL
URL : 네트워크상에서 특정 자료가 어디에 있는가를 나타내는 주소
웹사이트, 이미지, PDF, 파일, 자바스크립트나 CSS 문서 등의 다양한 자원을 열람하거나 다운로드할 수 있음
🩵 WWW, HTTP
통신 규약 : 어떤 종류의 통신이 이뤄질 것인가를 결정, https
호스트명 : www, mail, map, shopping 등 다른 호스트가 들어올 수 있음
도메인 : 호스트명 바로 뒤에서 시작해 .com, co.kr, .edu 등으로 끝나는 주소
🤍 WWW
WWW : 월드 와이드 웹의 줄임말, 전 세계의 사람들이 정보를 공유하고 소통할 수 있는 인터넷 공간을 의미
- WWW는 하이퍼텍스트를 지원하기 때문에 문서 활용에 엄청난 편리성 제공함
- 인터넷에 제공되는 많은 서비스를 통합 접속하는 역할을 함
- 기존 프로토콜과 서비스 제공
- 인터넷에 존재하는 텍스트 형태의 문서, 그림, 음성 등 다양한 자료 또한 URL 형태인 인터넷 주소를 이용해서 하나의 문서로 관리 및 제공
하이퍼텍스트 : 꼭 전체 글자를 순서대로 읽지 않아도 되는 문서
한 문서에서 다른 문서로 즉시 접근할 수 있도록 비선형적으로 연결된 텍스트
🤍 HTTP
HTTP : 클라이언트의 요청과 서버의 응답으로 이뤄지는 통신규약을 나타냄, 네트워크로 이어진 두 컴퓨터가 어떤 종류의 소통을 할지 지정하는 것
HTTP는 서버와 클라이언트의 수가 많기 때문에 클라이언트가 요청을 두 번 보냈을 때 서버는 이 두 요청이 같은 클라이언트가 보낸 것을 알지 못함
웹사이트에서 세션이나 토큰을 사용해야만 로그인 상태를 유지할 수 있는 것은 웹사이트에서 사용하는 통신의 종류가 HTTP이기 때문이다. 이 HTTP의 한계를 극복하기 위해 브라우저에 쿠키로 세션 ID 또는 토큰을 담아 각 요청과 함께 반환해서 로그인 여부를 증명하는 것
단점
- 요청과 응답 사이에 아무런 보안 장치 없이 데이터가 그대로 보내짐
- 클라이언트와 서버가 HTTP로 주고받는 편지는 암호화되지 않은 평문이기 때문에 중간에 누군가 들여다보면 내용이 그대로 노출됨
- 아이디와 패스워드를 입력하고 로그인 버튼을 눌렀을 때 이 정보를 서버로 보내는 편지가 탈취당하면 그대로 유출됨
스테이트리스 (stateless) : 어떤 공통된 상태 아리에 있지 않고 각각 개별적인 상태
스테이트풀 (stateful) : 전화 통화처럼 공통된 상태를 갖는 것
🩵 HTTPS
HTTPS : HTTP에 보안 기능을 추가해서 보다 안전하게 만든 통신 규약
원리 :
- 도메인의 소유주는 CA라 불리는 인증기관 중 하나로부터 유로 또는 무료로 인증서를 발급받음
- 인증서를 웹사이트에 적용하면 이후 서버는 클라이언트가 접속할 때 먼저 인증서를 제시함
- 브라우저에는 신뢰받는 CA 목록과 그들이 발급한 인증서를 판별할 수 있는 장치가 있음
- 브라우저는 이 장치를 사용해서 인증서가 유효한지 확인
- 인증서가 확인된 웹사이트는 주소창에 자물쇠 표시로 HTTPS를 사용하는 곳임을 나타냄
- 클라이언트와 서버는 서로 비밀리에 약속된 방식을 통해 주고받는 내용을 암호화하고 해독
- 클라이언트가 보낸 편지는 내용이 암호화되어 있기 때문에 탈취자가 열어 봐도 내용을 확인할 수 없음
- 해독법을 아는 서버만 열어볼 수 있음
- 서버가 클라이언트에 보내는 편지 또한 마찬가지로 해독법을 아는 클라이언트 외에는 내용을 확인할 수 없음
장점
- 웹사이트 노출이 HTTP보다 유리함
검색 엔진 최적화 (SEO) : 검색 엔진의 검색 결과에 보다 많이, 보다 상위권에 나타나도록 여러 설정을 함
🩵 요청 메소드와 응답 코드
🤍 요청 메소드
- GET
- 서버에 HTML 등 문서나 이미지, 기타 각종 데이터를 요청
- 브라우저에서 웹사이트에 접속할 때 보내는 요청
- API에서도 서버로부터 데이터를 가져오기 위해 사용
- POST
- 서버에 새로 저장될 자료를 보냄
- 게시판이나 SNS에 새 게시물을 작성할 때 사용
- PUT
- 특정 데이터 전체를 새로 저장
- 게시판의 게시물을 수정할 때 사용
- PATCH
- 특정 데이터를 일부만 수정
- 게시물의 조회수나 좋아요 수를 올릴 때 등에 사용
- DELETE
- SNS 게시물 등 특정 데이터를 삭제
- OPTIONS
- 해당 URL이 어떤 메소드를 허용하는지 물어보기 위해 사용
🤍 응답코드
서버의 응답에는 세 자리 숫자 형식을 가진 응답코드가 찍힘
- 1XX
- 요청을 성공적으로 받았으며 서버가 해당 작업을 진행 중
- 2XX
- 요청을 성공적으로 받았으며 요청이 이루어짐
- < 자주 사용되는 코드 >
- 200 : 요청이 성공적으로 처리됨, 가장 흔히 사용
- 204 : 성공적으로 처리되었지만, 답장에 적어 보낼 내용은 없음
- 206 : 요청에서 지정한 대로, 일부 콘텐츠만 보냄
- 3XX
- 요청을 수행하기 위해 해당 요청을 다른 주소로 보내는 등 추가 조치가 필요, 자료의 위치가 변경되어 새 URL로 자동 이동시켜줄 때 사용함
- 4XX
- 클라이언트 요청에 문제가 있기 때문에 수행할 수 없음
- < 자주 사용되는 코드 >
- 401 : Unauthorized : 로그인이 필요한 요청인데 로그인되어 있지 않음
- 403 : Forbidden : 로그인되어 있지만 요청을 보낼 권한이 없음
- 404 : Not Found : 요청에 해당하는 데이터가 없음 또는 URL이 잘못되었을 때 나타남
- 5XX
- 요청에는 문제가 없지만, 서버에 이상이 있어 응답할 수 없음
- < 자주 사용되는 코드 >
- 500 : 서버 내부에 오류 발생
- 502 : 서버 과부하 또는 기타 네트워크 문제로 통신이 제대로 되지 않음
🩷 02-7 디지털 시대, 데이터와 데이터베이스의 이해
🩵 데이터와 데이터베이스
데이터 : 어떤 의미나 목적 없이 단순히 수집된 순수한 '자료'
정보 : 데이터가 모여서 의도나 목적에 따라 분석되어 의미가 부여된 것
지식 : 정보 간 관계를 통해 가치를 찾는 것
데이터베이스
- 데이터 (data)의 기지 (base) 라는 단어로 구성되어 있음
- 많은 양의 데이터를 한데 모아 놓은 곳
- 소프트웨어를 통해 데이터를 저장하고 읽고 수정하거나 삭제할 수 있는 형태의 데이터 집합
🩵 DBMS
데이터베이스 관리 시스템 (DBMS : DataBase Management System) : 데이터베이스 관리 전문적 프로그램
DBMS의 기능
- 특정 데이터를 저장, 조회, 삭제, 수정
- 데이터가 중복되거나 잘못된 형식으로 저장되는 것을 방지
- 외부의 접근을 통제하고 사용자마다 권한을 지정해서 보안 유지
- 허용된 사용자가 원하는 대로 데이터를 살펴보고 조작할 수 있도록 여러 가지 인터페이스 제공
🩵 관계형 데이터베이스
관계형 데이터베이스 (RDBMS : Relational Database Management System) : 관계형 데이터베이스 관리 시스템
관계형 데이터베이스 특징
- 테이블 (표) 에 데이터를 저장하는 방식으로 데이터베이스 관리
- 테이블은 열과 행으로 이루어져 있음
- 열에는 형식을 미리 설정하기 때문에 잘못된 데이터가 입력되는 것을 방지함
- 각각 나누어진 테이블을 열의 관계에 따라 하나로 합쳐서 조회할 수 있는 조인 (join) 기능 제공
- 데이터를 효율적이고 안정적으로 관리하는 동시에 편리하게 활용 가능
⭐ 관계형 데이터베이스는 테이블을 분할해서 데이터를 입력하는 방법 제공
🤍 오라클 데이터베이스
오라클 데이터베이스 : 대형 기업 사이에서 가장 널리 사용되는 관계형 데이터베이스
- 미국의 거대 IT 기업인 오라클에서 만든 제품
- 은행이나 대기업에서 사용할 만큼 강력한 기능과 안정성 자랑
- 다양한 운영체제에서 운영 가능
🤍 MySQL
MySQL : 오라클과 점유율 1, 2위를 다투는 관계형 데이터베이스
- 스타트업이나 소기업에서 또는 개인 용도로 사용
- 소스 코드가 공개된 오픈 소스 제품
🤍 마이크로소프트 SQL 서버
마이크로소프트 SQL 서버 : MSSQL이라고도 불리며, 마이크로소프트에서 만든 제품
- 윈도우 서버에서만 구동 가능
- C#과 높은 호환성을 가짐
🤍 PostgreSQL
PostgreSQL : 무료로 사용할 수 있는 오픈소스 데이터베이스
- 다양한 데이터 타입 지원
- 객체지향 프로그램을 적용할 수 있음
🤍 MariaDB
MariaDB : 오픈 소스 무료 데이터베이스
- MySQL과 높은 호환성 가지고 있음
🤍 SQLite
SQLite : 서버가 아닌 클라이언트에서 작동하는 용도로 만들어짐
- 안드로이드와 IOS에 포함되어 있음
- 응용 프로그램 실행에 필요한 데이터를 기기 내에서 관리하는데 사용됨
🩵 SQL
SQL (구조화 질의 언어, Structured Query Lanauage) : 관계형 데이터베이스에 작업을 지시하기 위해 사용되는 언어
- 구문이 영어 문장과 같은 구조로 되어 있어 비교적 직관적으로 명령의 의미를 파악할 수 있음
- 프로그램에 필요한 모든 데이터 작업을 RDBMS에 요청할 수 있음
🩵 NoSQL
NoSQL : 관계형을 제외한 모델을 사용하는 DBMS를 가리키는 용어
🤍 문서 데이터베이스
문서 데이터베이스 : 데이터를 문서의 형태로 저장
- 각 데이터를 XML이나 JSON과 비슷한 형태의 문서로 저장
- 데이터마다 동일한 항목 가질 필요 X
- 유연성이 강점으로 작용하는 곳에서 유용하게 사용할 수 있음
- 대표적으로 MongoDB와 CouchDB가 있음
🤍 키-값 데이터베이스
키-값 데이터베이스 : 키와 값의 쌍만을 저장하는 단순한 형태의 데이터베이스
- 실행 속도 빠르며, 용량 부족 시 다른 서버와의 분담이 용인한 수평 확장성 갖고 있음
- 대표적으로 레디으와 아마존 다이나모 DB, 맴캐시드 등이 있음
🤍 그래프 데이터베이스
그래프 데이터베이스 : 각 구성원을 뜻하는 여러 노드 (node) 와 그들 간의 관례를 뜻하는 엣지 (edge) 로 구성된 자료구조
- 노드의 정보인 프로퍼티 (property) 를 더해서 데이터를 저장
- 대표적으로 Neo4j, JanusGraph 등이 있음
🩷 02-8 개발자들은 왜 리눅스를 좋아하나요?
🩵 운영체제
운영체제 (OS) : CPU, 메모리, 그래픽 카드 등의 기기를 가동하고 제어해서 사용자가 컴퓨터로 각종 작업을 할 수 있는 환경 마련
- PC용으로 사용되는 운영체제
- 마이크로소프트의 윈도우
- 애플의 맥OS
- 리눅스
- 모바일용으로 사용되는 운영체제
- 구글에서 만드는 안드로이드
- 애플의 IOS
- 스마트워치용 운영체제
- WearOs
- WatchOS
- 초소형 컴퓨터 운영체제
- 라즈베리 파이 OS
🩵 GUI vs CLI
인터페이스란?
인터페이스 : 두 개 이상의 시스템이나 장치가 상호 작용할 수 있는 접점
사용자 인터페이스 : 사람과 사물 또는 프로그램 사이에서 의사소통할 수 있도록 돕는 것
🤍 GUI
GUI (Graphic User Interface) : 그래픽으로 구성된 사용자 인터페이스
- 그래픽 요소들을 사용해서 사용자와 상호 작용하는 것을 의미
- 아이콘, 툴바, 버튼, 메뉴창, 탐색기나 파인더처럼 직관적이고 알기 쉬운 그림 요소로 구성되어 있음
- 1981년 제록스에서 처음 마우스를 활용한 GUI를 만듬
- 애플에서 GUI를 적극 활용하면서 컴퓨터의 대중화에 크게 기여함
🤍 CLI
CLI (Command Line Interpreter) : 명령어 줄을 입력해서 사용할 수 있는 인터페이스
- 환경에 따른 기본 명령어를 알고 있어야 하기 때문에 진입 장벽 높음
- 명령 프롬포트가 CLI의 대표적인 예시
개발자들이 CLI 방법을 많이 사용하는 이유
- CLI 환경이 컴퓨터 자원을 덜 소모
- 백엔드에서 작동하는 서버처럼 사용의 편리성보다 성능을 우선하는 환경에서는 CLI만 갖춘 운영체제를 설치하는 것이 합리적인 선택임
- CLI 환경이 간편하고 정확
- 반복되는 작업을 일정한 방법으로 진행하는 데는 CLI가 오히려 간편하고 정확함
- 폴더 안의 파일을 옮겨 수정하는 과정에서 명령어들을 한번에 입력하는 것이 가능
- 개발과정에 수반되는 여러 반복 작업을 자동화하고 조작상의 실수도 방지할 수 있음
- 네트워크 환경에서는 GUI보다 CLI가 더 적합
- CLI를 사용하면 명령어를 입력하고 결과를 전송받는 방식으로 가볍고 안정적으로 서버를 다룰 수 있음
🩵 리눅스
리눅스 : 오픈 소스
오픈소스 : 소프트웨어의 소스 코드가 공개되어 있는 것
윈도우나 맥OS의 운영체제를 사용하려면 값을 지불해야하지만, 리눅스는 레드햇을 제외한 거의 모든 버전을 무료로 사용할 수 있음
- 전 세계의 개발자와 전문가가 오픈 소스 커뮤니티에서 논의하고 함께 개발하는 주제이기 때문에 안정적으로 작동함
- 필요와 용도에 따라 기존 리눅스를 개량에서 새 버전을 만들어 공개하기도 함
리눅스 배포판 : 리눅스를 커널과 함께 운영체제의 목적에 맞는 여러 프로그램을 패키징 해서 제공
- 클라이언트 컴퓨터, 서버, IoT 기기 등 다양한 버전으로 개발되어 사용됨
🤍 우분투
우분투 : 현재 가장 많이 사용되는 리눅스 버전
- GUI를 탑재한 데스크톱 (클라이언트) 용과 CLI로 동작하는 서버용으로 제공됨
- 리눅스 초보 사용자에게 인기 있음
- 서버용 우분투 또한 빠른 업데이트와 패키지 (프로그램) 설치의 용이함 등으로 많은 개발자가 선호하는 운영체제
🤍 레드햇 엔터프라이즈 리눅스
레드햇 리눅스 : 레드햇에서 개발한 유료 운영체제, 개발을 위한 여러 가지 도구 및 기술 지원을 제공
- 비용이 많이 발생하지만 그만큼 안정성을 보장받을 수 있음
- 일정 규모가 있는 기업에서 많이 사용함
🤍 센트OS와 로키 리눅스
센트OS : 레드햇 리눅스 (RHEL) 를 기술 지원 없이 무료로 배포한 버전
로키 리눅스 : RHEL을 기반으로 한 센트OS를 대신할 OS
🤍 리눅스 민트
리눅스 민트 : 우분투 리눅스에서 파생한 배포판
- 화면 디자인 및 사용자 편의성을 개선한 운영체제
🤍 라즈베리 파이
라즈베리 파이 : 데비안 계열의 오픈 소스 운영체제
- 하드웨어에 최적화된 운영체제
- 데비안 패키지의 안정성과 성능을 가벼운 용량으로 사용할 수 있음
🤍 만자로 리눅스
만자로 리눅스 : 쉽게 배우고 사용할 수 있는 인터페이스, 디자인, 패캐지 설치의 용이성으로 큰 인기
- 기본적인 틀만 있는 상태에서 본인만의 운영체제 만들 수 있음
🩵 커널
커널 : 운영체제의 핵심 기능을 담당하는 핵심 요소
- 하드웨어와 응용 프로그램 사이에서 작동하며 컴퓨터에서 일어나는 모든 일을 통제
- 여러 프로그램을 원활히 사용할 수 있도록 작업 간 우선순위를 정해서 컴퓨터 자원을 효율적으로 분배
- 메모리가 어떤 작업에 얼마나 할당되는지, 어떤 프로그램이 CPU를 얼마나 오래 점유하는 지 등을 끊임없이 추적하며 컴퓨터가 안정적으로 작동할 수 있도록 관리함
🩵 오픈소스
오픈소스 : 누구나 소스 코드를 볼 수 있고 개발에 참여할 수 있는 소프트웨어