Siner's Blog


awscheat sheetcomputer sciencecontainercrawlingdartdatabasedjangodockergitgolanggraphqlhrhttpiacjavakubernetesmapmonitoringnestjsnetworknodeooppythonsecurityserverlessstorageterraformttbkktypescript,javascriptuxvalidation

https://user-images.githubusercontent.com/34048253/126061816-16961267-3c95-4978-883c-8621ba16c29e.png
떡볶이맵 제작기 #1
문득 떡볶이가 먹고싶을때, 이곳을 방문하라
6 min read2021.7.18

10주전 새로운 토이프로젝트가 뭐가 있을까 고민하다가 1주일에 한번은 먹어야 하는 떡볶이를 아이템으로 한 떡볶이맵을 만들어 보기로 결심했다. 도메인을 먼저 정하는게 중요했는데, 떡볶이의 영어발음인 tteokbokki는 너무 길고, 한국인이 저 철자를 다 외우는 사람이 많지는 않다고 생각되어 ttbkk.com라는 간단한 도메인을 구입했다. (12달러로 .com치고는 매우 저렴했다) iitc라는 지도 관련 오픈소스를 알고 있었기 때문에, 여기에서 쓰이는 코드를 활용하고자 leaflet이라는 map 라이브러리를 사용해보기로 했고, 기존에 익숙하게 사용하던 react와 요즘 대세?인 recoil을 도입해보기로 했다. typescript는 지도 라이브러리를 사용하기에 매우 불편했다... 이건 js인가 ts인가... 한국은 현재 국외로 지도반출이 불가하여, 구글맵에서는 9호선 데이터 등의 최신정보가 반영되어 있지 않아서 naver맵이나 kakao맵을 사용해야 했다. 하지만 leaflet…

https://user-images.githubusercontent.com/34048253/115137416-f99c3280-a060-11eb-8998-29af27199b93.png
프로덕션 레벨의 크롤러 개발 회고
python은 과연 크롤링하기 좋은 언어인가
15 min read2021.4.18

지난 25일동안 지인의 부탁으로 특정 게시판의 게시글들을 전부 크롤링하는 외주를 진행했었다. 이를 진행하면서 얻게 된 크롤링 관련 경험에 대해 적어보려고 한다. 지금까지 나의 크롤러 프로젝트는 python으로 개발이 되어있었는데, 이번엔 typescript로 작성해달라는 요구사항을 받아서 진행했고, 내가 느낀 python 크롤링과 javascript 기반 언어의 크롤링의 차이점에 대해서도 적어볼 수 있겠다. 회고는 크게 3가지 주제로 나눌 예정이다. python 크롤링 vs javascript(typescript) 크롤링 (크롤링 환경 구성) production(컨테이너) 레벨에서의 죽지않는 크롤러 만들기 (컨테이너의 메모리 관리 aka 브라우저 캐시데이터 관리) 크롤러를 만든다는 것 (해당 사이트의 개발 히스토리를 모두 파악하는 것) 1. python 크롤링 vs javascript(typescript) 크롤링 python을 사용한 크롤링 환경 구성시 google-chrome…

https://user-images.githubusercontent.com/34048253/155849011-f99a1dd2-7169-4f83-9ed4-a82390777d58.png
npm vs yarn vs pnpm vs yarn2
pnpm은 정말로 탄소절감과 ssd수명에 도움을 줄까?
9 min read2020.12.19

서론 타입스크립트를 사용하면서 백엔드를 개발하면서 googleapis@39.2를 사용하던 도중, 의존성으로 함께 설치되는 google-auth-library@3.0.0의 타입을 가져오는데 의문을 가지게 되었다. 스크린샷 2020-12-19 오후 6 34 21 의존성으로 가져오는 버전 말고 다른 버전을 별도로 설치하고 있었다면 어떻게 되는거지? 싶어서 google-auth-library의 최신버전을(6.1.3) 추가로 설치해보았고, 역시나 아래와 같이 잘못된 버전의 타입을 가져오면서 TS2739 에러가 났다. node_modules 위의 에러를 해결하기 위해서는 어쩔 수 없이 googleapis/node_modules/google-auth-library 를 통해 접근해야 했다. (이게 맞는건가? 싶었다) 그러던 어느날 reason-seoul 레포에 다음과 같은 흥미로운 문구가 있어서 javascript…

https://user-images.githubusercontent.com/34048253/155849171-72a8ff67-0d80-42dc-a83c-6db233a04a3a.png
[Dart Programming] final과 const의 차이점
상수를 표현하는 두가지 방법
2 min read2020.12.8

final과 const는 모두 상수(constant)를 선언할 때 사용되는 키워드입니다. Dart에서는 final과 const를 통해 선언된 변수는 수정이 불가능하도록 막아줍니다. const는 compile 단계에서 값이 정해지는 상수입니다. 그렇기 때문에 매번 값이 바뀌는 random이나 DateTime.now()와 같이 멱등이 보장되지 않는 값들은 const로 선언할 수 없습니다. const를 사용한 방식 const 사용시 나타나는 에러 final를 사용한 방식 결과 출처 https://flutter.dev/docs/get-started/codelab#step-2-use-an-external-package https://www.tutorialspoint.com/dart_programming/dart_programming_variables.htm https://medium.com/dartlang-korea/dart-final-%EA%B3%BC-const-bc8c6c024ef4

