기술서 읽고 정리 6

『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의 하위개념으로 자원의 위치를 표현한다. 예를..

The Art of Readable Code를 읽고

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

SQL Antipattern -Avoiding the Pitfalls of Database Programming- 을 읽고

읽게 된 경위 SQL을 다뤄본 지 얼마 되지 않았고 체계적으로 배워본 적도 없는지라 평소에 비효율적인 쿼리를 실행하는 일이 많던 차에 상사에게 추천받아 읽게 되었다. 사실 회사 생활 하면서 DB를 관리하는 엔지니어가 아니더라도 A/B 테스트 결과 분석, 유저 경향 분석 등 시스템 개선을 위한 의사결정에 꼭 필요한 데이터를 다루기 위해서는 SQL에 능숙한 편이 좋다는 것을 깨닫고 있다. 우리 회사에는 SQL에 굉장히 능숙한 마케팅 팀장님(엔지니어도 아니고 다른 프로그래밍 언어도 사용할 줄 모름)이 계시는데 이 분은 본인이 데이터를 만지면서 여러 분석을 통해 다음 마케팅 방향을 잡는다. 이걸 보면서 나는 엔지니어인데 이 분만큼도 SQL을 다루지 못하는 것에 부끄러움도 느꼈지만 다른 비 엔지니어 팀원이 데이터..

도메인구동설계입문을 읽고

원제: ドメイン駆動設計入門 저자: 나루세 마사노부 읽게 된 경위 내가 속한 팀에서 프로토타입으로만 구현되었던 알고리즘을 DDD(Domain Driven Design)로 갈아엎었기 때문에 알아야했다. Domain Driven Design DDD란 도메인 (영역) 에 대한 지식에 초점을 맞춘 설계법이다. 여기서 도메인은 이제부터 프로그래밍 해야하는 시스템에서 가장 중심이 되는 개념을 가리킨다. 예를 들어, 회계 시스템에서는 금전, 회계 장부 등이 그럴 것이고 물류 시스템에서는 제품, 창고, 운송 수단 등이 그럴 것이다. 난 자연언어처리를 다루고 있으니 text vectorizer 를 예로 들어보겠다. 먼저 벡터로 만들기 위한 문장이 있을 것이고 이를 형태소분석 해서 얻은 형태소, 토큰, 문장에서 얻은 토큰 ..

SICP Building Abstractions with Procedures.The Elements of Programming (1.1)

Foreword Lisp 인공지능 소프트웨어를 만들기 위해 사용하는 프로그래밍 언어 리스트 형태로 된 데이터를 처리하도록 설계되었는데 프로그램과 데이터가 같은 형태이기 때문에 자료구조가 프로그램처럼 시행될 수 있으며, 프로그램 또한 리스트로 연산되고 기본자료구조가 linked list 인 것을 이용해 일반적인 연산을 수행하기도 함 linked list: head 가 존재하며 단일방향, 쌍방향, 순환형으로 노드가 이어진 리스트 linked list 는 다음 요소의 메모리 주소만을 갖고 있기 때문에 특정 데이터를 찾기 위한 순차탐삭에서는 처음부터 살펴봐야 하니 느림 하지만 동적 할당을 하기 때문에 크기를 미리 지정하지 않아도 됨 동적 할당: 실행 시간 동안 사용할 메모리 공간을 할당하는 것. 사용이 끝나면 ..