Memory

어떤 일을 하기 위해서 데이터를 어딘가에 임시 혹은 영구적으로 보관할 수 있는 공간이 필요하다.

 

이런 공간을 메모리라고 한다.

 

 

주 기억장치와 보조장치가 있으며 통상 다음과 같이 정의한다.

 

주 기억장치 : RAM이 있다.

ㄴ 램 16gb 이런데 쓰는 그 램 말이다.

 

보조 기억장치 : HDD, SDD

 

 

주 기억장치(a Main Memory unit)는 요리 탁자에 비유할 수 있으며

 

보조 기억장치(Secondary memory unit)는 냉장고라 볼 수 있다.

 

 

그러니까 컴퓨터가 일을 수행하는 과정을 요약하면 다음과 같다.

 

CPU는 Cache memory 연산을 위해 스탠바이 상태다.

 

이 상태서 유저가 어떤 커맨드를 입력시 Secondary memory unit 에서

 

프로그램과 데이터를 가져오는데 이 것을 빠른 연산에 도움이 되는 Main memory에

 

올려놓고 작업을 하는 것이다.

 

 

RAM : Random access Memory 로 메인 메모리에 해당하며 RAM이란 말은 작동원리에 근거하여 지은 용어이다.

ㄴ 임의접근(Random Access)은 메모리 어느 위치에 있는 데이터든지 같은 속도로 읽고 쓸 수 있다는 뜻이다.

 

즉, 속도로 비교하자면 Cache > Main memory > Secondary memory 순이라 볼 수 있다.

 

RAM은 휘발성 메모리이며 HDD, SDD는 비휘발성 메모리이다.

 

 

 

입출력 장치

I/O(Input / Output)으로 컴퓨터와 외부를 연결해주는 소통 창구를 담당한다.

 

Ex> 키보드, 마우스 등

 

 

컴퓨터가 받으면 입력장치, 내보내면 출력장치라 이해하면 쉽다.

 

CPU -> Main Memory -> Secondary Memory -> CPU -> Main Memory -> I/O

 

이런 식으로 컴퓨터를 이용하고 있는 한 계속 이런 형태로 일을 한다고 보면 된다.

 

 

CPU

컴퓨터에 저장된 프로그램을 불러와서 기계어로 된 명령문을 해석하고 실행한다.

 

 

쉽게 말해

 

다른 컴퓨터의 구성 요소와 정보를 주고 받으면서 컴퓨터에서 이뤄지는 모든 일을 처리한다.

 

CPU에서 작업을 수행한 뒤 모니터, 스피커 등 I/O를 통해 결과물을 출력한다.

 

CPU 안에는 크게 CPU Core + memory(cache, 연산만을 위한 메모리 ex>32kb, 64kb) 로 2가지로 이뤄진다.

 

 

 

Core

멀티코어란 하나 이상의 로봇이 들어가 있다고 보면 된다.

 

예전엔 하나의 코어의 속도를 높여 발전을 추구했지만 현실적으로 발열문제 등 물리적 문제에 난관이 발생함.

 

그래서 여 러개의 코어를 탑재하는 방식으로 진화함.

 

 

멀티코어 환경을 잘 이용하려면 프로그램도 이를 고려하여 설계하여야 함.

 

싱글코드만으로 이뤄진 코드는 그저 절차적 수행에 따른 프로그램의 실행이 일어나기 때문에

 

아무리 멀티 코어라도 활용도 측면에서 떨어질 수 밖에 없음.

 

 

 

Thred

CPU의 스레드와 S/w의 스레드가 용어가 같다.

 

그러므로 차이를 구분할 줄 알아야한다.

 

CPU에서 스레드 : 하나의 코어로 2개의 코어처럼 일하는 것을 1코어 2스레드라고 칭합니다.

ㄴ 2개의 코어에서 스레드가 있다면? 2코어 4스레드라고 말함.

 

 

 

Clock

Core의 속도를 얘기한다.

ㄴ 2.5Ghz 등 CPU의 속도를 얘기할 때 주로 사용한다.

 

컴퓨터의 속도는 클럭과 코어 개수, 그리고 스레드의 갯수로 결정된다.

 

 

SQL

