처음 처음 | 이전 이전 | 1 | 2 |다음 다음 | 마지막 마지막
실무에서 SQL을 다루는 기술 - PostgreSQL부터 MySQL, SQLite까지
마크 사이먼 지음, 조은옥 옮김 / 한빛미디어 / 2025년 6월
평점 :
장바구니담기


한빛미디어 서평단 <나는리뷰어다> 활동을 위해서 책을 협찬 받아 작성된 서평입니다.


1. 이 책을 선택한 동기

프론트엔드 개발자로써 DB를 직접 다룰 일이 없어 SQL을 잘 몰랐었어요. 그럼에도 백엔드를 잘알고 싶은 욕구도 있었고, 특히 사이드 프로젝트를 할 때 supabase를 주로 사용하기 때문에 SQL를 익히고 싶었죠. SQL을 몰라도 테이블 에디터를 이용해서 만들 수도 있었지만, 결국은 SQL로 구성되기 때문에 더 효율적으로 테이블을 관리하기 위해서는 역시 SQL을 알아야겠다는 생각이 들었어요.

cursor를 쓸 때 SQL로 알려주기도 하고, supabase mcp를 사용할 때도 역시 SQL로 작성합니다. 답변에 대해서 옳고 그름을 판단하기 위해서는 SQL 문법에 익숙해질 필요가 있었고, 질문을 다시 할 때도 역시 SQL을 잘알아야 필요한 답변을 얻어낼 수 있겠다는 생각도 들었습니다. 때문에 이번 기회에 제대로 SQL을 익히기 위해 '실무에서 SQL을 다루는 기술'을 읽기 시작했어요.


2. 어떤 책인지

'실무에서 SQL을 다루는 기술'은 조재연 저자가 쓴 실무 중심의 SQL 가이드북입니다. 이 책은 단순한 SQL 입문서가 아니라, 실제 업무에서 마주치는 복잡한 데이터 문제들을 SQL로 해결하는 방법을 체계적으로 다루고 있어요. SELECT, INSERT, UPDATE, DELETE 같은 기본 문법은 이미 안다고 가정하고, 그 위에서 실무에서 진짜 필요한 고급 SQL 기법들을 단계별로 설명합니다.


책의 구성을 보면 윈도우 함수, 서브쿼리, 조인 최적화, 집계 함수 활용법 같은 고급 문법부터 시작해서, 실제 비즈니스 시나리오에서 자주 등장하는 데이터 분석 패턴들(순위 매기기, 이동평균, 전년 동기 대비 등)을 다뤄요. 마지막에는 쿼리 성능 최적화와 실행 계획 분석 같은 실무에서 꼭 필요한 내용까지 포함되어 있습니다.


특히 PostgreSQL, MySQL, SQL Server, Oracle 등 주요 DBMS별 문법 차이와 특화 기능들을 함께 설명해주는 점이 인상적이었어요. supabase(PostgreSQL)를 사용하는 저에게는 PostgreSQL 관련 내용을 바로 실습해볼 수 있어서 더욱 유용했습니다.


3. 특히 인상적이었던 점

가장 인상깊었던 건 윈도우 함수를 설명하는 방식이었어요. ROW_NUMBER(), RANK(), LAG(), LEAD() 같은 함수들을 단순히 문법으로만 설명하는 게 아니라, "월별 매출 순위를 구해보자", "전월 대비 증감율을 계산해보자" 같은 실제 비즈니스 상황과 함께 제시해주니까 '아, 이럴 때 이걸 쓰는구나!'라는 게 바로 이해되었어요.


또 하나 인상적이었던 건 복잡한 조인 쿼리를 단계별로 분해해서 설명하는 방식이었습니다. 처음에는 간단한 INNER JOIN부터 시작해서, 점점 복잡한 다중 테이블 조인과 서브쿼리가 결합된 형태까지 차근차근 빌드업해가는 과정이 정말 체계적이었어요.


그리고 CTE(Common Table Expression, WITH 절)를 활용한 복잡한 쿼리 구조화 방법도 눈에 띄었습니다. 기존에는 하나의 긴 쿼리로 모든 걸 처리하려고 했는데, CTE를 사용해서 단계별로 데이터를 가공하고 최종적으로 결합하는 방식을 보니까 훨씬 가독성 있고 유지보수하기 쉬운 코드를 작성할 수 있겠다는 생각이 들었어요.

4. 덕분에 무엇을 배웠는가

첫째, supabase에서 복잡한 쿼리를 직접 작성할 수 있게 됐습니다. 이전에는 테이블 에디터로만 데이터를 다뤘는데, 이제는 SQL 에디터에서 직접 복잡한 집계 쿼리나 조인 쿼리를 작성할 수 있게 되었어요. 특히 사용자 행동 데이터를 분석할 때 윈도우 함수를 활용해서 세션별 첫 방문 시간, 마지막 액션 등을 한 번의 쿼리로 구할 수 있겠다는 생각이 들었어요.


둘째, cursor나 AI 도구들이 생성해주는 SQL 쿼리를 이해하고 수정할 수 있게 되었어요. 이전에는 AI가 작성해준 쿼리를 그대로 복사해서 사용했는데, 이제는 쿼리의 의도를 파악하고 필요에 따라 수정하거나 최적화할 수 있을 것 같아요. 특히 WHERE 절의 조건을 바꾸거나 ORDER BY를 추가하는 정도는 자신있게 할 수 있게 되었습니다.


셋째, 데이터베이스 설계에 대한 이해도가 높아졌습니다. SQL을 제대로 배우다 보니 정규화, 인덱스, 외래키 같은 개념들도 자연스럽게 이해하게 되었어요. 테이블을 설계할 때 단순히 필드만 추가하는 게 아니라, 쿼리 성능을 고려해서 인덱스를 설정하거나 적절한 데이터 타입을 선택할 수 있게 되었죠.


5. 좋았던 점

