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

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

사전과제 제출 #54

Open BaskBoomy opened 1 year ago

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

    const user = async (userId:ObjectId | string) => {
    try {
        const user = await User.findById(userId);
        return {
            ...user!._doc,
            _id: user!.id,
            createdJobs: jobs.bind(this, user!._doc.createdJobs as [string]),
            appliedJobs: jobs.bind(this, user!._doc.appliedJobs as [string]),
            likedJobs:   jobs.bind(this, user!._doc.likedJobs as [string])
        };
    } catch (err) {
        console.log(err);
        throw err;
    }
    }

    graphql을 사용하여 클라이언트가 사용자 정보를 조회하는 api를 사용할 때 사용자와 관련된 모든 정보(ex. 생성, 등록, 좋아요)들 모두 조회가 가능하도록 구현한 코드입니다.

  2. Layered Architecture(계층 아키텍처)에 대해서 설명해 주세요 개발 초기에 사용자의 요청에 대한 로직, 비지니스 로직 그리고 데이터 로직을 모두 한 파일내에 코드를 작성했었습니다. 이러한 방식으로 작성하게 되면 코드의 가독성의 떨어질 뿐만 아니라 시스템 분석이 어려워 질 수 있습니다. 따라서 현재는 앞서 말한 로직별로 계층을 분리하여 코드를 작성하고 있습니다.

  3. Dependency Injection(의존성 주입)의 개념과 함께, 왜 필요한지 작성해 주세요 DI는 외부의 객체를 생성하여 넣어주는 것을 뜻합니다. DI를 사용하게 되면 코드의 재사용성을 높여주고 확장성이 높아집니다. 따라서 코드가 매우 단순화되기 때문에 설계에 매우 용이합니다.

  4. 본인이 사용하는 언어의 Functional Programming(함수형 프로그래밍) 스펙을 예제와 함께 소개해 주세요 아직 프로젝트에 적용한 경험이 없습니다.

  5. (코드 작성) 다음 스펙을 만족하는 delay 함수를 작성해 주세요 (hint: Promise 사용)

function delay(f: SomeFunctionReturnString, seconds: number): Promise<string> {
    return new Promise((resolve,reject)=>{
        setTimeout(()=>{
            try{
                resolve(f());
            }catch(e){
                reject(e);
            }
        },seconds*1000);
    })
};
  1. 강의를 통해서 기대하는 바, 또는 얻고 싶은 팁을 적어주세요
    • 함수형 프로그래밍을 완벽히 터득하자!
    • 좋은 팀원들과 함께 지속적인 스터디를 통해 취업 성공하자!
    • nodejs 백엔드 개발자로 더 성장하기 위한 방법