기본적으로 Server는 DBMS에 연결된 프로그램으로부터 각종 요청을 받는다.

 

이 요청 받은 데이터를 처리해야 하기 때문에 그 요청에 포함할 수 있는 텍스트를 사용해야 한다.

 

이 말이 무슨 말인고 하면

 

RDB 자체에는 텍스트로 작성된 명령어를 데이터를 처리하기 위한 SQL(구조화 질의 언어, Structured Query Language)을 제공한다 볼 수 있다.

 

SELECT Name, Birthday FROM Students WHERE Sex = '남';

ㄴ 학생(Students) 테이블에서 남학생들의 생일을 조회한다면 SQL로 이런 식으로 DBMS에 명령을 내리면 된다.

 Students 테이블(테이블, 일종의 저장소를 총칭한다.)에                                            'TABLE 영역'

성별이 '남' 들의                                                                                                              '행 영역'

'Name' 'Birthday' 열(테이블의 속성 row data)을 선택해서 조회하라는 의미로 실행하면 다음과 같은 결과가 나온다.

 '열 영역'

 

ㄴ 테이블은 RDB에서 데이터를 저장하기 위한 저장소란 의미다.

ㄴ 행은 가로줄(구분)을 의미하며 열은 세로줄(데이터)을 의미한다.

ㄴ SQL 엔 Primary key라는 고유의 번호를 설계하게끔 되어 있다.

Primary key는 아래 표엔 나와있지 않지만 예를 들어 1번, 2번, 3번 이런 식으로 학생 고유의 번호를 부여하여

테이블 설계 원칙 중 반드시 해야하는 기본 키 설정을 해줘야 한다.(기본 키 설정 = 데이터의 중복 방지, 유일성 획득)

Name Birthday
박준 4/25
강산에 5/22

ㄴ 요청에 의해 불러와진 정보

 

 

학생번호(Primary key) Sex(Column) Name(Column) Birthday(Column)
1번 남(row) 박준(row) 4/25(row)
2번 남(row) 강산에(row) 5/22(row)

ㄴ 위 표를 토대로 작성한 Student table 의 예

ㄴ row는 열로 Row data를 의미한다.

ㄴ Primary key는 구분을 위한 기본 키 설정이다.

ㄴ 'Sex', 'Name', 'Birthday'는 각각 Column인 행의 영역이다.('학생번호' 역시 Column에 해당하며 Primary key로서 역할을 할 뿐이다.)

 

 

INSERT INTO Teacher (Name, Class) VALUES('조짜장', 1);

ㄴ Teacher 테이블에 1반 담임 '조짜장'을 추가한다.

 

UPDATE Students SET Class = 1 WHERE Name = '김폭';

ㄴ Students 테이블에 이름이 '김폭'인 학생을 이동한다.

 

DELETE FROM Students WHERE Name = '잉위';

ㄴ Students 테이블에 이름이 '잉위'인 학생을 삭제한다.

 

위의 예시처럼 SQL 구문으로 필요한 모든 데이터를 RDBMS에 요청할 수 있다.

 

 

RDB 별 세부 문법과 기능은 다르지만 거의 유사한 형태를 가지고 있다.

 

공통 구문을 가지고 있는 것이 많기 때문에 공부시 1개만 잡고 해도 효과가 있다고 볼 수 있다.

 

 

 

NoSQL

관계형이 아닌 DB는 SQL을 사용하지 않는다는 의미로 NoSQL이라고 한다.

 

일반적으론 RDB가 가장 효율적인 방식(강력한 기능, 엄격한 제약 => 불필요한 비용으로 작용시)이나

 

서비스나 프로그램에 따라서 RDB가 적합치 않은 경우가 있다. 이 때 NoSQL을 사용한다.

 

 

1. 문서 데이터베이스

ㄴ RDB 처럼 행과 열을 가진게 아니라 정말 말그대로 문서 형태로 저장한다.

ㄴ XML, JSON 비슷하게 저장.

ㄴ 일관성 있는 데이터로는 적합치 않지만 유연성을 부여할 데이터엔 괜찮은 방식이다.

Ex> MongoDB, CouchDB 등

 

 

 

2. 키-값 DB

키와 값의 쌍만 저장하는 DB이다.

 

