NestJS로 배우는 백엔드 프로그래밍 - 타입스크립트 환경의 차세대 서버 프레임워크를 만나다
한용재 지음 / 제이펍 / 2022년 12월
평점 :
장바구니담기


■ 평소에 궁금했던 사항

js로 구성된 프레임워크 중에 backend는 node.js가 있고 기반으로 express가 있다는 것은 알고 있었는데

next.js의 포지션이 어떻게 되는지 궁금했습니다.

☞ node와의 관계는 있을까?

☞ node, express와 무관한것일까?

 → 해당 궁금했던 사항이 1줄로 잘 정리되어 있습니다.

 → node.js기반!!, Express프레임워크 매핑!!

 → 여기서 눈에 들어오는 단어가 "웹 API프레임워크" 입니다.

     ☞ REST-API기반의 기능에만 특화된 것인가?

     ☞ Python의 Fast-API와 같은 Concept의 프레임워크인가?

    

이러한 궁금증은 책을 통해서 살펴보려고 합니다.

■ 모든 웹 프레임워크에서 사용되어지는 중요한 사항입니다.

· 해당 항목들은 언어가 java, python, js이든 기본적으로 프레임워크에서 지원해야 하는 사항으로 정의해주셨습니다.

  이러한 항목들이 nest.js에서 잘 구성되어 있습니다.

  각 언어별로 정의된 이름은 다르지만, nest를 처음 학습하기 쉽게 잘 설명되어 있습니다.

  예를 들어 횡단관심사라고 표현하는 (python, ts에서는 데커레이터라고 정의되어 있고 java에서는 어노테이션으로 정의되어 있습니다.)

 

■ 도움이 되는 샘플 예제

책에서는 "유저 서비스"라는 것을 만들어 봅니다.

구성요소로 (회원가입 / 이메일 인증 / 로그인 / 회원정보 조회)의 핵심 기능을 가지고 있고

아래 그림 옆에 있는 요소들 (환경변수설정, 유효성 검사, 인증, 로깅, 헬스 체크, CQRS) 및 DB저장까지

nest.js를 통해서 구성합니다.

아래 사항을 보면 backend개발시 전부 필수적으로 가져가야 하는 항목인것을 아실수 있습니다.

 

· 실습환경은 아래 같습니다.

→ Nestjs(node.js, express   nest는 아래 환경 위에서 동작합니다. express대신에 fastify도 가능은 합니다.) 

→ Typescript(nest에서는 기본적으로 ts가 기본이고, js도 사용은 가능합니다.)

→ mysql8 (docker로 설치함)

→ orm을 구현하기 위해서 TypeORM을 사용합니다.

→ 인증을 위해서 JWT를 사용합니다.

 

■ 내용 소개

· node.js, typescript에 대해서 책을 보는데 문제가 없도록 중요한 원리 및 문법에 대해서 설명합니다. 

· 컨트롤러

  MVC패턴에 대해서, 한번쯤은 들어보셨을거 같습니다. 

  당연히 사용자 요청에 대한 handling을 위해서 nest에서도 관련 기능이 있습니다.

  아래 소스 코드를 보면, Spring하고 매우 비슷한 구조를 가지고 있습니다.

  ※ 언어/프레임워크의 차이만 있지 동작원리의 큰 구조는 비슷해서 한개를 잘 알고 있으면, 확장해서 사용하기 쉽게 됩니다.

  @Post() : Spring, FastAPI등 직관적으로 Http Method타입을 정의합니다.

  @Body() : Request의 Body영역에 대한 data를 사용하기 위해서 정의합니다. 

                    Spring에서는 @RequestBody의 역활입니다.

  @DTO : Data Transfer Object의 개념이 nest에서도 동일하게 사용되어서 신기했습니다.

                사용자가 전송한 데이터를 정의해서 객체로 활용하기 위해서 정의합니다. 

# DTO구조는 Java와 비슷합니다.
export class CreateUserDto{
	name : string;
    email : string;
}

<샘플코드>

· 비지니스 로직을 개발하기 위한 프로바이더

  ServiceLayer 부분으로 생각하시면 될거 같습니다.

  여러가지 실제 수행되어야 할 로직을 prividers로 등록하고 class를 정의하고 개발합니다.

@Module({
   ...
   prividers : [UsersService]
})
export class UsersModule{}