1. 실무 시나리오 중심의 설명

각 개념을 설명할 때 추상적인 문법 설명에 그치지 않고, 실제 업무에서 마주칠 수 있는 구체적인 상황을 제시해준 점이 정말 좋았어요. "이달의 상위 10% 고객을 찾아라", "전년 동월 대비 매출 증감율을 구해라" 같은 현실적인 요구사항을 SQL로 어떻게 해결하는지 보여줘서 학습 동기가 계속 유지됐습니다.

2. 점진적 학습 구조

간단한 개념부터 시작해서 점점 복잡한 내용으로 넘어가는 구성이 정말 체계적이었어요. 예를 들어 집계 함수를 설명할 때도 단순한 COUNT, SUM부터 시작해서 GROUP BY, HAVING, 그리고 윈도우 함수와의 조합까지 자연스럽게 연결되는 흐름이 좋았습니다.

3. DBMS별 문법 차이 설명

PostgreSQL, MySQL, SQL Server, Oracle 등 주요 DBMS별로 문법 차이를 함께 설명해준 점도 큰 장점이었어요. 현재 저는 사이드 프로젝트를 위해 supabase(PostgreSQL)를 주로 사용하는데, PostgreSQL 특화 기능들도 별도로 설명되어 있어서 바로 실습해볼 수 있었어요.

4. 성능 관점에서의 접근

단순히 결과를 얻는 방법만 알려주는 게 아니라, 같은 결과를 얻는 여러 가지 방법 중에서 어떤 게 더 효율적인지, 실행 계획은 어떻게 다른지까지 설명해줘서 실무에서 바로 적용할 수 있는 지식을 얻을 수 있었습니다. 특히 인덱스 활용 전략이나 조인 순서 최적화 같은 내용이 유용했어요.


6. 아쉬운 점

1. 기초 문법에 대한 설명 부족

책 제목에 '실무에서'라고 되어 있어서 어느 정도 예상했지만, 정말 기본적인 SQL 문법은 안다고 가정하고 시작합니다. SELECT, FROM, WHERE 같은 기본 문법부터 차근차근 배우고 싶은 완전 초보자에게는 진입장벽이 있을 수 있습니다. 처음 몇 장은 따라가기가 좀 버거웠습니다.

2. 실습 환경 구축 가이드 부족

각 DBMS별 설치나 실습 환경 구축에 대한 가이드가 부족했어요. Github 저장소를 예제로 제공해주긴 했지만, SQL에 익숙하지 않다면 어떻게 구축을 해서 어떻게 테이블을 생성하고 DB를 만들어갈 수 있는지 막막할 수 있습니다.

3. 최신 SQL 표준 반영 부족

책에서 다루는 내용은 대부분 안정적이고 검증된 기법들이지만, 최근에 추가된 SQL 표준이나 각 DBMS의 최신 기능들에 대한 언급은 상대적으로 적었어요. 특히 JSON 데이터 처리나 새로운 윈도우 함수들 같은 최신 기능들도 다뤘다면 더 완성도 높은 책이 되었을 것 같습니다.


7. 이 책을 읽은 덕분에 기대되는 변화

이 책을 읽고 나서 데이터를 바라보는 관점이 많이 달라졌습니다. 앞으로는 사이드 프로젝트에서 supabase를 훨씬 활용도 높게 사용할 수 있을 것 같습니다. 복잡한 대시보드나 통계 페이지를 만들 때 프론트엔드에서 모든 계산을 처리하는 게 아니라, SQL로 필요한 데이터를 미리 집계해서 받아올 수 있게 될 것 같았어요.


또한 백엔드 개발자와의 협업에서도 더 구체적이고 정확한 소통이 가능해질 것 같습니다. "~한 데이터가 필요해요"라고 막연하게 요청하는 게 아니라, "~ 조건으로 조인해서 이런 집계 결과를 주세요"라고 구체적으로 요청할 수 있게 되었어요. 심지어 간단한 쿼리는 직접 작성해서 제안할 수도 있을 것 같아요.


특히 실질적으로 활용할 수 있는 것은 cursor나 AI를 사용할 때 데이터 설계 관련 질의를 할 때 더 효과적으로 활용할 수 있게 된 점입니다. 이제는 AI가 생성한 SQL 쿼리를 이해하고 검증할 수 있으니까, 더 정확한 질문을 하고 더 좋은 결과를 얻을 수 있을 것이라 생각해요. SQL을 모를 때는 AI가 작성해준 쿼리가 맞는지 틀렸는지도 몰랐는데, 이제는 어느 정도 판단할 수 있게 되었으니까요!


댓글(0) 먼댓글(0) 좋아요(0)
좋아요
공유하기 북마크하기찜하기 thankstoThanksTo
 
 
 
러닝 랭체인 - 랭체인과 랭그래프로 구현하는 RAG, 에이전트, 인지 아키텍처 | MCP 개념부터 서버 구축 및 활용법 특별 수록
메이오 오신.누노 캄포스 지음, 강민혁 옮김 / 한빛미디어 / 2025년 5월
평점 :
장바구니담기


한빛미디어 서평단 <나는리뷰어다> 활동을 위해서 책을 협찬 받아 작성된 서평입니다.


1. 이 책을 선택한 동기


일전에 GPT API를 활용한 인공지능 앱 개발을 읽어봤지만, `OpenAI API`에만 의존해야 한다는 제약과 실제 구현하기에는 깊이 있는 지식이 부족하다는 걸 느꼈어요.


그러던 중 랭체인이라는 프레임워크를 알게 되었습니다. LLM을 단순히 API로 호출하는 차원을 넘어서, 복잡한 워크플로우를 구성하고 다양한 LLM 모델을 조합해서 사용할 수 있다는 점이 매력적이었어요. 


