개발 일지/CS 44

[Web] 웹 애플리케이션

웹 애플리케이션(web application)은 인터넷을 통해 웹 브라우저에서 이용할 수 있는 응용 프로그램이다. 웹사이트(website)와 헷갈릴 수 있지만, 웹 개발 영역에서 웹사이트는 일반적으로 정적 페이지들의 집합체를 의미한다. 만약 웹사이트가 정적 페이지들 뿐 아니라, 동적 페이지를 포함하게 된다면 웹 애플리케이션이 된다. 사실 오늘날 만들어지는 대부분의 웹사이트는 웹 애플리케이션이라고 할 수 있다. 유저가 웹브라우저에서 요청을 하면 애플리케이션의 다양한 요소들이 상호작용을 한다. 수많은 유저들의 다양한 요청과 입력에 대해 알맞은 응답을 하기 위해 웹 애플리케이션 서버는 많은 부분 요소와 외부 애플리케이션 또한 공유하여 설계된다. 웹 애플리케이션은 인터넷에 공개되는 순간부터 글로벌 네트워크의 막..

개발 일지/CS 2023.01.26

[Web] 클라이언트-서버 아키텍처

웹에서 제공되는 서비스는 주로 서비스를 이용하는 클라이언트와 서비스를 제공하는 서버로 나뉜다. 즉 리소스가 존재하는 곳과 리소스를 사용하는 앱을 분리시킨 것을 클라이언트-서버 아키텍처(2티어 아키텍처)라고 부른다. 리소스를 사용하는 앱이 '클라이언트', 리소스를 제공(serve)하는 곳이 '서버'이다. 클라이언트는 사용자가 직접 이용하기 때문에 사용 편의성이나 휴대성 등을 고려하여 개발이 이루어지며, 서버는 사용자와 직접적 접점이 없기 때문에 편의성보다는 기능에 중점을 두고 개발이 이루어진다. 클라이언트와 서버는 요청과 응답을 주고 받는 관게이며, 요청을 해야 응답이 오고 요청없이 응답이 오는 경우는 없다. 일반적으로 서버는 리소스를 전달해주는 역할만을 담당한다. 그리고 리소스를 저장하는 공간을 '데이터..

개발 일지/CS 2023.01.26

[Network] URL