· 각종 환경에 맞는 구성을 분리하여서 프로젝트 설정을 해봅니다.

 (production / development / stage) 영역으로 구분해서 운영 및 테스트 환경을 구분합니다.

· 기본적으로 제공하는 @nest/common 패키지의 다양한 Validation용 내장 파이프 내용

· 미들웨어/인터셉터에 대한 개념 및 활용

· JTW연동을 통한 실습

 

■ 현업에서 고민해볼 사항과 심도있는 내용 추가

· 서비스를 운영하면서, 고민해봐야 하는 내용이 추가되어 있습니다. 

· 특정 언어에 종속적이지 않게 일반적인 내용 (ex : JWT유효성) 들도 많아서 유익합니다.

 

■ 책에서 얻은 좋은 인사이트

· 전반적인 Backend의 기술에 대해서 현업에서 고민하는 사항들이 잘 녹아져 있습니다.

· nest.js의 핵심적인 내용이 친절한 설명과 함께 잘 구성되어 있습니다.

· 다양한 언어의 비교 예시도 있어서 이해하는데 도움이 됩니다.

· 쉬어가는 페이지 / 심화학습을 통해서 조금 더 깊이 있는 부분을 전달하려고 합니다.


댓글(0) 먼댓글(0) 좋아요(1)
좋아요
공유하기 북마크하기찜하기 thankstoThanksTo
 
 
 
파이썬 웹 프로그래밍 기초편 - Django(장고)로 배우는 쉽고 빠른 웹 개발, 3판 파이썬 웹 프로그래밍
김석훈 지음 / 한빛미디어 / 2022년 11월
평점 :
장바구니담기


파이썬으로 웹개발을 할때 다양한 Framework가 나타납니다.

Java의 경우 Spring으로 거의 일원화 되었지만, 

Python의 경우 Django, Flask, FastAPI등 많은 선택지가 있습니다.

 

장고의 경우, Python을 대표하는 프레임워크이고 가장 많이 사용합니다.

한빛미디어에 김석훈 저자님의 책은 빨강색(기본편), 파란색(실전편) 중에

이번에 기본편에 대해서 개정판이 나왔습니다.

이번에 개정된 3판에서는 2022년에 Release된 4.0 기반으로 책이 작성되어 있습니다.

 

글을 작성하는 시점에 최신 버전 정보는 아래와 같습니다.

Django 4.1.3 release notes

November 1, 2022

Django 4.1.3 fixes a bug in 4.1.2 and adds compatibility with Python 3.11.

 

> pip install Django로 버전명 없이 설치를 하면 현재 최신버전인 4.x의 사항이 설치됩니다.

기존 책에서는 3.x버전이 구성된 내용이 많아서 3.x버전을 설치하시려면 LTS버전인 3.2 버전으로 설치하시는게 좋습니다.

pip install Django==3.2.16

 

 

■ 웹을 처음으로 접하는 분들을 위한 기본 동작 원리 설명

· 처음에는 Web의 동작방식 및 Django는 파이썬 기반하에 동작되는 Framework이기 때문에 
  파이썬 웹 표준라이브러리에서 urllib패키지, http.client모듈에 대해서 상세히 설명을 합니다.

  이런한 표준 라이브러리에 대한 개념 학습을 통해서, 사용되는 모듈의 전체적인 필요성과 동작방식을 이해하는데 도움이 됩니다.

 

■ 환경구성

· 기존에 3.x 버전을 사용중이신 독자분들은 아래 명령어를 통해서 4.x버전으로 업그레이드가 가능합니다.

pip install Django --upgrade

 

· 장고를 수동설치하는 부분에 대한 내용

  개인적으로 이런 부분이 있어서 좋았습니다.

  일반적으로는 서버, 개인 개발환경에서 인터넷이 접속 가능한 환경이 일반적이지만,

   Offline환경에서 pip설치 및 django.tar.gz을 다운받아서 구성하는것은 좋은 가이드 같습니다.

 

· MVT모델

  모델 - 뷰 - 템플릿 형태로 기본적인 장고의 프로젝트를 구성합니다.

  자동을 생서오디는 파일 및 polls을 이용해서 구성되는 프로젝트를 통해서 각 파일의 성격 및 의미를 설명합니다.

 화면 출력을 위한 템플릿 사용, 폼을 이용한 값 전송하기, 클래스형 뷰 형태, 로그 남기기등을 

 샘플 예제를 작성하면서 구성합니다.

 기존에 3.x버전과 최근 major 릴리즈 버전인 4.x의 차이점을 설명하는 부분이 조금 있었으면 하는 아쉬움은 있습니다.

 

