발생일: 2021.05.25 키워드: 홈어시스턴트, Home Assistant, HA 문제: 홈어시스턴트 이미지를 SD 카드에 구워서 라즈베리 파이에서 구동하려고 한다. 가이드에 나온대로 SD 카드를 포맷하고 balenaEtcher 에서 타겟을 설정했는데, 아래와 같은 오류가 발생했다. EBUSY: resource busy or locked, open '/dev/rdisk2 on Mac 해결책: SD 카드를 Disk Utility 에서 포맷했는데, 이 때 APFS 로 포맷한 것이 문제였다. Mac OS Extended (Journaled) 으로 포맷해야 한다. APFS 로 포맷된 상태에서는 디스크 유틸리티에 다른 포맷 옵션이 나오지 않는다. 아래와 같이 커맨드라인에서 실행하면 된다. $ sudo disk..
발생일: 2021.04.21 키워드: 다이나모디비, 온디맨드, 오토 스케일링, auto scaling 문제: 다이나모디비를 온디맨드 모드로 쓰고 있다. 배치 작업으로 평소보다 많은 데이터를 PUT 했는데, 아래와 같은 에러가 나온다. Throughput exceeds the current capacity for one or more global secondary indexes. DynamoDB is automatically scaling your index so please try again shortly. 온디맨드 모드는 스케일 제한이 없는 걸로 알았는데 왜 그런걸까? 해결책: 테이블 생성 후, 이전 트래픽 대비 많은 데이터를 넣어서 발생한 문제였다. 요약 먼저: 온디맨드도 내부적으론 오토스케일링으로 ..
발생일: 2021.03.14 키워드: DynamoDB, 다이나모디비 문제: 다이나모디비를 써보면서 헷갈렸던 것들, 생각과 달랐거나 고민했던 내용, 중요하다고 생각되는 것들에 대한 정리 해결: 핫파티션은 프로비저닝 모드에서만 해당됨 - 과금 체계는 프로비저닝 모드와 온디맨드 모드가 있고 - 프로비저닝 모드 - 프로비저닝 모드는 RCU와 WCU를 직접 설정하는데, '초당 처리량' 기준임 - 핫파티션 이슈는 프로비저닝 모드에서만 해당됨 - 초당 요청이 할당 받은 처리량을 초과하지 않게 하기 위해 설계해야 함 - 예약 요금은 프로비저닝 모드에서 쓸 RCU,WCU를 미리 사두는 개념 - 온디맨드 모드 - 사용한 RCU와 WCU 만큼 과금하는 모델 - 사용한 만큼 과금되기 때문에, 처리량의 한계와 핫파티션 이슈가 ..
발생일: 2021.02.16 키워드: DynamoDB, 다이나모디비 문제: DynamoDB에 코세라 강좌가 있어 들으면서 정리했던 노트다. https://www.coursera.org/learn/dynamodb-nosql-database-driven-apps 지금보면 너무 기초적인 것 같은데, 당시 흐릿하게 개념이 잡혔던 터라 전체 컨셉을 이해하기에 좋았다. 지금 보더라도 유심히 기억해야할 만한 특징인 볼드로 표시해뒀다. 내용: Relational Databases and the Problem that Need Solving - RDS(Relational Data System)의 특징 - 정형 데이터를 분석하기 좋음 - 스토리지를 많이 차지하고 - 컴퓨팅 비용이 큼 - CAP 정리: 다음과 같은 세 가지..
발생일: 2021.03.10 키워드: 구글 앱스 스크립트, 구글 앱 스크립트, Google Apps Script, gas, background, setTimeout 문제: 구글 스프레드시트와 슬랙, 구글 앱스 스크립트로 간단한 자동화 태스크를 구축해뒀다. 슬랙을 API 창구로, 구글 앱스 스크립트를 앱 서버로, 스프레드시트를 디비로 사용하고 있다. 예를 들면 이런 작업이다. 1. 슬랙에서 /find_stock_price 같은 슬래시 명령을 치면 2. 구글 앱스 스크립트에서 요청을 받아서 3. 스프레드시트의 값을 수정하거나 조회한 후에 슬랙으로 응답해주는 것이다. 태스크가 조금 복잡해지면서 작업의 응답 시간이 길어지게 됐다. 문제는 슬랙 커맨드의 타임아웃이 3초라는 것... 슬랙 요청에 대해 짧은 응답을 ..
발생일: 2021.03.09 키워드: DynamoDB, 다이나모디비, Partition Key, Sort Key, 파티션키, 정렬키, PK, SK, GSI 문제: 동료들이 다이나모디비의 파티션키(Partition Key)와 정렬키(Sort Key)의 관계를 헷갈려한다. 해결책: 처음엔 개념이 잘 잡히진 않았는데, 알고보니 간단하고 명확한 개념이었다. 다이나모디비로 설계하면서 자꾸 복잡하다고 느끼는 건, 설계 시점부터 스케일 아웃을 고려하고 있기 때문인 것 같다. RDS에선 스케일을 고려했다기보단, 이름 그대로 관계(relation)에 집중해 설계했던 것 같다. 사용할 땐 쿼리를 조합하면 되니, 설계 시점엔 확장이나 호출 샘플보단 관계를 고민했다. (다른 디비를 설계할 때에도 지금처럼 스케일을 고려해 설계..
발생일: 2021.02.22 키워드: yarn config, npm config, registry, npmrc, private registry 문제: 갑자기 전체 태스크가 실패했고, 건너자리 A가 코드 원복까지 했는데도 계속 지속됐다. 에러 문구를 보니 특정 npm 모듈의 리파지터리를 찾지 못하는 문제다. node_modules 디렉토리를 날리고 새로 설치해도 동일한 문제가 발생했다고 한다. 이번에 npm registry 를 변경하는 작업을 준비하고 있었는데, 새로 설치된 모듈이 아직 준비되지 않은 새 레지스트리를 바라본 것이 문제였다. 왜 그런걸까? 해결책: 이번에 옮기려던 레지스트리는 도메인과 권한이 기존과 모두 달랐다. 예를 들어, https://old_registry.example.com 에서 h..
발생일: 2020.02.18 키워드: nosql, dynamodb, 다이나모디비 문제: 이번엔 디비를 NoSQL로 AWS의 DynamoDB를 사용해서 구성해보려고 한다. 아키텍처 디자인을 어떻게 해야할까 고민하던 차에, A가 리인벤트 동영상을 추천해줬는데 내용이 좋다. youtu.be/8rEsuvdL17s 아래는 보면서 정리해둔 내용. 해결책: - 한 애플리케이션에 한 개의 테이블 - 파티션 키는 데이터를 골고루 분산하는 용도로 (데이터 분배 결정) - 고유 값이 많은 속성(카디널리티가 높은 속성) - 균일한 비율로 무작위로 요청되는 속성 - 정렬 키는 기존 RDS에서 인덱스를 사용하는 느낌으로 (쿼리, 다양화) - 1:n, m:n 관계 모델링에 활용 - 효율적/선택적 조회 - 범위 조회 - GSI (G..
발생일: 2021.02.09 키워드: JWT, JSON Web Token, 세션 기반, stateless, Access Token, Refresh Token, 액세스 토큰, 리프레시 토큰 문제: 이번엔 인증 과정에 JWT를 사용해보기로 했다. 건너자리 B가 코드를 다 짜왔고, 자세한 설명까지 보태서 이해가 쏙 되게 공유해줬다. (좋은 내용을 쉽게 이해하고 왔으니^^) 레거시만 운영해왔던 J에게도 JWT를 이용한 인증 관리를 설명해주려고 한다. 기존 환경과 비교해서 이해하기 쉽게 정리해봤다. 해결책: JWT(JSON Web Token)는 인증 토큰을 정의하는 방법에 대한 표준(RFC 7519)이다. (여러 서버 간에) 안전하게 인증 정보를 주고 받을 수 있도록, 인증 토큰을 생성하고 해석하는 방법을 규정한..
발생일: 2020.05.25 키워드: HMAC, salted hash 문제: HMAC 과 hash 에 salt 를 적용한 게 어떤 차이가 있을까? 실제로 쓰다보면 큰 차이가 없는 것 같은데... 해결책: 잘 정리된 글이 있다. security.stackexchange.com/questions/29951/salted-hashes-vs-hmac 요약하면, - 해시 함수는 기본적으로 길이에 제한이 있는 취약점(length extension)이 있음 (예: 모든 해시값에 대한 사전을 만들어두고 역으로 조회) - 이런 사전형 복호화를 방어하기 위해 salt를 적용하는데, (예: hash(원본 + salt)) 이렇게 해도 사전으로 복호화하면 몇 가지 패턴으로 원본과 salt를 구별해낼 수 있음 - 원래 HMAC(메..