URL(Uniform Resource Locator)은 웹에 게시된 어떤 자원을 찾기 위한 브라우저에서 사용되는 메커니즘이다. 쉽게 말해 웹 페이지를 찾기 위한 주소도 포함되어 있으며, 주소뿐만 아니라 컴퓨터 네트워크상의 자원을 모두 나타낼 수 있다. 브라우저의 주소창에 입력한 URL은 서버가 제공되는 환경에 존재하는 파일의 위치를 나타낸다. URL은 scheme, hosts, url-path로 구분할 수 있다. scheme : 통신 방식(프로토콜) 결정 hosts : 웹 서버의 이름이나 도메인, IP를 사용하며 주소를 나타냄 url-path : 웹 서버에서 지정한 루트 디렉토리로부터 시작해 웹 페이지, 이미지, 동영상 등이 위치한 경로와 파일명을 나타냄 URI(Uniform Resource Identi..

개발 일지/CS 2023.01.26

[Network] TCP / UDP

TCP와 UDP는 TCP/IP 4계층 모델을 기준으로 IP 프로토콜의 계층인 인터넷 계층의 상위에서 동작한다. 전송계층에 속하는 TCP와 UDP는 2계층에서 동작하는 IP와 4계층에서 동작하는 애플리케이션(http 등)을 중개하는 역할을 한다. 전송계층은 송수신자를 연결하는 통신서비스를 제공하는 계층이며, 쉽게 말해 데이터의 전달을 담당한다. 여기서 데이터를 보내기 위해 사용하는 프로토콜이 바로 TCP와 UDP이다. TCP와 UDP는 중개하는 역할을 하는 점에서는 동일하지만 서로 다른 특징을 가지고 있다. TCP(Transmission Control Protocol) TCP는 인터넷상에서 데이터를 메시지의 형태로 보내기 위해 IP와 함께 사용하는 프로토콜이며, 다음과 같은 특징을 가지고 있다. 연결 지향..

개발 일지/CS 2023.01.26

[Network] 인터넷 프로토콜(Internet Protocol, IP)

IP란, 인터넷이 통하는 네트워크에서 어떤 정보를 수신하고 송신하는 통신에 대한 규약을 의미한다. 컴퓨터는 사용하는 운영체제도 다르고 프로그램마다 구현된 언어가 다르기 때문에 멀리 떨어진 컴퓨터들끼리 서로 소통하기 위해서는 규약이 필요하다. 이러한 공통된 약속을 프로토콜이라 하며, TCP/IP 프로토콜이 주로 사용하는 약속이다. 주소(Address) IP 주소 IP 주소란, 네트워크 환경에서 컴퓨터끼리 통신하기 위해 각 컴퓨터에 부여된 네트워크 상 주소체계이다. LAN 네트워크 내부에서 사용되는 것은 Private IP 주소이고 Public IP 주소는 인터넷에서 사용된다. 인터넷에 연결된 모든 PC는 IP 주소체계를 따라서 네 덩이의 숫자로 구분되는데, 이렇게 구분된 IP 주소체계를 IPv4(Inter..

개발 일지/CS 2023.01.26

[자료구조] 힙 트리(Heap Tree)

heap tree는 배열의 원소를 정렬하기 위한 자료구조이다. 일반적인 트리 구조와는 달리 우선순위에 따라서 빠르게 자료를 검색할 수 있다. 특징 heap tree는 최대 힙과 최소 힙으로 구현한다. 최대 힙은 부모 노드의 키 값이 자식 노드의 키 값보다 크거나 같은 완전 이진 트리이다. 반대로 최소 힙은 부모 노드의 키 값이 자식 노드의 키 값보다 작거나 같은 완전 이진 트리이다. 완전 이진 트리로 구성되어 있다. 이는 삽입 / 삭제 시 성능을 위해서이다. 중복된 값을 저장할 수 있다. 단순히 최댓값 / 최솟값을 찾아내기 위한 구조이기 때문이다. 구현 heap tree는 완전 이진 트리로 구현되어 배열로 표현할 수 있다. 루트 노드부터 높이 순서대로 배열에 모두 정렬이 가능하다. 일반적으로 배열의 0번..

개발 일지/CS 2023.01.21

[자료구조] 해시 테이블(Hash Table)

해시 테이블(Hash Table)이란, 검색하고자 하는 키(key) 값을 입력받아서 해시 함수(hash function)를 통해 얻은 해시를 배열의 색인(index)으로 환산해서 데이터(value)에 접근하는 자료구조이다. 즉, 필요한 데이터의 키를 해시함수를 사용해 별도의 해시로 바꾸고 해당하는 데이터를 함께 저장하는 자료구조이다. 해시 테이블은 주소록(Address Book), 블록체인(Blockchain), 크롬, V8 등에 사용된다. 구조 해시 테이블은 키, 해시 함수, 해시, 데이터로 이루어져 있다. 키(key) : 고유한 값으로 해시 함수의 입력값이 된다. 해시 함수(hash function) : 키를 해시로 바꿔주는 역할을 한다. 해시(hash) : 해시 함수에 의해 얻어지는 값이다. 데이터..

개발 일지/CS 2023.01.21

[자료구조] 연결 리스트(Linked List)

연결 리스트(linked list) 자료구조는 선형으로 그룹화된 데이터의 집합으로 데이터와 다음 데이터의 주소를 포함하고 있는 하나의 노드가 선형으로 연결된 자료구조이다. 예를 들어, 보물 찾기를 한다면 힌트 메모지 하나하나를 노드로 만들고 첫 번째 힌트 메모지에는 다음 메모지가 어디 있는지를 표시해 놓는 방식이다. 특징 배열에 비해 노드의 추가와 삭제가 용이하다. 노드가 메모리에 흩어져 있어서 특정 노드로 쉽게 접근할 수 없다. 즉, 노드의 값을 찾으려면 전체를 순회해야 할 수도 있다. 배열은 데이터에 접근하는데 O(1)의 시간 복잡도를 가지지만, 연결 리스트는 최악의 경우에 O(n)의 시간 복잡도를 갖는다. 종류 단순 연결 리스트(Singly Linked List) : 다음 노드에 대한 참조만을 갖는..

개발 일지/CS 2023.01.20

[알고리즘] 이진 탐색 알고리즘(Binary Search Algorithm)

이진 탐색 알고리즘은 검색 범위를 줄여 나가면서 원하는 데이터를 검색할 때 사용하는 알고리즘이다. 오름차순으로 정렬된 리스트를 반으로 나누고 찾는 원소가 중간에 있는지 확인하고, 없으면 위쪽 또는 아래쪽에 있는지를 판단하여 다시 같은 방식으로 원소를 찾는 방법이다. 게임 'up & down'을 예로 들면, 1부터 100까지의 수 중에서 41이라는 숫자를 찾는다고 한다. 먼저 중간 값인 50이나 51중에서 찾으려는 41이 두 값보다 작기 때문에 1부터 49를 새로운 범위로 설정해서 찾는다. 다시 절반인 25를 기준으로 찾으려는 41이 크기 때문에 26부터 49까지 새로운 범위로 설정해서 찾는다. 이렇게 데이터가 정렬된 상태에서 절반씩 범위를 나눠 분할 정복기법으로 특정한 값을 찾아내는 방법을 이진 탐색 알..

개발 일지/CS 2023.01.19

[알고리즘] 완전 탐색 알고리즘(Brute-Force Algorithm, BFA)

컴퓨터 과학에서 Brute Force는 시행착오 방법론을 말한다. 컴퓨터의 빠른 계산 능력을 이용해 가능한 경우의 수를 모두 나열하면서 답을 찾는 방법이다. 이 방법은 직관적이어서 이해하기 쉬우며 문제의 정확한 답을 얻어낼 수 있는 가장 확실하고 기초적인 방법이다. 예를 들어, 4개의 숫자로 구성된 자물쇠를 푼다고 하면 0000부터 9999까지 모두 시도해 보면 해결할 수 있다. 이렇게 하나하나 대입하여 시도하는 방식 완전 탐색 알고리즘이라고 한다. 완전 탐색 알고리즘은 공간 복잡도와 시간 복잡도의 요소를 고려하지 않고 솔루션을 찾으려고 하는 방법이기 때문에 최적의 솔루션은 아닐 수 있다. 사용 완전 탐색 알고리즘은 크게 다음과 같은 두 가지 경우에 사용한다. 프로세스 속도를 높이는 데 사용할 수 있는 ..

개발 일지/CS 2023.01.19