API의 구현과 API 명세서-1
·
BackEnd
API와 API명세서API란?API(Application Programming Interface)는 두 소프트웨어가 서로 통신할 수 있도록 하는 언어나 메시지의 형식주로 서버와 클라이언트가 통신하기 위해 사용되기도 하지만, 외부 개발자에게 특정 기능을 제공하기 위해 사용되기도 한다.위와 같이 공개된 API를 Open API라고 하고 여러 기업과 공공기관에서 제공하고 있다.API명세서란?API의 사용 방법, 요청 및 응답의 데이터 구조, 인증 방식과 같이 API와 관련된 세부적인 내용들을 설명해 놓은 문서를 의미한다.API에 포함되는 내용요청 정보HTTP 메서드 종류 (ex, POST, GET, PUT, DELETE,,,,)엔드포인트(URL)요청에 대한 header와 body응답 정보응답의 상태 코드(ex..
(C++) BOJ 백준 1005번 ACM Craft / 위상 정렬(Topology Sort)
·
Algorithm
BOJ.1005 ACM CRAFT 문제https://www.acmicpc.net/problem/1005문제 설명문제에서 입력으로 주어지는 건물이 지어지기까지의 최단 시간을 구하는 문제특정 건물을 짓기전에 먼저 지어야하는 건물의 순서가 주어진다먼저 지어야 하는 건물들을 지으면서 입력으로 주어지는 W에 해당하는 건물이 지어지기 까지의 시간을 구하면 된다문제 풀이이 문제와 같이 순서가 주어지고 먼저 해결해야할 작업이 있을때의 경로에 관한 문제는 위상 정렬(Topology Sort)로 해결할 수 있다.위상정렬(Topology Sort)는 가장 먼저 시작할 수 있는 일이 담긴 노드를 큐(Queue)에 넣어주고 시작한다.가장 앞에 있는 노드를 꺼내고 해당 노드와 연결된 간선을 모두 제거한다.간선들을 제거하면서 먼저..
HTTP 요청의 구조와 통신 과정 / HTTP 메서드
·
BackEnd
HTTP 요청의 구조와 통신 과정HTTP는 서버-클라이언트 구조에서 통신을 위한 프로토콜이며 클라이언트의 요청과 서버의 응답은 정해진 구조에 맞게 구성되어 전달된다.클라이언트의 요청클라이언트에서 서버로 전달되는 요청의 구조는 요청라인, 헤더(Header), 본문(Body)로 구성된다.서버의 응답서버에서 클라이언트로 전달되는 응답의 구조는 상태라인, 헤더(Header), 본문(Body)로 구성된다.HTTP요청과 응답의 구성 요소요청 라인(Start line)클라이언트가 서버로 전달하려고 하는 요청의 세부적인 경로인 URL과 요청의 종류를 나타내는 HTTP 메서드 등이 포함되어 있다.상태 라인(Status line)서버가 클라이언트로 전달하는 요청의 상태를 표현하는 상태 텍스트(Status Text)와 이를..
클라이언트-서버 구조와 HTTP란?
·
BackEnd
서버 - 클라이언트 구조란?웹 서비스를 서버와 클라이언트로 분리시킨 설계방식. 2티어 아키텍처 혹은 클라이언트-서버 아키텍처라고 함클라이언트클라이언트는 브라우저 상에서 동작하는 페이지나 기기에 설치하여 사용하는 애플리케이션 등을 의미하고, 사용자와 직접 상호작용합니다.서버서버는 사용자가 클라이언트를 통해 보낸 요청을 처리하고 올바른 데이터를 반환하는 역할을 함서버 - 클라이언트 구조의 특징확장성(Scalability)서버가 클라이언트와 독립적이기 때문에 서버의 확장 혹은 트래픽 분산에 유연하게 대처가 가능멀티플랫폼 지원서버는 브라우저, 모바일 앱 등의 다양한 클라이언트나 플랫폼에 대해 동일한 서비스 제공 가능업데이트 및 유지보수 편리클라이언트를 업데이트할 필요 없이 서버의 로직을 변경이 가능HTTP(Hy..
HTTP 헤더2 - 캐시와 조건부 요청
·
BackEnd
캐시와 조건부 요청캐시 기본 동작캐시가 없을때 용량이 어느정도 큰 파일을 서버로 요청을 할때마다 데이터를 다운로드 받아야하고, 비용이 발생한다. 또한 다운로드를 하는 시간이 발생해 사용자 경험이 저하된다.캐시가 있다면 cache-control 로 지정된 시간만큼 캐시에서 다운받은 데이터가 저장되어 있다가 다시 요청을 할때 바로 재사용할 수 있다.다운로드 시간 및 비용이 발생하지 않고 사용자 경험이 향상된다.검증 헤더와 조건부 요청캐시 시간 초과 시 발생하는 상황서버에서 기존 데이터를 변경함서버에서 기존 데이터를 변경하지 않음기존 데이터가 변경되지 않았기 때문에 굳이 다시 다운로드할 필요가 없음. 이를 확인하기 위해 검증헤더가 필요함.검증 헤더 if-modified-since 요청 헤더를 붙여서 캐시에 ..
HTTP 헤더1 - 일반 헤더
·
BackEnd
일반 정보Referer - 이전 웹 페이지 주소이전 페이지 주소A에서 B로 이동할때 Referer: A를 포함해서 요청유입 경로 분석가능요청에서 사용referrer의 오타에서 지어짐User-Agent - 유저 에이전트의 애프리케이션 정보클라이언트의 애플리케이션 정보(웹 브라우저 정보 등등)통계 정보어떤 브라우저에서 장애 발생하는지 파악 가능요청에서 사용Server - 요청을 처리하는 ORIGIN 서버의 소프트웨어 정보응답에서 사용Date - 메시지가 발생한 날짜 및 시간응답에서 사용특별한 정보Host - 요청한 호스트 정보(필수 헤더)요청에서 사용필수하나의 서버거 여러 도메인을 처리해야 할 때하나의 IP 주소에 여러 도메인이 적용되어 있을 때Location - 페이지 리다이렉션웹 브라우저는 3xx 응답의..
(C++) BOJ 백준 10942번 펠린드롬?
·
Algorithm
백준 10942번 펠린드롬? (C++)문제 설명주어진 수열에서 펠린드롬을 찾아내는 문제.a,b가 주어지면 a~b의 수열이 펠린드롬인지 판별해야함.풀이펠린드롬을 직접 판별하는 것은 매우 간단하지만, 질문을 1000000번 할 수 있기 때문에 최악의 경우 시간이 너무 오래걸릴 수 있다. 이 문제의 시간 제한은 0.1 초이기 때문에 DP를 생각해야한다.길이가 1인 수열일 경우 항상 펠린드롬.길이가 2인 수열일 경우 두 숫자가 같다면 펠린드롬.길이가 3이상인 수열일 경우 양 끝의 숫자가 같고 그 사이의 수열이 펠린드롬일 경우 펠린드롬.위 3가지 조건을 고려하여 DP로 해결하였다.코드ㅇㄹㅇㄹ#include using namespace std;#define FOR(i,N) for(int i=1; i> N; F..
HTTP 상태코드
·
BackEnd
HTTP 상태코드클라이언트가 보낸 요청에 대한 결과를 표현하기 위한 상태 코드1xx, 2xx, 3xx, 4xx, 5xx 5가지 경우로 나타냄 (x는 임의의 숫자)1xx: 요청이 수신되어 처리중거의 사용하지 않음.2xx: 클라이언트의 요청을 성공적으로 처리함ex) 200 OK, 201 Created, 202Accepted, 204 No Content200 OK: 요청 성공201 Created: 요청을 성공해서 새로운 리소스가 생성됨202 Accepted: 요청이 접수되었으나 처리가 완료되지 않음배치 처리 같은 곳에서 사용. ex) 요청 접수 후 2시간 뒤에 배치 프로세스가 요청을 처리함.204 No Content: 요청은 성공적으로 수행했지만, 페이로드에 보낼 데이터가 없음서버의 응답 결과가 필요 없는 경..
(C++) 백준 1992.쿼드트리
·
Algorithm
문제 설명압축 가능한 정사각형 형태의 구역을 탐색하는 문제흑백 영상을 압축하여 표현하는 쿼드트리문제 풀이압축 가능한 영역을 가로 세로 길이가 N인 영역부터 탐색을 시작하여 범위를 줄여간다.압축이 가능한지 판별후 불가능하다면 새로운 범위를 탐색 시작하며 '(' 를 추가하고 특정 구역에 대한 탐색이 끝날때마다 ')' 를 추가한다.분할 정복 알고리즘(Divide and conquer)를 이용하여 탐색 영역을 좁혀가며 왼쪽 상단, 오른쪽 상단, 왼쪽 하단, 오른쪽 하단 순으로 탐색한다.코드#include using namespace std;#define FOR(i,N) for(int i=1; i> N; FOR(i,N) { string s; cin >> s; for(int j=0; j
(C++) 백준 15591. MooTube
·
Algorithm
백준 15591번 MooTube (C++)문제 설명특정 영상과의 유사도가 k 이상인 영상의 개수를 추천하도록 하는 문제.영상 A에서 영상 B까지의 가는 경로 중 가장 유사도가 적은 값을 AB 영상간의 유사도로 결정한다.문제 풀이##예를 들어, 영상 A에서 출발해서 갈 수 있는 모든 경로를 탐색한다.이때 영상 A에서 갈 수 있는 경로들에 대해 해당 경로에서의 유사도중 취소값을 방문 중인 영상과의 유사도로 저장한다.경로 탐색을 위해서 dfs를 사용했다. (모든 경로에 대해 탐색을 해야하기 때문, bfs를 사용해도 무관)코드#include #include using namespace std;#define FOR(i,N) for(int i=1; i graph[5001];int cost[5001][5001];in..