https://user-images.githubusercontent.com/34048253/102365825-52988300-3ffb-11eb-96b5-1300b6f290c8.png
[번역] 그림으로 보는 SOLID 원칙
객체지향 프로그래밍 5대 원칙
15 min read2020.6.18

SOLID 원칙과 관련된 좋은 그림예시가 있어서 이를 번역하면서 예제코드를 추가하였습니다. 만약 당신이 객체지향 프로그래밍과 친숙하다면, 당신은 SOLID 원칙에 대해 들어보았을 것 입니다. 이러한 다섯가지 개발 원칙은 소프트웨어 개발과 유지보수를 쉽게 할수 있도록 하는 가이드라인이라고 볼 수 있습니다. 이러한 원칙은 Robert C. Martin이라고 하는 소프트웨어 엔지니어에 의해 유명해졌습니다. SOLID 원칙과 관련된 좋은 자료들이 온라인에 많이 존재하지만, 이것을 그림으로 설명하는 글을 찾아보기는 힘듭니다. 이 때문에 시각적 학습을 선호하는 이들에게는 어려움이 따르고 있습니다. 그렇기 떄문에, 이 포스팅의 목적은 그림을 통해 각각의 SOLID…

https://user-images.githubusercontent.com/34048253/155849229-de13c0fb-a354-4129-96f7-96f346bcb56d.png
[번역] Dockerfile 레퍼런스 (2) - Buildkit
동시성을 가지며, 캐시 효율적이며 Dockerfile에 독립적인 빌더 툴킷
2 min read2020.3.29

공식 레퍼런스를 토대로 작성되었습니다. BuildKit 도커 버전 18.09부터, moby/buildkit를 통한 빌드를 지원합니다. Buildkit 백엔드는 기존 빌드방식과 비교해 많은 이점이 있습니다. 사용하지 않는 빌드 단계를 탐지하여 실행하지 않음 독립적인 빌드 스테이지의 병렬화 변경된 context만 전송 context안의 사용하지 않는 파일을 탐지하여 전송하지 않음 새로운 기능들과 함께 외부 도커파일 사용 중간 이미지 및 컨테이너 관련 API 사용함에 있어서 생기는 부작용 방지 자동 정리를 위한 캐시 우선순위 지정 Buildkit 백엔드를 사용하려면 docker build 명령어를 사용하게 전에 CLI를 통해 DOCKER_BUILDKIT=1이라는 환경변수를 지정해야합니다. Buildkit 기반의 빌드를 가능하게 하는 실험적인 도커파일 문법은 BuildKit 저장소의 문서를 참조해주세요.

https://user-images.githubusercontent.com/34048253/155849229-de13c0fb-a354-4129-96f7-96f346bcb56d.png
[번역] Dockerfile 레퍼런스 (3) - Format
가독성을 높이는 명령어 포맷
1 min read2020.3.29

공식 레퍼런스를 토대로 작성되었습니다. Format Dockerfile의 포맷은 다음과 같습니다. Instruction은 대문자 소문자를 가리지는 않습니다, 하지만 이러한 컨벤션을 지킴으로써, arguments를 좀더 쉽게 파악할 수 있습니다. 도커는 Dockerfile에 있는 instruction을 순서대로 실행시킵니다. Dockerfile은 반드시 `FROM`명령어로 시작해야합니다. FROM 명령어 이전에 parser directives, comments, ARG를 사용할 수도 있습니다. parser directives, comments, ARG에 대한 번역은 추후 작성될 예정입니다.

https://user-images.githubusercontent.com/34048253/155849229-de13c0fb-a354-4129-96f7-96f346bcb56d.png
[번역] Dockerfile 레퍼런스 (4) - Parser Directives
FROM 명령어 이전에 사용할 수 있는 지시문
12 min read2020.3.29

공식 레퍼런스를 토대로 작성되었습니다. Parser directives 파서 지시어는 선택사항이며, 이 지시어 아랫줄부터 영향을 주게 됩니다. 파서 지시어는 빌드를 레이어를 추가하지 않고, 빌드 단계에서 나타나지 않습니다. 파서 지시어는 # directive=value와 같은 주석 형태로 표기됩니다. 같은 종류의 지시어를 여러번 사용할 수 없습니다. 지시어 이후에 빈 라인이 나타나거나 빌더 명령어가 실행되면, 도커는 그 이후에 나타나는 파서 지시어를 모두 주석으로 간주하고 유효성 검사를 하지 않습니다. 그러므로, 모든 파서 지시어는 Dockerfile…

