FastAPI로 배우는 백엔드 프로그래밍 with 클린 아키텍처 - 모던 파이썬 웹 프레임워크 FastAPI로 TIL 앱 구축하기
한용재 지음 / 제이펍 / 2024년 10월
평점 :
장바구니담기



개요

제이펍 IT 전문서 리뷰어 활동으로 “FastAPI로 배우는 백엔드 프로그래밍 with 클린 아키텍처”를 리뷰한다.

알라딘 링크: http://aladin.kr/p/Sqrkf

리뷰

언젠가 FastAPI를 자동변속 자동차에 비유한 적이 있었다. 편리하게 알아서 해주는 백엔드 프레임워크. 특히나 스웨거 페이지를 알아서 만들어주는 것이 인상적이었다.

이 책은 FastAPI에 대한 간단한 소개에서 한 발 더 나아가 본격적인 백엔드 개발을 위한 뼈대의 전반을 소개해준다. 포어트리, 파이단틱과 같은 도구의 사용에서부터 JWT를 이용한 인증인가까지 알려주며, 기본적인 CRUD와 데이터베이스 연동, 그리고 테스트까지를 모두 소개해준다. 클린 아키텍처로 실제 예제를 구현하여 그 개념을 넘어서서 어떤 효용이 있는지를 느끼게 해준다.

책에서는 훌륭한 개발서적들과 그 개념들이 많이 소개되어 저자의 넓고 깊은 공부를 느끼게 해주는데 이미 읽고 이해했던 독자에게는 되새기는 기회를 주고, 아직은 낯선 개념인 분들에게는 첫인사의 기회를 주어 다음 공부로 나아갈 계기를 만들어준다.

저자가 번역한 처음 시작하는 FastAPI도 마침 읽었었는데 함께 읽으면 좋겠다.




댓글(0) 먼댓글(0) 좋아요(0)
좋아요
북마크하기찜하기 thankstoThanksTo
 
 
 
헬로 Bun - 차세대 자바스크립트 런타임+올인원 개발 키트를 만나다
서대영(달레) 지음 / 제이펍 / 2024년 10월
평점 :
장바구니담기


개요

제이펍 IT 전문서 리뷰어 활동으로 “헬로 Bun”을 리뷰한다.

알라딘 링크: http://aladin.kr/p/Rq9yC

들어가며

자바스크립트는 메인으로 업무에서 다루어본 적은 없고 바닐라 자바스크립트를 공부삼아 만져보거나, Node.js를 유데미 코스 등등으로 이해하고 공부한 적은 있었다. 긱뉴스나 여러 소식을 통해 Node.js와 경쟁하는 런타임 환경으로 Deno, Bun 이야기를 스쳐들었는데 이번에 Bun을 소개하는 책을 서평할 기회가 생겨서 얼른 신청했다.

TL;DR

Bun이 어떤 장점과 기능을 가지고 있는지, 이를 이용해 무엇을 할 수 있는지를 이해하기 쉽게 소개한 책이다. 또한, 책에서 소개하는 내용을 넘어서서 좀더 들여다보고 싶은 분들께 저자가 직접 운영하는 블로그의 관련 글들을 링크로 제공해준다.

Bun의 이런 저런 장점을 읽다보니 떠오른 키워드는 “개발자 친화적” 이라는 것이었다. 기존의 자바스크립트 런타임에서 개발했던 개발자들이 아쉬웠던 부분들을 해소하기 위해 만든 런타임이 아닐까 싶다.

Bun에 대해 가벼운 인사로 알아가고 싶은 분들에게 추천한다.

간단 책 소개

Bun의 설치, 프로젝트 생성과 실행법을 소개한다. Bun은 다른 런타임과는 달리 타입스크립트도 별도의 컴파일 과정없이 바로 실행이 가능하다. 패키지 관리, 모듈을 가져오는 부분을 읽으면 Bun이 CJS(CommonJS), ESM(ECMEScript Modules) 둘 다 매끄럽게 처리한다는 것을 보여준다. Bun으로 CLI, HTTP 서버를 만들 수 있을 뿐 아니라, WebSocket을 런타임 수준에서 제공하여 쉽게 만들 수 있다는 것을 가벼운 예제로 맛보여준다. Bun은 SQLite를 내장하고 Bun에서 제공하는 테스트 모듈까지 있어 개발의 편의를 도모할 뿐 아니라 배포를 위한 번들링까지 자체 번들러를 제공하여 지원해준다.