더욱이 실제 운영 환경에서 돌아가는 LLM 애플리케이션을 만들려면 단순한 질의응답 기능을 넘어서, `RAG`(검색 증강 생성)나 `에이전트` 같은 고급 개념들을 이해해야 한다는 걸 깨달았어요. 이론만 아는 게 아니라 실제로 구현할 수 있는 실력을 기르고 싶어서 러닝 랭체인을 읽기 시작했습니다.



2. 어떤 책인지


러닝 랭체인은 단순한 랭체인 매뉴얼이 아니었어요. LLM을 활용한 실용적인 애플리케이션 개발의 전체 여정을 다루는 종합 가이드였습니다. 책은 크게 세 부분으로 나뉩니다.


첫 번째는 LLM과 랭체인의 기초 개념 설명입니다. AI나 머신러닝 배경지식이 없어도 이해할 수 있도록 트랜스포머 아키텍처부터 프롬프트 엔지니어링까지 친절하게 설명해줘요. 


두 번째는 랭체인의 핵심 기능들을 하나씩 파헤치는 부분입니다. 체인, 메모리, 에이전트, RAG 시스템 구축 방법을 실습 위주로 다룹니다. 


마지막은 랭그래프를 활용한 고급 워크플로우 설계인데, 이 부분이 특히 인상적이었어요.


가장 큰 특징은 `Python`과 `JavaScript` 두 언어로 모든 예제를 제공한다는 점입니다. JavaScript가 주력인 저에게는 특히 좋았던 점입니다. 또한 단순한 코드 나열이 아니라, 복잡한 설계적인 부분은 시각적 다이어그램으로 설명해서 복잡한 AI 개념들을 직관적으로 이해할 수 있게 도와줍니다.



3. 특히 인상적이었던 점


가장 인상깊었던 건 랭체인의 `체인` 개념을 설명하는 방식이었어요. 처음에는 단순히 여러 LLM 호출을 연결하는 정도로만 이해했는데, 책을 읽으면서 이게 얼마나 강력한 패러다임인지 깨달았습니다.


예를 들어, 사용자 질문을 받아서 → 관련 문서를 검색하고 → 검색 결과를 요약한 뒤 → 최종 답변을 생성하는 과정을 하나의 체인으로 구성할 수 있어요. 이 과정에서 각 단계마다 다른 프롬프트와 모델을 사용할 수 있고, 중간 결과를 메모리에 저장해서 다음 단계에 활용할 수도 있습니다.


이걸 보면서 React의 `컴포넌트 합성` 개념과 매우 유사하다는 걸 느꼈어요. 작은 기능들을 조합해서 복잡한 애플리케이션을 만드는 방식에서 닮은 점이 느껴졌습니다. 특히 `LCEL`(LangChain Expression Language) 문법을 보면서는 함수형 프로그래밍의 파이프라인 연산자와 비슷하다는 생각이 들었습니다.


또 하나 인상적이었던 건 **RAG 시스템 구축 과정을 단계별로 상세히 설명**한 부분이에요. `벡터 데이터베이스`, `임베딩`, `문서 분할`, `유사도 검색` 같은 개념들이 처음에는 추상적으로 느껴졌는데, 실제 구현 예제를 따라하면서 '아, 이렇게 동작하는구나!'라는 순간이 여러 번 있었어요.



4. 덕분에 무엇을 배웠는가


첫째, 프롬프트 엔지니어링의 실제 적용법이에요. 단순히 "좋은 프롬프트를 작성하라"는 추상적인 조언이 아니라, Few-shot 프롬프트, Chain-of-Thought, 역할 기반 프롬프트 등 구체적인 기법들을 실습할 수 있었습니다.


둘째, RAG 시스템 구축을 통해 벡터 데이터베이스의 작동 원리를 이해했어요. 문서를 어떻게 임베딩으로 변환하고, 유사도 검색을 통해 관련 정보를 찾아내는지, 그리고 이를 LLM의 컨텍스트로 활용하는 전체 파이프라인을 손으로 구현해볼 수 있었습니다.


셋째, 랭그래프를 통한 상태 기반 대화 시스템 구축법을 익혔어요. 단순한 일회성 질답이 아니라, 이전 대화 내용을 기억하고 복잡한 워크플로우를 처리할 수 있는 에이전트를 만드는 방법을 배웠습니다.


마지막으로, LLM 애플리케이션의 성능 최적화와 비용 관리에 대한 실용적인 지식도 얻었어요. `토큰 사용량 최적화`, `캐싱 전략`, `스트리밍 응답` 등 실제 운영 환경에서 고려해야 할 요소들을 알 수 있었습니다.



5. 좋았던 점


5.1 Python과 JavaScript 예제 동시 제공의 장점


모든 예제를 `Python`과 `JavaScript` 두 버전으로 제공한다는 점이에요. JavaScript가 주력 언어인 저에게는 정말 큰 도움이 되었습니다. 기본적으로는 JS 코드를 따라했지만, Python 코드도 함께 보면서 두 언어 간의 문법적 차이점을 자연스럽게 학습할 수 있었어요.


특히 비동기 처리 방식의 차이가 흥미로웠습니다. JavaScript의 `async/await`와 Python의 `asyncio`가 어떻게 다르게 구현되는지, `Promise`와 `Coroutine`의 차이점 등을 코드로 직접 비교해볼 수 있었거든요. 한 번에 두 언어의 지식을 얻는 효과가 있었습니다.


5.2 체계적인 기초 지식 제공


0장에서 LLM 기초 지식을 충실히 다룬 점도 좋았어요. `트랜스포머 아키텍처`, `어텐션 메커니즘`, `토큰화`, `프롬프트 엔지니어링`, `파인튜닝` 등 AI 배경지식이 전혀 없어도 이후 랭체인 학습에 필요한 필수 개념들을 빠르게 습득할 수 있도록 구성되어 있었습니다.