실행속도가 빠르며 용량 부족시 다른 서버와의 분담이 좋은 수평확장성을 갖고 있다.

 

 

세션 아이디(키)와 사용자 번호(값)을 메모리에 저장하는 용도로 사용된다.

 

Ex> 레디스, 아마존 다이나모 DB, 맵캐시드 등

 

세션ID(Key) 사용자 번호(Value)
p2342sF2C 48423
jfdjfefn2234c 156

 

이런 식이다.

 

 

 

3. 그래프 DB

가족 관계도 처럼 여러 노드(node)와 그들 간의 관계를 뜻하는 엣지(edge)로 구성된 자료구조를 말함.

 

Data에 각 노드의 정보인 프로퍼티(Property)(ex> is Friend of, Likes, Serves etc)를 더해 저장한다.

 

페북 친추 같은 관계를 구현하는 용도로 사용된다.

 

Ex> Neo4j, janusGraph 등

 

출처1 neo4j

출처1 : https://www.bmc.com/blogs/neo4j-graph-database/

 

 

DBMS

데이터(Data) + 베이스(Base) = 데이터 기지라는 뜻으로 해석될 수 있다.

 

하나의 데이터베이스엔 여러가지 프로그램들이 요청을 할 수 있으므로 ATM기와 비슷하다고 할 수 있다.

ㄴ 따라서 데이터베이스는 특정 프로그램에 종속되지 않는 독립된 소프트웨어로 구축한다.

 

 

DBMS는 엑셀과 비슷하다.

 

데이터가 들어가는 컬럼(Column)과 한명 한명의 데이터를 구분 짓는 행(Row)으로 이뤄져 있으며

 

일종의 표 형태로 저장이 된다.

 

엑셀과 마찬가지로 특정 데이터를 저장, 조회, 삭제, 수정 할 수 있으며

 

데이터의 중복이나 잘 못된 형식으로 저장되는 것을 막는 기능이 있다.(일종의 데이터의 무결성 보장)

 

더불어 외부의 접근을 통제하며 사용자마다 권한을 지정하여 보안을 유지할 수 있다.(접근의 권한 부여)

(허용된 사용자에 한해서 데이터를 살펴보고 조작할 수 있도록 다양한 인터페이스 제공함.,

Ex> 로그인하고 자기 정보 보는 것 같은 예.)

 

엑셀과 다른 점이 있다면 DBMS는 많은 사람에게 제공하는 소프트웨어이므로 훨씬 더 복잡하고 다양하게 데이터를 저장할 수 있다는 점이다.

 

 

 

관계형 데이터베이스

RDBMS(Relational Database Management System)이다.

 

엑셀과 비슷한 형식으로 데이터를 저장하며, 각 열에 텍스트를 넣을지, 숫자 혹은 날짜를 넣을지와 같은

 

형식을 미리 설정하기 때문에 잘 못된 데이터가 입력되는 것을 방지한다.

 

미리 형식을 지정하기 때문에 처리속도가 굉장히 빠르며 개발자가 초기 시스템 구성에도 용이한 난이도를 보여준다.

 

전세계 점유율 1~4위 모두 RDBMS 기반의 저장방식을 사용한다.

 

 

일반 소기업 및 개인이 이용하기에 괜찮은 DBMS를 몇 가지 적어본다.

 

MySQL

ㄴ Oracle 의 DBMS와 1, 2위를 다투는 DBMS 소프트웨어이다. 소스코드가 공개된 오픈소스로

용도에 따라 무료로 이용할 수 있다. 그러나 Oracle에 인수되었으므로 언제 유료화가 될 지 모른다는 이슈가 존재한다.

 

MariaDB

ㄴ Oracle에 MySQL이 인수되자 주축 개발자가 축이 되어 퇴사 후 만든 DBMS이다.

MySQL과 인터페이스가 매우 유사하며 MySQL 5.5 버전에서 분리되어 독자적으로 발전 중이다.

 

PostgerSQL

ㄴ ODD 가 가능한 DBMS다.(객체지향적)

MySQL과 마찬가지로 무료로 사용 가능하다.

 

 

 

요청 메서드[클라이언트단]

말그대로 요청하는 메서드이다.[클라가 서버에게 도장처럼 찍어서 물어보는 용도라 생각하면 이해가 쉽다.]

 