책은 이런 Bun의 장점, 기능, 할 수 있는 일들을 200페이지 안쪽의 경쾌한 두께에 담아낸다.

기타 인상적이었던 부분, 궁금증

Bun 은 왜 이렇게 빠르지?

ChatGPT에게 물어보았다.

  • Zig: Node.js는 C++, Deno는 Rust로 만들어졌는데 Bun은 Zig 프로그래밍 언어로 만들어졌다. 메모리 관리, 컴파일러 최적화에 더욱 효율적이고 시스템 리소스를 적게 소모하도록 설계된 언어이다.
  • JavaScriptCore: Node.js, Deno는 V8 엔진을 사용하는데, Bun은 Apple의 WebKit 엔진에서 사용하는, 경량화와 빠른 실행속도에 특화되어 있는 JavaScriptCore를 기반으로 동작한다.
  • 기타등등: 바이트코드 캐싱, 멀티스레드 최적화가 잘되어 있다.

Argon2 를 기본 지원하는 Bun

비밀번호 해싱 알고리즘으로 가장 널리알려진 것은 Bcrypt 이겠지만, Bun은 Argon2를 기본지원한다. 사용하는 측면에서는 bcrypt와 별 차이도 없을 뿐더러 비밀번호 해싱 부분은 한 번만 만들어놓으면 손댈 일도 없다. 힘 안들이고 보안에 한층 신경쓴 티를 낼 수 있다. Bun이 개발자 친화적이라는 것을 느낄 수 있는 또 하나의 포인트이겠다.

NanoID vs. UUIDv4

NanoID를 처음 들어봐서 ChatGPT에 물어보았다.

특성 Nanoid UUID v4
길이 기본적으로 21자 (길이 설정 가능) 36자 (고정)
충돌 가능성 낮음 (길이가 짧을 경우 다소 높을 수 있음) 매우 낮음 (충돌 거의 없음)
성능 매우 빠름 빠르지만 Nanoid보다 다소 느림
URL-safe 기본적으로 URL-safe URL-safe
사용성 자바스크립트 환경에서 매우 유리, 다양한 커스터마이징 가능 다양한 언어와 플랫폼에서 기본 지원
정렬 가능성 정렬 불가능 정렬 불가능
표준 준수 표준이 아님 표준화된 형식 (RFC 4122)
가독성 짧고 가독성 좋음 긴 문자열, 하이픈 포함으로 가독성 낮음

어떤 것을 선택해야 할까?

Nanoid를 선택할 때:

  • 짧은 길이의 고유 식별자가 필요하고, 공간 절약이 중요한 경우.
  • URL-safe한 식별자가 필요할 때.
  • 고유 식별자의 성능이 중요한 경우.
  • 고유 식별자의 문자 세트길이를 조정하고 싶은 경우.

UUID v4를 선택할 때:

  • 표준화된 고유 식별자가 필요한 경우.
  • 매우 대규모 시스템에서 고유성을 보장해야 하는 경우.
  • 다양한 언어와 플랫폼에서 호환 가능한 고유 식별자가 필요할 때.
  • 충돌 가능성을 최소화해야 하는 경우.



댓글(0) 먼댓글(0) 좋아요(0)
좋아요
북마크하기찜하기 thankstoThanksTo
 
 
 
소프트웨어 개발에 ChatGPT 사용하기 - 챗GPT를 활용한 프로그래밍부터 리팩터링, 문서 자동화, ChatGPT API, 랭체인까지
오노 사토시 지음, 김진호 옮김 / 제이펍 / 2024년 9월
평점 :
장바구니담기



개요

제이펍 IT 전문서 리뷰어 활동으로 “소프트웨어 개발에 ChatGPT 사용하기”를 리뷰한다.

알라딘 링크: http://aladin.kr/p/zqA2G

