본문 바로가기

반응형

Study

(11)
📦 AWS IAM Udemy AWS Certified Developer Associate 강의를 들으며 중요한 부분을 정리한 글입니다. IAM 유저 & 그룹 기초 IAM 유저 & 그룹 IAM = Identity and Access Management, 글로벌 서비스 기본적으로 생성되는 root 계정은 사용하거나 공유하면 안됨 유저는 그룹화할 수 있음 그룹은 유저만 포함할 수 있으며, 다른 그룹을 포함할 수 없음 유저는 반드시 그룹에 속할 필요는 없으며, 한 명이 여러 그룹에 속할 수 있음 IAM: 권한 유저 or 그룹은 정책에 할당될 수 있음 정책은 유저의 권한을 정의 AWS의 최소 권한 원칙: 유저가 필요로하는 것보다 더 많은 권한을 주지 마라 IAM 정책 IAM 정책 구조 구성 Version: 정책 언어 버전, 항상 ..
🐍 Python json vs pickle vs marshal 📣 본문은 2021년 08월 01일 작성한 글입니다. 파이썬 객체를 JSON 형식으로 직렬화(인코딩) 또는 역직렬화(디코딩) 하는 모듈이다. pickle 파이썬 객체 구조를 직렬화 또는 역직렬화 하는 바이너리 프로토콜이다. pickling은 파이썬 객체 계층 구조가 바이트 스트림으로 변환되는 절차이며, unpickling은 그 반대 연산이다. pickle 모듈은 안전하지 않다. 신뢰할 수 있는 데이터만 unpickle 해야 한다. 신뢰할 수 없는 데이터를 처리하는 경우에는 json 모듈이 더 안전하다. 일반 텍스트를 파일로 저장할 때는 파일 입출력을 사용하지만 pickle 모듈을 이용하면 원하는 데이터를 자료형의 변경없이 파일로 저장하여 그대로 로드할 수 있으므로 주로 텍스트 이외의 자료형을 파일로 저장..
🗄 B+Tree 인덱스 📣 본문은 2021년 08월 07일 작성한 글입니다. 개요 웹 프로그래머를 위한 데이터베이스를 지탱하는 기술 도서를 읽고 B+Tree 인덱스 부분을 정리해보았다. 데이터베이스의 인덱스가 어떠한 자료구조로 구현되어 있고 어떻게 검색을 하는지 알아보자. B+Tree 인덱스란? B+Tree 인덱스는 Tree 자료구조를 이용한 인덱스이다. 정상이 루트(root) 블록, 최하층이 리프(leaf) 블록이라고 불리며, 그 사이에 브랜치(branch) 블록이 들어간다. 루트 블록과 브랜치 블록은 검색 키에 대해 해당 블록이 어디에 있는지에 대한 정보를 가지고 있다. 인덱스 검색 시에는 루트 → 브랜치 → 리프 순으로 도달하여 원하는 데이터를 얻을 수 있다. 레코드 수가 적으면 루트가 브랜치를 겸하며, 루트와 리프밖에 ..
🎡 Pod의 개념과 특징 📣 본문은 2021년 10월 31일 작성한 글입니다. 개요 꽤 오래 전, 인프런에 결제해 둔 쿠버네티스 강의(Reference 참고)가 있었다. 당시에는 실무에서 사용할 일이 없어서 이론 강의만 몇 개 듣고 묵혀두었는데 이직을 하고 맡게 된 프로젝트에는 쿠버네티스 기반 인프라 구성이 되어있어 저번 주말부터 다시 강의를 보기 시작했다. 오늘은 쿠버네티스의 주요 개념 중 하나인 Pod의 특징에 대해 정리해보려 한다. Pod Pod는 쿠버네티스 애플리케이션의 최소 단위이다. 여러 개의 컨테이너로 구성된 Pod도 있고, 단일 컨테이너로만 이루어진 Pod도 있다. Container를 Pod로 그룹화하는 이유는 리소스를 더 지능적으로 공유하기 위해서이다. 쿠버네티스 시스템에서는 같은 Pod에 속한 컨테이너끼리 동일..
🔍 Django 서버 실행 테스트하기 (with selenium) 📣 본문은 2019년 8월 24일 작성한 글입니다. 목표 크롬 브라우저 창을 실행하기 위해 selenium의 webdriver를 가동한다. 브라우저를 통해 로컬 PC 상의 웹 페이지를 연다. 웹 페이지 타이틀에 Django 라는 단어가 있는지 확인한다. 첫 번째 테스트 from selenium import webdriver browser = webdriver.Chrome() browser.get('http://localhost:8000') assert 'Django' in browser.title 위 소스코드를 실행하면 selenium을 import 할 수 없다고 할 것이다. pip로 selenium을 설치해보자. pip install -U selenium selenium을 이용해 브라우저를 실행시킬 웹..
🔫 클래스 기반 뷰의 모범적인 이용 📣 본문은 2020년 3월 21일 작성한 글입니다. Django에는 CBV, FBV 두 종류의 뷰가 존재한다. 특히 클래스 기반 뷰는 장고에서 기본적으로 제공하는 제네릭 뷰를 상속해서 사용하면 여러가지 기능을 매우 편리하게 사용할 수 있다. 나는 대부분 함수 기반 뷰로만 작성을 해왔는데 CBV를 잘 활용한 코드가 훨씬 깔끔하고 직관적이라 느껴져 최대한 장고에서 지원해주는 뷰를 잘 사용해보기로 했다. 이번 포스팅은 Two Scoops of Django 10장을 읽고 중요한 내용을 정리한 글이다. 더 자세한 내용은 책을 참고하시면 좋다. 개요 장고는 클래스 기반 뷰를 작성하는 표준화된 방법을 제공한다. 함수 기반 뷰에서는 뷰 함수 자체가 내장 함수이고, 클래스 기반 뷰에서는 뷰 클래스가 내장 함수를 반환하는..
🐍 Python Walrus Operator 📣 본문은 2021년 9월 2일 작성한 글입니다. 개요 파이썬 3.8 버전부터 왈러스 연산자를 사용할 수 있다. 왈러스 연산자는 :=와 같이 사용하는데, 생김새가 마치 바다코끼리의 눈과 엄니를 닮았다하여 이름이 붙여졌다고 한다. (귀여워..) 필자는 파이썬 코딩의 기술 책을 읽고 왈러스 연산자에 대해 알게 되었는데, 진즉 알았더라면 많은 코드를 좀 더 클린하게 짤 수 있지 않았을까 생각된다. 왈러스(walrus) 연산자란? 왈러스 연산자는 대입식이라고도 부르는데 이는 대입문이 쓰일 수 없는 위치에서 변수에 값을 대입할 수 있다. 예를 들면 if문 안에 대입식을 쓸 수 있다. 예시 쉬운 예시로 a라는 리스트의 길이가 10 이상이면 길이와 함께 리스트가 너무 길다는 문장을 출력하도록 해보자. if len(a..
🔫 Django reverse()와 resolve() 📣 본문은 2019년 10월 11일 작성한 글입니다. reverse() python 코드 안에서 URL 템플릿 태그와 비슷하게 동작하는 기능이다. from news import views path('archive/', views.archive, name='news-archive') urls.py에서 설정한 URL의 name이나, viewname을 통해서 다시 URL로 되돌릴 수 있다. # name 사용 시 reverse('news-archive') # viewname 사용 시 from news import views reverse(views.archive) 인수가 있는 URL이라면 다음과 같이 args를 포함할 수 있다. from django.urls import reverse def myview(req..
🔍 Django에서 단위 테스트 실행하기 📣 본문은 2019년 8월 29일 작성한 글입니다. 단위 테스트와 기능 테스트의 차이 기능 테스트 사용자 관점에서 애플리케이션 외부를 테스트하는 것 상위 레벨의 개발 주도 단위 테스트 프로그래머 관점에서 애플리케이션 내부를 테스트하는 것 하위 레벨의 개발 주도 TDD 작업 순서 기능 테스트를 작성해서 사용자 관점의 새로운 기능성을 정의하는 것부터 시작한다. 기능 테스트가 실패하고 나면 어떻게 코드를 작성해야 테스트를 통과할지를 생각해보도록 한다. 이 시점에서 하나 또는 그 이상의 단위 테스트를 이용해서 어떻게 코드가 동작해야 하는지 정의한다. 단위 테스트가 실패하고 나면 단위 테스트를 통과할 수 있을 정도의 최소한의 코드만 작성한다. 기능 테스트가 완전해질 때까지 과정 2와 3을 반복해야 할 수도 있다...
🔫 django-crontab 사용하기 📣 본문은 2019년 10월 19일 작성한 글입니다. 개요 매일 정각에 새로운 필드를 만들어내야 하는 기능이 필요하게 됐다. 주기적으로 함수를 실행하기 위해 django-crontab을 사용한 경험을 정리한다. 설치 및 설정 다음 명령어를 통해 설치한다. pip install django-crontab 설치를 완료했다면, settings.py의 INSTALLED_APPS에 django_crontab을 추가해주자. INSTALLED_APPS = ( 'django_crontab', ... ) 이제 cron에게 넘겨줄 업무 함수를 구현한다. 간단하게 1분마다 hello를 출력하도록 하는 함수를 만들어 테스트해보자. app 폴더 하위에 cron.py 파일을 만들고 함수를 정의한다. def hello_every_..

반응형