Siner's Blog

about me

35개의 게시글이 있습니다.

Graphql Dataloader 적용해보기2021년 12월 11일
GraphQL에서 발생하는 N+1 문제 해결방법
이 포스팅의 예제 코드는 typescript + nestjs를 기반으로 작성되었지만, 다른 언어에도 마찬가지로 적용이 가능합니다. 이 포스팅은 아래의 스키마를 기반으로 작성되었습니다. Dataloader 적용 전 위의 쿼리 요청을 위해 서버에서 Resolver를 아래와 같이 작성했다고 가정해봅시다. 아직 Dataloader를 적용하지 않은 상태입니다. 만약 orders…
django contains vs icontains2021년 10월 30일
TIL django query
contains icontains 의미 대소문자를 구별한다 대소문자를 구별하지 않는다 SQL 'LIKE BINARY %s' 'LIKE %s'
떡볶이맵 제작기 #3 - 지도 API Pagination 적용기2021년 10월 24일
4000개의 지도 데이터를 느려보이지 않게 불러와서 로딩하기
떡볶이맵의 데이터가 점점 많아지면서 marker cluster용 api를 구축해야 했지만, 어떠한 라이브러리가 좋은지 파악하지 못했고 (내가 직접 구현할 수도 있고) best practice를 공부하지 못했기 떄문에 해당 작업을 잠시 뒤로 미루게 되었다. 하지만 전국 떡볶이 데이터가 100…
도커와 컨테이너 생태계의 변화과정2021년 10월 23일
의식의 흐름대로 알아보는 도커와 쿠버네티스의 세부구조
container 생태계의 변화 2013년 Docker가 처음으로 세상에 나타난 이후 IT업계는 정말 크게 변했습니다. 어플리케이션의 배포단위는 이제 war, jar, zip 등이 아니라 Docker 이미지가 되었고 Docker를 사용할 수 있는 환경이기만 하면 어플리케이션은 Windows에서든, Ubuntu에서든 동일하게 동작하였습니다. Docker…
주요 RDBMS의 종류2021년 10월 11일
mysql vs mariadb vs postgresql vs sqlite vs oracle vs mssql
이전 게시물인 RDBMS의 특징을 보고 오면 좋습니다. RDBMS DB 엔진 중 유명한 것들을 비교해보고, 특징을 알아보자. 이 게시글을 보는 모두가 데이터베이스를 고르는 과정에 도움이 되었으면 한다. image PostgreSQL과 MariaDB의 상승세가 뚜렷하다 image DB-Engines Ranking Oracle Oracle사에서 제공하는 DBMS…
RDMBS의 특징2021년 10월 10일
데이터베이스 면접 질문은 아니고 용어 정리
동시성 제어 - MVCC (Multi Version Concurrency Control) 하나의 레코드에 대해 여러 버전이 관리된다는 의미이다. 가장 큰 목적은 Lock을 사용하지 않는 일관된 읽기를 제공하는데 있다. PostgreSQL 9.3.5 문서 - 동시성 제어 Pessimistic Lock 처음 짐 스타키가 구현한 방식으로 MGA : Multi Generation…
떡볶이맵 제작기 #2 - 에러 모니터링2021년 9월 26일
홈서버가 죽었을때 슬랙으로 모니터링하기
문제점 떡볶이맵의 백엔드 서버는 홈서버에서 운영되고 있기 때문에 해당 서버의 헬스체크는 홈서버 내에서 이루어질 수 없었고, 이로 인해 정전 등의 이유로 컴퓨터가 꺼지는 등의 장애 상황을 신속하게 파악하기 힘들었습니다. 해결방안 이러한 문제점을 해결하기 위해 외부에서 홈서버의 건강상태를 체크해주는 API를 만들어야 했습니다. 떡볶이맵 서버와 상관없는 홈서버 자체의 API…
리눅스에 구글드라이브 연동하여 백업스토리지로 활용하기2021년 9월 10일
rclone과 crontab을 활용한 데이터베이스 백업 프로세스
작년에 지인이 rclone, google drive, cloudbox를 활용하여 구글드라이브에 올린 영상을 plex라는 어플로 감상할 수 있도록 구축한 경험을 들은 적이 있었다. (구글드라이브 저장소를 친구들과 공유하고, plex…
장고의 패스워드 유효성 검사 코드분석2021년 8월 16일
Django Password Validator
django의 startproject로 기본적으로 생성되는 에 대해 분석해보려 합니다 1. UserAttributeSimilarityValidator 유저의 attributes(username, firstname, lastname, email)를 정규표현식으로 split한 후 각각의 valuepart에 대해 유사도를 측정하고, 유사도가 maxsimilarity(default…
테라폼 명령어 정리 - Terraform cheat sheet2021년 8월 14일
잘 사용하지 않아서 까먹지만 필요하면 써야하는
force unlock backend force-unlock image
깃 명령어 정리 - Git cheat sheet2021년 8월 2일
잘 사용하지 않아서 까먹지만 필요하면 써야하는
remove untracked files ignore already committed files remove cached credential remove all fetched branches This will prune any branches that no longer exist on the remote. remove all local branches remove all…
레디스 명령어 정리 - Redis cheat sheet2021년 8월 2일
잘 사용하지 않아서 까먹지만 필요하면 써야하는
remove all keys flushall
[번역] 새로 입사하는 개발자분들을 위한 최고의 온보딩 가이드2021년 7월 24일
온보딩 Best Practices와 첫 90일을 어떻게 계획할 것인지에 대하여.
The Ultimate Guide to Onboarding New Developers: Industry Best Practices 새로 입사하는 개발자분들을 위한 최고의 온보딩 가이드: 산업의 Best Practices와 첫 9…
떡볶이맵 제작기 #12021년 7월 18일
문득 떡볶이가 먹고싶을때, 이곳을 방문하라
10주전 새로운 토이프로젝트가 뭐가 있을까 고민하다가 1주일에 한번은 먹어야 하는 떡볶이를 아이템으로 한 을 만들어 보기로 결심했다. 도메인을 먼저 정하는게 중요했는데, 떡볶이의 영어발음인 tteokbokki는 너무 길고, 한국인이 저 철자를 다 외우는 사람이 많지는 않다고 생각되어 ttbkk.com라는 간단한 도메인을 구입했다. (12달러로 .com…
프로덕션 레벨의 크롤러 개발 회고2021년 4월 18일
python은 과연 크롤링하기 좋은 언어인가
지난 25일동안 지인의 부탁으로 특정 게시판의 게시글들을 전부 크롤링하는 외주를 진행했었다. 이를 진행하면서 얻게 된 크롤링 관련 경험에 대해 적어보려고 한다. 지금까지 나의 크롤러 프로젝트는 python으로 개발이 되어있었는데, 이번엔 typescript로 작성해달라는 요구사항을 받아서 진행했고, 내가 느낀 python 크롤링과 javascript…
npm vs yarn vs pnpm vs yarn22020년 12월 19일
pnpm은 정말로 탄소절감과 ssd수명에 도움을 줄까?
서론 타입스크립트를 사용하면서 백엔드를 개발하면서 를 사용하던 도중, 의존성으로 함께 설치되는 의 타입을 가져오는데 의문을 가지게 되었다. 스크린샷 2020-12-19 오후 6 34 21 의존성으로 가져오는 버전 말고 다른 버전을 별도로 설치하고 있었다면 어떻게 되는거지? 싶어서 의 최신버전을(6.1.…
[Dart Programming] final과 const의 차이점2020년 12월 8일
상수를 표현하는 두가지 방법
final과 const는 모두 상수(constant)를 선언할 때 사용되는 키워드입니다. Dart에서는 final과 const를 통해 선언된 변수는 수정이 불가능하도록 막아줍니다. const는 compile 단계에서 값이 정해지는 상수입니다. 그렇기 때문에 매번 값이 바뀌는 이나 와 같이 멱등이 보장되지 않는 값들은 const로 선언할 수 없습니다. const…
[번역] 그림으로 보는 SOLID 원칙2020년 6월 18일
객체지향 프로그래밍 5대 원칙
SOLID 원칙과 관련된 좋은 그림예시가 있어서 이를 번역하면서 예제코드를 추가하였습니다. 만약 당신이 과 친숙하다면, 당신은 에 대해 들어보았을 것 입니다. 이러한 다섯가지 개발 원칙은 소프트웨어 개발과 유지보수를 쉽게 할수 있도록 하는 가이드라인이라고 볼 수 있습니다. 이러한 원칙은 Robert C. Martin…
[번역] Dockerfile 레퍼런스 (2) - Buildkit2020년 3월 29일
동시성을 가지며, 캐시 효율적이며 Dockerfile에 독립적인 빌더 툴킷
공식 레퍼런스를 토대로 작성되었습니다. BuildKit 도커 버전 18.09부터, moby/buildkit를 통한 빌드를 지원합니다. Buildkit 백엔드는 기존 빌드방식과 비교해 많은 이점이 있습니다. 사용하지 않는 빌드 단계를 탐지하여 실행하지 않음 독립적인 빌드 스테이지의 병렬화 변경된 context만 전송 context…
[번역] Dockerfile 레퍼런스 (3) - Format2020년 3월 29일
가독성을 높이는 명령어 포맷
공식 레퍼런스를 토대로 작성되었습니다. Format Dockerfile의 포맷은 다음과 같습니다. Instruction은 대문자 소문자를 가리지는 않습니다, 하지만 이러한 컨벤션을 지킴으로써, arguments를 좀더 쉽게 파악할 수 있습니다. 도커는 에 있는 instruction을 순서대로 실행시킵니다. 은 반드시 `FROM`명령어로 시작해야합니다. FROM…
[번역] Dockerfile 레퍼런스 (4) - Parser Directives2020년 3월 29일
FROM 명령어 이전에 사용할 수 있는 지시문
공식 레퍼런스를 토대로 작성되었습니다. Parser directives…
[번역] Dockerfile 레퍼런스 (1) - Usage2020년 3월 29일
도커 데몬의 작동방법, 이미지 빌드 & 태깅, 캐시이미지 가져오기
공식 레퍼런스를 토대로 작성되었습니다. 도커는 을 읽어서 자동으로 이미지를 빌드할 수 있습니다. 은 이미지를 만들기 위해 사용되는 모든 명령어를 담고있는 문서입니다. 이러한 명령어들은 실제로 유저가 CLI…
싱글톤 패턴 (Singleton Pattern)2020년 2월 23일
반복되는 인스턴스 낭비를 줄이자
참고자료 Singleton pattern 타입스크립트 디자인 패턴 1. Intro 특정 클래스의 인스턴스가 단 하나만 존재해야 하는 경우에 싱글톤 패턴을 사용합니다. 싱글톤 패턴은, 반복적인 디자인 문제를 해결하는 방법을 설명하는 책인 Design Patterns의 2…
REST에 대하여2020년 1월 27일
REST API는 대체 무엇이고, Restful 하다는 건 대체 무엇인가
참고자료 Representational state transfer HTTP Status Codes REST API의 이해와 설계 - 조대협의 블로그 1. Intro 2000년 Roy Fielding의 논문에서 처음 정의된 는 소프트웨어 아키텍쳐 스타일로, 아래와 같이 간단하게 설명할 수 있습니다. 자원(Method)을 정의하고 자원에 대한 주소(URI…
Express.js의 미들웨어(Middleware)2020년 1월 4일
Express 애플리케이션은 기본적으로 일련의 미들웨어 함수 호출입니다
참고자료 Express In Action Express.js Express의 에 대해 다룹니다. 1. Intro image Express는 자체적인 최소한의 기능을 갖춘 라우팅 및 미들웨어 웹 프레임워크이며, Express 애플리케이션은 기본적으로 입니다. 미들웨어 함수는 요청 오브젝트(req), 응답 오브젝트(res…
Express.js란 무엇인가 (Javascript 백엔드 프레임워크)2020년 1월 3일
Node.js를 위한 빠르고 개방적인 간결한 웹 프레임워크
참고자료 Express In Action Express.js Node.js, Express가 등장한 과 에 대해 설명합니다. 1. JS 엔진과 Node.js Express에 관해 얘기하기 전에, Node.js에 대한 얘기를 먼저 해야 합니다. 이를 위해 Express 인액션의 일부 내용을 발췌하였습니다. : JS…
class-validator를 사용한 타입스크립트(Typescript) Validation2019년 12월 17일
Typescript Data Validation
참고자료 : typestack/class-validator 를 사용하는 환경에서 를 사용하여 를 하는 과정을 다루고 있습니다. 1. Data Validation Data Validation(데이터 유효성 검사)이란, 다루는 데이터가 올바른 을 가지는지 확인하는 과정입니다. 2. class-validator typestack/class-validator…
장고(Django)에서 S3 연동하기2019년 7월 17일
Amazon Web Service S3
출처 : django 에서 S3에 Static, media 파일 저장하고 사용하기 소셜미디어 프로젝트를 준비하면서, 을 줄이기 위해 를 도입하고자 하였다. Django에서 S3를 연동하기 위해서는 라는 라이브러리를 사용해야 한다는 것은 이미 알고 있었으나, 정확한 사용 방법을 몰라서 찾아보았고, 나중에도 사용할 때 까먹지 않기 위해 포스팅으로 작성하려 한다.…
파이썬(Python3)으로 왓쓰리워즈(what3words, W3W)를 이용해보자.2019년 5월 20일
세상의 모든 주소를 세 단어에 담다
what3words란? what3words (W3W)는 전 세계 지도 상의 스팟을 3개의 단어로 표현한 좌표체계입니다. 이 기능을 사용하면 마이크로 단위의 장소 공유와 주소가 없는 지점도 세 단어 주소로 공유/검색이 가능합니다. 현재 로 W3W 세단어 주소가 제공 중이며, 에서도 what3words와의 제휴를 통해 W3W 주소체계를 서비스 하기 시작했습니다. image…
포스트그레스(PostgreSQL)로 설명하는 도커 컴포즈(Docker Compose) 초간단 사용법2019년 3월 2일
이번 장에서는 의 일반적인 사용방법과, 이를 사용하여 PostgreSQL을 배포하는 방법에 대해서 설명하겠습니다. 0) Compose란? Overview of Docker Compose 란 여러개의 도커 컨테이너들을 한꺼번에 관리(빌드, 배포 등) 할 수 있는 Tool입니다. Compose를 사용하면 을 사용하여 응용 프로그램의 서비스를 구성 할 수 있습니다. YAML…
나만의 도커(Docker) 이미지를 만들어서 장고(Django) 서비스 배포하기2019년 2월 25일
저번 장에서는 를 확인해보았고, 되었음을 확인했습니다. 이번 장에서는 를 직접 만들어서 배포해보고, 에 업로드까지 해보겠습니다. 본 포스팅의 프로젝트 는 를 통해 얻을 수 있습니다. github.com/siner308/django-with-custom-image docker image from cultivatehq.com 0) Dockerfile…
장고(Django) 공식 이미지로 설명하는 도커(Docker)의 기본적인 사용법2019년 2월 16일
이번 장에서는 를 사용하여 에 대해 설명하겠습니다. Custom 이미지를 생성하여 Django를 배포하는 방법에 대해서는 다음 장에서 다루겠습니다. 0) Docker Docker란 무엇입니까? Docker는 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼입니다. Docker…
셀레니움(Selenium)과 파이썬(Python)으로 지도 크롤링 해보기2019년 1월 27일
0) 계기 어느날 저희 아빠가 저에게, 아빠 : “이게 경기도 번지수를 보여주는 사이트인데, 일정 구역을 프린트해서 보고 싶어.” 아들 : “컴퓨터로 이렇게 잘 보이는데 왜 뽑아야되나요?” 아빠 : “어르신들과 같이 보는데 노트북으로 보여드리기는 그렇고, 전지로 뽑아가고 싶어.” 아들 : “네… 오늘 안에 처리해드리죠.” 해서 크롤러를 만들게 되었습니다.…
Start Django with Virtualenv2019년 1월 12일
This post is based on Ubuntu 16.04. Here's what you need to configure a Django project using virtualenv. pip virtualenv (Python >= 3.5) Django >= 2.0 0) Why virtualenv? There are people who say that "Django…
가상환경(Virtualenv)로 장고(Django) 시작하기2019년 1월 12일
본 게시물의 내용은 Ubuntu 16.04 를 기반으로 작성되었습니다. virtualenv를 이용한 Django 프로젝트 구성에 필요한 요소는 다음과 같습니다. pip virtualenv (Python >= 3.5) Django >= 2.0 0) virtualenv를 쓰는 이유 "가상환경으로 안해도 Django…
Deployed by NetlifySource code on Github