기대와 걱정

LLM, ChatGPT를 제목에 달고 나오는 책이 쏟아지는 상황에 단순한 사용기를 엮은 경우도 많고, 조금만 시간이 지나도 LLM의 성능이 몇 계단씩 나아지기에 걱정이 되면서도, 적극적으로 ChatGPT를 활용하고 있는 소프트웨어 개발자의 노하우를 배우는 지점이 있을 것이라는 기대를 가지고 읽게 되었다.

TL;DR

40년이 넘는 경력의 소프트웨어 개발자이며 여러 개발 서적을 집필한 저자 “오노 사토시”가 소프트웨어 실무의 다양한 영역에서 ChatGPT를 사용해본 경험을 공유해주는 좋은 책이다. 이미 잘 활용하고 있는 부분도 있을 것이고, 이렇게 사용할 수도 있겠구나 싶은 부분도 만날 것이다.

나 자신은 ChatGPT를 포함한 다양한 AI 도구들의 도움을 많이 받으며 개발을 하고 있는데, 의외로 주위에서 사용하지 않거나 기본적인 질문과 답만을 사용하는 경우를 종종 본다. 이 책이 그런 분들에게 영감을 주고 많이들 시도하는 계기를 마련해주었으면 한다.

덧붙여서, 책에서 귀멸의 칼날, 최애의 라이브, 북두신권, 바람의 검심에 빗댄 이야기가 나오는데 이런 경쾌함이 기술서의 무게를 덜어주었고, 그러면서도 각 장의 제사(題辭)는 아인슈타인, 개발자 겸 해군제독, 노자의 도덕경, 레비스트로스를 넘나들며 저자의 넓고 깊은 지식 내공을 느끼게 해주었다.

책 리뷰

소프트웨어 개발이라는 영역에서의 다양한 ChatGPT의 활용을 다룬 책이다보니 인상적이었던 활용을 위주로 언급해보려 한다.

트랜스포머

ChatGPT의 활용을 이야기하기 앞서 LLM이 어떻게 동작하는지에 대한 최소한의 마중물을 준비해두었다. 트랜스포머의 개념에 대한 소개와 그 출발점이 되는 주요 논문을 언급해두어 관심있는 이들이 더 찾아가볼 수 있도록 해주었다.


테스트코드를 먼저 요청하라(33p)

무릎을 쳤다. 원하는 코드를 작성해달라는 요구는 많이 했었다. 필요하다면 생성한 코드에 대한 테스트코드를 부탁한 적도 있었다. 하지만 생각해보니 테스트코드를 먼저 요청하면 얻는 이점이 많다. ChatGPT에게 우리의 요구사항을 좀더 명확히 말해주는 것이다.

프롬프트 + 생성해준 코드(75p)

ChatGPT에게 조금 더 이해하기 쉽게 요청하라는 말로 들렸다. 물론 LLM이 하루가 다르게 성장하다보니 언젠가는 이런 것도 군더더기가 될 수 있겠다. 하지만 질문과 답이 지나치게 많이 오가면 우리의 요청에 대해 어디에 좀더 집중해서 답을 해야 할지 명확하지 않을 수 있기에 집중해야할(attention) 코드를 프롬프트에 함께 넣어 요청하면 우리가 원하는 답을 좀더 쉽게 얻어낼 수 있다. 아무래도 찰떡같이 말하면 찰떡같이 알아들을 확률이 높아진다.

기계어도 역어셈블 할 수 있다(92p)

Python을 Go로, JavaScript를 Ruby로 변환할 수는 있다 생각했었다. 자신이 잘 알고 있는 언어로 만든 프로그램을 다른 언어로 만들어보는 건 좋은 언어공부의 방법이라 생각했었다. 그런데 생각해보니 기계어 역시 다른 언어로 번역이 가능하다는 것에 정신이 번쩍 들었다. 역어셈블을 하기 힘들게 난독화하는 일종의 보안도 LLM의 머지않은 미래에는 무용지물이 될 수 있겠다.

docs as code - 코드로 작성할 수 있다면 ChatGPT도 할 수 있다(134p)

