프로그래밍 공부/Computer Science 15

로그인 API GET or POST?

로그인 API를 구현하기 위해 어떤 HTTP 메서드를 사용해야 하는가? 사용자가 아이디와 비밀번호를 입력 후 로그인 요청을 한다면 아이디와 비밀번호는 서버에 전달되고 서버는 Database를 확인해 사용자를 식별할 뿐이기 때문에 GET 메서드가 적절해 보이지만 GET 메서드 사용시 아이디와 비밀번호는 쿼리로 전달되야 한다.(GET 메서드는 데이터를 바디에 담을 수 없다) 하지만 GET 요청은 서버 데이터의 상태를 변경하지 않기 때문에 쿼리를 적극적으로 캐싱할 수 있어 아이디와 비밀번호와 같은 정보를 쿼리에 담아 보내게 되면 보안에 취약하다. 따라서, 보안상의 이유로 아이디와 비밀번호를 바디에 담아 보내고(바디에 담긴 데이터는 HTTS 통신에 의해 암호화 된다) 서버 데이터의 상태를 변경해 캐싱될 수 없는..

[컴퓨터 공학 기초] 운영체제, 프로세스, 스레드

운영체제 (operating system) 사용자에게 편의성 제공을 목적으로 컴퓨터 하드웨어를 관리하는 시스템 소프트웨어이다. 사용자는 응용 프로그램을 이용해 다양한 작업을 하는 것이 목적이고, 운영체제는 응용 프로그램이 하드웨어에게 일을 시킬 수 있도록 돕는다. 즉, 운영체제는 하드웨어의 시스템 자원을 관리하는 주체이다. 응용 프로그램 운영체제를 통해 컴퓨터에게 일을 시키는 것 응용 프로그램은 컴퓨터를 조작할 수 있는 권한을 처음부터 가지고 있는게 아니기 때문에 응용 프로그램이 컴퓨터에게 일을 시키기 위해서는 운영체제를 통해 컴퓨터를 조작할 수 있는 권한을 부여 받아야 한다. 따라서, 운영체제는 응용 프로그램과 소통하기 위해 인터페이스(API)를 제공한다. 응용 프로그램이 시스템 자원을 사용할 수 있도..

[컴퓨터 공학 기초] 문자열

ASCII (아스키 코드) 미국정보교환표준부호(American Standard Code for Information Interchange), 또는 줄여서 ASCII(아스키)는 영문 알파벳을 사용하는 대표적인 문자 인코딩이다. 아스키는 컴퓨터와 통신 장비를 비롯한 문자를 사용하는 많은 장치에서 사용되며, 대부분의 문자 인코딩이 아스키에 기초를 두고 있다. 아스키는 7비트 인코딩으로, 33개의 출력 불가능한 제어 문자들과 공백을 비롯한 95개의 출력 가능한 문자들로 총128개로 이루어진다. 제어 문자들은 역사적인 이유로 남아 있으며 대부분은 더 이상 사용되지 않는다. 출력 가능한 문자들은 52개의 영문 알파벳 대소문자와, 10개의 숫자, 32개의 특수 문자, 그리고 하나의 공백 문자로 이루어진다. 유니코드 ..

[인증/보안] HTTPS, Hashing, Salt, Cookie, Session

HTTPS HTTPS는 HTTP 요청을 SSL 혹은 TLS라는 알고리즘을 이용해, HTTP 통신에서 주고받는 데이터를 암호화하여 전송하는 방법이다. HTTPS - 특징 HTTPS 프로토콜은 SSL 혹은 TLS이라는 암호화 기반 인터넷 보안 프로토콜을 사용해 주고받는 데이터를 암호화하기 때문에 HTTP보다 안전한 방법이며, SSL과 TLS은 인증서가 있는 웹사이트만 실행할 수 있기 때문에 인증서를 통해 데이터 제공자의 신원을 보장 받고 도메인 비교로 공격을 방지할 수 있다. 인증서는 CA(인증 기관)에서 발행한다. 1. SSL 또는 TLS를 사용해 주고받는 데이터를 암호화한다. => SSL과 TLS는 인증서를 발급받아야만 사용가능하다. 2. 인증서는 CA라는 인증기관에서 발행하기 때문에 브라우저가 응답과 ..

[알고리즘] 병합 정렬(merge sort)

