○HTTP (HyperTest Transfer Protocol)

 ▷웹상에서 정보를 주고받을 수 있는 프로토콜 (주로 HTML 문서)

 ▷주로 TCP를 사용하며, HTTP/3부터는 UDP를 사용

 ▷http:// ~

 ▷User가 URL(Uniform Resource Locator)를 입력하면, 이에 맞는 resouce를 반환해준다.

 ▷200: 성공, 404: 실패

 

 ▶URI(Uniform Resource Identifier)

  ▷인터넷에서 일종의 주소

  ▷정보 리소스를 고유하기 식별하고, 위치를 지정해준다.

  ▷IP주소, 구체적인 resource의 위치 등으로 해석된다.

  ▶URL(Uniform Resource Locator)

   ▷특정 서버의 한 리소스에 대한 구체적인 위치

   ▷리소스가 어디에있고, 어떻게 접근가능한지

   ▷ex) https://akai-tenshi.tistory.com

 

  ▶URN(Uniform Resource Name)

   ▷리소스의 이름

   ▷URL이 바뀌어도 URN은 그대로

   ▷URL이 바뀌면 찾을 수 없다는 한계를 해결하기위해 생김, 아직 채택되지 않음.

 

 ▶MIME(Multipurpose Internet Mail Extensions)

  ▷전자 우편(e-mail)을 위한 인터넷 표준 포멧

  ▷영어가 아닌 문자, 그림, 음악, 영화 등의 이진 파일을 보낼 수 있음.

  ▷Content Type: text/plain-텍스트, image/jpeg-이미지

 

 ▶Request Type

  ▶get

   ▷요청에 필요한 데이터를 Query String을 통해 전송 (URL의 끝부분에 ?를 붙여 첨가함)

   ▷URL의 일부이므로, 특정 페이지를 링크/북마크 가능.

 

  ▶post

   ▷요청에 필요한 데이터를 HTML Body에 담아 전송.

   ▷내용이 눈에 보이지 않고, 많은 양의 데이터를 전송가능함.

 

○Multitier Allplcation Architecture

 ▷Top tier - Client

 ▷Middle tier - Business/logic/presentation logic.

 ▷Bottom tier -  Data

 

○Client-Side Scripting, Server-Side Scripting

 ▶Client-Side Scripting

  ▷유저 인증, 브라우저와 상호작용, 웹 페이지 성능 강화, 브라우저-웹 서버 간의 상호작용

  ▷browser dependency: 브라우저, 스크립팅 호스트가 스크립팅 언어를 지원해야함.

  ▷Client쪽에서 Source를 볼 수 있기 때문에, 민감한 정보를 저장해선 안됨.

 

 ▶Server-Side Scripting

  ▷서버에서 코드를 실행하고 Client에 응답을 줌.

  ▷Client-Side보다 높은 프로그래밍 능력이 필요.

 

●Array List(Vector)

 ▷Array의 개념을 확장한것으로, 연속된 object들을 저장

 ▷저장, 삽입, 삭제는 모두 index를 통해 이루어짐.

 ▷중간에 빈 인덱스가 있을 수 없음.

  ▶주요 명령

   ▷at(index): index에 있는 object 반환

   ▷set(index, object): index에 해당 object 할당.

   ▷insert(index): index에 해당 object 삽입

   ▷erase(index): index에 있는 object 제거.

  ▶보조 명령

   ▷size(): deque의 elements의 수를 반환

   ▷empty(): deque가 비어있으면 True, 아니면 False를 반환

 

○Array-based Array list

 ▷Size N의 Vector 사용, 공간 O(n)차지.

 ▷Array list의 크기를 나타내는 정수 n

 ▷at(i) = A[i], set(i, o) = A[i] = o -> O(1)

 ▷insert(i, e) -> O(n), 최대 이상일경우 마지막 원소

 ▷erase(e) -> O(n)

 

 ▶Growable Array-based Array List

  ▷배열이 다 찬 상태에서 insert할 경우, 크기가 더 큰 새로운 배열을 만들어 넣음.

  ▷T(n) : n까지 insert하는데 걸리는 시간 -> insert 한번 당 평균 시간: T(n)/n

  ▶Incremental Strategy (상수 c만큼 크기 늘림)

   ▷배열을 k = n/c번 대체

   ▷T(n) = O(n^2), 1회 평균 O(n)

 

  ▶Doubling Strategy (2배만큼 크기 늘림)

   ▷배열을 k = log_2(n)번 대체

   ▷T(n) = O(n), 1회 평균 O(1)

 

'컴퓨터 지식 > 자료구조' 카테고리의 다른 글

Iterator, Container  (0) 2020.11.06
Position, Node List  (0) 2020.11.06
Adapter  (0) 2020.10.28
Deque  (0) 2020.10.28
Quene  (0) 2020.10.13

