현재 nestjs로 사이드 프로젝트를 진행하고 있는데 예외처리를 조금 깔끔하게 하기 위해서 따로 신경을 쓰고 있는 부분입니다.
아직 다른 부분에 구현해야될 부분이 많지만 공유하고 싶습니다.
Layered Architecture(계층 아키텍처)에 대해서 설명해 주세요
소프트웨어 개발에서 가장 일반적으로 널리 사용되는 아키텍처이다. 구성되는 계층의 숫자에 따라 N계층 (N-tier Architecture) 라고도 한다.
어플내의 특정역활과 관심사(화면표시, 비즈니스 로직 수행, DB 작업등)별로 구분된다. 이는 관심사의 분리이며, 특정 기능만 수행하며 이런 특징은 유지보수성과 쉬운 테스트라는 장점이 있다.
Dependency Injection(의존성 주입)의 개념과 함께, 왜 필요한지 작성해 주세요
의존성 주입이란 클래스간 의존성을 클래스 외부에서 주입하는 것을 뜻한다. 더 자세하게는 의존성 주입은 클래스에 대한 의존성의 인터페이스화를 통한 코드 유연성 증대와 클래스의 인스턴스를 외부에서 생성하여 주입하는 것을 뜻한다.
장점으로는 한 클래스가 변경될 경우 다른 클래스가 변경될 필요성이 적어진다는 것을 클래스간의 결합도가 약해진다고 하는데, 클래스간의 결합도가 약해져, 리팩토링이 쉬워진다. 또한 특정클래스를 테스트하기 쉬워진다. 또한 코드를 유연하게 해, 확장을 쉽게 한다. 프로그램의 생명주기에 따라 생명주기별로 컨테이너를 관리 할수 있다면 리소스 낭비를 막을수 있다.
본인이 사용하는 언어의 Functional Programming(함수형 프로그래밍) 스펙을 예제와 함께 소개해 주세요
기본적인 ES5를 따르고 있고
기본적인 예제는 다음과 같다.
// 고차 함수의 인수로 함수를 넘길 때, 해당 함수에서 바깥 스코프에 있는 변수를 사용할 수 있습니다.
const people = [
{name: '윤아준', age: 19},
{name: '신하경', age: 20}
]
function peopleOlderThan(people, threshold) {
return people.filter(person => person.age > threshold);
}
peopleOlderThan(people, 19); // [ { name: '신하경', age: 20 } ]
(코드 작성) 다음 스펙을 만족하는 delay 함수를 작성해 주세요 (hint: Promise 사용)
사전과제
본인이 작성했던 코드 중 공유하고 싶은 코드를 이유와 함께 마크다운 코드블락을 사용해 올려주세요
현재 nestjs로 사이드 프로젝트를 진행하고 있는데 예외처리를 조금 깔끔하게 하기 위해서 따로 신경을 쓰고 있는 부분입니다. 아직 다른 부분에 구현해야될 부분이 많지만 공유하고 싶습니다.
Layered Architecture(계층 아키텍처)에 대해서 설명해 주세요
소프트웨어 개발에서 가장 일반적으로 널리 사용되는 아키텍처이다. 구성되는 계층의 숫자에 따라 N계층 (N-tier Architecture) 라고도 한다. 어플내의 특정역활과 관심사(화면표시, 비즈니스 로직 수행, DB 작업등)별로 구분된다. 이는 관심사의 분리이며, 특정 기능만 수행하며 이런 특징은 유지보수성과 쉬운 테스트라는 장점이 있다.
장점으로는 한 클래스가 변경될 경우 다른 클래스가 변경될 필요성이 적어진다는 것을 클래스간의 결합도가 약해진다고 하는데, 클래스간의 결합도가 약해져, 리팩토링이 쉬워진다. 또한 특정클래스를 테스트하기 쉬워진다. 또한 코드를 유연하게 해, 확장을 쉽게 한다. 프로그램의 생명주기에 따라 생명주기별로 컨테이너를 관리 할수 있다면 리소스 낭비를 막을수 있다.
기본적인 ES5를 따르고 있고
기본적인 예제는 다음과 같다.
function delay(f: SomeFunctionReturnString, seconds: number) { return new Promise((resolve, reject) => setTimeout(() => { const meg = f(); try { resolve(meg); } catch (error) { resolve(meg); } }, 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));