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

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

사전 과제 제출 #27

Open dev-seongjoo opened 1 year ago

dev-seongjoo commented 1 year ago

1. 본인이 작성했던 코드 중 공유하고 싶은 코드를 이유와 함께 마크다운 code block 을 사용해 올려주세요

router.get('/home', (req,res) => {
  if (req.user == undefined) {
    res.render('main.njk', {
      title: 'To do app',
    })
  }else{
    console.log(`${req.user.name}님 접속을 환영합니다.`);
    res.render('main.njk', {
      title: 'To do app',
    })
  }
});

첫 개인프로젝트인 To Do App 을 만들 때 가장 먼저 만든 코드입니다.

머리로 생각만 하고 있는 것과 직접 코드를 짜려고 시도하는 것에는 큰 차이가 있다는 것을 처음 경험했습니다.

프로그래밍은 머리속으로 생각만 하는 것이 아닌 직접 코드를 짜보는 것이 정말 중요하다는 소중한 의미를 일깨워준 코드입니다.

2. Layered Architecture(계층 아키텍처)에 대해서 설명해 주세요

관심사의 분리 라는 개념이 핵심이 되는 아키텍처입니다. 각 계층은 특정 역할을 가지며, 해당 계층에 관련된 기능만 수행합니다. 장점은 높은 유지보수성과 쉬운 테스트입니다.

일반적으로 Presentation / Business / Persistence / Database 4계층으로 나누지만 상황에 따라 3계층이 될 수도, 5계층이 될 수도 있습니다.

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

Dependency Injection(의존성 주입) 이란 하나의 객체가 다른 객체의 의존성을 제공하는 테크닉을 의미한다.

의존성 주입의 목적은 객체의 생성과 사용의 관심을 분리하는 것이다. 이는 가독성과 코드 재사용을 높여준다.

4. 본인이 사용하는 언어의 Functional Programming(함수형 프로그래밍) 스펙을 예제와 함께 소개해 주세요

const arr = [1,2,3,4,5,6,7,8,9,10];
arr.reduce(function(prev, cur) {
    return prev + cur;
});

js의 내장 함수인 reduce는 대표적인 함수형 프로그래밍의 예제입니다.

함수형 프로그래밍은 하나 이상의 인자를 받고, 받은 인자를 이용하여 반드시 결과물을 돌려주어야 합니다.

그리고 바꾸고자 하는 변수 외에 다른 변수를 바꾸는 부작용이 없어야합니다.

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. 강의를 통해서 기대하는 바, 또는 얻고 싶은 팁을 적어주세요

이번 챌린지를 통해 제게 부족한 부분들을 보충하고 더 나은 개발자로 한걸음 더 나가고 싶습니다.