특히 각 개념을 설명할 때 단순한 정의가 아니라, 실제 사용 사례와 함께 설명해주는 점이 인상적이었어요. 예를 들어 `Few-shot` 프롬프트를 설명할 때도 "몇 개의 예시를 제공하는 것"이라는 추상적 설명에 그치지 않고, 실제로 어떤 상황에서 효과적인지, 어떻게 예시를 구성해야 하는지까지 구체적으로 알려줬습니다.


5.3 시각적 이해를 돕는 다이어그램


복잡한 AI 개념들을 다이어그램으로 시각화해서 설명한 점도 큰 장점이었어요. 특히 `RAG` 파이프라인을 설명할 때 문서 입력부터 최종 응답 생성까지의 전체 과정을 플로우차트로 보여준 건 정말 도움이 되었습니다. `벡터 데이터베이스`의 작동 원리도 단순히 "유사도 검색을 한다"는 설명보다는, 실제로 문서가 어떻게 벡터로 변환되고, 쿼리 벡터와 어떻게 비교되는지를 그림으로 보여줘서 직관적으로 이해할 수 있었어요.



6. 아쉬운 점


6.1 LLM 애플리케이션 a to z 개발 내용 부재


가장 아쉬웠던 점은 처음부터 끝까지 하나의 완성된 **LLM 애플리케이션을 개발하는 내용이 없었다는 점입니다.** 각 장마다 해당 개념을 설명하는 예제는 충실하지만, 실제로 배포 가능한 수준의 애플리케이션을 단계별로 구축해보는 경험은 제공되지 않았습니다.


예를 들어, "문서 기반 Q&A 시스템 만들기" 같은 프로젝트를 통해 요구사항 분석부터 시작해서 데이터 준비, RAG 시스템 구축, UI 개발, 배포, 모니터링까지 전체 개발 사이클을 경험해볼 수 있었다면 더 좋았을 것 같아요.


6.2 최신 모델 반영 할 수 없는 한계


책이 출간된 시점(2025년 5월 14일)이 얼마 되지 않았음에도 벌써 각 LLM 모델의 업그레이드 버전이 많이 나와버렸죠. 책의 예제에서는 `gpt-3.5-turbo-instruct`를 사용하지만, 예를 들어 GPT-4o, Claude 4 같은 새로운 모델들이나, 최신 랭체인 버전의 변경사항들이 반영되지 않은 점은 어쩔 수 없는 한계인 것 같습니다. 


다만 어떤 모델을 선택하느냐는 “랭체인을 통해 LLM을 구현한다”는 점을 익히는 과정에서는 크게 영향을 끼치지는 않기 때문에 학습에 지장이 생기지는 않습니다.



7. 이 책을 읽은 덕분에 기대되는 변화


1. 당장 시도해보고 싶은 프로젝트들이 생겼어요. 예를 들어, 회사에서 사용할 수 있는 내부 문서 검색 시스템입니다. 개발팀에서 누적된 기술 문서, 회의록, 가이드 등을 RAG 시스템으로 구축해서 자연어로 검색할 수 있게 만들어보고 싶어요.

2. 랭체인을 통해 배운 개념들이 다른 개발 영역에도 도움이 될 것 같아요. 특히 파이프라인 설계, 상태 관리, 비동기 처리 등의 개념은 일반적인 웹 애플리케이션 개발에도 적용할 수 있을 것 같습니다.

3. 또한 AI 기술의 발전 속도를 고려하면, 지금 배운 기초가 앞으로 더 고급 기술을 학습할 때 탄탄한 토대가 될 거라고 생각해요. 랭체인 생태계 자체도 계속 발전하고 있으니, 이 책으로 기초를 다진 상태에서 새로운 기능들을 추가로 학습해나갈 수 있을 것 같습니다.


앞으로는 AI 도구를 단순히 사용하는 차원을 넘어서, 실제 비즈니스 문제를 해결하는 맞춤형 솔루션을 만들 수 있을 것 같아요.


댓글(0) 먼댓글(0) 좋아요(0)
좋아요
공유하기 북마크하기찜하기 thankstoThanksTo
 
 
 
멀티패러다임 프로그래밍 - 객체지향, 함수형, 명령형의 통합적 사고로 구현하는 소프트웨어 설계와 구현
유인동 지음 / 한빛미디어 / 2025년 4월
평점 :
장바구니담기


 "한빛미디어 서평단 <나는리뷰어다> 활동을 위해서 책을 협찬 받아 작성된 서평입니다."


이 책을 선택한 동기
개발 커뮤니티에서 '객체지향 vs 함수형' 주제를 의논하는 글을 많이봐왔습니다. 객체지향은 Flutter 개발을 하게되면서 차츰 이해할 수 있었지만, 함수형은 여전히 잘 모르는 영역이었어요.


그러던 중 멀티패러다임 프로그래밍이라는 책 제목을 보게 되었어요. 밸런스 게임처럼 '이것 아니면 저것'의 이분법적 사고에서 벗어나, 상황에 따라 필요한 패러다임을 조합해서 사용할 수 있다는 접근법이 신선했습니다. 함수형, 객체지향, 절차적 프로그래밍을 한 번에 조화롭게 이해할 수 있다는 기대감에 이 책을 선택할 수밖에 없었어요.

 

어떤 책인지
이 책은 제목 그대로 '멀티패러다임'에 대한 종합적인 가이드입니다. 총 7장으로 구성되어 있으며, 각 패러다임을 단순히 나열하는 것이 아니라 실제로 어떻게 조합해서 사용하는지에 중점을 두고 있어요.

 

1-3장에서는 이론적 기반을 다집니다. 객체지향의 반복자 패턴과 함수형의 일급 함수가 어떻게 만나는지, 자바스크립트의 이터레이션 프로토콜을 통해 실제 언어에서 어떻게 구현되는지 보여줍니다. 특히 LISP와 하스켈 같은 순수 함수형 언어의 개념들을 자바스크립트로 어떻게 가져올 수 있는지 설명해요.

 

