1. 본인이 작성했던 코드 중 공유하고 싶은 코드를 이유와 함께 마크다운 code block 을 사용해 올려주세요
/**
* Nest.Js에서 계정을 생성할 때 게정 생성 일자와 암호화를 적용하는 로직
* 보통 이런 부분은 service 로직이나, 기타 영역에서 처리해야 하는데 Nest.Js에서는 스키마에 아래처럼 저장 전 핸들링을 할 수 있다는 부분이 마음에 들었습니다.
*/
AccountSchema.pre<AccountDocument>("save", function (next: Function) {
const saltRound: number = 10;
const accesDate: Date = new Date(new Date().getTime() + 9 * 60 * 60 * 1000);
this.createdAt = accesDate;
this.updatedAt = accesDate;
bcrypt.genSalt(saltRound, (err, salt) => {
if (err) return next(err);
bcrypt.hash(this.password, salt, (err, hash) => {
if (err) return next(err);
this.password = hash;
next();
});
});
});
2. Layered Architecture(계층 아키텍처)에 대해서 설명해 주세요
보편적인 구조이며, 각 레이어들은 수평적으로 구조화 되어 있다.
보통 제일 많이 사용하는 형태는 4개의 레이어로 구성되어 있다.
Presentation
UI나 브라우저 담당 영역
Business
각 요청에 대한 비즈니스 로직 담당
Persistence
데이터베이스에 접근해서 처리하는 영역
Database
데이터베이스 영역
장점
시스템 분석의 용이
변화에 대한 영향력을 한정할 수 있어 코딩이나 테스트를 계층별로 가능
계층간 구조를 나누어 재사용성이 높음
단점
계층 구분이 어렵고, 잘못 구분 시 수정이 번번히 일어남
설계 시 씽크홀 안티 패턴을 주의해야 한다.
3. Dependency Injection(의존성 주입)의 개념과 함께, 왜 필요한지 작성해 주세요
개념
특정 객체들 사이에 인터페이스를 두고, 클래스 레벨에서 의존관계가 고정되지 않도록 하고 런타임 시 관계를 동적으로 주입하는 것
필요한 이유
특정 클래스(2개 이상)들이 강하게 결합되는 문제
객체들 간의 관계가 아닌 클래스 간의 관계가 맺어지는 문제
이들을 해소하기 위해 DI를 사용
4. 본인이 사용하는 언어의 Functional Programming(함수형 프로그래밍) 스펙을 예제와 함께 소개해 주세요
//Typescript를 주로 사용하며, 순수함수, 비상태,불변성, 선언형, 1급 객체와 고차 함수 등을 사용합니다.
//Next.Js, Nest.Js 두 프레임워크를 사용하여 개발을 하며, 함수형 프로그래밍을 지향합니다.
let sevenCntPool: number[] = Object.keys(appearCnt).map((item: string) => Number(item)).filter((item: number) => appearCnt[item] === 1);
5. (코드 작성) 다음 스펙을 만족하는 delay 함수를 작성해 주세요 (hint: Promise 사용)
사전 과제
1. 본인이 작성했던 코드 중 공유하고 싶은 코드를 이유와 함께 마크다운 code block 을 사용해 올려주세요
2. Layered Architecture(계층 아키텍처)에 대해서 설명해 주세요
3. Dependency Injection(의존성 주입)의 개념과 함께, 왜 필요한지 작성해 주세요
4. 본인이 사용하는 언어의 Functional Programming(함수형 프로그래밍) 스펙을 예제와 함께 소개해 주세요
5. (코드 작성) 다음 스펙을 만족하는 delay 함수를 작성해 주세요 (hint: Promise 사용)
결과값
6. 강의를 통해서 기대하는 바, 또는 얻고 싶은 팁을 적어주세요