CS

    Python은 Call by value일까, Call by reference일까?

    최근 Python을 이용하여 알고리즘 문제를 자주 풀고 있으며 동시에 또 회사에서도 Python을 이용하여 백엔드 개발을 진행하고 있기에 Python에서는 어떤 방식으로 함수에서의 호출이 일어나는지 알아보고 싶어서 관련 내용을 정리하고자 한다.우선 이에 대한 정리 전에 간단하게 Call by reference, Call by value가 무엇인지 알아보고자 한다.1. Call by valueCall by value는 값에 의한 호출이다. 즉, 함수에 인자를 넘겨줄 때 인자에 "값"을 복사하여 넘겨준다는 것이다.함수의 실행 환경을 저장하는 스택 프레임에 인자의 값의 복사본을 담음으로써 함수 내에서 스택 프레임 내에 존재하는 값을 사용할 수 있도록 한다.그렇기 때문에 함수 내에서 만약 해당 인자를 변경하더라..

    (CS) 무중단 배포

    프로젝트나 서비스 개발에 백엔드 개발자로 참여하였을 때, 로컬이 아닌 실제 환경에서 개발한 기능들을 테스트하고 또 사용하기 위해서 반드시 진행해야 하는 작업이 있다. 그것은 바로 배포이다. 1년이 넘는 시간 동안 백엔드 개발을 많이 진행하였기에 여러 번 배포를 진행하였지만, 무중단 배포에 대해서는 들어만 보았을 뿐 정확하게 어떤 방식으로 진행되는지에 대한 학습조차 되어 있지 않았다. 현재 진행 중인 프로젝트에서 무중단 배포를 진행해 볼 기회를 얻어서 이에 대해 학습 후 정리해보고자 한다. 배포란? 무중단 배포에 대해 정리하기에 앞서 배포가 무엇인지 먼저 간단하게 알아보고자 한다. 배포라는 단어 자체는 원래 신문이나 책자 등을 널리 나누어주는 행동을 나타내는 말이다. 소프트웨어 관점에서 말하는 배포도 역시..

    (CS) 계수 정렬 & 기수 정렬

    계수 정렬(Counting Sort)과 기수 정렬(Radix Sort)은 비교 정렬이 아닌 정렬 알고리즘으로, 특정한 상황에서 매우 효과적인 알고리즘이다. 각 정렬 알고리즘에 대해 자세하게 알아보자. 계수 정렬 계수 정렬은 범위에 해당하는 각 숫자의 빈도수를 계산하고, 빈도수의 누적값을 사용하여 데이터의 위치를 결정하여 정렬하는 알고리즘이다. 정렬할 데이터의 범위를 알고 있을 때 매우 효과적인 정렬 알고리즘이다. 비교 정렬이 아니기에 특정 상황에서 매우 빠르지만, 정렬할 데이터의 범위만큼의 추가적인 메모리가 필요하다. 정렬 과정 데이터들의 최솟값과 최댓값을 확인하여 전체 범위를 파악한다. 범위에 해당하는 각 숫자의 빈도수를 세어 배열에 저장한다. 각 숫자의 빈도수를 누적하여 해당 숫자의 정렬된 위치를 계..

    (CS) 트리 & 트라이

    트리 트리는 계층적 구조를 가지며, 각 노드들이 서로 연결되어 있는 자료구조이다. 트리는 하나의 루트(root) 노드에서 시작하여 다양한 자식 노드들로 확장된다. 각 노드는 부모와 자식 노드 간의 관계를 가진다. 트리는 순환 구조를 갖지 않으며, 각 노드는 정확히 하나의 부모를 가진다. 트리를 이루는 구조를 하나씩 알아보자. Node(정점, Vertex) 트리의 기본 단위로, 정보를 저장하는 단일한 항목 노드는 데이터 필드(Key)와 하나 이상의 포인터를 가짐 Key 노드를 구분하거나 정렬하는데 사용하는 값 노드의 데이터 필드에 저장되는 값 Edge(간선) 노드 간의 연결 관계를 나타내는 선으로, 트리의 구조를 형성 두 노드 간의 간선은 부모-자식 관계를 나타냄 Root 트리의 최상위 노드로, 모든 다른..

    (CS) HTTP Request/Response/Method, CORS, 서브넷

    HTTP Request/Response 메시지 구조 HTTP 메시지는 웹에서 데이터를 전송하기 위해 사용되는 프로토콜인 HTTP(HyperText Transfer Protocol)에서 사용되는 메시지 구조이다. HTTP 메시지는 데이터 통신을 위해 사용되며 Request와 Response 두 가지 형태로 나뉩니다. 1. HTTP Request(요청) Start Line: 요청 메서드, URL 경로, 프로토콜 버전 등의 정보를 포함한다. 예: GET /index.html HTTP/1.1 Header Fields: 추가적인 메타데이터를 포함하는 헤더 필드들이 위치한다. General 헤더: Via(메시지 전달을 추적하고 요청 루프를 방지하며 요청/응답 체인에서 발신자의 프로토콜 기능을 식별하는 데 사용)와 ..

    (CS) OSI, TCP/IP Layer, TCP vs UDP

    OSI 7 Layer OSI(Open Systems Interconnection) 모델은 네트워크 아키텍처를 설명하기 위한 일반적인 프레임워크로, 데이터 통신 시스템의 다른 요소 간의 상호 작용을 설명하기 위해 일곱 개의 계층으로 구성된다. 또한 7단계로 나눔으로써 특정한 계층에 이상이 생기면 다른 계층의 장비 및 소프트웨어를 건드리지 않고도 이상이 생긴 단계만 고칠 수 있다는 장점도 가지고 있다. 1. 물리 계층(Physical Layer) 이 계층에서는 주로 전기적, 기계적, 기능적인 특성을 이용해서 통신 케이블로 데이터를 전송하게 된다. 이 계층에서 사용되는 통신 단위는 비트이며 이것은 1과 0으로 나타내어지는, 즉 전기적으로 신호가 흐르는지 아닌지로 생각할 수 있다. 이 계층에서는 단지 데이터만을..

    (CS) 네트워크 기본 용어 정리

    네트워크 범위에 따른 분류 1. LAN (Local Area Network) 집, 학교, 공항 등의 비교적 작은 지역 내의 컴퓨터 등의 장치를 연결하는 네트워크이다. 보통 사무실이나 학교 등 소규모 조직 내에서 사용되며, 네트워크의 전송 속도가 빠르고 안정적이며, 보안이 우수하다. 2. MAN (Metropolitan Area Network) 네트워크를 도시 전체로 확장한 중간 규모의 네트워크로, 대도시권 내의 여러 지역을 연결한다. MAN은 일반적으로 지역 간 빠른 데이터 전송을 위한 고속 대역폭을 가지고 있다. 주로 대도시권 내에서 대학, 공공기관, 연구소 등에서 사용됩니다. 3. WAN (Wide Area Network) LAN과 MAN보다 더 넓은 지리적 범위를 가지며 국가, 대륙 간의 전 세계적..

    (CS) 단일 연결 리스트 vs 원형 연결 리스트, Stack으로 Queue 구현, 원형 큐 구현

    단일 연결 리스트 vs 원형 연결 리스트 단일 연결 리스트와 원형 연결 리스트는 연결 리스트의 일종으로, 각 노드는 데이터와 다음 노드를 가리키는 포인터로 이루어져 있다. 데이터를 노드에 저장하고 노드들을 링크로 연결하여 데이터를 관리하는 자료구조이다. 하지만 다음과 같은 차이점이 있다. 단일 연결 리스트(Singly Linked List) 원형 연결 리스트(Circular Linked List) 리스트의 끝은 NULL로 표시 리스트의 순회는 단방향으로만 가능 리스트의 끝은 NULL이 아닌, 첫 번째 노드를 가리키는 포인터로 표시 마지막 노드의 다음 노드는 첫 번째 노드가 되어 원형적인 형태 리스트의 순회는 양방향으로 가능 다음 노드만을 가리키는 포인터만으로 구현되기 때문에 구현이 간단하고 메모리를 적게..