4-5장에서는 실전으로 들어갑니다. 비동기 프로그래밍과 실제 데이터 처리 사례들을 다루면서, 함수형 프로그래밍이 단순한 이론이 아니라 실무에서 어떻게 활용되는지 보여줍니다. 특히 백엔드 비동기 처리나 커머스 데이터 다루기 같은 현실적인 예제들이 인상적이었어요.

 

6-7장은 종합편입니다. HTML 템플릿 엔진을 만들면서 객체지향과 함수형을 실제로 조합하고, Todo 앱과 Setting 앱을 통해 프런트엔드 개발에서의 멀티패러다임 적용법을 보여줍니다.

 

저자 유인동님의 접근 방식이 특히 좋았던 것은, 각 패러다임의 장단점을 이론적으로만 설명하는 게 아니라 '언제, 왜, 어떻게' 조합해야 하는지 구체적인 코드와 함께 보여준다는 점이었어요.

 

특히 인상적이었던 점
첫 챕터부터 머리를 한 대 맞은 기분이었습니다. '이터러블, 이터레이터, 제네레이터'를 통해 타입스크립트를 다양한 프로그래밍 방식으로 작성할 수 있다는 구체적인 사례를 보여주는데, 그 순간 제가 그동안 얼마나 기본기를 놓치고 있었는지 깨달았어요.

 

부끄럽지만 그렇게 숱하게 사용하고 있던 forEach, map, filter에 대해 저는 아무것도 몰랐다는 것을 알게되어죠…! 이들이 이터러블 객체를 다루는 방식이라는 것도 제대로 이해하지 못했고, 제네레이터는 책에서나 슬쩍 봤지 실제 구현에 활용한다는 생각을 해본 적이 없었어요. 고차함수, 일급함수도 마찬가지였습니다.


또한 타입스크립트 활용법에서 인상적이었습니다. 저는 그동안  타입스크립트를 아주 기초적인 부분만 사용하고 있었고, 제네릭도 때때로 쓰긴 했지만 정말 얕게만 활용하고 있었습니다. 아이러니하게도 멀티패러다임 프로그래밍을 알고 싶어 펼치게 된 이 책에서 타입스크립트를 더 잘 알게 되는 계기가 되었어요.

 

특히 타입스크립트의 제네릭과 클래스를 조합하는 방법, map 등의 고차함수를 체이닝으로 연결해서 훨씬 간결하고 자연스러운 흐름으로 읽을 수 있게 만드는 기법들이 정말 놀라웠습니다. 이런 기본기를 정확히 이해하면 이렇게까지 활용할 수 있다는 점이 충격적이었어요.

 

덕분에 무엇을 배웠는가
가장 큰 수확은 제가 그동안 절차형으로만 작성해왔던 코드를 완전히 다른 관점에서 바라보게 되었다는 점입니다.

 

1. 이터레이터와 제네레이터를 실제로 활용할 수 있겠다는 확신이 생겼어요. 책에서 보여준 FxIterable 클래스처럼 제네릭과 이터러블을 조합해서 체이닝 가능한 데이터 처리 파이프라인을 만드는 방법이 정말 인상적이었습니다. 단순히 배열에 forEach, map, filter를 쓰는 게 아니라, 지연 평가를 통해 성능까지 최적화할 수 있다는 점이 놀라웠어요.

 

2. 타입스크립트의 제네릭 활용 방법을 제대로 익혔습니다. 이전에는 단순히 타입 안전성을 위해서만 사용했는데, 이제는 함수형 프로그래밍과 객체지향을 조합하는 핵심 도구라는 것을 알게 되었어요. `FxIterable<A>`처럼 타입 파라미터를 통해 체이닝하면서도 타입 안전성을 보장하는 방식이 정말 우아하더라고요.
 
3. 비즈니스 로직을 멀티패러다임으로 작성해볼 용기가 생겼습니다. 이토록 기발한 아이디어로 만들어진 효율적인 프로그래밍 방식이지만, 팀원과 함께 싱크를 맞춰야 실무에서 적용할 수 있을 것 같아요. 독단으로 갑자기 적용하기 시작하면 팀 컨벤션이 무너지고, 코드를 보는 팀원들이 받지 않아도 될 스트레스가 늘어나겠죠...! 하지만 같이 공부하면서 적용하면 분명 다 같이 행복해길 것이라 생각해요!

 

좋았던 점
1. 체계적이고 점진적인 학습 구조
각 패러다임을 따로 설명하는 것이 아니라, 어떻게 조합되는지에 중점을 둔 구성이 정말 좋았습니다. 1장에서 이터레이터 패턴과 일급 함수의 만남을 보여주고, 2-3장에서 LISP와 하스켈의 개념을 자바스크립트로 가져오는 과정이 자연스럽게 이어졌어요. 특히 제네레이터로 이터레이터를 만드는 과정에서 명령형과 함수형이 어떻게 연결되는지 보여준 부분이 인상적이었습니다.


2. 실무 중심의 실전 예제와 적용법
4-5장의 비동기 프로그래밍과 실전 데이터 처리 사례들이 특히 도움이 되었어요. 단순한 이론 설명이 아니라 '커머스 데이터 다루기', '결제 프로세스 문제', '백엔드 비동기 처리' 같은 현실적인 문제들을 멀티패러다임으로 해결하는 방법을 보여줬습니다. 6-7장의 HTML 템플릿 엔진과 Todo 앱 만들기도 실제로 적용해볼 수 있는 구체적인 사례여서 좋았어요.

 

3. 다양한 언어와의 비교를 통한 개념 이해
하스켈, LISP(클로저), 코틀린, 스위프트 등 다른 언어들의 예제를 통해 멀티패러다임이 단순히 자바스크립트만의 특징이 아니라는 점을 보여준 것이 좋았습니다. 특히 하스켈의 함수 합성 연산자나 클로저의 매크로 시스템을 자바스크립트로 어떻게 가져올 수 있는지 설명한 부분이 인상적이었어요.

 

