전체 글 217

병합 정렬

Merge Sort 💡 병합 정렬(Merge Sort)은 분할 정복(Divide and Conquer) 전략을 사용하는 효율적인 정렬 알고리즘 중 하나 작동 원리 분할(Divide): 주어진 배열을 절반으로 나눕니다. 이 분할 과정은 원소가 하나만 남을 때까지 재귀적으로 계속됩니다. 정복(Conquer): 분할된 작은 문제들을 해결합니다. 병합 정렬에서 이 단계는 원소가 하나만 있는 배열이므로 이미 정렬된 상태입니다. 병합(Merge): 정렬된 두 개의 부분 배열을 하나의 정렬된 배열로 병합합니다. 이 과정은 재귀적으로 수행되며, 전체 배열이 정렬될 때까지 계속됩니다. 시간 복잡도 최선, 평균, 최악의 경우 모두: O(nlogn) 공간 복잡도 O(n) (추가적인 메모리 공간이 필요합니다.) 장단점 장점 ..

퀵 정렬

퀵 정렬 (Quick Sort) 💡 퀵 정렬(Quick Sort)은 효율적인 정렬 알고리즘 중 하나로, 분할 정복(Divide and Conquer) 방식을 사용하여 배열을 정렬합니다. 작동 원리 배열에서 하나의 원소를 선택합니다. 이 원소를 '피벗(pivot)'이라고 합니다. 피벗을 기준으로 배열을 두 부분으로 나눕니다: 피벗보다 작은 원소들의 부분 배열과 피벗보다 큰 원소들의 부분 배열. 각 부분 배열에 대해 재귀적으로 퀵 정렬을 수행합니다. 모든 부분 배열이 원소 하나만을 가질 때까지 위의 과정을 반복합니다. 시간 복잡도 최선의 경우와 평균적인 경우: O(nlogn) 최악의 경우: O(n2) (이미 정렬된 배열이나 역순으로 정렬된 배열에서 피벗 선택이 잘못될 경우) 공간 복잡도 평균적인 경우: O(..

삽입 정렬

삽입 정렬 (Insertion Sort) 💡 삽입 정렬(Insertion Sort)은 카드를 정렬하는 방법에 비유될 수 있는 정렬 알고리즘입니다. 이 알고리즘은 각 숫자를 적절한 위치에 "삽입"함으로써 작동합니다. 작동 원리 http://algorithm.wiki/ko/app/ 두 번째 원소부터 시작하여 현재 원소를 "임시 변수"에 저장한다. 이전 원소들과 비교하면서 적절한 위치를 찾아간다. 현재 원소가 이전 원소보다 작으면, 이전 원소를 한 칸 뒤로 이동한다. 임시 변수에 저장한 원소를 적절한 위치에 삽입한다. 위의 과정을 배열의 마지막 원소까지 반복한다. 시간 복잡도 최선의 경우: O(n) (이미 정렬된 배열에서) 평균적인 경우: O(n2) 최악의 경우: O(n2) 공간 복잡도 O(1) (in-pla..

선택 정렬

선택 정렬 (Selection Sort) 💡 선택 정렬(Selection Sort)은 배열 내에서 가장 작은(또는 가장 큰) 원소를 찾아 맨 앞의 원소와 교환하는 방식을 사용하는 정렬 알고리즘입니다. 작동 원리 http://algorithm.wiki/ko/app/ 배열에서 현재 위치를 제외한 나머지 원소 중에서 가장 작은 원소를 찾는다. 찾아진 가장 작은 원소와 현재 위치의 원소를 교환한다. 현재 위치를 한 칸 앞으로 이동하고, 배열의 끝까지 위의 과정을 반복한다. 시간 복잡도 최선의 경우: O(n2) 평균적인 경우: O(n2) 최악의 경우: O(n2) 공간 복잡도 O(1) (in-place 정렬) 장단점 장점 구현이 간단하며, 공간 복잡도가 작다. 데이터의 양이 작을 때는 효율적일 수 있다. 단점 데이..

RESTful API

RESTful API란? RESTful API는 두 컴퓨터 시스템이 인터넷을 통해 정보를 안전하게 교환하기 위해 사용하는 인터페이스다. 대부분의 비즈니스 애플리케이션은 다양한 태스크를 수행하기 위해 다른 내부 애플리케이션 및 서드 파티 애플리케이션과 통신해야 한다. 예를 들어 월간 급여 명세서를 생성하려면 인보이스 발행을 자동화하고 내부의 근무 시간 기록 애플리케이션과 통신하기 위해 내부 계정 시스템이 데이터를 고객의 뱅킹 시스템과 공유해야 한다. RESTful API는 안전하고 신뢰할 수 있으며 효율적인 소프트웨어 통신 표준을 따르므로 이러한 정보 교환을 지원한다. REST란? Representational State Transfer(REST)는 API 작동 방식에 대한 조건을 부과하는 소프트웨어 아키..

Framework/Django 2023.09.23

CORS란 무엇인가?

CORS란? CORS(Cross-Origin Resource Sharing)는 출처가 다른 자원들을 공유한다는 뜻으로, 한 출처에 있는 자원에서 다른 출처에 있는 자원에 접근하도록 하는 개념이다. 직역하면, 교차되는 출처 자원들의 공유이다. 다른 출처에 있는 자원을 요청한다고 하면, 이를 교차 출처 요청이라고 부른다. 그러기 위해서는 먼저 출처가 무엇인지를 알아야 한다. 아래 그림과 함께 설명을 보자. 출처(Origin)란 구성 요소 중에서 Protocol + Host + Port 3가지가 같은 경우 동일 출처가 된다고 표현한다. 즉 이 구성 요소가 다른 것들을 공유할 때 CORS를 구현할 필요가 있다. 그럼 왜 이렇게 출처가 다를 때 CORS가 필요할까?에 대한 의문이 들 것이다. 들어야 좋다. 기본적..

Django 테스트코드에서 setup 함수와 setupclass의 차이는 무엇입니까?

💡 setUp() 함수 각각의 테스트 메서드가 실행될 때마다 실행 각 테스트메서드는 방금 생성된 fresh한 오브젝트를 입력받음 각 테스트가 끝나면 롤백되기 때문에 데이터베이스에 대한 변경 사항을 정리하지 않아도 된다 테스트 중 내용이 변경될 수 있는 객체를 이곳에서 생성한다 단점 : 테스트당 한 번 호출됨 => 시간이 오래 걸리는 경우 테스트 속도가 크게 느려질 수 있다. 💡 setUpClass() @classmethod 데코레이터를 달아 함께 사용, 메서드 인자로 cls를 넘겨준다 모든 테스트 함수들을 아울러 데이터를 한 번만 설정한다 한 곳에 테스트에 필요한 데이터들을 정의하고 관리할 수 있다는 장점이 있다 단점 : 테스트 클래스가 시작되기 이전에 전체를 한 번 호출하기때문에 테스트 도중에 자동 롤..

Framework/Django 2023.09.23

TCP/IP 계층에서 데이터 송수신 과정

핵심 과정 애플리케이션 계층 - 전송 계층 : 보내는 요청값들이 캡슐화 과정을 거쳐 전달 링크 계층을 통해 수신 서버와 통신 해당 서버의 링크 계층으로부터 애플리케이션 계층까지 비캡슐화 과정을 거쳐 전송 캡슐화 과정 상위 계층의 헤더와 데이터를 하위 계층의 데이터 부분에 포함시킴, 해당 계층의 헤더를 삽입하는 과정 애플리케이션의 데이터가 전송 계층으로 전달 >> TCP(L4) 헤더가 붙여짐 세그먼트(TCP), 데이터그램(UDP)화됨 인터넷 계층으로 가면서 IP 헤더가 붙여짐 >> 패킷화 링크 계층으로 가면서 프레임 헤더와 프레임 트레일러가 붙음 >> 프레임화 비캡슐화 과정 캡슐화의 반대 개념 하위 계층에서 상위 계층으로 가며 각 계층의 헤더 부분을 제거 프레임화 데이터 >> 패킷화 데이터 >> 세그먼트 ..

TCP/IP 4계층

TCP/IP 4계층 모델은 인터넷에서 컴퓨터들이 서로 정보를 주고받는 데 쓰이는 프로토콜의 집합을 설명할 때 쓰인다. 중간의 DHCP, FTP 등은 각 계층을 대표하는 스택을 정리한 것이다. 이런 식으로 TCP/IP 모델은 OSI 7계층과 많이 비교한다. 이러한 계층들은 특정 계층이 변경되었을 때 다른 계층이 영향을 받지 않도록 설계되었다는 것이 중요하다. 1. 애플리케이션 계층 응용 프로그램이 사용되는 프로토콜 계층 웹서비스, 이메일 등 서비스를 실질적으로 사람들에게 제공하는 층 OSI 표준 모델에서는 응용 계층, 표현 계층, 세션 계층으로 나뉨 응용 계층 User Interface 를 제공하는 계층 사용자 또는 어플리케이션이 네트워크에 접근할 수 있도록 지원한다. (HTTP, FTP) 응용 프로세스와..

네트워크 명령어

네트워크 규모 기반 분류 LAN(Local Area Network) : 근거리 통신망, 전송 속도가 빠르고 혼잡하지 않음 MAN(Metropolitan Area Network) : 도시 지역 네트워크, 전송 속도와 혼잡도가 중간 WAN(Wide Area Network) : 광역 네트워크, 전송 속도가 낮고 매우 혼잡함 네트워크 성능 분석 명령어 PING(Packet INternet Groper) 네트워크 상태를 확인하려는 대상 노드를 향해 일정 크기의 패킷을 전송하는 명령어 해당 노드의 패킷 수신 상태, 도달 시간 확인 해당 노드까지 네트워크가 잘 연결되는지를 확인 ICMP 프로토콜을 통해 동작 >> ICMP 프로토콜 지원되지 않는 기기는 실행이 어려움 NETSTAT 접속되어 있는 서비스들의 네트워크 상..