분류 전체보기

    파이썬으로 배우는 자료구조 핵심 원리

    파이썬으로 배우는 자료구조 핵심원리 스택프레임 함수가 호출되면 메모리에는 스택 프레임이라는 공간이 생긴다. 여기에는 함수 실행에 필요한 지역 변수들이 할당된다. 스택 프레임의 생성 시기는 함수를 호출했을 때고, 소멸 시기는 함수 실행이 종료되었을 떄이다. 스택 프레임은 메모리에 생성되는데 생성될 수 있는 크기에 한계가 있다. 그러므로 계속 쌓인다면 언젠가는 최대 한계치에 도달할 수밖에 없다. 이 때 발생하는 에러가 Recursion Depth 에러이다. 재귀 함수를 스택 프레임의 관점에서 바라보면 상태 정보를 가지고 있는 지역 변수는 서로 다른 스택프레임에 저장된다. 실행 결과는 서로 다른 스택 프레임에 있는 지역 변수에 저장된다. 이때 기저 사례를 두지 않으면 계속 호출이 일어나고 스택프레임이 저장되는..

    Python 3.10 변경점 알아보기 - 1. Parenthesized context managers, Better error messages

    Python 3.10 변경을 알아보려고 한다(3.11도 곧 할 거다.). 새로운 기능 Parenthesized context managers 콘텍스트 관리자에서 여러 줄에 걸쳐 계속하기 위해 괄호를 묶는 것이 지원된다. 이를 통해 이전에 Import문에서 가능했던 것과 유사한 방식으로 여러 줄에 긴 컨텍스트 관리자 컬렉션의 형식을 지정할 수 있다. with (CtxManager() as example): ... with ( CtxManager1(), CtxManager2() ): ... with (CtxManager1() as example, CtxManager2()): ... with (CtxManager1(), CtxManager2() as example): ... with ( CtxManager1(..

    [Tree] 이진 탐색 트리 구현하기 - 1

    이진 탐색 트리의 자세한 개념은 이 블로그를 참고하자. 구현은 이 블로그, 블로그를 참고했다. 이진트리 개념을 익히고 실제로 내가 설계를 해서 직접 구현까지 해야 할 예정이다. 이번 포스팅은 개념을 익히기 위한 포스팅이다. 1. Node Class Node 클래스의 구현 코드는 다음과 같다 class Node: def __init__(self, value): # double linked list self.value = value self.left = None self.right = None 이진 탐색 트리의 노드는 Linked List 속성을 지니고 있으므로 현재 노드를 기준으로 왼쪽과 오른쪽 자식 노드를 가진다. 2. 이진 탐색 트리 2.1 삽입 class NodeMgmt: def __init__(se..

    Docker 명령어 정리 - 2

    2023.01.23 - [Docker] - DockerFile 작성하기 - 구성과 명령어 정리 - 1에 이어 명령어를 정리해 보자. 1. EXPOSE (deprecated) EXPOSE 명령은 컨테이너가 런타임에 지정된 네트워크 포트에서 수신 대기함을 Docker에 알린다. 포트가 TCP 또는 UDP에서 수신하는지 여부를 지정할 수 있으며 프로토콜이 지정되지 않은 경우 기본 값은 TCP이다. EXPOSE 명령은 실제로 포트를 게시하지 않는다(주의!). 이미지를 빌드하는 사용자와 컨테이너를 실행하는 사용자 간에 게시할 포트에 대한 일종의 문서로 기능한다. 컨테이너를 실행할 때 실제로 포트를 게시하려면 도커 실행 시 -p 플래그를 사용하여 하나 이상의 포트를 게시 및 매핑하거나 -P 플래그를 사용하여 노출된..

    LRU(Least Recently Used) 알아보기

    LRU 알고리즘은 페이지 교체 알고리즘 종류 중의 하나이다. 우선 페이지 교체 알고리즘이란 무엇인지 살펴보자. 0. 페이지 교체 알고리즘 페이지 교체 알고리즘은 페이징 기법으로 메모리를 관리하는 운영체제에서, 페이지 부재가 발생하여 새로운 페이지를 할당하기 위해 현재 할당된 페이지 중 어느 것과 교체할지를 결정하는 방법이다.즉 가상기억장치를 모두 같은 크기의 블록으로 편성하여 운용하는 기법이다. 이때의 일정한 크기를 가진 블록을 페이지라고 한다. 페이지 교체 알고리즘은 온라인 알고리즘의 일종이다. 페이징 기법? 컴퓨터가 메인 메모리에서 사용하기 위해 2차 기억 장치로부터 데이터를 저장하고 검색하는 메모리 관리 기법이다. -위키백과- 온라인 알고리즘? 전산학에서 온라인 알고리즘이란 시작할 때 모든 입력 정..

    DockerFile 작성하기 - 구성과 명령어 정리 - 1

    1. Dockerfile Dockerfile은 Docker 이미지를 생성하기 위해 사용자가 명령줄에서 호출할 수 있는 명령을 포함하는 텍스트 문서이다. 2. 구성 Docker 이미지는 일련의 레이어로 구성된다. Docker는 이미지를 빌드할 때 각 layer들을 쌓아 올린다. 이때 컨테이너 전용 이미지 레이어를 제외한 아래 계층의 베이스 이미지 레이어들은 읽기 전용(read-only)이므로 수정할 수 없다. 또한 이러한 베이스 이미지들은 컨테이너를 여러 개 생성할 때 공유되므로 디스크 용량을 효율적으로 관리한다. 아래를 살펴보자. docker inspect b953ee2e003f | jq '.[].GraphDriver' { "Data": { "LowerDir": "...diff:/var/lib/docke..

    Docker에 대해 알아보자 - 정의, 작동 방식, 사용 이유

    해당 포스팅은 AWS의 포스팅된 "Docker란 무엇입니까?"과 docker 공식 문서, IBM 문서를 참고하여 작성하였습니다. 1.정의 1.1 Docker란? Docker는 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼이다. Docker는 "컨테이너"라는 표준화된 유닛으로 패키징 하며, 이 컨테이너에는 라이브러리, 시스템 도구, 코드, 런타임 등 소프트웨어를 실행하는 데 필요한 모든 것이 포함되어 있다. Docker를 사용하면 환경에 구애받지 않고 애플리케이션을 신속하게 배포 및 확장할 수 있으며 코드가 문제없이 실행될 것이다. 1.2 컨테이너란? 컨테이너는 호스트 시스템의 다른 모든 프로세스와 격리된 시스템의 샌드박스* 프로세스이다. 샌드박스란? 샌드박스란 외부로부터 들어..

    [Docker] Docker compose를 알아보자

    1. 정의 여러 개의 컨테이너 집합으로 이루어진 애플리케이션을 통합적으로 Docker 이미지로 만들어 관리할 수 있다. 각각의 컨테이너를 시작 및 중지하는 등의 작업을 더 쉽게 수행할 수 있도록 도와주는 도구이다. 2. 특징 2.1 복수의 컨테이너를 관리할 수 있다. 복수의 컨테이너(서비스)를 시작하고 중지할 수 있고, 다시 빌드할 수 있다. docker compose를 사용하지 않으면 단일 컨테이너마다 커맨드를 실행시키거나, Dockerfile을 실행시켜야 하지만 docker-compose를 통해 쉽게 실행시킬 수 있다. 또한 상태나 로그 등을 확인할 수 있다. 2.2 docker 컨테이너끼리의 연결을 편하게 한다. 여러 개의 컨테이너들은 단일 network로 세팅된다. 이는 DB와 Web 앱 간의 통..

    SSH 계정 및 DB 서버 계정 생성 및 DB 외부 접속 허용하기

    오늘 회사에서 SSH 계정 생성과 외부에서 접속할 수 있는 DB 서버의 계정을 만들어 달라고 했다. 사실 난 갖다 쓴 적 밖에 없어서 살짝 당황했으나, 구글을 믿었다. 믿음은 배신하지 않았다. 다만 시간이 오래 걸렸을 뿐 1. SSH 계정 SSH 계정 생성은 쉬웠다 root 계정으로 접속한 뒤 user를 추가했으면 됐으니까. 다만 권한이 문제였다. 권한은 통상적으로 일반 유저 권한이 보안적으로는 맞으나, 편의상 superuser 권한을 줄 때도 있기 때문이다. 하지만 난 정석대로 줬다. 1.1 계정 생성하기 계정 생성은 쉽다. adduser [username] 해당 명령을 치면 user 생성 절차가 진행된다. 생성하고 별다른 추가 권한을 부여하지 않으면 일반 유저 권한이다. 권한을 확인하려면 아래의 명령..

    [QuerySet] Q() Objects 알아보기

    장고에서 OR 연산을 가능하게 하는 Q() Objects를 알아보자. 당연히 이 포스팅도 공식 문서를 참고했다. Complex lookups with Q objects 키워드 인수 쿼리(filter() 등)와 함께 사용한다. 더 복잡한 쿼리 예를 들면 OR 문이 있는 쿼리를 실행해야 하는 경우 Q 개체를 사용할 수 있다. Q 객체(django.db.models.Q)는 키워드 인수 모음을 캡슐화하는 데 사용된다. 이러한 키워드 인수는 "필드 조회"에서와 같이 지정한다. 예를 들어, 아래와 같은 Q 객체는 단일 LIKE 쿼리를 캡슐화한다. from django.db.models import Q Q(question__startswith='What') Q 갹채는 &, |, 및 ^ 연산자를 사용하여 결합할 수 있..