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

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

사전 과제 제출 #47

Open kikidy12 opened 1 year ago

kikidy12 commented 1 year ago

사전과제

  1. 본인이 작성했던 코드 중 공유하고 싶은 코드를 이유와 함께 마크다운 코드블락을 사용해 올려주세요
    • 언어 상관없음
    • 어떤 로직이든 상관없음
    • 단, 길이가 길지 않은 함수 단위가 좋습니다
const zipUtil = (file_name: string, data: string, password: string) => {
  file_name = `zip_files/${file_name}`;
  fs.writeFile(`${file_name}.csv`, "\uFEFF" + data, function (error) {});
  exec(
    `zip -rm -junk-paths --password ${password} ${file_name}.zip ${file_name}.csv`,
    function (error, stdout, stderr) {
      if (error) {
        throw error;
      }
    }
  );
};

서버상에서 엑셀 문서를 암호화된 압축파일로 생성할 필요한 적이 있어서 생성하여 사용하였습니다.

  1. Layered Architecture(계층 아키텍처)에 대해서 설명해 주세요 소프트웨어 개발에서 가장 일반적으로 널리 사용되는 아키텍처로, 각 계층은 어플리케이션 내에서의 특정 역할과 관심사(화면 표시, 비즈니스 로직 수행, DB 작업 등)별로 구분된다. 이는 Layered Architecture 의 강력한 기능인 '관심사의 분리 (Separation of Concern)' 를 의미한다. 관심사의 분리가 충족되면 각 계층의 역할을 수행할 수 있는데 집중하여 도메인 로직을 개발할 수 있고 테스트 로직을 작성할 수 있기 떄문에 유지보수에도 용이하다.

    • 3-Tier Layer : Presentation Layer(프리젠테이션 레이어), Application Layer(애플리케이션 레이어), Data Layer(데이터 레이어)
    • 4-Tier Layer : Presentation Layer(프리젠테이션 레이어), Business Layer(비즈니스 레이어), Persistence Layer(퍼시스턴스 레이어), Database Layer(데이터베이스 레이어)
  2. Dependency Injection(의존성 주입)의 개념과 함께, 왜 필요한지 작성해 주세요 Dependency Injection(의존성 주입) 이란 외부에서 두 객체 간의 관계를 결정해주는 디자인 패턴으로, 별도의 객체를 사이에 둬서 객체간에 의존관계가 고정되지 않도록 하고 런타임 시에 관계를 동적으로 주입하여 유연성을 확보하고 결합도를 낮출 수 있게 해준다.

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

    
    const arr = [1, 2, 3, 4, 5];
    arr.reduce((pre, value) => {
    return pre + value;
    }, 0);
8. (코드 작성) 다음 스펙을 만족하는 delay 함수를 작성해 주세요 (hint: Promise 사용) 
    ```ts
    type SomeFunctionReturnString = () => string

    function delay(f: SomeFunctionReturnString, seconds: number): Promise<string> {
      return new Promise((resolve, reject) => {
        setTimeout(function () {
          try {
            resolve(f());
          } catch (error) {
            reject(error);
          }
        }, seconds * 1000);
      });
    };

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

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

    delay(success, 2)
      .then((res) => console.log(res))
      .catch((e) => console.log(e));

    delay(fail, 2)
      .then((res) => console.log(res))
      .catch((e) => console.log(e));
**결과값**
```text
$ ts-node delay.ts
after 2 seconds
successfully done
Error: failed
```
  1. 강의를 통해서 기대하는 바, 또는 얻고 싶은 팁을 적어주세요 함수형 프로그래밍에 대한 이해와 nestjs를 사용하면서 의존성 주입에 대한 구분과 이해를 높이고 싶습니다.