mermaid로 다양한 다이어그램을 만들어 달라거나, dbdiagram.io(129p)에 Entity-Relationship Diagram(ERD)을 그려달라 요청해본 적이 있었고 만족스러웠다. 어느정도 기본적인 틀만 생성해줘도 세세한 부분을 조금만 조절하면 원하는 결과를 얻을 수 있었다.

책에서는 Python 의 diagrams 라이브러리를 소개하는데 클라우드 구성도(cloud infrastructure diagram)를 코드로 표현할 수 있는 라이브러리이다. 그리고, 코드로 작성할 수 있다면 ChatGPT도 할 수 있다.

마법의 프롬프트 - 다르게 시도해줘(169p)

ChatGPT의 장점중 하나는 질리지도 지치지도 않는다는 것이다. 생성한 코드가 동작은 하더라도 원하는 성향, 철학, 스타일과 다르다면 단 한 문장으로도 다양한 해법을 얻어낼 수 있다.

“같은 사양으로 다른 코드를 생성해주세요.”

TDD는 ChatGPT에게 few-shot learning 이다(174p)

few-shot learning 이란 AI에게 몇몇 예시를 들어주고 그처럼 하라고 말해주는 것이다. 프롬프트에 이를 넣어주면 좀더 원하는 결과에 가까운 응답을 받을 수 있다. TDD는 바로 그러한 역할을 해주는 것이다.

소크라테스처럼 질문해줘 - Socratic tutor(192p)

최근 NotebookLM 이라는 구글의 서비스를 알게 되었다. 입력한 정보들을 기반으로 두 명이서 진행하는 팟캐스트를 만들어주는 기능이 있는데 심지어 내가 작성한 기술 문서라 하더라도 이렇게 팟캐스트 형식으로 생성하여 듣다보면 이해가 더욱 깊어지는 경험을 하였다. 참고로 아직은 영어로만 가능하다. Socratic tutor란 특정한 주제와 내용을 알려주고 그에 대해 ChatGPT가 소크라테스인양 나에게 질문을 하게 하여 좀더 이해를 돕기도 하고 충분히 이해하지 못한 부분이 어딘가인지도 생각해보게 도와준다.

이 둘을 접목하면 학습에 큰 진전을 얻을 수 있겠다는 생각이 들었다. 떠오르는 단계는 다음과 같다.

  1. 허겁지겁 공부를 하고 요약을 해둔다. 벼락치기 시험공부를 상상해도 좋다.
  2. 정리해둔 내용을 NotebookLM 에게 주어 팟캐스트를 생성하게 하여 듣는다. 서비스에는 또한 입력한 정보들에 대해 질문할 수 있는 기능도 있으니 이를 활용해도 좋다.
  3. 마지막으로 정리해둔 내용을 소크라테스처럼 나에게 질문해달라 한다. 시험을 치기 직전에 친구들끼리 서로 문제를 내어본 경험을 떠올려도 좋다. 무엇을 얼마나 이해하고 있는지, 부족한 부분이 어디인지 알 수 있을 것이다.

학습에의 활용

ChatGPT에게 배우고 싶은 영역을 알려주며 커리큘럼이나 학습의 단계를 요청할 수도 있다.

API의 활용

사내 데이터베이스, 랭체인, 라마인덱스, 에이전트 등의 키워드들을 만날 수 있는데 아무리 LLM이 발전하더라도 학습할 수 없고, 접근할 수 없는 영역들에 대한 대응이나, 좀더 자동화되어 세세한 지시없이도 일을 해주는 미래에 대한 아이디어를 얻을 수 있을 것이다.


댓글(0) 먼댓글(0) 좋아요(0)
좋아요
북마크하기찜하기 thankstoThanksTo
 
 
 
커맨드라인 러스트 - cat, grep, ls 등 14가지 유용한 CLI 도구를 클론 코딩하며 배우는 러스트 활용
켄 유엔스-클라크 지음, 조성만 옮김 / 제이펍 / 2024년 8월
평점 :
장바구니담기



개요

제이펍 IT 전문서 리뷰어 활동으로 “커맨드라인 러스트”를 리뷰한다.

알라딘 링크: http://aladin.kr/p/Lqlxs