이를 통해 언어를 넘어 적용 가능한 개념이라는 패러다임의 본질을 이해할 수 있었습니다. 프론트엔드 개발자로서 Flutter(Dart)도 사용하는 입장에서, 다른 언어에서도 이런 접근법을 적용해볼 수 있겠다는 영감을 얻었어요.

 

조금 아쉬웠던 점
초보자에게는 다소 학습 곡선이 가파를 수 있습니다. 사실 저는 예제들을 이해하기에 조금 버거웠어요..! 첫 챕터부터 이터레이터, 제네레이터, 고차함수 개념들이 한꺼번에 나오면서 제 기본기 부족을 절실히 느꼈어요.

하지만 이것이 책의 문제라기보다는, 오히려 제가 기본기가 아직 탄탄하지 않다는 것을 깨닫게 해준 계기가 되었습니다. 어떻게든 읽어내려고 노력하면서 오히려 기본기를 강화할 수 있었어요.

 

다행히 저자님께서 설명하는 문장 자체는 무척 이해하기 쉽게 작성해주셨습니다. 특히 복잡한 예제에는 넘버링을 통해 단계별로 쉬운 문장으로 풀이를 작성해주신 부분이 정말 도움이 되었어요. 결과적으로는 한 단계 레벨업할 수 있는 기회가 되었습니다!

 

이 책을 읽은 덕분에 기대되는 변화
서두에 작성한 것처럼, 객체지향과 함수형 코딩에 대해 아직 깊게 익히지 못했음에도 이미 어느 한쪽을 택해서 개발해야 하는 건가라는 이분법적 사고에 빠져있었습니다. 그런데 이 책을 읽고 유연하게 조합을 하면 된다고 사고를 넓힐 수 있었어요!

 

프레임워크에 사고를 제한하지 않고, 언어 레벨에 대해 포커스를 맞출 수 있게 되었습니다. 특히 다른 언어에서는 이걸 어떻게 구현할 수 있었는지를 보여주는 대목들 덕분이죠. 저의 경우 Flutter를 사용하게 되며 조금씩 그 점을 느꼈는데, 멀티패러다임 프로그래밍을 읽은 덕분에 더 뚜렷하게 그려졌습니다.

 

이제 아주 작은 부분부터 각 프로그래밍 방식의 장점을 활용하는 로직을 만들어보려 해요. 이 내용은 동료들에게도 공유하며 함께 시각을 넓히고자 합니다!


댓글(0) 먼댓글(0) 좋아요(0)
좋아요
공유하기 북마크하기찜하기 thankstoThanksTo
 
 
 
이펙티브 소프트웨어 아키텍처 - 더 나은, 더 빠른 소프트웨어를 구축하기 위한 소프트웨어 아키텍처 필수 가이드
올리버 골드만 지음, 최희철 옮김 / 길벗 / 2025년 3월
평점 :
장바구니담기


길벗 27차 개발자 리뷰어 활동을 위해 책을 협찬 받아 작성된 서평입니다.


1. 책을 읽게 된 계기


점점 구현을 넘어 시스템 전체를 설계하는 관점에 관심을 가지게 되었습니다. 작게는 하나의 컴포넌트를 어떻게 조직화할지부터, 크게는 여러 팀이 협업할 수 있는 구조를 어떻게 설계해야 하는지에 이르기까지, 단순한 구현을 넘어선 더 큰 그림을 보고 싶은 호기심이 생겼죠.


단순한 기술 지식이 아닌, 아키텍처를 대하는 태도와 사고방식을 배우고 싶었기 때문에 『이펙티브 소프트웨어 아키텍처』를 읽기 시작했습니다.



2. 책의 핵심 내용


아키텍처가 제공하는 가장 핵심적인 가치를 하나만 꼽는다면 그것은 복잡성 관리라고 할 수 있습니다. 복잡성은 소프트웨어의 본질적인 기능을 저해하고 예측 불가능한 동작을 유발하며 사용자 신뢰를 떨어뜨립니다. 또 결함으로 이어져 소프트웨어 안정성을 해치 기도 하고, 장애를 전파시켜 작은 오류로 대규모 중단 사태를 만들기도 합니다. 나아가 복잡한 시스템은 이해하기 어려워 더 단순한 형태나 구조로 개선하기 어럽게 합니다. 즉, 복잡성은 소프트웨어의 가장 큰 적이며, 체계적인 아키텍처 설계야말로 이를 방어할 수 있는 최선의 방법이라고 할 수 있습니다.

『이펙티브 소프트웨어 아키텍처』, 들어가며 중에서



2.1 소프트웨어 아키텍처와 소프트웨어 설계의 구분


『이펙티브 소프트웨어 아키텍처』는 가장 먼저, "소프트웨어 아키텍처가 무엇인지"를 명확히 정의하는 것부터 시작합니다.


여기서 중요한 점은 흔히 "설계(design)"와 "아키텍처(architecture)"를 섞어 쓰지만, 두 개념은 엄연히 다르다는 걸 강조한다는 거였어요.


- 소프트웨어 설계는 시스템의 특정 릴리스(release), 특정 버전, 특정 기능 구현을 위해 구체적인 사항을 결정하고, 변경사항을 반영하는 과정을 말합니다.

- 소프트웨어 아키텍처는 이런 "구체적인 설계 작업들"이 반복될 수 있도록 만드는 기본 뼈대와 패턴, 원칙의 집합입니다. 즉, 좋은 아키텍처는 "좋은 설계"를 단발성이 아니라, 수백 번 수천 번 반복해서 만들어낼 수 있는 기반을 마련해줍니다.


책은 이 차이를 명확히 정리하면서, 아키텍처는 단순한 한 번의 설계가 아니라, 시스템이 시간이 지나면서 겪을 모든 변화와 확장을 지탱할 수 있도록 설계된 '진화 가능한 틀' 이라는 중요한 메시지를 전달합니다.



