전체 글 85

『Web API The Good Parts』를 읽고 - 엔드포인트 설계와 리퀘스트 형식

API로 공개할 기능을 설계하기 내부구조를 공개해선 안된다. 더 높은 차원의 기능을 공개해야 한다. 예를 들어, 아래와 같은 URI는 아키텍처를 특정당하기 쉽고 이미 쇄약한 점이 공개되어있기 때문에 공격하기도 쉽다. http://api.example.com/cgi-bin/get%5C_user.php?user=100 URI가 반영해야 하는 것은 기능이나 데이터 구조나 의미이지 서버가 어떻게 움직이는지가 아니라는 것이다. 기본적인 설계 짧고 입력하기 쉬운 URI 예를 들어 아래와 같은 URI가 있다고 했을 때 service, api와 같이 비슷한 의미가 중복해서 적혀있다. http:// api.example.com/service/api/search 아래처럼 간결하게 할 수 있다. http://api.exam..

『Web API The Good Parts』를 읽고 - Web API란 무엇인가

각 개념 Web API HTTP프로토콜을 이용해 네트워크를 통신을 하는 API를 말한다. Web API라고 하면 SOAP(Simple Object Access Protocol)이나 XML-RPC를 떠올릴 수 있으나 이 책에서는 URI에 액세스 하면 XML이나 JSON을 반환하는 심플한 API를 다루고 있다. API Application Programming Interface의 약자로 외부에서 통신할 수 있도록 정한 사양을 가리킨다. URI와 URL URI Uniform Resource Identifier의 약자로 인터넷 상의 자원을 나타내는 주소이다. URL Uniform Resource Location의 약자이다. 원래 단어에서 알 수 있듯이 URL은 URI의 하위개념으로 자원의 위치를 표현한다. 예를..

이미 push한 commit 메시지를 수정하기

요즘 commit 메시지를 영어로 쓰려고 하는데 push 해놓고 보니까 문법이 틀렸다. 이럴 때 어떻게 메시지를 어떻게 수정하는지 찾아봤으니 메모를 남겨놓는다. 먼저 몇 번째 commit 메시지를 수정해야 하는지 확인한다. # 이미 작업 중인 브런치라고 가정하고 $ git log commit {commit_id1} (HEAD -> feature/some-branch, origin/feature/some-branch) Author: github_id Date: Tue Oct 17 15:02:20 2023 +0900 correct message 1 commit {commit_id2} Author: github_id Date: Tue Oct 17 15:00:48 2023 +0900 correct message..

기타 메모 2023.10.17

Google Guice는 언제 쓸까

회사에서 내가 주로 맡고 있는 시스템이 Kotlin으로 만든 웹 어플리케이션의 일부인데 Google Guice 프레임워크를 사용하고 있었다. 이제까지 굳이 다 파악할 필요가 없어서 읽지 않았는데 컨테이너화를 하려고 보니 알아야겠어서 이것저것 찾아봤다. 먼저, Google이 DI용으로 만든 프레임워크다. 주스라고 읽는다. 2007년인가에 만들어진 꽤 오래된 프레임워크다. DI가 무엇이냐 하면 Dependency Injection이라 해서 의존관계를 줄여주는 소프트웨어 패턴이다. 예를 들어 아래와 같은 구현은 Client가 Service에게 의존하고 있다. 내부에서 초기화하기 때문에 Service의 변화에 맞춰 Client를 수정해야 할 것이다. class Service: def do(self) -> Non..

기타 메모 2023.09.15

elastic/elasticsearch를 읽어보자 1: gradlew

서론: 간단히 배경 회사에서 2021년 하반기부터 검색 쪽을 맡아서 개발하고 있는데 정작 Elasticsearch(이하 ES)의 내부 구조를 전혀 모르니 읽어봐야겠다. 이 글을 적는 시점의 가장 최신 버전인 8.2가 대상이다. 본론 소스: https://github.com/elastic/elasticsearch ES는 Gradle로 구축하게끔 되어있다. $ ./gradlew localDistro Gradle이란 Groovy나 Kotlin DSL을 사용하는 빌드시스템이다. Kotlin DSL이 가독성이 더 좋고 컴파일 시간을 체크하거나 IDE와 호환이 되기 때문에 많이들 선호하는 편이다. JVM에서 실행되기 때문에 Java, Kotlin, Scala 등 JVM 계열 언어로 만들어진 모듈을 빌드할 때 사용한..

로컬에서 AWS Elastic Container Registry로 Docker 이미지 push하기

AWS 콘솔 화면에서 View push commands로 확인할 수 있지만 일단 메모. # Docker 로그인 $ aws ecr get-login-password --region {region} --profile {profile_name} | docker login --username AWS --password-stdin {account_id}.dkr.ecr.{region}.amazonaws.com # 컨테이너 만들기 $ docker build -t {local_image_name} -f path/to/Dockerfile . $ docker tag {local_image_name}:{tag} {account_id}.dkr.ecr.{region}.amazonaws.com/{remote_container_n..

AWS 노트 2023.07.18

cdk bin디렉토리 안에 있는 앱 파일 이름 바꾸기

예를 들어 파일 구조가 아래와 같을 때 cdk.ts가 app파일인데 |--- cdk | |--- bin | | |--- cdk.ts | |--- lib | | |--- some-stack.ts | |--- test | | |--- some-stack.test.ts | |--- cdk.json | |--- package.jsonapp 파일 이름만 단순히 바꾸면 ---- cdk | |--- bin | | |--- new-cdk.ts | |--- lib | | |--- some-stack.ts | |--- test | | |--- some-stack.test.ts | |--- cdk.json | |--- package.json아와 같은 에러가 난다. node:internal/modules/cjs/loader:..

AWS 노트 2023.06.08

The Art of Readable Code를 읽고

2020년 9월에 회사 내부 블로그(일본어)로만 적었던 글인데 오랫동안 게으름 피우며 방치했다가 드디어 이 블로그에도 기록을 남겨두려고 번역했다. 읽은 계기 상사와 1on1을 하면서 프로그래밍에 대한 기초지식을 다지려면 The Art of Readable Code같은 책을 읽어야 한다는 조언을 받았으므로 읽기 시작했다. 특히 이 책이 도움이 되는 건 엔지니어로 입사한 직후(1년 이내)라고 하니 읽어야겠다 싶었다. 내용 정리 크게 나누자면 '이해하기 쉬우면서 가독성도 높은 코딩법'와 '테스트 코드의 중요성'이라고 할 수 있다. 남이 읽어도 이해할 수 있는 코드를 구현하자 1. 이해하기 쉬운 코드란 어떤 것일까 이 책에서는 좋은 코드를 단시간에 읽을 수 있는 짧은 코드가 아니라 ..

Kibana 웹페이지에 접속이 안될 때

제대로 Kibana를 서버에 설치했는데 웹페이지에 접속이 안될 때는 경험상 거의 아래 두 경우였다. 502 Kibana service is not ready yet. Kibana가 출력하는 로그( /var/log/kibana/kibana.stdout 라든가 /var/log/kibana/kibana.stderr 라든가)를 확인하는게 순서상 맞지만, 사실 아래가 원인일 가능성이 크다. 502에러일 경우: Kibana자체가 기동하지 않음 # 프로세스 확인했을 때 kibana.yml가 있으면 됨 $ ps aufx | grep kibana # 혹은 service status를 확인 $ service kibana status # 만약 kibana.yml가 없거나 stopped일 경우 $ service kibana ..

기타 메모 2022.03.24