네이버페이 함수형 프로그래밍, ES6+, Node.js 기술 교육
1차 기본 과정 (7.9 ~ 8.13)
- ES6+ 기본기
- 이터러블/이터레이터/제너레이터
- Promise/async/await
- 함수형 프로그래밍
- 이터러블 프로그래밍
- 객체지향 프로그래밍 + 함수형 이터러블 프로그래밍
- 비동기/동시성/병렬성 프로그래밍
- 스케쥴러 개발
- 이미지 다루기
- 프론트엔드/백엔드 프로그래밍
- 에러 핸들링, 비동기/동시성 에러 핸들링
- SQL, 데이터베이스 핸들링
1차 기본 과정 상세
1회
- ES6+ 기본기
- 평가
- 이터러블
- 이터레이터
- 제너레이터
- 전개 연산자, 나머지 연산자, 구조 분해
- 함수
- 일급 함수
- 고차 함수
- map, filter
- map
- filter
- 이터러블 프로토콜로 다시 만들기
- map
- filter
- 이터러블 프로토콜의 다형성
- 이터러블 프로토콜로 다시 만들기 2
- L.map
- L.filter
- take와 range
- take
- range
- L.take
- L.range
- 지연 평가와 제너레이터
- L.map
- L.filter
- L.range
- take, 동작 순서
- 명령형을 이터러블 프로그래밍으로 전환 1
- 홀수 n개 더하기 명령형 코드
- if를 filter로
- 값 변화 후 변수 할당을 map으로
- break를 take로
- 합산을 reduce로
- 효율 비교하기
- 이터러블 프로토콜을 익혀야 하는 이유
- [QnA] 이터러블 프로토콜 더 자세히 보기
- for...of 가 내부적으로 하는 일
- 이터레이터의 next를 호출하는 순서를 더 자세히 알 수 있도록
- 제너레이터 없이 ES5 문법으로 지연 평가 L.range, L.map, L.filter, L.take 구현
2회
- 축약하는 함수 reduce
- reduce
- add
- count
- countBy
- groupBy
- 함수를 다루는 함수
- go
- pipe
- curry
- 2차원 배열 다루기 flat
- L.flat
- 리얼월드
- users
- DOM findAll(sel, els)
- 명령형 습관 지우기 - 만능 reduce? No!
- reduce(복잡한함수, acc, iter) 보다 reduce(함수, map(함수))
- 복잡한 reduce 하나 보다 map + filter + reduce
- queryString
- join 함수의 다형성
- 명령형을 이터러블 프로그래밍으로 전환 2
- while을 range로
- 효과를 each로 구분하기
- 추억의 별 그리기
- 추억의 구구단
3회
- 함수를 조합하기
- 함수 조합으로 생각하기, 연산자 보다 함수
- find, some, every, takeUntil
- filter + take + reduce
- 지연 평가를 통한 최적화
- 언어 의존적인 사고를 줄이는 것
- 객체를 이터러블 프로그래밍으로 다루기
- values
- entries
- keys
- 어떤 값이든 이터러블 프로그래밍으로 다루기 - 제너레이터의 다형성
- fromEntries, 코드에서 특정 도메인이 사라질 때
- mapObject
- pick
- indexBy
- indexBy된 값을 filter하기
- 객체지향과 함께 사용하기
- Map, Set, NodeList
- Model, Collection 클래스 만들어서 이터러블 프로토콜 지원하기
- Product, Products - 메서드를 함수형으로 구현하기
- 커머스 데이터 다루기
- 간단한 장바구니
- 복잡한 장바구니
- JSON 기반 프로그래밍의 장점
- 백엔드/프론트엔드 장바구니 가격 계산 로직 공유
- 직렬화/역직렬화가 단순하여 네트워크 기반 프로그래밍에 용이
- 결제 금액 조작 서버 검증
4회
- 비동기/동시성 프로그래밍
- callback과 Promise
- 비동기를 값으로 만드는 Promise
- 값으로서의 Promise 활용
- 합성 관점에서의 Promise와 모나드
- go, pipe, reduce에서 비동기 제어
- 비동기 제어에 앞서
- range, take의 재해석
- 비동기/동시성/병렬성
- map, filter, reduce
- Lazy Async
- Concurrency
- 시간을 이터러블로 다루기
- 결제 누락 처리 스케쥴러 만들기
- API 설명
- 결제된 내역 가져오기
- 가맹점 DB의 주문서 가져오기
- 비교 후 결제 취소 API 실행하기
- 반복 실행하기
5회
- 프론트엔드에서 함수형/이터러블/동시성 프로그래밍
- ES6 템플릿 리터럴 활용
- 이미지 목록 그리기
- 아이템 지우기
- 커스텀 confirm 창과 Promise
- 클래스를 대신 함수로 하는 추상화
- 이미지 동시성 다루기
- 동시성 부하 조절
- 고차 함수로 더 작게 나누어 재사용성 높이기 - 데이터형 없애기
- 상위 스코프 변수를 사용하는 함수와 아닌 함수들 쪼개기
- DOM을 다루는 고차 함수
- NPay 함께 결제 서비스 만들기
- 결제할 가게 선택
- Page 띄우기
- 함께 결제할 친구 초대
6회
- NPay 함께 결제 서비스 만들기
- 함께 결제 데이터베이스 INSERT
- 데이터베이스 트랜잭션과 async/await + try/catch
- 중첩 데이터 WHERE IN 쿼리 후 조합
- 결제 완료 페이지 SSR
- 동시성 쿼리
- 복잡한 중첩 데이터 ASSOCIATE
- No Model
- 에러 핸들링
- try/catch
- 비동기 에러 핸들링
- 왜 Array.prototype.map으로는 비동기 에러 핸들링이 안되는지?
- async/await/try/catch
2차 (draft)
- 데이터 베이스
- SQL 인젝션을 완벽히 막으려면?
- 중첩 데이터 다루기
- 깊은 값 조회
- 깊은 값 변경
- 불변성
- 영속성
- 깊은 값 불변적 변경
- NoSQL을 잘 다루는 비결
- ES6 Module
- 트랜스파일링 + 번들링
- npm modules + 내부 라이브러리 관리
- 백엔드와 프론트엔드 코드 공유
- JSON 기반 프로그래밍의 장점
- 서버사이드 렌더링
- API 서버
- 코드 리뷰
- 최적화 보일러 플레이트 논의 및 적용