식단 관리 웹 어플리케이션을 제작할 때 차트 API를 위해 작성했던 서비스 함수입니다.
서비스의 기능은 아래와 같습니다.
7일간의 기간 동안 하루 섭취한 영양소의 평균을 보여준다
당시에는 기간이 촉박해 하드 코딩에 가깝게 처리했으나 더 좋은 로직을 생각해내고 싶어 공유합니다.
2. Layered Architecture(계층 아키텍처)에 대해서 설명해 주세요
Layered Architecture
계층 아키텍쳐는 자바 EE 어플리케이션의 사실상의 표준이 되는 등 널리 알려져있다.
계층화된 아키텍쳐 패턴 안의 구성 요소는 수평적으로 구성되며, 각각의 레이어는 어플리케이션 안에서 특별한 역할을 수행한다. 대부분 계층 아키텍쳐는 Presentation, Business, Persistence, Database, 네 개의 표준 계층으로 구성된다. 각 계층은 특정한 비즈니스 요구를 만족시키기 위한 작업을 추상화한다. 각 계층은 서로가 무슨 일을 하는지 알 필요가 없다.
계층은 표현 계층, 비즈니스 계층, 지속 계층, 데이터베이스 계층으로 나누어져 있다.
이처럼, 계층 아키텍처의 가장 강력한 기능 중 하나는 구성 요소간의 관심사 분리이다. 특정 계층 내에 있는 구성 요소들은 그 계층에 관련된 로직만을 다룬다.
또한 아키텍쳐 내의 계층은 전부 닫혀 있다. 이 뜻은 리퀘스트가 계층 간에서 이동할 때 바로 아래 계층을 통과해야 그 다음 계층 또한 통과할 수 있다는 것이다. 물론 바로 직접 리퀘스트를 보내는 것이 매우 빠를 테지만 격리 계층을 위해서 이와 같은 규칙을 지킨다. 예로, 만약 표현 계층에서 바로 비즈니스 지속성 계층으로 리퀘스트를 보낸다면 지속성 계층에서 행한 작업을 각각의 비즈니스 계층과 데이터베이스 계층에게도 반영을 해야 한다. 이렇게 된다면 아키텍처 계층간 상호 종속성이 높아지고 매우 밀접하게 결합된 어플리케이션이 되어 변경하기가 어려워진다.
리퀘스트 흐름은 보통 다음과 같다.
화면을 보고 있는 사용자가 정보를 요청한다.
요청은 delegated 모듈로 전달되어 해당 요청을 처리하기 위해 비즈니스 계층의 Object로 다시 전달된다.
Object는 요청을 받고 로직을 수행하기 위해 Data Access Object를 부른다.
Object가 데이터베이스 계층으로부터 데이터를 받으면 지속성 계층, 비즈니스 계층, 표현 계층으로 전달되고 화면을 보고 있는 사용자에게 최종 전달된다.
3. Dependency Injection(의존성 주입)의 개념과 함께, 왜 필요한지 작성해 주세요
Dependency Injection 의존성 주입
의존성 : 의존대상이 변하면 의존하는 대상에게도 영향을 미치는 것
의존성이 높으면 변경을 자주 해야 하며 어려울지도 모른다. 하지만 의존 관계를 추상화하거나 하면 더 다양한 의존 관계를 맺을 수 있다.
이러한 의존 관계를 외부에서 결정하고 주입하는 것이 의존성 주입이다. 즉, 객체가 의존하는 다른 객체를 외부에서 선언한 뒤에 이를 주입 받아 사용하는 것이다.
장점
의존성이 줄어든다
재사용성이 높다
테스트성이 좋다
가독성이 높다
4. 본인이 사용하는 언어의 Functional Programming(함수형 프로그래밍) 스펙을 예제와 함께 소개해 주세요
Scala를 공부 중입니다. 아직 공부 중이라 마땅한 예제가 없습니다.
스칼라는 객체 지향 언어의 특징과 함수형 언어의 특징을 함께 가지는 다중 패러다임 프로그래밍 언어이다. 스칼라는 모든 함수를 값으로 생각한다. 고차 함수를 지원하고 함수의 중첩을 허용하며 커링 또한 지원한다. 스칼라는 함수형 언어의 특징을 가지기 때문에 자바에 비해 코드 길이가 짧으며 바이트 코드를 최적화하여 자바보다 속도가 20% 정도 빠르다.
5. (코드 작성) 다음 스펙을 만족하는 delay 함수를 작성해 주세요 (hint: Promise 사용)
1. 본인이 작성했던 코드 중 공유하고 싶은 코드를 이유와 함께 마크다운 code block 을 사용해 올려주세요
식단 관리 웹 어플리케이션을 제작할 때 차트 API를 위해 작성했던 서비스 함수입니다. 서비스의 기능은 아래와 같습니다.
2. Layered Architecture(계층 아키텍처)에 대해서 설명해 주세요
Layered Architecture
계층 아키텍쳐는 자바 EE 어플리케이션의 사실상의 표준이 되는 등 널리 알려져있다. 계층화된 아키텍쳐 패턴 안의 구성 요소는 수평적으로 구성되며, 각각의 레이어는 어플리케이션 안에서 특별한 역할을 수행한다. 대부분 계층 아키텍쳐는 Presentation, Business, Persistence, Database, 네 개의 표준 계층으로 구성된다. 각 계층은 특정한 비즈니스 요구를 만족시키기 위한 작업을 추상화한다. 각 계층은 서로가 무슨 일을 하는지 알 필요가 없다.
계층은 표현 계층, 비즈니스 계층, 지속 계층, 데이터베이스 계층으로 나누어져 있다.
이처럼, 계층 아키텍처의 가장 강력한 기능 중 하나는 구성 요소간의 관심사 분리이다. 특정 계층 내에 있는 구성 요소들은 그 계층에 관련된 로직만을 다룬다. 또한 아키텍쳐 내의 계층은 전부 닫혀 있다. 이 뜻은 리퀘스트가 계층 간에서 이동할 때 바로 아래 계층을 통과해야 그 다음 계층 또한 통과할 수 있다는 것이다. 물론 바로 직접 리퀘스트를 보내는 것이 매우 빠를 테지만 격리 계층을 위해서 이와 같은 규칙을 지킨다. 예로, 만약 표현 계층에서 바로 비즈니스 지속성 계층으로 리퀘스트를 보낸다면 지속성 계층에서 행한 작업을 각각의 비즈니스 계층과 데이터베이스 계층에게도 반영을 해야 한다. 이렇게 된다면 아키텍처 계층간 상호 종속성이 높아지고 매우 밀접하게 결합된 어플리케이션이 되어 변경하기가 어려워진다.
리퀘스트 흐름은 보통 다음과 같다.
3. Dependency Injection(의존성 주입)의 개념과 함께, 왜 필요한지 작성해 주세요
Dependency Injection 의존성 주입
의존성 : 의존대상이 변하면 의존하는 대상에게도 영향을 미치는 것
의존성이 높으면 변경을 자주 해야 하며 어려울지도 모른다. 하지만 의존 관계를 추상화하거나 하면 더 다양한 의존 관계를 맺을 수 있다. 이러한 의존 관계를 외부에서 결정하고 주입하는 것이 의존성 주입이다. 즉, 객체가 의존하는 다른 객체를 외부에서 선언한 뒤에 이를 주입 받아 사용하는 것이다.
장점
4. 본인이 사용하는 언어의 Functional Programming(함수형 프로그래밍) 스펙을 예제와 함께 소개해 주세요
Scala를 공부 중입니다. 아직 공부 중이라 마땅한 예제가 없습니다.
스칼라는 객체 지향 언어의 특징과 함수형 언어의 특징을 함께 가지는 다중 패러다임 프로그래밍 언어이다. 스칼라는 모든 함수를 값으로 생각한다. 고차 함수를 지원하고 함수의 중첩을 허용하며 커링 또한 지원한다. 스칼라는 함수형 언어의 특징을 가지기 때문에 자바에 비해 코드 길이가 짧으며 바이트 코드를 최적화하여 자바보다 속도가 20% 정도 빠르다.
5. (코드 작성) 다음 스펙을 만족하는 delay 함수를 작성해 주세요 (hint: Promise 사용)
결과값
$ ts-node delay.ts successfully done Error: failed
6. 강의를 통해서 기대하는 바, 또는 얻고 싶은 팁을 적어주세요
다른 분들과 꾸준히 챌린지를 도전하며 함수형 프로그래밍을 실무에 꼭 적용하고 싶습니다. 또한 트렌드 또한 익히고 싶습니다.