본문 바로가기

전체 글66

Garbage Collector 동작 방식 개발자에게 메모리 관리는 성능을 개선하는 측면에서 중요하게 자리잡혀야할 개념이다. 비효율적인 메모리 관리는 프로그램이나 서버의 속도를 느리지게 할 수도 있다. 다음 코드를 보면 함수 내부에 객체를 생성했지만 리턴하지 않았다. 이 리스트에서 해당 원소를 제거하면 객체는 참조점을 잃게 된다. 물론 가비지 컬렉터(GC)가 회수하겠지만 언제 실행될지 모르며 해결되지 못하는 경우 메모리 누수(memory leak)라는 문제가 발생한다. 메모리 누수는 객체를 더이상 사용하지 않아도 발생한다. 여기서는 사용자의 부주의에 의한 메모리 누수만 언급한다. def func(arr): a = Foo() arr.append(a) 우리는 이러한 비효율적인 메모리를 관리하기 위해 효율적인 코드를 작성해야 한다. 파이썬에서는 Pyt.. 2024. 2. 7.
파이썬에서 멀티 스레딩을 구현하지 못하는 이유 운영체제를 공부하면서 느꼈던 토픽에 대해 공유해보려고 한다. 멀티 스레딩은 복수의 스레드가 자원을 공유해 프로세스를 실행시키기 때문에 좀 더 빠른 속도로 프로세스를 실행할 수 있다고 한다. 그런데 파이썬에는 멀티 스레드를 사용한다 하더라도 싱글 스레드와 별반 차이가 없다고 한다. 이유는 GIL 정책 때문이라고 하는데... 🧐 이유에 대해 궁금해지기 시작했다. Multi Thread? 우선, 스레드(Thread)는 프로세스에 실행되는 하나의 작업 단위를 말한다. 스레드의 메모리 구조를 보면 프로세스와 다르게 대부분의 영역이 공유 영역으로 되어 있다. 즉, 멀티 스레드를 사용하면 스레드 끼리 해당 영역을 공유하고 있기 때문에 메모리를 효율적으로 사용할 수 있게된다. 추가로 멀티 프로세싱(Processing).. 2024. 1. 31.
[SQLD] 윈도우 함수 윈도우 함수 윈도우 함수(Window Function)는 행과 행간의 관계를 쉽게 정의 하기 위한 함수라고 한다. 관계를 정의한다는 의미는 행간의 연산이나 비교를 할 수 있다는 얘기이다. 서브쿼리를 여러번 이용하면 만들 수 있지만 윈도우 함수를 통해 쉽게 처리할 수 있게 된 것이다. 윈도우 함수는 주로 분석 함수나 순위 함수, 집계 함수라고도 부르는데 이는 `Group By`와 비슷한 점이 있어서 그런 듯하다. 다만 Groupy by와 차이가 있다면, Group By는 집계된 결과만 보여주지만 윈도우 함수는 행의 수는 그대로 두면서 집계된 행을 추가하는 식이다.(집약의 과정 유무의 차이) 윈도우 함수의 또다른 특징 중첩으로 사용할 수 없으나 서브 쿼리로 사용이 가능하다. `OVER` 문구가 필수로 포함된.. 2024. 1. 27.
[AWS] AWS IAM 설정하기 IAM IAM(Identify and Access Management)는 회사 차원에서 AWS 계정 접근에 대한 권한을 관리하는 서비스이다. 보통 보안적인 이유로 루트 계정(Root Account)를 사용하지 않기 때문에 사용자나 사용자 그룹을 통해 AWS 계정에 접근하여 사용한다. 루트 계정은 주로 백업 용도로만 사용한다. 만약 AWS를 가입하지 않았다면 처음 생성하는 경우엔 완전한 접근 권한을 지닌 단일 로그인 자격 증명을 하게 된다. 이 자격 증명을 루트 사용자라고 한다. IAM을 조회하게 되면 현재 접속 계정의 보안 상태를 확인할 수 있다. AWS에 처음 계정을 생성했을 때는 모든 권한에 접근할 수 있다. 루트 계정은 모든 권한을 쥐고 있는 중요한 계정이니 패스워드만으로 로그인이 가능하면 보안에 .. 2024. 1. 25.
AWS 친해지기 AWS (Amazon Web Service) 아마존에서 제공하는 클라우드 서비스로 자신이 낸 비용만큼만 IT인프라를 사용할 수 있는 서비스이다. 국내에서는 네이버 클라우드(NCP)가 있다. AWS는 필요에 따라 서버를 줄이거나 확장 시킬 수 있는 유연성을 가지고 있고 다른 서비스와 함께 사용할 수 있다는 확장성을 가지고 있다. AWS에서 제공하는 서비스는 다음과 같다. 이외에도 많다. 컴퓨팅 서비스(Compute) 스토리지(Storage) 데이터베이스(Database), 마이그레이션 도구 아마존 웹 서비스(AWS)↗ 아마존 웹 서비스 콘솔 앱(iOS) AWS 인프라 AWS는 전세계를 대상으로 하고 있는 글로벌 인프라 컴퓨팅 서비스이다. 그렇기 때문에 서비스를 제공하기위한 지역(위치) 또한 각 위치마다 다.. 2024. 1. 24.
[Django] Unit 테스트 코드 작성하기 테스트 코드 그동안 PostMan으로 하나씩 API테스트의 수고로움을 덜기 위해 Django는 자동화된 테스트 도구들을 제공한다. 자동화된 테스트를 적용하면 직접 테스트하는 것보다 빠르고 정확하게 테스트를 진행할 수 있다. 테스트 코드 작성하는 것은 Django Shell을 사용하는 것과 다르지 않다. 그렇다면 테스트 코드를 한번 작성해보자. 테스트를 만들어야 하는 자세한 이유는 공식문서↗를 보면 자세히 나와있다. 테스트 코드는 테스트 주도 개발(TDD)라는 방법론이 있을 정도로 백엔드 개발에서 중요한 부분이다. 그러나 반드시는 아니다. 테스트 개발 방법론에 대한 설명은 해당 포스팅↗을 참고 하면 된다. 만약 프로젝트의 단위가 큰 프로젝트라면 자동적으로 생성되는 `tests.py`를 수정할 필요 있다. .. 2024. 1. 10.
[Django] 커스텀 Admin 페이지 Django는 사이트 편리하게 모델을 관리할 수 있도록 관리자 기능 페이지를 기본적으로 제공한다. 오늘은 Admin 페이지를 활용하는 방법에 대해 알아보려고 한다. Admin 페이지 접속하기 우선, Admin 페이지에 접속하려면, `superuser`(관리자)를 생성해야 한다. 다음 `createsuperuser` 명령어를 입력해서 Admin 페이지에 접근한다. python manage.py createsuperuser 사용자 이름(Username) : admin 이메일 주소: Password: Password (again): Superuser created successfully. 초기에 관리자 사이트에 들어가게 되면 user와 Groups만 볼 수 있다. 사전에 작성한 모델을 올려보도록 하자. 사전에.. 2024. 1. 10.
[코테스터디] 이진 탐색 이진 탐색 이진 탐색(이분 탐색) 문제는 전체 데이터가 정렬된 상태에서 사용할 수 있는 알고리즘이다. 문제에서 순차탐색을 이용해 풀려고 했을 때, 탐색할 데이터가 너무 커서 탐색하기 어려울 때 이분탐색을 이용해 빠르게 문제를 풀 수 있다. 이진 탐색은 그러므로 O(logN)의 시간 복잡도로 빠르게 순회할 수 있다. 보통 이진 탐색 문제는 다익스트라와 연계하여 나올 수 있다. 중간 점 찾기 이진 탐색 문제는 시작점, 끝점, 중간점으로 변수 3개를 이용해 빠르게 데이터를 찾을 수 있다. 중간점은 시작점과 끝점을 합해 2로 나눈 값으로 웬만하면 외워두는게 좋다. while left mid: # x가 중앙값보다 큰 경우 start = mid+1 else: # x가 중앙값보다 작은 경우 end = mid-1 더보.. 2024. 1. 8.
[SQL/DB]NoSQL과 SQL는 무슨 차이가 있는 걸까? 프로젝트를 진행하기 전에 어떤 데이터베이스를 선택해야할지도 중요한 요건 중 하나이다. 오늘은 NoSQL과 SQL의 차이를 비교하면서 어떤 경우에 어떤 데이터베이스를 선택하는게 좋은지 알아보려고 한다. 데이터베이스와 DBMS 데이터베이스(DB) : Data를 보관하는 저장소 개념 DBMS : 데이터베이스에 저장된 데이터를 관리(Manage)하거나 데이터 베이스를 생성하기 위한 관리 시스템 일반적인 파일 시스템의 경우 종속성과 중복성의 문제가 있었기 때문에 DBMS를 통해 이러한 문제를 해결할 수 있었다. RDB(SQL) 관계형 데이터베이스는 "관계"라는 단어가 중요한 역할을 하고 있다. 관계형 데이터베이스 엑셀 문서와 비슷하게 하나 이상의 행(Row), 열(Column)이 존재하는 테이블(Table, Re.. 2024. 1. 8.