○Assembly - Array

 ▷T A[L]: T 타입의 길이가 L인 배열 

 ▷L*sizeof(T) 바이트만큼 연속적인 공간 차지

 ▷A - indentifier: 배열의 가장 첫 원소를 가리키는 포인터

 

 ▶Accessing

  ▷A[i] = *(A+i)

  ▷주소: A + i*K (K: 요소의 바이트 크기)

  ▷%rdi = A, %rsi = i, 요소 크기 = K일때 (%rdi, %rsi, K)

 

 ▶Multidimensional Arrays (다차원 배열)

  ▷T A[R][C]: T타입의 원소가 R행, C열을 가지는 배열.

  ▷중첩(Nested)을 활용

  ▷R*C*sizeof(T) 바이트만큼 연속적인 공간 차지.

  ▷n차원 배열: n-1차원 배열을 원소로 하는 배열

 

  ▶다차원 배열 Accessing

   ▷원소의 크기가 K이고, 행의 크기가 C일때

   ▷A[i][j] = *(*(A+i)+j) = *((int*)A+i*C+j) = Mem[A+i*(C*K)+j*K]

   ▷주소: A + (i*C + j) * K

 

 ▶Multi-Level Array (배열을 가리키는 포인터의 배열)

  ▷int* A[L] = {a, b, c};

  ▷포인터 배열의 원소가 다른 배열을 가리킴.

  ▷접근: A[i][j] = *(*(A+i)+j) = Mem[ Mem[A[8*i] + K*j ]

  ▷여러 번의 메모리 접근 필요.

 

 ※포인터, 변수 비교

  ▶배열과 포인터

   ▷A1: 길이가 3인 int형 배열

   ▷A2: int를 가리키는 포인터

  ▶포인터 배열, 배열을 가리키는 포인터

   ▷A1: 길이가 3인 int형 배열

   ▷A2: 길이가 3인 int 포인터형 배열 (각각 가리키는 int는 할당되지 않음)

   ▷A3: 길이가 3인 int형 배열을 가리키는 포인터 (int 배열은 할당되지 않음)

'컴퓨터 지식 > 시스템' 카테고리의 다른 글

Assembly - Floating Point  (0) 2020.11.03
Assembly - Structure  (0) 2020.11.03
Assembly - Procedure  (0) 2020.10.28
Assembly-Control  (0) 2020.10.13
Assembly  (0) 2020.10.07

○Adapter

 ▷한 interface를 다른 interface로 바꾸는 것

 ▷기존 시스템에서 필요한 클래스로 바꾸기 위해 필요

 

 ◎Deque - Stack/Queue

'컴퓨터 지식 > 자료구조' 카테고리의 다른 글

Position, Node List  (0) 2020.11.06
Array Lists(Vector)  (0) 2020.11.02
Deque  (0) 2020.10.28
Quene  (0) 2020.10.13
Stack  (0) 2020.10.12

●Deque (Double-Ended Quenes)

 ▷Quene과 비슷한 자료 구조. 양 끝에서 삽입, 삭제를 지원함.

 ▶ADT

  ▶주요 명령

   ▷insertFront(element): deque의 앞에 새로운 element를 추가.

   ▷insertBack(element): deque의 뒤에 새로운 element 추가.

   ▷eraseFront(): deque의 가장 앞의 element를 제거. (deque가 비어있으면 error)

   ▷eraseFront(): deque의 가장 뒤의 element를 제거. (deque가 비어있으면 error)

  ▶보조 명령

   ▷front(): deque의 가장 앞의 element를 반환. (deque가 비어있으면 error)

   ▷back(): deque의 가장 뒤의 element를 반환. (deque가 비어있으면 error)

   ▷size(): deque의 elements의 수를 반환

   ▷empty(): deque가 비어있으면 True, 아니면 False를 반환

 

 

○STL Deque

 ▷vector기반

 

 

○Doubly Linked List based Deque - Linked Deque

 ▷header 뒤: front of a deque

 ▷trailer 앞: rear of a deque

 ▷Insertion - insertFront(e) / insertBack(e) Deque의 앞/뒤에 새로운 요소를 추가함

  ▷DLinkedList::addFront(e) / addBack(e): 앞/뒤에 해당 요소를 추가함

   ※DLinkedList::add: 노드 v 앞에 e를 가진 새로운 노드를 추가함.

 

 ▷Deletion - removeFront() / removeBack() : Deque의 앞/뒤의 요소를 제거함

  ▷DLinkedList::removeFront() / removeBack(): 앞/뒤에 해당 요소를 제거함.

   ※DLinkedList::remove: 노드 v를 제거함

'컴퓨터 지식 > 자료구조' 카테고리의 다른 글

Array Lists(Vector)  (0) 2020.11.02
Adapter  (0) 2020.10.28
Quene  (0) 2020.10.13
Stack  (0) 2020.10.12
알고리즘 해석  (0) 2020.10.06

+ Recent posts