클라이언트단(요청 메서드 보냄) -> 서버단(응답 코드 보냄)

 

으로 요청 메서드를 보내게 되며 이 요청 메서드는 다음 6가지로 분류되곤 한다.

 

 

GET

ㄴ 서버에 HTML, 이미지, 기타 각종 데이터를 요청한다.

API 에서도 서버로부터 데이터를 가져오기 위해 사용한다.

 

POST

ㄴ 서버에 새로 저장될 자료를 보냄.

새 게시물 등이 예이다.

 

PUT

ㄴ 특정데이터 전체를 새로 저장한다. 게시물의 수정을 의미.

 

PATCH

ㄴ 특정데이터 일부를 수정한다. 게시물의 조회수나 좋아요 수를 올릴 때 등 사용

 

DELETE

ㄴ 게시물 등 특정데이터를 삭제한다.

 

OPTIONS

 해당 URL 어떤 메서드를 허용하는지 물어보기 위해 사용한다.

 

 

 

응답코드[서버단]

서버의 응답에는 세 가지 숫자로 응답 코드가 찍힌다.

 

1XX : 요청을 성공적으로 받음., 서버가 해당 작업을 진행 중.

 

2XX : 요청을 성공적으로 받음., 반환 요청이 이뤄짐.

ㄴ 200 : 요청이 성공적으로 처리.

ㄴ 204 : 성공적으로 처리되었으나 보낼 내용은 없음.

ㄴ 206 : 요청에서 지정한 대로 일부 콘텐츠만 보냄.\

 

3XX : 요청을 수행하기 위해선 해당 요청을 다른 주소로 보내는 리디렉션(Redirection) 등 추가 조치가 필요함.

ㄴ 자료의 위치가 변경되어 새 URL로 자동 이동 시켜줄 때 사용한다.

 

4XX : 클라 요청에 문제가 있어 수행할 수 없는 상태.

ㄴ 401 : Unauthorized = 로그인이 필요한 요청이나 로그인 X.

ㄴ 403 : Forbidden = 로그인 되어 있으나 요청을 보낼 권한이 X.

ㄴ 404 : Not found = 요청에 해당하는 데이터가 없거나 URL이 잘 못 되었을 때.

 

5XX : 요청은 문제 없음, 서버에 이상으로 응답할 수 없는 경우.

ㄴ 500 : 서버 내부에 오류 발생.

ㄴ 502 : 서버 과부하 혹은 기타 네트워크 문제로 통신 X.

 

 

 

DNS에서 네이버IP 주소를 찾는 과정

IP주소를 요청할 경우 아래의 그림과 같이

 

DNS 서버의 종류를 계층화 하여 단계적(Step by step)으로 처리한다.

 

by 혼공얄코

 

로컬DNS서버란?

ㄴ SKT나 KT 등 기업이 운영하는 서버로 인터넷 사용자가 가장 먼저 접근하는 DNS 서버를 말한다.

ㄴ 지역마다 차단하는 사이트 여부 등이 다르므로 우회하여 다른 지역으로 바꿀 수 있다.

 

 

HTTP

인터넷 통신을 하기 위한 일종의 규약이다.

 

https://www.tistory.com

통신규약 https

호스트명 www

도메인 tistory.com

 

WWW는 월드와이드웹(World wide web)의 줄임말로서 W3라고도 불린다.

 

기존엔 메뉴방식으로 진행되었다고 하나 WWW는 하이퍼텍스트를 지원하기 때문에 편리성이 높아졌다.

 

※하이퍼텍스트 : 한 문서에서 다른 문서로 즉시 이동할 수 있는 형식의 연결된 텍스트

 

또한 URL형태의 주소로 텍스트, 그림 등 다양한 파일을 문서화 하여 보여준다.

 

HTTP는 클라이언트의 요청에 대한 서버의 응답으로 구성된 방식이다.

 

HTTP가 서버에 요청을 할 때 무전과 비슷한 원리이다.

ㄴ 이런 상태를 스테이트리스(Stateless)라 부르며 개별적인 상태를 뜻한다.

ㄴ 반대로 통화 같이 바로 상대방을 알 수 있는 상태는 스테이트풀(Stateful)이라 한다.

 