■ Django 웹서버 연동

· 실제 서비스를 위해서는 django 에 웹서버를 연동해서 사용합니다.

  해당 부분에 대한 내용이 있어서 실무 구축하는데 도움이 되실겁니다.

  많이들 연동해서 사용하는 서버는 nginx를 사용합니다.

  연동할때 많이 사용하는것이 uwsgi 입니다. 중간에 웹서버하는 역활을 하는 서버들이 다양합니다.

  6,9장에서는 uwsgi에 대해서 설명을 하고 8장에서는 Gunicorn에 대해서 설명하는 부분을 통해서

  2서버간의 연동설정에 대한 가이드 및 연동방식에 대해서 학습하실수 있습니다.

  10장에서는 apache웹서버와 연동하는 부분도 나옵니다. 

  현업 서비스시에 다양한 제약 및 선택가능한 옵션들이 있을수 있어서 다양한 구성방식에 대한 설명은

  처음 환경구축하시는 분들에게 도움이 됩니다.

 

■ 부록

· 기본적으로 Default로 장고를 설치시에는 sqlite db를 기본적으로 사용하고 settings.py에도 sqllite로 설정이 되어 있습니다.

· 부록에서는 다양한 DB에 접속 가능한 설정을 참고 하실 수 있습니다.

 


댓글(0) 먼댓글(0) 좋아요(0)
좋아요
공유하기 북마크하기찜하기 thankstoThanksTo
 
 
 
완성된 웹사이트로 배우는 HTML&CSS 웹 디자인 - 5개 예제로 배우는 효율적인 웹사이트 제작 노하우
Mana 지음, 신은화 옮김 / 한빛미디어 / 2022년 5월
평점 :
장바구니담기


처음 개발쪽에 관심을 보이고 접하게 되는 부분이 html & css입니다.

화면에 보여지는 html요소는 쉽게 개발적인 흥미를 보이고, 관심을 느끼게 됩니다.

그러면서 자연서럽게 css요소의 학습하게 됩니다.

 

html/css은 컴파일 하지 않고, 잘못되어도 오류가 발생하지 않기 때문에 조금더 편하게 개발이라는 분야에

접근할수 있고, 오래된 기술이기 때문에 시중에 책도 많이 있습니다.

이책에서는 기존의 html책들과 다른점이 무엇이고, 협업에서도 도움을 받을 수 있는 부분이 무엇이 있을까

하는 부분으로 책을 살펴보았습니다.

 

■ 책 구성

· 책의 부제는 "5개 예제로 배우는 효율적인 웹사이트 제작 노하우" 입니다.

이 부분이 이 책에서 내용을 쉽게 전달하기 위한 방법입니다.

 

웹사이트는 보통 많이 사용하는 패턴이 있습니다. 이러한 가장 많이 사용하는 구성을 Template이라고 하는데

이러한 구성중에 5가지를 학습하면서, 기본에 충실하고 다양한 활용법을 가질수 있습니다.

TemplateA의 요소를 TemplateC에서도 적용하여서 구성할수 있습니다.

  • chapter2 : 랜딩 페이지
  • chapter3 : 블로그 사이트
  • chapter4 : 회사 사이트
  • chapter5 : 이벤트 사이트
  • chapter6 : 갤러리 사이트

■ 내용 살펴보기

· 개발과 관련된 기술적인 요소만 설명하는 것이 아니고, 기획자 입장에서 화면 구성등에 대해서 어떠한 부분을 고민해야 하는지 알려주고

기본적인 가이드를 제공합니다.

예) 2장에서 풀사이즈 배경으로 구성할때, 이미지 사이즈는 몇 px로 해야 할까요?

    ☞ 가로폭 1200~1300px 정도인 이미지를 준비해야 좋은 화질을 유지할수 있다고 설명합니다.

· 좋은 Tip들이 곳곳에 있습니다.

예) 이미지 파일 용량 압축하기
     이미지 사이즈가 크다면 사이트 로딩 시간도 들어나고, 서버 비용도 자연스럽게 증가할수 밖에 없습니다.

    ☞ Shrink Me / Compressor.io 사이트가 있으며, 잘 활용할수 있게 알려줍니다.

