자바/이론 공부

"비전공자를 위한 이해할 수 있는 IT 지식" 을 읽고 내용 정리

2가 2023. 2. 8. 00:18

이 게시글은 내가 "비전공자를 위한 이해할 수 있는 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

 

 

*라이브러리

다른 사람이 만들어 놓은 코드 이용한다는 건 프레임워크와 같음.

프레임워크의 하위개념.

프레임워크 = 각종 라이브러리 + 코드들

(아직 이해가 잘 안감.)

 

 

*한 프로젝트에서는 한 프레임워크