2.2 아키텍처의 본질

아키텍처를 단순히 다이어그램이나 기술 스택으로 치환하는 실수를 경계합니다.


아키텍처는 시스템의 주요 의사결정(Decisions)의 집합이라고 정의하며,


이 의사결정들이 어떻게 시스템의 유연성, 유지보수성, 확장성에 영향을 주는지를 상세히 설명합니다.


2.3 아키텍트의 역할


아키텍트는 단순히 기술적인 ‘디자인’만 하는 사람이 아니라, 비즈니스 목표를 이해하고, 이해관계자와 커뮤니케이션하며, 갈등을 조정하는 역할까지 수행해야 한다고 강조합니다. 특히 ‘커뮤니케이션의 중요성’을 반복해서 언급하는데, 이는 실제 실무에서 아키텍트가 기술자만이 아니라 "조율자"여야 한다는 현실적인 통찰을 줍니다.


2.4 아키텍처 설계 방법론

변화는 항상 예측할 수 없으며, 그렇기 때문에 아키텍처는 '완성'하는 것이 아니라 '진화'시켜야 한다는 철학을 제시합니다. 초기에 모든 것을 완벽히 설계하려는 시도는 위험하며, 오히려 중요한 결정(핵심 의사결정)은 명확히 하되, 나머지는 점진적으로 설계하는 방법을 추천합니다.



3. 좋았던 점


3.1 현실적인 시각

이 책은 아키텍처 이론서가 아니었어요. 현실 세계에서는 모든 요구사항을 처음부터 알 수 없고, 모든 기술 선택이 완벽할 수 없다는 사실을 인정하는 데서 출발합니다. 그런 ‘현실성’이 되려 이 책을 더욱 신뢰할 수 있게 만들었습니다.


3.2 변화 관리의 중요성 강조

빠르게 변화하는 시대에 맞게 아키텍처도 변화에 강한 구조로 설계해야 한다는 메시지가 인상 깊었습니다. 

'처음에 완벽히 설계한다'는 환상을 버리고, 설계의 핵심은 "변화를 받아들일 수 있는 유연성"이라는 것을 설득력 있게 풀어냅니다. 이 점은 특히 빠르게 변화하는 스타트업 환경이나, 제품 주기가 짧은 프로젝트에 적용할 때 큰 통찰을 줍니다.



3.3 아키텍트의 소프트 스킬 강조

기술적인 설계 능력뿐 아니라, 이해관계자와 소통하고, 팀을 설득하며, 조직 내 갈등을 중재하는 능력을 아키텍트의 핵심 역량으로 다루는 부분이 특히 좋았습니다. 


기술자적 관점만으로는 해결할 수 없는 문제들이 아키텍처에서는 더 빈번하게 나타난다는 사실을 자연스럽게 받아들이게 해줍니다.



4. 아쉬웠던 점


4.1 기술적인 깊이에 대한 아쉬움


책이 지향하는 대상이 ‘개념과 철학’을 다루는 쪽이다 보니, 구체적인 시스템 설계 사례나 마이크로서비스, 도메인 주도 설계(DDD), 이벤트 소싱 같은 **구체적인 아키텍처 패턴**에 대한 깊이 있는 다루기는 상대적으로 부족했습니다.


실제 대규모 시스템에서 아키텍처를 어떻게 적용했는지에 대한 예시가 조금 더 많았더라면 실질적인 적용에 더 도움이 되었을 것 같다는 아쉬움이 남습니다.


4.2 분량에 따른 압축된 전개


비교적 짧은 분량 안에 아키텍처의 철학부터 조직 운영까지 담으려다 보니, 일부 챕터에서는 다소 빠르게 주제가 넘어가는 인상을 받았습니다. 


특히 아키텍처를 처음 공부하는 독자에게는 약간 더 친절한 설명이나 추가적인 사례가 있었다면 더 좋았을 것 같습니다.


5. 느낀 점


『이펙티브 소프트웨어 아키텍처』는 단순히 좋은 구조를 설계하는 법을 알려주는 책이 아니었어요.


‘어떻게 하면 변화를 견딜 수 있는 시스템을 만들 수 있을지’, ‘어떻게 하면 기술과 조직 사이를 잇는 다리를 놓을지’ 함께 고민하게 만드는 책입니다.


댓글(0) 먼댓글(0) 좋아요(0)
좋아요
공유하기 북마크하기찜하기 thankstoThanksTo
 
 
 
플랫폼 엔지니어링 - 개발과 운영을 아우르는 플랫폼 관리의 핵심 원칙
카미유 푸르니에.이언 놀런드 지음, 류광 외 옮김 / 한빛미디어 / 2025년 3월
평점 :
장바구니담기


"한빛미디어 서평단 <나는리뷰어다> 활동을 위해서 책을 협찬 받아 작성된 서평입니다."



1. 어떤 동기로 이 책을 선택했는가?

개발 인프라에 대해 깊게 파는 내용이라 생각했습니다. 예를 들어, 배포 시스템, 클라우드 인프라, 공통 라이브러리, CI/CD 파이프라인, 서버 환경 셋업, 개발 환경 구성 등이라 생각하였죠. 때문에 이 책을 통해 깊게 지식을 익힐 수 있겠다고 생각했습니다.


하지만 이 책은 사실 그런 개념이나 사용 기술들을 알려주는 내용이 아니었어요. '플랫폼'이 단순 인프라와 어떤 차이가 있고, 어떤 배경에서 탄생했으며, 어떤 전략으로 접근해야하는지를 다루었습니다.


오히려 생각지 못한 즐거운 발견이었어요. 아직 실무적으로도 접할 수 없던 분야이기에 이번 기회로 정확히 이해하고 싶었습니다.



2. 이 책은 어떤 내용을 담고 있는가?


