"비전공자를 위한 이해할 수 있는 IT 지식" 을 읽고 내용 정리
이 게시글은 내가 "비전공자를 위한 이해할 수 있는 IT 지식" 책을 읽고 노트에 정리해놨던 내용들을 검색하기 쉽게 데이터로 백업하는 용도의 글이다.
문제가 된다면 삭제하겠음.
* IDE 통합 개발 환경 : 이클립스(웹 개발), 파이참, Xcode, Android Studio
* 저수준 : 컴퓨터 친화적인 언어 (컴 사양 안좋을 때 사용. IPTV나 프린터같이 메인기능이 따로 있는 제품에 컴퓨터가 들어갈 때)
고수준 : 인간 친화적인 언어 (컴 사양 좋을 때 사용.)
*CPU : 컴퓨터의 머리 역할.
메모리 : CPU의 개인 작업 공간.
HDD 하드디스크 : 컴퓨터 창고.
SSD보조기억장치 : 컴퓨터 창고.
=> 이 부품들을 메인보드 판에 끼움.
CPU는 데이터를 따로 저장하지 않음.
보조기억장치가 메모리에 큰 데이터 덩어리를 옮겨주면 CPU가 메모리에서 데이터를 가지고 작업함.
예를 들어 보조기억장치에 포토샵이 설치되어있을 때 CPU가 포토샵을 실행하면 메모리에 포토샵데이터가 옮겨가서 정보가 메모리에 그때 그때 저장되어 CPU가 메모리에서 바로바로 작업 가능.
*운영체제 Operating System
window, macOS, iOS, Android 등
* 운영체제는 하드웨어를 관리함. 그래서 HDD와 SSD의 용량 확인이 가능한 것. 프로그램 설치, 실행도 가능.
운영체제가 하드웨어를 컨트롤하고 CPU와 메모리를 관리함.
* 애플 개발 언어는 Objective-C, 스위프트(애플 자체개발)
*운영체제가 다양할 때, java는 JVM이란걸 만들어서 모든 운영체제에 java 프로그램이 같이 돌아가게 만듦.
이건 컴퓨터 운영체제에서만 가능. 단점은 JVM을 거치기 때문에 속도가 느리다는 점.
*자바는 JVM이 있어서 운영체제에 독립적임. 안드로이드에서도 사용할 만큼 사용범위가 넓음.
*LAN(Local Area Network) : 컴퓨터가 연결된 작은 지역.
학교 컴퓨터실 하나, 아파트 하나, 커피숍 하나, 학원 컴퓨터실 하나가 다 LAN. LAN을 연결하는 선이 lan선.
* LAN들을 연결하면 MAN(Metropolitan Area Network).
*여러 MAN들을 연결하면 WAN(Wide Area Network).
나라와 나라, 도시와 도시.
*카톡을 다운, 실행 할 때 :
앱스토어 -> 카톡 검색 -> 다운로드 -> 가까운 기지국에 연결 -> 카톡 설치 파일 보내달라 요청 -> 신호는 WAN을 따라 이동 -> 애플이 켜놓은 컴퓨터로 신호 감 -> 카카오가 앱스토어에 올린 설치 파일을 애플 컴퓨터가 내 폰으로 보내줌 -> 설치됨 -> 폰의 보조기억장치(HDD,SSD)에 카톡 실행 파일 저장 -> 우리가 카톡을 실행시키면 실행에 필요한 부분들이 메모리 위로 올라옴 -> CPU가 이 데이터들을 처리. 카톡 동작!
*IP주소는 위치에 따라, 컴퓨터에 따라 고유함.
0~255까지의 숫자로 구성.
"1.1.1.1" < 이 형태가 한계가 있어서 숫자구분을 4개에서 6개로 늘린 IPv6도 사용중.
*파일을 달라고 하는 컴퓨터(핸드폰) : 클라이언트(손님)(클라) < 프론트 부분(클라이언트 개발자)
파일을 주는 컴퓨터 : 서버 < 백엔드 부분
*리눅스 : 운영체제(OS)
리눅스는 서버 프로그램을 돌림. 클라이언트의 요청에 응하는 컴퓨터.
*리눅스를 서버프로그램 돌릴 때 굳이 사용하는 이유 : 무료라서
무료라서 사람들이 마음대로 발전시킴. 다양한 버전의 리눅스 존재. (ex>우분투, 레드햇, 모바일로 개량한 안드로이드)
*서버관리를 '나' 대신 해주는 업체 = 호스팅업체
국내 : cafe24, 가비아
해외 : AWS
*API : 클라, 서버와 같은 서로 다른 프로그램에서 요청과 응답을 주고 받을 수 있게 만든 체계.
API는 서버 개발자가 개발함. 클라이언트 개발자는 API를 사용함.
*클라이언트 소프트웨어에서 서버로 요청을 보냄.
CRUD요청
C: Create(올리는)
R: Read(불러오는)
U: Update(바꾸는)
D: Delete(지우는)
항상 CRUD의 관점에서 생각해야함.
*API가 너무 많아지면 중복이 되는 등 관리가 힘듦.
=> API를 REST함. Representational State Transfer.
=> RESTful API : CRUD를 하나의 주소로 관리.
create=> post
read=> get
update=> put(전체) / patch(일부)
delete=> delete
*Method : 수학의 '함수'와 같은 의미로 사용.
*HTTP 상태 코드
200번대 코드 : API 요청이 제대로 잘 됐다
400번대 코드 : 클라이언트의 요청이 잘못 됐을 경우.
500번대 코드 : 서버 내부적으로 잘 안된 경우.
*클라의 요청 : request / 서버의 응답 : response
"내 정보를 불러와줘" : request
"여기 네 정보야" : response
=> 요청과 응답에 데이터를 주고 받음으로써 API 요청 완성.
*서로 다른 시스템의 기능을 사용하기 위해서는 API 필요.
내 소프트웨어 : 번역 기능 x.
A 소프트웨어 : 번역 기능 o.
내 소프트웨어에서 A소프트웨어에게 요청을 보냄.
A소프트웨어는 수행 후 응답.
=> A소프트웨어 : SDK라고 함.(Software Development Kit). 소프트웨어 개발에 도움을 주는 다른 소프트웨어.
*과거에는 XML 형식이 널리 쓰임.
요즘에는 JSON 방식이 쓰임.
{
키1 : 값1,
키2 : 값2,
키3 : ['a', 'b', 'c']
}
JSON은 파일이 되고 그 안에 데이터들이 JSON의 형식으로 들어감.
*GitBook : API 문서 작성을 도와주는 서비스.
*네이버, 카카오 등 서버가 제공하는 다양한 기능을 다른 사람들도 쓸 수 있게 오픈 해 둠. => 오픈 API
*웹 / 애플리케이션
애플리케이션 : 설치해서 사용하는 모든 프로그램. 윈도우에서는 응용 프로그램이라고 부름.(운영체제 위에 올라가는 프로그램. 설치해야 하는 프로그램. 응용프로그램, 애플리케이션, 어플, 앱)
*애플리케이션 버전
프로그램 v1.0.0
오른쪽 끝자리는 작은 변화.
중간 숫자는 하위 버전과 호환이 가능하지만 큰 변화를 의미.
왼쪽은 하위버전과 호환 안되는 큰 변화.
*iOS 개발자가 앱스토어에 올릴 때 버그 있으면 '리젝' 당함. iOS는 깐깐.
안드로이드랑은 반대. 안드로이드는 느슨.
*웹
1. html / css / js
2. 브라우저
3. 반응형 웹
4. 하이브리드 애플리케이션
*html
프로그래밍 언어 x.
*html+css = 퍼블리싱, 마크업
*추천검색어(실시간검색 시)
검색창에 a를 치면 js가 감지 -> a로 시작하는 실시간 검색어 목록을 조회하는 API요청을 네이버 서버로 보냄 -> 네이버 서버는 json형식으로 응답 -> js는 json을 열어서 html로 바꿈.
*웹의 가장 큰 특징
1. html, css, js 완성본은 서버에 있음. 내 컴에 있는 html파일을 바꾼다고 바뀌지 않음. (애플리케이션과의 가장 큰 차이점)
2. 수정 용이 (업데이트 불필요)
3. 웹은 항상 파일을 새로 다운받아야함. 네트워크가 느리면 다운 속도도 느려져서 로딩 느려짐.
*브라우저 버전의 파편화
브라우저 애플리케이션을 모두 다르게 사용
( A : 크롬 / B : 사파리 / C : 익스플로러 3.0 / D : 익스플로러 4.0)
파편화를 잡는다.
=> 점유율 높은 브라우저 버전들만 충족시키기.
caniuse.com에서 버전별로 사용가능 기술 확인 가능.
*반응형 웹
모바일 버전으로 html과 css 수정하기 힘들어서 등장.
브라우저의 가로 넓이에 반응하여 구성요소가 변함.
하나의 넓이로 작업하는 것보다 코드 많이 사용. 시간 많이 들고 비용도 많이 들음.
*안드로이드 개발 언어 : 자바, 코틀린
*하이브리드 애플리케이션
요즘은 운영체제 안에 자체 브라우저가 내장되어있음.
덕분에 새로운 방식의 애플리케이션 개발 가능.
애플리케이션의 특정부분에 브라우저를 올리는 방식.
네이티브+브라우저 => 하이브리드 애플리케이션
*하이브리드
수정이 쉬움. 브라우저의 html만 바꾸면 바로 수정됨. 심사나 설치를 따로 안해도 됨. 하지만 네트워크가 필요함.
*네이티브
iOS, 안드로이드 심사 필요. 직접 업데이트도 해야함.
*데이터의 무결성 : 데이터는 단 1%의 결점도 허용x.
*관계형 데이터베이스 : RDB(Relational DataBase)
하나의 큰 RDB(table들이 모인) : 스키마 / 데이터베이스
*관계형 데이터베이스 관리 시스템(RDBMS) : MS SQL, Oracle DB, MySQL, MariaDB
*DBMS(데이터베이스 관리 시스템)은 소프트웨어.
=>CPU와 메모리가 있으면 DBMS 실행 가능.
*서버에만 DB 사용하는 거 아님. 클라에서도 사용.
ex)알람.
알람데이터는 DB에서 관리하는데 클라에 저장됨.
알람은 네트워크가 필요치 않고 서버와 통신할 필요가 없음. 그래서 클라에 데이터가 있음. 그리고 각 클라마다 데이터가 달라짐.
에버노트 같은 경우에는 오프라인에서도 노트기능 사용 가능. 기기가 바껴도 같은 내용 확인 가능.
=> 서버에도, 클라에도 DB 사용. 클라의 데이터와 서버의 데이터 동기화.
*로컬 = 내부 DB = 네이티브 = 클라
서버 = API요청 = DB = 백
*클라에 이미지가 저장되어 있을 경우 -> 이미지를 바꾸기 위해 앱을 업데이트 해야함.
서버에 이미지가 저장되어 있을 경우 -> 이미지를 바꾸려면 서버만 바꾸면 됨. but 이미지가 크면 네트워크가 느릴 때 속도 느려짐.
*프레임워크
Appkit는 맥 OS에 올라가는 앱을 개발하기 위한 프레임워크
UIkit는 iOS/ tvOS
애플은 기기별로 프레임워크가 존재. 통틀어서 코코아 프레임워크라고 부름.
프레임워크를 사용하면 앱을 더 쉽고 빠르게 만들 수 있음.
웹 프레임워크, 라이브러리
js의 프레임워크, 라이브러리 : ANGularJS, Vuejs, React
자바 : spring(서버를 더 쉽고 빠르게 개발 가능)
python : Django
Ruby : Rails
*라이브러리
다른 사람이 만들어 놓은 코드 이용한다는 건 프레임워크와 같음.
프레임워크의 하위개념.
프레임워크 = 각종 라이브러리 + 코드들
(아직 이해가 잘 안감.)
*한 프로젝트에서는 한 프레임워크