Jun4928 / wanted-pre-onboarding-challenge-BE-task-JAN.2023

JAN.2023 wanted 프리온보딩 챌린지 BE 사전과제
29 stars 36 forks source link

사전 과제 제출 #18

Open elfinlas opened 1 year ago

elfinlas commented 1 year ago

사전 과제

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(계층 아키텍처)에 대해서 설명해 주세요


3. Dependency Injection(의존성 주입)의 개념과 함께, 왜 필요한지 작성해 주세요


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 사용)

    type SomeFunctionReturnString = () => string

    function delay(f: SomeFunctionReturnString, seconds: number): Promise<string> {
                // 해당 함수 내부를 구현해 주세요
                return new Promise((resolve, reject) =>
            setTimeout(() => { 
                try {
                    resolve(f());
                }
                catch (e) {
                    reject(e)
                }
            }, seconds*1000),
        );
    };

    const success = () => {
      return "successfully done";
    };

    const fail = () => {
      throw new Error("failed");
    };

    delay(success, 2) // 2초 뒤에 successfully done 로그
      .then((res) => console.log(res))
      .catch((e) => console.log(e));

    delay(fail, 2) // 2초 뒤에 failed 로그
      .then((res) => console.log(res))
      .catch((e) => console.log(e));

결과값

`$ ts-node delay.ts
successfully done
Error: failed`

6. 강의를 통해서 기대하는 바, 또는 얻고 싶은 팁을 적어주세요