/NAVER-Pay-functional-js

네이버페이 함수형 프로그래밍, ES6+, Node.js 기술 교육

Primary LanguageHTML

네이버페이 함수형 프로그래밍, ES6+, Node.js 기술 교육

1차 기본 과정 (7.9 ~ 8.13)

  • ES6+ 기본기
  • 이터러블/이터레이터/제너레이터
  • Promise/async/await
  • 함수형 프로그래밍
  • 이터러블 프로그래밍
  • 객체지향 프로그래밍 + 함수형 이터러블 프로그래밍
  • 비동기/동시성/병렬성 프로그래밍
  • 스케쥴러 개발
  • 이미지 다루기
  • 프론트엔드/백엔드 프로그래밍
  • 에러 핸들링, 비동기/동시성 에러 핸들링
  • SQL, 데이터베이스 핸들링

1차 기본 과정 상세

1회

  1. ES6+ 기본기
    • 평가
    • 이터러블
    • 이터레이터
    • 제너레이터
    • 전개 연산자, 나머지 연산자, 구조 분해
  2. 함수
    • 일급 함수
    • 고차 함수
  3. map, filter
    • map
    • filter
  4. 이터러블 프로토콜로 다시 만들기
    • map
    • filter
    • 이터러블 프로토콜의 다형성
  5. 이터러블 프로토콜로 다시 만들기 2
    • L.map
    • L.filter
  6. take와 range
    • take
    • range
    • L.take
    • L.range
  7. 지연 평가와 제너레이터
    • L.map
    • L.filter
    • L.range
    • take, 동작 순서
  8. 명령형을 이터러블 프로그래밍으로 전환 1
    • 홀수 n개 더하기 명령형 코드
    • if를 filter로
    • 값 변화 후 변수 할당을 map으로
    • break를 take로
    • 합산을 reduce로
    • 효율 비교하기
  9. 이터러블 프로토콜을 익혀야 하는 이유
  10. [QnA] 이터러블 프로토콜 더 자세히 보기
    • for...of 가 내부적으로 하는 일
    • 이터레이터의 next를 호출하는 순서를 더 자세히 알 수 있도록
    • 제너레이터 없이 ES5 문법으로 지연 평가 L.range, L.map, L.filter, L.take 구현

2회

  1. 축약하는 함수 reduce
    • reduce
    • add
    • count
    • countBy
    • groupBy
  2. 함수를 다루는 함수
    • go
    • pipe
    • curry
  3. 2차원 배열 다루기 flat
    • L.flat
  4. 리얼월드
    • users
    • DOM findAll(sel, els)
  5. 명령형 습관 지우기 - 만능 reduce? No!
    • reduce(복잡한함수, acc, iter) 보다 reduce(함수, map(함수))
    • 복잡한 reduce 하나 보다 map + filter + reduce
    • queryString
    • join 함수의 다형성
  6. 명령형을 이터러블 프로그래밍으로 전환 2
    • while을 range로
    • 효과를 each로 구분하기
    • 추억의 별 그리기
    • 추억의 구구단

3회

  1. 함수를 조합하기
    • 함수 조합으로 생각하기, 연산자 보다 함수
    • find, some, every, takeUntil
    • filter + take + reduce
    • 지연 평가를 통한 최적화
    • 언어 의존적인 사고를 줄이는 것
  2. 객체를 이터러블 프로그래밍으로 다루기
    • values
    • entries
    • keys
    • 어떤 값이든 이터러블 프로그래밍으로 다루기 - 제너레이터의 다형성
    • fromEntries, 코드에서 특정 도메인이 사라질 때
    • mapObject
    • pick
    • indexBy
    • indexBy된 값을 filter하기
  3. 객체지향과 함께 사용하기
    • Map, Set, NodeList
    • Model, Collection 클래스 만들어서 이터러블 프로토콜 지원하기
    • Product, Products - 메서드를 함수형으로 구현하기
  4. 커머스 데이터 다루기
    • 간단한 장바구니
    • 복잡한 장바구니
  5. JSON 기반 프로그래밍의 장점
    • 백엔드/프론트엔드 장바구니 가격 계산 로직 공유
    • 직렬화/역직렬화가 단순하여 네트워크 기반 프로그래밍에 용이
    • 결제 금액 조작 서버 검증

4회

  1. 비동기/동시성 프로그래밍
    • callback과 Promise
    • 비동기를 값으로 만드는 Promise
    • 값으로서의 Promise 활용
    • 합성 관점에서의 Promise와 모나드
    • go, pipe, reduce에서 비동기 제어
  2. 비동기 제어에 앞서
    • range, take의 재해석
  3. 비동기/동시성/병렬성
    • map, filter, reduce
    • Lazy Async
    • Concurrency
  4. 시간을 이터러블로 다루기
  5. 결제 누락 처리 스케쥴러 만들기
    • API 설명
    • 결제된 내역 가져오기
    • 가맹점 DB의 주문서 가져오기
    • 비교 후 결제 취소 API 실행하기
    • 반복 실행하기

5회

  1. 프론트엔드에서 함수형/이터러블/동시성 프로그래밍
    • ES6 템플릿 리터럴 활용
    • 이미지 목록 그리기
    • 아이템 지우기
    • 커스텀 confirm 창과 Promise
    • 클래스를 대신 함수로 하는 추상화
    • 이미지 동시성 다루기
    • 동시성 부하 조절
    • 고차 함수로 더 작게 나누어 재사용성 높이기 - 데이터형 없애기
    • 상위 스코프 변수를 사용하는 함수와 아닌 함수들 쪼개기
    • DOM을 다루는 고차 함수
  2. NPay 함께 결제 서비스 만들기
    • 결제할 가게 선택
    • Page 띄우기
    • 함께 결제할 친구 초대

6회

  1. NPay 함께 결제 서비스 만들기
    • 함께 결제 데이터베이스 INSERT
    • 데이터베이스 트랜잭션과 async/await + try/catch
    • 중첩 데이터 WHERE IN 쿼리 후 조합
    • 결제 완료 페이지 SSR
    • 동시성 쿼리
    • 복잡한 중첩 데이터 ASSOCIATE
    • No Model
  2. 에러 핸들링
    • try/catch
    • 비동기 에러 핸들링
    • 왜 Array.prototype.map으로는 비동기 에러 핸들링이 안되는지?
    • async/await/try/catch

2차 (draft)

  • 데이터 베이스
  • SQL 인젝션을 완벽히 막으려면?
  • 중첩 데이터 다루기
  • 깊은 값 조회
  • 깊은 값 변경
  • 불변성
  • 영속성
  • 깊은 값 불변적 변경
  • NoSQL을 잘 다루는 비결
  • ES6 Module
  • 트랜스파일링 + 번들링
  • npm modules + 내부 라이브러리 관리
  • 백엔드와 프론트엔드 코드 공유
  • JSON 기반 프로그래밍의 장점
  • 서버사이드 렌더링
  • API 서버
  • 코드 리뷰
  • 최적화 보일러 플레이트 논의 및 적용