이 책은 ‘플랫폼’이라는 개념을 단순한 기술적 인프라가 아닌, 제품 철학과 조직 전략의 관점에서 해석합니다. 플랫폼 팀은 단순한 기술 지원팀이 아니라, 내부 개발자들이 효율적으로 제품을 만들 수 있도록 돕는 프로덕트 팀이어야 한다는 점을 반복해서 강조해요.



또한 플랫폼은 단지 기술 구성요소가 아니라, 명확한 고객(내부 개발자)이 존재하는 하나의 제품이며, 이 제품을 관리하고 발전시켜야 할 전략이 필요하다는 사실을 깨닫게 되었어요.



책은 다음과 같은 구조로 이야기를 풀어나갑니다.



- 플랫폼 팀이 실제로 어떤 문제를 해결해야 하며, 무엇을 하지 않아야 하는지 구체적으로 알려줍니다.

- 플랫폼 팀의 역할, 책임, 범위에 대해 명확히 선을 그으며, 제품처럼 사용자 중심으로 운영되어야 함을 강조합니다.

- 온콜 관행, SLO/SLA 관리, 내부 고객 팀과의 관계 등 운영의 영역까지 포함해서 플랫폼 팀이 가져야 할 사고방식을 제시합니다.

- 플랫폼이 실패하는 여러 이유를 설명하며, 왜 사일로화되기 쉬운지, 그리고 ‘잘 만든 플랫폼’이 조직 전체에 어떤 영향을 미치는지를 다양한 관점에서 다룹니다.


유독 흥미롭게 다가온 점은, 애플리케이션 팀과 플랫폼 팀의 차이에 대한 설명이었어요. 저 또한 플랫폼보다는 애플리케이션 팀의 사람이라는 점에서 더더욱 플랫폼 영역을 이해하고 배경을 쌓아야한다는 생각이 들었어요.


3. 좋았던 점


1) 플랫폼을 ‘제품’으로 바라보는 관점


이 책은 플랫폼은 철저히 고객 중심으로 설계되고, 진화해야 한다고 말합니다. 그들의 고객은 내부 개발자란 점도 흥미로웠어요. 개발자 경험(DX)이나 사용자 여정(User Journey)도 철저히 고려되어야 했습니다. 그 과정에서 “이건 우리가 만든 거니까 써야 해”라는 식의 접근은 실패로 이어진다는 점도 실감 있게 설명됩니다.


2) 조직 내 관계에 대한 내용


플랫폼 팀은 독립된 기능을 수행하는 팀이 아니라, 애플리케이션 팀과 지속적으로 신뢰를 구축해야 합니다. “우리는 당신들이 더 나은 코드를 쓰고 더 빠르게 배포할 수 있도록 돕는 팀입니다”라는 정체성을 조직 전체에 어떻게 퍼뜨릴 수 있는지에 대한 고민이 아주 구체적으로 담겨 있어요.


3) 실패하는 플랫폼의 공통 패턴


많은 조직이 ‘표준화’라는 명분으로 플랫폼 팀을 만들지만, 실제론 내부 고객을 무시한 채 팀의 욕심만 반영된 경우가 많아요. 책에서는 그런 상황에서 어떻게 플랫폼이 외면받는지, 실제 예시 없이도 독자가 상상할 수 있을 정도로 잘 풀어냅니다.


4) 운영 관점


단지 플랫폼을 만드는 것뿐 아니라, 운영까지도 플랫폼 팀의 중요한 역할이라고 말합니다. 예를 들어, 온콜 체계나, SLO, 장애 대응, 실패 복구 등의 책임도 플랫폼 팀의 일부여야 하며, 이를 통해 전체 시스템의 안정성과 신뢰도를 유지할 수 있다고 말합니다.


4. 아쉬웠던 점


1) 플랫폼 경험이 없는 독자에게는 어려운 내용


이 책은 실제로 플랫폼 팀에 속해 있거나, 조직 내에서 플랫폼을 기획하고 있는 사람에게는 정말 유용한 가이드입니다. 하지만 저처럼 플랫폼이라는 개념을 막 접한 입장에서는 많은 부분이 뜬구름 잡는 얘기로 느껴졌어요. 아직은 공감보다는 관찰에 가까운 독서가 되었어요.



2) 부족한 실사례 혹은 케이스 스터디


이 책이 전하는 메시지는 굉장히 탄탄하고 설득력 있어요. 하지만 구체적인 기업 사례나, 실무적인 경험이 좀 더 들어 있었다면 훨씬 생생했을 거라 생각해요. 현재 상태로는 ‘원칙 중심’의 글이기 때문에, 실무 적용을 고민하는 독자에게는 약간 아쉽게 느껴질 수 있어요.


3) 번역의 아쉬움


몇몇 용어들은 번역이 다소 어색했어요. 예를 들어 ‘거짓양성(오탐)’, ‘거짓음성(미탐)’ 같은 표현은 배경이 없는 독자로서는 이해가 어려운 표현이었습니다. 



마치며


『플랫폼 엔지니어링』은 단순히 기술적인 지식을 쌓는 책이 아니었어요. 플랫폼 팀이라는 존재가 왜 중요한지, 그리고 어떻게 잘 기능할 수 있는지를 집요하게 파고들었어요. 플랫폼이 단순히 인프라 구축 선에서 끝나는 것이 아니라 어떤 전략으로 어떻게 구성되어야 하는지를 알려주었어요.


플랫폼에 대한 배경지식이 없는 저에게 어려운 책이었지만, 언젠가 제가 플랫폼을 현업에서 마주하고 깊이 알아야할 때, 이 책은 분명 아주 단단한 길잡이가 되어줄 거라 생각합니다.


댓글(0) 먼댓글(0) 좋아요(0)
좋아요
공유하기 북마크하기찜하기 thankstoThanksTo
 
 
 
처음 처음 | 이전 이전 | 1 | 2 |다음 다음 | 마지막 마지막