https://user-images.githubusercontent.com/34048253/155849229-de13c0fb-a354-4129-96f7-96f346bcb56d.png
[번역] Dockerfile 레퍼런스 (1) - Usage
도커 데몬의 작동방법, 이미지 빌드 & 태깅, 캐시이미지 가져오기
7 min read2020.3.29

공식 레퍼런스를 토대로 작성되었습니다. 도커는 Dockerfile을 읽어서 자동으로 이미지를 빌드할 수 있습니다. Dockerfile은 이미지를 만들기 위해 사용되는 모든 명령어를 담고있는 문서입니다. 이러한 명령어들은 실제로 유저가 CLI환경에서 한줄씩 입력하여 사용할 수 있는 명령어들입니다. docker build를 사용하여 여러 줄의 명령어로 이루어진 빌드 과정을 자동으로 진행할 수 있습니다. 이 페이지를 다 읽은 후에, Dockerfile Best Practices를 읽어보는 것을 추천드립니다. Usage docker build 명령어는 Dockerfile과 context로부터 정보를 가져와서 이미지를 빌드합니다. context는 파일들이 위치한 위치를 가리키며, PATH 또는 URL의 형태를 지닙니다. PATH는 로컬 파일시스템 내의 폴더이고, URL은 Git 저장소 경로가 됩니다. context 내용을 불러오는 방식은 재귀적으로 진행됩니다. 그러므로, PATH…

https://user-images.githubusercontent.com/34048253/155849292-661c839f-e3c7-46e4-b41d-4410c5cc27c4.png
싱글톤 패턴 (Singleton Pattern)
반복되는 인스턴스 낭비를 줄이자
4 min read2020.2.23

참고자료 Singleton pattern 타입스크립트 디자인 패턴 1. Intro 특정 클래스의 인스턴스가 단 하나만 존재해야 하는 경우에 싱글톤 패턴을 사용합니다. 싱글톤 패턴은, 반복적인 디자인 문제를 해결하는 방법을 설명하는 책인 Design Patterns의 23가지 디자인 패턴 중 하나입니다. 이 책에서는 반복되는 디자인 문제를 어떻게 유연하고 재사용 가능하도록 디자인하는지 서술하고 있습니다. 싱글톤 패턴은, 클래스의 인스턴스를 시스템 내에 단 한개만 존재하도록 제한시키는 소프트웨어 디자인 패턴입니다. 시스템 전체에서 작업을 조정하는 데 정확히 하나의 개체가 필요한 경우에 유용합니다. 2. Problem…

https://user-images.githubusercontent.com/34048253/155849329-c8caaa49-54cc-481b-8532-ad10e1e5948c.png
REST에 대하여
REST API는 대체 무엇이고, Restful 하다는 건 대체 무엇인가
7 min read2020.1.27

참고자료 Representational state transfer HTTP Status Codes REST API의 이해와 설계 - 조대협의 블로그 1. Intro 2000년 Roy Fielding의 논문에서 처음 정의된 REST는 소프트웨어 아키텍쳐 스타일로, 아래와 같이 간단하게 설명할 수 있습니다. 자원(Method)을 정의하고 자원에 대한 주소(URI)를 지정하여 전송(Request)하면, 다음 자원에 대한 표현이 최종 사용자에게 전송(Response)된다. REST 규칙을 따르는 API는 Method와 URI만으로 이 요청의 의도와, 결과를 어느정도 예상할 수 있게 합니다. REST 아키텍쳐를 적용한 웹서비스를 RESTful Web Service 라고 부르고, 이러한 아키텍쳐는 클라이언트와 서버간에 상호운용성 있는 데이터 통신을 가능케 합니다. Stateless 프로토콜을 사용하기 때문에, Restful…

https://user-images.githubusercontent.com/34048253/155849505-13269ce9-84ba-4541-994d-1ece20a746fa.png
Express.js의 미들웨어(Middleware)
Express 애플리케이션은 기본적으로 일련의 미들웨어 함수 호출입니다
6 min read2020.1.4

참고자료 Express In Action Express.js Express의 미들웨어에 대해 다룹니다. 1. Intro image Express는 자체적인 최소한의 기능을 갖춘 라우팅 및 미들웨어 웹 프레임워크이며, Express 애플리케이션은 기본적으로 일련의 미들웨어 함수 호출입니다. 미들웨어 함수는 요청 오브젝트(req), 응답 오브젝트(res), 그리고 애플리케이션의 요청-응답 주기 중 그 다음의 미들웨어 함수 대한 액세스 권한을 갖는 함수입니다. 그 다음의 미들웨어 함수는 일반적으로 next라는 이름의 변수로 표시됩니다. (next는 생략이 가능합니다.) 미들웨어의 로드 순서는 중요하며, 먼저 로드되는 미들웨어 함수가 먼저 실행됩니다. 위 코드는 Express의 가장 간단한 Hello World의 예시이며, 아래에서 이에 대한 두가지 미들웨어(logger, requestTime)를 다룰 예정입니다. 2-1. 예시 (Logger) 앱이 요청을 수신할 때마다, LOGGED…

1234