요청을 보내면 응답을 하는 형식인데 이 과정에서 서버는 클라이언트가 같은 클라이언트인지 구분할 수 있는 방법이 없다.

 

 

 

HTTPS

HTTP의 단점은 요청 및 응답 간 구분을 할 수 없다는 점과

 

또 다른 문제는 요청과 응답하는 과정 중 보안이 없다는 점이다.

 

탈취자가 마음만 먹으면 자료를 들여다 보는 게 가능하기 때문에 HTTP는 최근에 들어선 잘 안쓰게 되었다.

 

 

이러한 보안 이슈에 대응하기 위해 나온 프로토콜이 HTTPS 이다.

(S는 Secure의 S입니다.)

 

★ CA라 불리는 기관에서 유료 혹은 무료로 인증서를 받아서 서버에 발급 받은 후

ㄴ CA에서 받은 인증서는 만료기한이 있으므로 기한이 도래하면 재발급을 받아야한다.

 

접속하는 클라이언트에게 인증서 전송 후 브라우저 단에서 인증서를 검사 후 

 

이 둘간 암호화 체계로 통신을 하게 된다.

 

이 CA를 웹사이트에 적용하면 서버는 클라이언트가 접속할 때 먼저 인증서를 준다.

 

브라우저에는 신뢰받는 CA 목록과 그들(CA업체)이 발급한 인증서를 판독할 수 있는 장치가 있다.

 

이 후 인증서가 유효하다면 https:// 앞에 자물쇠가 붙으면서 페이지가 열린다.

 

 

또 다른 https의 장점으로는 https 는 검색엔진 최적화(SEO)를 통해 

 

 

Https라고 하여서 반드시 검증 받은 곳은 아니다.

ㄴ 중요한 사이트라면 인증서 발급정보를 확인하는게 중요하다.

 

IP주소

각 기기를 식별할 수 있는 특수한 번호가 IP주소이다.

 

IP는 인터넷 상에서 데이터를 주고 받기 위한 일종의 통신 규약을 이르는 단어이며

 

IP주소는 이 통신을 위해 사용되는 식별번호 이다.

 

 

IP주소는 기기와 연결된 네트워크 끝 단 주소로 사용하고 있는 장소가 바뀌면

 

이 또한 바뀌는 특성을 가지고 있다.

ㄴ Ex> 노트북으로 집에서 접속한 IP주소와 카페에서 접속한 IP주소는 다르다.

 

 

255.255.255.255 로 구성되는 현재의 IP주소는 IPv4 라는 방식이다.

 

255의 4마디이므로 2의 32제곱으로 구성될 수 있는 경우의 수는 약 42억개이다.

 

이는 현재 고갈 상태에 이르렀으므로

 

 

1234:9ABC : 1234:9ABC : 1234:9ABC : 1234:9ABC

 

이런 식으로 구성되는 IPv6 형식으로 바뀌고 있다.

 

기존엔 2의 7제곱의 4마디 곱이었다면 현재 IPv6는 8Bit(1byte) 구성성분을

 

2진수가 아닌 16진수로 바꾸었으므로 그 최종 경우의 수는 무한대에 가깝게 된다.

 

 

공인IP주소

ㄴ 주로 기업에서 쓴다. 바뀌면 안되는 곳에 사용하며 비싸다.

ㄴ 외부에 공개된 주소로 검색엔진에서 IP를 검색하여 들어올 수 있다.

ㄴ 주로 웹사이트에 사용.

 

사설IP주소

ㄴ 회사의 경우 1개의 공인IP를 여러 개로 나눠써야 하기 때문에 사용한다.(Ex> 공유기 사용의 경우)

이는 각각을 구분할 수 있는 주소를 할당하게되는데 이 주소들을 로컬 IP, 가상 IP 라 한다.

 

고정IP주소

ㄴ 변경되지 않는 IP주소를 의미한다.

ㄴ 기관이나 웹사이트의 경우엔 IPv4라도 바뀌면 안되므로 이러한 형식을 사용한다.

ㄴ 일반적인 IPv4의 경우엔 일정 주기마다 IP를 회수해서 필요한 곳에 다시 나눠주는 전략을 취한다고 한다.

 

유동IP주소