리뷰 동기

Go를 좋아하는 Gopher라면 Rust와 비교하는 글들을 넘쳐나게 보아왔을 것이다. 비교적 비슷한 시기에 만들어졌고, 컴파일 언어이며 높은 성능을 자랑하다보니 그런가보다. 재미있는 인연이라면 Rust를 만든 그레이든 호어(Graydon Hoare)와 고언어의 고루틴 개념의 뿌리가 되는 CSP(Communicating Sequential Processes)를 만든 토니 호어(Tony Hoare)가 같은 성이라는 것. 책에서도 언급되지만 둘은 아무 관계도 아니라 한다.

아무튼, Go에 비해 좀더 메모리 안정성이 높고, 성능도 조금이나마 우월한 Rust는 시스템 프로그래밍과 같은 한 번 제대로 만들어두면 안정적이고 고성능을 보장해주는 프로그램을 만들 수 있다는 인상이었다. 여기에 더해서 함수형 프로그래밍 패러다임도 익혀볼 수 있다는 기대도 있었다.

관심을 가지고 항상 배워보고 싶었지만 인연이 없어 만져보지 못하다가 이번 서평의 기회에 언어를 제법 맛볼 수 있었다.

특징

Rust에 대한 기본 문법과 개념은 다른 책이나 강의를 통해 한 번은 익히고 나서 읽으면 좋을 책이다. 그렇다고 어렵다는 것은 아니다.

이 책은 학창시절의 문제집과 같다. 교과서를 통해 기본 개념을 익힌 다음에 문제집을 반복해서 풀어서 익숙해지는 것처럼, “커맨드라인 러스트”에서 소개하는 예제 프로그램들을 하나씩 따라가며 Rust의 개념과 매력이 몸속으로 스며들게 하는 것이다.

STDOUT/STDERR 나, TDD과 같은 개발 전반의 개념들이나, 컴퓨터 역사 초기의 천재 선배들이 한땀 한땀 만들어낸 유닉스 명령어들의 내부가 어떻게 구현되어 있는지 가늠해볼 수 있는 것은 덤이다.

기타등등

각 장의 앞머리에 등장하는 데이 마이트 비 자이언츠(They Might Be Giants)라는 그룹이 너무나 궁금해져서 찾아보았다. 1980년대 영국 스타일의 음악을 보여준 미국 얼터너티브 락 밴드라 한다.

https://youtu.be/NhjSzjoU7OQ?si=Ae9NdSWtjPauHzxF



마무리

Rust에 대한 기본 개념이 없는 채로 책의 모든 예제를 실습해보기에는 2주라는 서평 기간은 부족했던 것이 사실이다. 몇몇 예제만을 선별해 실습해볼 수 밖에 없었지만 책 전반을 즐겁게 읽었던 것이 사실이다. 언제고 Rust에 좀더 친숙해지고 나서는 이 책을 다시 천천히 정주행하며 즐길 언젠가를 기대해본다.


댓글(0) 먼댓글(0) 좋아요(0)
좋아요
북마크하기찜하기 thankstoThanksTo
 
 
 
실전 SQL 퀵스타트 - 쉽고, 빠르고, 재미있게 익히는 관계형 데이터베이스
월터 실즈 지음, 한선용 옮김 / 제이펍 / 2024년 5월
평점 :
장바구니담기



개요

제이펍 IT 전문서 리뷰어 활동으로 “실전 SQL 퀵스타트”를 리뷰한다.

알라딘 링크: http://aladin.kr/p/zMw2F

리뷰 동기

최근 데이터, 데이터베이스에 대한 책, 유튜브를 연달아 보았다.

하나의 주제로 다양한 넓이와 깊이의 콘텐츠를 이어서 보면 그 시너지가 있다. 이 책은 SQL을 분석에 사용해야하는 초급자의 입장에서 챙겨봐야하는 부분들을 다룬다. 또 새로운 관점으로의 접근을 하는 즐거움이 있었다.

특징

이 책은 목표가 선명하다. 그리고, 그 목표를 성공적으로 달성한다.

