-
원티드 프리온보딩 백엔드 챌린지 2023년 1월 후기후기 2023. 2. 18. 19:24
사수가 없는 환경에서 개발을 진행해온 내 입장에서 정말 여러가지로 도움이 많이된 강의였다.
'항상 내가 잘 하고 있는게 맞는걸까?' 또는 '이런 문제를 다른 개발자들은 어떻게 해결할까?'라는 궁금증이 있었는데
이 강의를 통해 지금 잘하고 있다고 확신했고 다른 개발자들의 생각도 엿볼 수 있어서 너무 좋았다.
원래 알고 있던 지식도 체크해 볼 수 있었고 새로 습득한 지식도 아주 흥미로웠다.
이런 좋은 기회를 준 원티드에게 너무 감사했다.
강의 기록 레파지토리
https://github.com/tsCalm/wanted-pre-onboarding-challenge-BE-task-JAN.2023
프리온보딩 주제
- 함수형 프로그래밍의 기본 개념과 친숙해질 거예요.
- 함수형 패러다임으로 사고하며, 좋은 코드란 무엇일까 함께 고민하는 거예요.
- 실무에서 사용하는 아키텍처에서 함수형 프로그래밍의 사용 사례를 경험해 보는 거예요.
수업내용
1주차
- 함수형 프로그래밍 컨셉
- 객체지향, 함수형 프로그래밍 패러다임
- 실용주의 프로그래밍
- 고차함수(map, filter, reduce) 구현하기
- 함수형 패러다임으로 현실의 문제 해결하기
2주차
- Nest.js 주요 컨셉
- Ports and Adapters Architecture
- Nest.js 로 프로젝트 아키텍처 구성하기
- 간단한 API 작성하기
- 서비스 로직을 어디에 가둬야 할지 생각해보기
- 의존이 끊긴 서비스 로직 테스트 코드 작성하기
3주차
- Ports and Adapters Architecture
4주차
- 비동기 병렬처리 쉽게 다루기
흥미로웠던 점
1. 지연 평가(Lazy evaluation)라는 개념을 간단하게 소개한다.
일반적으로 우리는 여러 고차함수를 함께 사용할 때 함수 체이닝을 사용한다.
map -> -> -> -> -> filter -> -> -> -> -> map -> -> -> -> -> 위 테이블을 보면 map 함수를 마친 후 filter 함수가 실행되고 filter함수를 마친 뒤 map 함수가 실행된다.
즉 모든 반복문을 전부 수행하고 데이터의 양이 많아질수록 오래걸릴 수 밖에 없는 구조이다.
그러나 함수형 프로그래밍의 지연 평가를 사용하게 되면 아래 표와 같이 함수가 실행된다.
map ↓ ↓ ↓ ↓ ↓ filter ↓ ↓ ↓ ↓ ↓ map ↓ ↓ ↓ ↓ ↓ 위 테이블을 보면 map 함수를 한번 실행하고 filter함수를 한번 실행하고 map함수를 한번 실행하는 구조이다.
이러한 구조의 장점은 반복문을 전부 돌지 않고 특정 조건을 만족하는 순간 반복문을 종료한 후 결과를 리턴한다.
데이터의 양이 클수록 지연평가는 엄청난 효과를 얻을 수 있다.
2. hexagonal architecture (port and adapter architecture)
3. 의존이 끊긴 서비스 로직 테스트
이 강의에서 헥사고날 아키텍처에서 test 코드를 어떻게 작성해야하는지 알려준다.
in bound port<interface>를 implements한 비즈니스 로직의 테스트에 중점을 두고 out bound port<interface>를 implements한 mockClass를 생성한 후 비즈니스 로직이 간접적으로 의존하게 하여 테스트를 진행한다.
이렇게 함으로써 외부에 의존하지 않고 순수하게 비즈니스 로직을 테스트할 수 있게 된다.
4. 비동기 병렬처리
순차적인 작업이 필요하지 않는 비동기 함수는 한번에 처리하는게 효율이 좋다.
[가정] appleOutPort.execute() ==> 실행시간 1초 bananaOutPort.execute() ==> 실행시간 2초 grapeOutPort.execute() ==> 실행시간 3초 [예제1] const appleList = await appleOutPort.execute(); const bananaList = await bananaOutPort.execute(); const grapeList = await grapeOutPort.execute(); const fruits = [...appleList, ...bananaList, ...grapeList]; [예제2] const appleList = appleOutPort.execute(); const bananaList = bananaOutPort.execute(); const grapeList = grapeOutPort.execute(); const fruits = (await Promise.all([appleList, bananaList, grapeList])).flat()
예제 1번
1초 2초 3초 4초 5초 6초 appleOutPort.execute() bananaOutPort.execute() grapeOutPort.execute() 총 비동기 처리 시간 :appleList (1초) + bananaList(2초) + grapeList(3초) => 총 6초
예제 2번
1초 2초 3초 appleOutPort.execute() x x bananaOutPort.execute() x grapeOutPort.execute() 총 비동기 처리 시간: 동시에 시작하기 때문에 총3초
'후기' 카테고리의 다른 글
원티드 프리온보딩 백엔드 챌린지 2023년 2월 후기 (0) 2023.02.18 프론트앤드 개발자 신입 질문 요약 (1) 2020.01.21 국비지원(it) 비트캠프 강남점 후기! (1) 2020.01.21