예) 폰트에 대하여

     폰트는 저작권이 있고, 사이트의 look&feel을 구성하는데 매우 중요한 역활을 합니다.

      웹폰트, 구글 폰트, 어도비폰트등에 대한 설명과 한글폰트를 사용할때 주의점에 대해서 언급하고 설명해주는 부분도 별도 설명을 합니다. 

· 반응형 사이트 구축시 기분 BreakPoint에 대해서

  media쿼리 사용시, Device별로 화면 사이즈를 어떻게 구분하고 별도 처리 할지는 매우 중요한 부분입니다.
  대표적으로 많이 사용하는 사이즈가 있지만, 태블릿 가로 모드의 경우에는 일반 PC웹화면과 비슷한 구조를 가질수도 있습니다.
  책에서 이렇게 가이드가 나와서 좋았습니다.

     보통 구분을 모바일 / 태블릿 / 테스크톱 3단계로 구분하는데, 여기서는 태블릿 가로모드를 별도 구성한 부분도 처음 구조를 구성하는 입장에서는 도움이 되는 가이드 입니다.

· 좋은 참고 url을 제공합니다.

 ☞ html 관련소스는 소스보기를 통해서 쉽게 참고 할수 있습니다. 이러한 요소가 곳곳에 참고url이 제공되어서, 이론적으로만 느낄수 없는 실제 사용하고 있는 사이트를 보면서 도움을 많이 받을수 있습니다.

· 가상요소 / 가상 클래스 / 커스텀 속성

  ::before / ::after / nth-child 등등

 일반적인 화면 구성이 아닌, 디자인요소가 나왔을때 화면구성시 해당 요소를 알고 있으면 도움이 되는데, 실무에 필요한 부분이 잘 설명되어 있습니다.

· 화면 디자인 요구사항이 이런 사선모양이 디자인 되었다면, 어떤 css요소를 사용해야 할까요?

   News의 녹색영역이 사선모양으로 구성되어 있습니다.

  ☞ clip-path를 이용한 구성 원리를 설명합니다. 

· display속성

  flex, grid, table등 화면 구성시 많은 부분을 커버하는 요소입니다.

  해당 부분에 대해서 예제를 통해서 설명을 하는데, 상세한 설명하는 부분은 없어서 요 부분은 조금 아쉽습니다.

 

■ 대상 독자

· 이 책의 대상은 html / css를 조금 알고 계신데, 막상 활용을 하기에 어려우신 분들이 많은 도움을 받으실거 같습니다.
· 실무에서 도움되는 좋은 개념과 현실적인 설명이 있습니다.

  예를 들어 화면에 동일한 Layout을 가진 화면도 다양한게 구성할수 있습니다. 
  그런 부분에서 조금더 활용도 높은 방식을 예제를 통해서 학습하실수 있습니다.

· 화면기획에 업무를 하시는 분들도 어떻게 하면 화면구성을 하는것이 좋을지 "여러 고려사항"을 알아보실수 있습니다.

· 책의 내용이 어떠한 요소를 기술적으로 설명하는것이 목적이 아닌, 화면구성을 위해서 무엇을 해야 할지를 기술적으로 알려주는것으로 생각이 되어서 조금더 현업에서 도움이 되는 내용이 많았고 설명도 친절하게 잘 구성되어 있습니다.

 

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


댓글(0) 먼댓글(0) 좋아요(0)
좋아요
공유하기 북마크하기찜하기 thankstoThanksTo
 
 
 
코딩 인터뷰를 위한 알고리즘 치트시트 - 리트코드LeetCode 문제를 풀면서 배우는 코딩 테스트
푸둥라이 지음, 이춘혁 옮김 / 제이펍 / 2022년 10월
평점 :
장바구니담기


■ 책의 특이점

· 책의 예제는 LeetCode의 예제를 사용합니다. (저작권 문제는 당연히 해결됨)

· 책의 원저자는 중국분이신거 같습니다. (보통 영어권/일본어권 책이 번역되는데, 다양한 좋은 책들이 소개되는거 같아서 좋습니다.)