SQL을 이용하여 데이터베이스에서 원하는 데이터를 추출해내어야 하는 초급자가 빠르게 SQL에 익숙하게 해주는 것이다.

  • 초급자를 위한 책이지만 저자는 이 분야에 오래 종사한 전문가인데다 그렇게 다져온 지식을 사람들에게 알려주는 것에도 전문가이다.
  • 목표와는 무관한 기술의 역사나 원리는 과감하게 제외하였다.
  • 바로 실전이다. 제공한 데이터베이스에서 원하는 값을 얻어내는 방법을 바로 하나씩 해본다.
  • 한 걸음 더, 그리고 데이터 분석 체크포인트는 가르쳐주는 것을 따라하는 것을 넘어 직접 생각하고 시도해보는 기회를 준다.

인상적이었던 부분

초급을 위한 책이면서도 저자는 전문가라는 걸 느끼게 하는 부분을 종종 만났다. 다음은 그 일부이다.

문제를 우선 일상에서 우리가 쓰는 자연어로 표현을 해보자. 잘 정리된 문장을 만들고 나면 SQL 질의는 자연히 만들어질 것이다.

  1. 쿼리의 목적을 한 문장으로 간결하게 말한다면 어떤 문장이 될까? p45

이 문제를 해결하기 위해서는 쿼리를 일상적인 언어로 바꿔봐야 합니다. p125

서브쿼리를 사용할 때에 저자는 자신만의 컨벤션으로 외부 쿼리의 연산자, 함수, 키워드는 대문자, 내부 쿼리의 경우는 소문자를 쓴다. 이런 소소하지만 세심한 규칙은 전문가들의 특징이다.

연산자, 함수, 키워드는 대소문자를 가리지 않습니다. 필자는 개인적으로 외부 쿼리에는 대문자를 쓰고, 서브쿼리에는 소문자를 쓰는 게 익숙합니다. 이렇게 하면 외부 쿼리와 내부 쿼리를 구별하기 쉽기 때문입니다. p139

서브쿼리와 조인의 상호 호환성과 어느 것을 쓰는 것이 더 좋은가에 대한 전문가의 조언이다. 책을 읽으며 서브쿼리가 편하다 생각했기에 더욱 인상적이었다.

데이터베이스 프로그램의 입장에서는 JOIN 문이 최적화(omtpmizer)를 더 잘 활용하기 때문에 서브쿼리보다는 조인을 선호합니다. 서브쿼리를 만들면 ‘값 중심’으로 생각하게 되고, 이런 방식은 일상적인 사고방식과 비슷하므로 더 쉽게 느껴집니다. 하지만 관계형 데이터베이스를 잘 다루기 위해서는 ‘집합 중심’의 사고방식이 필요하므로 시간이 조금 더 걸리더라도 조인으로 문제를 풀길 권하는 전문가도 있습니다. p148

현재 회사에서 만들어 사용하는 뷰는 이와 같은 컨벤션을 쓰지 않기에 고개를 끄덕였다. 꼭 이렇게 쓰지 않더라도 view_ 와 같이 prefix를 쓰면 어떨까싶다.

뷰 이름은 V_로 시작하는 게 좋습니다. 이런 규칙을 정해두면 누구든 이 코드가 뷰라는 걸 금방 알 수 있습니다. p152

책은 다음 그림과 같이 지면을 아끼지 않고 표를 최대한 상세히 보여주는데 이러한 표 조차 세심하게 고려해 넣은 것이 느껴졌다.


결론

SQL을 처음 접하거나, 아직 익숙치 않은 분들이라면 이 책을 따라가며 하나씩 직접 타이핑해가며 배우기를 권한다. 그리고 책 속의 한 걸음 더, 그리고 데이터 분석 체크포인트까지 놓치지 말고 해보시라(심지어 맨 뒤에 데이터 분석 체크포인트 정답지까지 있다). 군더더기 없이 잘 짜여진 과정이기에 이렇게 하더라도 시간이 많이 걸리지 않을 것이고 어느새 SQL에 익숙해져 있을 것이다.




댓글(0) 먼댓글(0) 좋아요(0)
좋아요
북마크하기찜하기 thankstoThanksTo