전체 글 803

HTTP(Hyper Text Transfer Protocol)를 알아보자

HTTP란? HTTP는 서버-클라이언트 모델을 따르면서 리퀘스트, 리스폰스 구조로 웹 상에서 정보를 주고받을 수 있는 프로토콜입니다. TCP/IP 기반으로 작동하며 가장 큰 특징은 connectionless(비연결)와 stateless(무상태)입니다. *리퀘스트 구조 : 스타트 라인(메서드, path, http버전), 헤더, 바디 *리스폰스 구조 : 스테이터스 라인(http버전, status code, status message), 헤더, 바디 '비연결', '무상태'라는 특성은 더 많은 요청을 효율적으로 처리할 수 있도록 돕지만 클라이언트의 상태를 저장하지 않기 때문에 이를 해결하기 위해 쿠키, 세션 등이 사용됩니다. 또한 http는 정보를 text형식으로 주고받으므로 데이터 유출을 막기 위해 암호화를 ..

TCP와 UDP 비교

TCP와 UDP는 무엇인가요? TCP는 연결형, 신뢰성 프로토콜입니다. 연결지향적이기 때문에 3-way handshaking을 하여 두 호스트의 전송 계층 사이를 논리적 연결으로 연결합니다. 신뢰성을 보장하기때문에 헤더가 더 크고 속도가 비교적 느립니다. UDP는 비연결형, 비신뢰성 프로토콜로 헤더가 작고 수신여부를 확인하지 않아 속도가 빠릅니다. 단, 데이터의 내용이나 순서 등의 신뢰성을 보장하지 못합니다. TCP, UDP는 TCP/IP 4계층에서 전송계층에 해당됩니다. TCP로 전송하는 패킷을 segment, UDP로 전송하는 패킷은 datagram이라고 합니다. 어디에 사용하나요? TCP는 신뢰성이 중요한 통신 HTTP, File 전송에 쓰이고, UDP는 실시간성이 중요한 통신인 동영상 스트리밍 등..

자료구조 _ Hash table

Hash table은 무엇인가요? 해시테이블은 효율적인 탐색(빠른 탐색)을 위한 자료구조로 키-값 쌍의 데이터를 입력받습니다. hash function h에 key값을 입력으로 넣어 h(k)를 위치로 지정하여 키-값 쌍을 저장합니다. 저장, 삭제, 검색의 시간복잡도는 모두 O(1)입니다. 좀 더 자세히 알아볼까요~ Direct-address Table을 먼저 알아봅시다. 직접 주소화 테이블이란? 키를 인덱스로 설정하여 저장하는 방식입니다. 직접 주소화 테이블의 단점은 키에 따라 빈공간이 생기고 공간을 낭비하게 됩니다. 또한 인덱스에 다양한 자료형의 키를 저장할 수 없습니다. 이러한 단점들을 보완하기 위해 해시 테이블을 사용합니다. 해시 테이블 해시 테이블은 hash function h를 이용, (키, 값..

자료구조 _ Queue 그리고 Stack

Queue는 무엇인가요? 큐는 줄 형태의 선입선출 자료구조입니다. 활용예시는 프린트 출력, 은행창구 번호표 대기, 너비우선탐색(BFS) 등이 있습니다. enqueue : 데이터 추가 dequeue : 데이터 추출 시간복잡도는 둘 다 O(1)입니다. array-based queue vs list-based queue array-based queue : 배열 기반 큐는 선입선출 과정에서 남는 메모리가 생깁니다. 이는 circular queue로 해결할 수 있습니다. *circular queue는 배열이 끝까지 차면 첫부분에 비어있는 공간으로 다시 채우기 시작하는 것을 뜻합니다. 만약 공간이 없어서 채울 수 없게 되면 dynamic array와 같은 방법으로 array의 크기를 늘려야 합니다. list-bas..

내가 쓴 Python 테스트 코드 coverage 알아보기

커버리지란? 테스트 케이스가 얼마나 충족되었는지를 나타내는 지표 중 하나입니다. 테스트를 진행하였을 때 ‘코드 자체가 얼마나 실행되었느냐’는 것이고, 수치를 통해 확인할 수 있습니다. 커버리지를 확인하려면? 테스트 코드를 작성하다보면 내 코드의 커버리지가 얼마나 되는지 궁금해지는데요. 제가 10초만에 커버리지를 확인할 수 있는 방법을 알려드리겠습니다. (테스트 코드가 이미 작성되어있고 테스트를 실행할 수 있는 상황을 가정합니다.) 1. 먼저 coverage 라이브러리를 설치합니다. pip install coverage 2-1. 만약 pytest 를 사용한다면 다음 명령어를 입력해주세요. coverage run -m pytest 2-2. 만약 unittest 를 사용한다면 다음 명령어를 입력해주세요. co..

2022년 11-12주차 '다코로그' 프로젝트 시작

Weekly growth 11-12주 차에는 다수의 면접이 있어 이를 준비하는데 많은 시간을 사용하였습니다. 프론트부터 백엔드, DB까지 연결된 온전한 서비스 구현하기 '핑퐁의 숲'이라는 풀 스택 프로젝트를 진행하였습니다. 이 프로젝트의 목적은 웹 개발 전반을 이해하고자 시작하였습니다. 제작에는 약 3시간이 소요되었습니다. 백엔드의 경우 Node.js를 사용하였는데 이번 프로젝트에서 처음 사용하였습니다. '노드 교과서'와 동료의 node.js 코드를 참고하여 제작하였습니다. 실제 풀스택을 구현해보니 기분이 좋았습니다. 프론트와 백엔드가 어떻게 통신하는지 기본적인 사항들을 확인할 수 있었습니다. 추후 핑퐁과 관련된 재미있는 애니메이션이나 데이터 저장 기법을 적용해보려고 합니다. 깃헙링크 블로그 포스팅 10..