ㄴ 기기에 고정IP주소를 할당하지 않고 남아있는 주소를 그때 그때 기기에 할당하는 방법이다.

ㄴ 정기적으로 바뀌기 때문에 보안에 유리하며 가격이 저렴하다.(일반적인 클라이언트에게 유리)

ㄴ 그러나 기관이나 기업은 서버를 운영할 때 바뀌면 안되므로 유동IP주소는 사용하지 않는 편이다.

 

 

 

도메인과 DNS

앞에서 고정IP주소를 치고 일반적인 웹사이트를 접속한다고 배웠다.

 

그러나 실제로 그러는가? 그렇지 않다. 우리는 주소를 치고 웹사이트에 접속한다.

 

naver.com 같은 웹사이트를 적고 해당 고유IP주소 접속하는 것인데...

 

이러한 IP주소 대신 이름처럼 사용할 수 있는 것을 도메인이라고 한다.

 

 

국내 : gavia.com, whois.co.kr 등

 

해외 : GoDaddy.com 등

 

같은 업체에서 도메인을 사고 판다.

 

 

URL : 네트워크 상에서 특정 자료가 어디있는지 나타내는 일종의 주소이다.

ㄴ Ex> 웹 페이지에서 그림에 대고 마우스 우측버튼을 누를시 해당 그림의 URL을 볼 수 있다.

ㄴ URL은 자료를 열람하거나 다운로드할 수 있다.

 

 

IP주소를 도메인으로 변경해주는 업체를 DNS라 한다.

 

Domain Name System의 약자이다.

 

 

원리는 다음과 같다.

 

① 브라우저에서 사용자가 naver.com을 치면 DNS서버로 요청이 들어간다.

② DNS 서버는 naver.com에 해당하는 고정IP를 브라우저로 반환한다.

③ 브라우저는 해당 IP주소의 웹서버에 연결한다.

 

 

 

 

AJAX에는 여러 기술이 사용된다.

 

HTML, JS, XML 그리고 DOM 까지..

 

HTML은 설계도라면 브라우저는 공장의 개념이다.

 

브라우저가 HTML의 설계를 바탕으로 만들어낸 제품Product의 개념이 DOM이다.

 

"HTML 문서가 실체화된 API" 라고 정의 가능하다고 한다.

 

 

----------------------------------------------------------------------------------------------------------------------

<HTML>

    <head>

        <title>웹 사이트</title>

    </head>

    <body>

        <div>

            <h1 id="h1">사이트 제목</h1>

            <input type="text">

            <button id= "button"><확인></button>

        </div>

    </body>

</html>

----------------------------------------------------------------------------------------------------------------------

 

다음과 같은 HTML 코드는 일종의 설계도이다.

 

 

이러한 설계도를 바탕으로 브라우저는 다음과 같은 객체를 생성한다.

 

 

Dom tree

 

 

DOM에 대한 이해를 하려면

 

DOM = HTML 문서가 실체화된 API 라고 명명한 뜻을 좀 더 자세히 알아볼 필요가 있다.

 

 

----------------------------------------------------------------------------------------------------------------------

//button과 h1 요소의 DOM 객체를 선택한다.

const button = document.getElementById('button')

const h1 = document.getElementById('h1')

//DOM 객체에 명령을 내린다.

button.addEventListener(

        'click',

        () => {h1.innerText = '클릭했습니다.'}

)

----------------------------------------------------------------------------------------------------------------------

 

 

위의 코드에서 getElementByID 로 HTML 문서 안의 Document에게 button 과 h1을 찾아오란 명령을 내릴 수 있다.

ㄴ 즉, HTML 안에 DocumentgetElementByID 가 명령을 내릴 수 있다는 의미로 API 라고 명명하는 것이다.

 

비슷한 Function으로

 

addEventListener 로 버튼 클릭시 실행할 일을 등록할 수 있으며

 

innerText 로 h1에 텍스트 내용을 보거나 변경할 수 있는 것 모두 DOM이 API이기 가능한 일이다.

 

 

※ API : S/w에서 프로그램 간 소통을 위해 만들어진 신호체계

 

 

Dom tree 출처

https://en.wikipedia.org/wiki/Document_Object_Model

 

 

 

+ Recent posts