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

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

사전과제 제출 #55

Open WJJayyy opened 1 year ago

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

    const createPost = asyncWrap(async(req, res, next) => {
    const userId = req.user.id
    
    const post = {
        marker : JSON.parse(req.body.marker),
        hashTag : JSON.parse(req.body.hashTag),
        size : req.body.size,
        residence : req.body.residence,
        style : req.body.style,
        space : req.body.space,
        comment : req.body.comment
    }
    
    const image = req.file
    
    await postingService.createPost(userId, post, image)
    
    return res.status(200).json({ message: "post success" });
    })
    • 프론트엔드와 백엔드간의 통신시  form-data형식의 데이터 전송 타입의 차이에 따른 상황에서 JSON.parse() 메소드를 통해 string타입의 데이터를 처리하였다.
  2. Layered Architecture(계층 아키텍처)에 대해서 설명해 주세요

    • 코드를 논리적인 부분 혹은 역할에 따라 독립된 모듈로 나누어 구성하는 패턴(아키텍처) 입니다.
    • "단방향 의존성"과 "관심사 분리"라는 두가지 핵심 원리에 기반한 개념 입니다.
    • 각 모듈이 서로의 의존도에 따라 층층히 쌓듯이 연결되어 전체의 시스템을 구성하는 구조 입니다.
    • 일반적으로 3-4개의 레이어가 존재(Presentation Layer / Business Layer / Persistence Layer)
    • 확장성 / 가독성 / 재사용성 / 테스트 가능성의 장점이 있다.
  3. Dependency Injection(의존성 주입)의 개념과 함께, 왜 필요한지 작성해 주세요

    • 의존성 주입은 디자인 패턴의 한 종류로 두 객체 간의 의존 관계에서 오는 문제점을 해결하기 위한 것입니다.
    • 의존 대상 B가 변하면, A에 영향을 미칠때 A와 B는 의존 관계에 있다고 정의합니다.
    • 의존 관계가 복잡하게 얽혀있는 코드에서는 에러가 발생 시 원인을 찾거나 해결하는 것이 어렵기 때문에 코드의 품질과 안정성을 해치게 됩니다.
    • 클래스 외부에서 객체를 생성하여 내부에 주입하는 의존성 주입을 통해 의존 관계를 느슨하고 유연하게 만들어 이러한 문제를 해결할 수 있습니다.
  4. 본인이 사용하는 언어의 Functional Programming(함수형 프로그래밍) 스펙을 예제와 함께 소개해 주세요

    
    const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
    //1.
    const sum1 = numbers.reduce((accumulator, currentNumber) 
    => accumulator + currentNumber, 0);

console.log('sum1 =', sum1);


// 2. callback함수 선언 후 이용 function sumReducer(accumulator, currentNumber) { return accumulator + currentNumber; }

const sum2 = numbers.reduce(sumReducer, 0);

console.log('sum2 =', sum2);

- JS의 reduce함수의 경우 배열의 각 요소를 순회하며 callback함수의 실행 값을 누적하여 하나의 결과값을 반환한다.

5. (코드 작성) 다음 스펙을 만족하는 delay 함수를 작성해 주세요 (hint: Promise 사용) 
```ts
type SomeFunctionReturnString = () => string
function delay(f: SomeFunctionReturnString, seconds: number): Promise<string> {
  return new Promise<string>((success, fail) => {
    setTimeout(() => {
      try {
        success(f())
      } catch (e) {
        fail(e);
      }
    }, seconds * 1000);
  });

};
const success = () => {
  return "successfully done";
};
const fail = () => {
  throw new Error("failed");
};
**결과값**
```text
$ ts-node delay.ts
after 2 seconds
successfully done
Error: failed
```
  1. 강의를 통해서 기대하는 바, 또는 얻고 싶은 팁을 적어주세요
    • 함수형 프로그래밍의 사용 및 이해
    • 타입스크립트 및 nestjs의 사용 및 이해
    • 백엔드 개발자로서의 성장방향 및 관점