병합 정렬(merge sort) 비교 기반 정렬 알고리즘. 안정 정렬에 속하며, 분할 정복 알고리즘의 하나이다. 소개 (오름차순 정렬 기준) 1. 정렬되지 않은 리스트를 절반씩 잘라 두 부분의 리스트로 나눈다. => 분할(Divide) 2. 1번 과정을 부분 리스트의 길이가 1이하일 때 까지 반복한다. 3. 각 부분 리스트를 재귀적으로 정렬(정복, Conquer)하며 합병(결합, Merge)한다. 4. 모든 부분 리스트가 하나의 정렬된 리스트로 합병될 때 까지 3번 과정을 반복한다. 코드 const merge = (arr1, arr2) => { const mergeArr = []; const size = arr1.length + arr2.length; let left = 0; let right = 0; ..

[알고리즘] 퀵 정렬(quick sort)

퀵 정렬(quick sort) 분할 정복 알고리즘의 하나로, 평균적으로 매우 빠른 수행 속도를 자랑하는 정렬 방법이다. 다른 원소와의 비교만으로 정렬을 수행하는 비교 정렬에 속한다. 원소들 중에 같은 값이 있는 경우 같은 값들의 정렬 이후 순서가 초기 순서와 달라질 수 있어 불안정 정렬에 속한다. 소개 (오름차순 정렬 기준) 1. 리스트에서 하나의 원소를 고른다. 이 원소를 피벗이라 한다.(보통 가장 작은 인덱스의 요소) 2. 피벗 앞에는 피벗보다 작은 값의 요소를, 피벗 뒤에는 피벗보다 큰 값의 원소가 오도록 리스트를 둘로 나눈다. 이렇게 둘로 나누는 것을 분할이라고 한다. 3. 분할된 두 개의 작은 리스트는 재귀적으로 1~2번 과정을 반복한다. 재귀는 리스트의 크기가 0이나 1이 될 때까지 반복한다...

[알고리즘] 삽입 정렬(insertion sort)

삽입 정렬(insertion sort) 소개 자료 배열의 모든 요소를 앞에서부터 차례대로 이미 정렬된 부분과 비교하여, 자신의 위치를 찾아 삽입함으로써 정렬을 완성하는 알고리즘 원리 (오름차순 정렬 기준) 두 번째 자료부터 시작해 그 앞쪽(왼쪽)의 자료들과 비교하여 삽입할 위치를 지정한 후 자료를 뒤로 옮기고 지정한 자리에 자료를 삽입하여 정렬하는 알고리즘 코드 const insertionSort = function (arr) { for (let i = 1; i = 0; j--) { if (arr[j] > target) { arr[j + 1] = arr[j]; /..

[알고리즘] 버블 정렬(bubble sort)

버블 정렬(bubble sort) 소개 버블 정렬은 인접한 두 원소를 비교하며 큰 수를 뒤로 보내는 간단한 정렬 알고리즘. 시간 복잡도는 O(N2)으로 상당히 느리지만, 코드가 단순하다. 원리 (오름차순 정렬 기준) 버블 정렬은 매번 인접한 두개의 인덱스를 비교한다. 첫 번째 자료와 두 번째 자료, 두 번째 자료와 세 번째 자료 … N-1 번째 자료와 N 번째 자료를 비교한다. 매 비교시 큰 값은 뒤로 작은 값은 앞으로 교환된다. 이 과정을 1회전이라 한다. 1회전을 수행하면 가장 큰 자료가 마지막 인덱스로 이동하므로 다음 회전에서는 마지막 인덱스의 자료는 비교를 수행할 필요가 없다. 즉, N - 1 회전을 수행하면 정렬이 완료된다. 코드 // naive solution const bubbleSort =..

REST API / TIL 30일차

REST API 웹에서 사용되는 데이터나 자원(Resource)을 HTTP URI로 표현하고, HTTP 프로토콜을 통해 요청과 응답을 정의하는 방식 REST 성숙도 모델 0단계 HTTP 프로토콜을 사용 1단계 모든 자원은 개별 리소스에 맞는 엔드포인트(Endpoint)를 사용 요청하고 받은 자원에 대한 정보를 응답으로 전달 엔드포인트 작성 시에는 동사, HTTP 메소드, 혹은 어떤 행위에 대한 단어 사용 지양 리소스에 집중해 어떤 응답이 제공되는지 명사 형태의 단어로 작성 2단계 CRUD에 맞게 적절한 HTTP 메소드를 사용 3단계 레퍼런스의 모범적인 API 디자인조차도 REST 성숙도 모델의 3단계까지 적용한 경우는 극히 드묾 응답 내에 리소스의 URI를 포함한 링크 요소를 삽입하여 새로운 기능에 접근..

HTTP 네트워크 기초 / TIL 29일차

클라이언트-서버 클라이언트-서버 아키텍처 리소스가 존재하는 곳과, 리소스를 사용하는 앱을 분리시킨 것을 2티어 아키텍처 또는, 클라이언트-서버 아키텍처라고 부른다. 리소스를 사용하는 앱은 "클라이언트" 리소스가 제공(serve)하는 곳은 "서버" 클라이언트와 서버는 요청과 응답을 주고 받는 관계다. 클라이언트-서버 아키텍처에서는 요청이 선행되고, 그 후에 응답이 온다. 요청하지도 않았는데, 응답이 오는 경우는 거의 없다. 일반적으로 서버는 리소스를 전달해주는 역할만 하고 리소스를 저장하는 공간을 별도로 마련해 두는데, 이 공간을 "데이터베이스"라고 한다. 데이터베이스는 창고와 같은 역할을 합니다. 이처럼 기존 2티어 아키텍처에 데이터베이스가 추가된 형태를 3티어 아키텍처라고 부른따. 간혹 서버에서 일방적..