· C++, Java, Python이렇게 3가지 언어로 알고리즘 풀이코드가 제공됩니다. 

  단순히 여러 언어만 사용하는게 목적이 아니며, 언어별로 단점이 있으므로 상황에 따라 각 언어의 단점과 특성에 영향을 받지 않도록 선택하고, 짦은 한줄로 멋있게 해결하는 코드보다는 가독성을 취우선으로 했다.
  예시) 자바, C++는 2차원 배열에 직접 해시 함수로 저장해야 하지만, 파이썬은 내장 튜플을 해시테이블의 키로 사용할수 있으므로, 코드의 양이 적고 명확하게 알기쉽게 표현이 가능합니다.

  각 샘플코드 마다 어떠한 언어로 구성된 코드인지 따로 언급은 없어서 조금 아쉬운 부분이 있습니다. (언어에 익숙하신 분들은 쉽게 파악이 쉽지만, 언어에 익숙하지 않으신분들은 바로 파악하기가 어려우실거 같습니다.)

· p.432에 연관된 leetcode 문제 리스트가 정리되어 있습니다. (여기서 언급된 문제수는 63개 입니다.)



■ 책의 대상독자

· 알고리즘 책을 앞에 부분만 조금 보고 전체적으로 다 보지 못하시는 독자분

· 코딩테스트를 위해서 중요하고, 많이 언급되는 부분을 집중적으로 보시려는 분

· leetcode를 통해서 알고리즘을 공부하시는 분



댓글(0) 먼댓글(0) 좋아요(0)
좋아요
공유하기 북마크하기찜하기 thankstoThanksTo
 
 
 
개발자를 위한 머신러닝 & 딥러닝 - 인공지능 개발자로 레벨 업하기! 신경망 기초부터 컴퓨터 비전, 자연어 처리, 시계열 예측까지
로런스 모로니 지음, 박해선 옮김 / 한빛미디어 / 2022년 8월
평점 :
장바구니담기


■ 대상독자

개발자를 위한 (원서에서는 For Coders)라고 정의된 이유에 대해서 생각해보면,

"로런스 모로니" 저자분도 처음부터 머신러닝 개발을 하시지 않았고,

처음에는 개발자로 구글에서 파이어베이스 제품관련 일을 하시면서, 텐서플로 팀에 합류하시게 되었습니다.
개발자입장에서 머신러닝을 잘 활용하는 방법과, 그것을 실제 서비스에 배포하는 것에 대해서

개발자 입장에서 책을 통해서 전달하려는 내용이 구성되어 있다고 보시면 될거 같습니다.

<<Part1>>

여러가지 경우에 대해서 모델을 구성하는 방법을 실습해봅니다

코드를 통해서 이론등을 설명합니다. 

신경망을 설명할때, 주요 핵심 키워드들이 다 언급됩니다.

은닉층, 과대적합, 하이퍼파리미터 튜닝, 과대적합, 출력층, ReLU, Softmax함수 등등

내용을 처음 보시는 입장에서는 용어, 단어에 익숙해지고 크게 어떠한 흐름으로 동작되는지 파악하는 관점으로

보시면 좋을거 같습니다. 여기서 조금 더 심화학습이 필요한 부분은 다른것으로 보충하시면 좋을거 같습니다.

 

2장에서, 예제로 많이 사용하는 MNIST데이터(0~9까지 숫자)와 비슷한 패선 MNIST데이터를 가지고 실습을 합니다.

3장에서는 여기서 만든 신경망을 이용해서, CNN(합성곱)을 실습합니다.

폴링, 이미지 증식, 드롭아웃과 같은 기법을 활용하여서, 이미지 처리에 대한 합성곱을 실습합니다.

자연어 처리(NLP)에 대한 부분에 대해서 어떻게 단어를 구분하고, 역전파를 통해서 적절한 단어를 구성해서 문장을 도출합니다.

(텍스트를 토큰화 하고 시퀀스로 변환해 신경망에 주입할수 있도록 문장을 숫자 텐서로 만드는 과장)

이것을 기반으로 비슷한 단어를 임베딩하는 하고, RNN(순환신경망)을 만들어봅니다.LSTM기반 모델을 추축하여서 텐서플로를 통해서 텍스트를 구성해봅니다.

10,11장에서는 여러 신경망으로 구성된 시계열데이터를 예측하믄 모델을 추축해보는 과정이 있습니다.

하이퍼파라미터, 신경망 구조를 조정을 통해서 모델의 정확도를 도출해봅니다.

 

<<Part2>>

크게 3가지의 플랫폼에 대해서 설정을 합니다.

1. Android (App)

2. IOS (App)

3. Web


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