1. 본인이 작성했던 코드 중 공유하고 싶은 코드를 이유와 함께 마크다운 code block 을 사용해 올려주세요
다음은 Google에서 검색된 apple앱의 ID를 받아오는 서비스입니다.
이전 프로젝트에서 구현했던 'Google Search Engine Api 서비스 입니다.' 구글에서 검색어를 입력하면, 검색된 링크에서 앱ID를 파싱했었어야 했습니다. 앱id의 형식은 "id389562983" 형태인데, 숫자는 9자리 또는 10자리가 될 수 있었습니다. 다음 코드는, 숫자만 추출하여 배열에 담아 return하는 함수입니다.
async findAppId(search: string) {
let filtered = [];
function isNum(val) { // 숫자인지 확인해주는 함수.
return !isNaN(val);
}
try {
const found = [];
const result = await this.httpservice.axiosRef.get(
`https://www.googleapis.com/customsearch/v1/siterestrict?key=${process.env.GOOGLE_API_KEY}&cx=${process.env.GOOGLE_ENGINE_ID}&q=${search}`,
);
for (const item of result.data.items) {
const words = await item.link.split('/id'); // 링크에서 '/id'를 기준으로 문자열을 나눈 후,
let appId = '';
for (const word of words) {
// 앱 id는 10자리, 9자리 두종류가 있음. 10자리일 경우 10자리 반환, 9자리일경우 9자리 반환
if (isNum(word.substr(0, 10))) {
appId = word.substr(0, 10);
break;
} else if (isNum(word.substr(0, 9))) {
appId = word.substr(0, 9);
break;
} else {
appId = '';
}
}
if (isNum(appId) && appId.length >= 9) found.push(appId);
}
filtered = [...new Set(found)]; // 중복제거
} catch (e) {
if (e) throw new NotFoundException();
}
return filtered;
}
2. Layered Architecture(계층 아키텍처)에 대해서 설명해 주세요
'계층형 아키텍쳐'는 역할에 따라 계층을 분리해 놓은 구조입니다. Nest.js의 경우 Controller, Module, Service, DTO 등으로 나뉘어 있고, 이렇게 역할에 따라 분리해 놓은 구조는 추후 유지보수에 용이함과 동시에 매우 깔끔하게 정리되었다고 주관적으로 생각합니다.
3. Dependency Injection(의존성 주입)의 개념과 함께, 왜 필요한지 작성해 주세요
(Nest.js프로젝트에서의 경험을 토대로 답변하겠습니다)
예를 들어, [Auth모듈, User모듈] 두개의 모듈이 있다고 가정하겠습니다. 각각의 모듈은 Controller, Module, Service, DTO를 가지고 있습니다. 하지만, Auth.controller.ts 에서 User.service.ts의 서비스를 끌어다 쓰고 싶으면, Auth.module.ts에 의존성을 주입해주어야 합니다.
쉽게 말해, 각각의 모듈은 각각의 기능을 가지고 있기에 분리되어 있는 구조입니다. 따라서, 다른 모듈의 기능을 가져다 쓰고 싶을 때, 모듈에 다른 모듈의 의존성을 주입해주어야 합니다. 이 의존성 주입은, 재사용성, 가독성을 증진시켜줍니다.
4. 본인이 사용하는 언어의 Functional Programming(함수형 프로그래밍) 스펙을 예제와 함께 소개해 주세요
1. 본인이 작성했던 코드 중 공유하고 싶은 코드를 이유와 함께 마크다운 code block 을 사용해 올려주세요 다음은 Google에서 검색된 apple앱의 ID를 받아오는 서비스입니다. 이전 프로젝트에서 구현했던 'Google Search Engine Api 서비스 입니다.' 구글에서 검색어를 입력하면, 검색된 링크에서 앱ID를 파싱했었어야 했습니다. 앱id의 형식은 "id389562983" 형태인데, 숫자는 9자리 또는 10자리가 될 수 있었습니다. 다음 코드는, 숫자만 추출하여 배열에 담아 return하는 함수입니다.
2. Layered Architecture(계층 아키텍처)에 대해서 설명해 주세요 '계층형 아키텍쳐'는 역할에 따라 계층을 분리해 놓은 구조입니다. Nest.js의 경우 Controller, Module, Service, DTO 등으로 나뉘어 있고, 이렇게 역할에 따라 분리해 놓은 구조는 추후 유지보수에 용이함과 동시에 매우 깔끔하게 정리되었다고 주관적으로 생각합니다.
3. Dependency Injection(의존성 주입)의 개념과 함께, 왜 필요한지 작성해 주세요 (Nest.js프로젝트에서의 경험을 토대로 답변하겠습니다) 예를 들어, [Auth모듈, User모듈] 두개의 모듈이 있다고 가정하겠습니다. 각각의 모듈은 Controller, Module, Service, DTO를 가지고 있습니다. 하지만, Auth.controller.ts 에서 User.service.ts의 서비스를 끌어다 쓰고 싶으면, Auth.module.ts에 의존성을 주입해주어야 합니다.
쉽게 말해, 각각의 모듈은 각각의 기능을 가지고 있기에 분리되어 있는 구조입니다. 따라서, 다른 모듈의 기능을 가져다 쓰고 싶을 때, 모듈에 다른 모듈의 의존성을 주입해주어야 합니다. 이 의존성 주입은, 재사용성, 가독성을 증진시켜줍니다.
4. 본인이 사용하는 언어의 Functional Programming(함수형 프로그래밍) 스펙을 예제와 함께 소개해 주세요
JS내에서 지원하는 메서드들이 있습니다. map, filter, reduce... 등. 위는 filter를 적용한 예시입니다.
5. (코드 작성) 다음 스펙을 만족하는 delay 함수를 작성해 주세요 (hint: Promise 사용)
6. 강의를 통해서 기대하는 바, 또는 얻고 싶은 팁을 적어주세요 Nest.js기반 백엔드 프로젝트를 경험하면서, 공식문서를 여러번 읽었습니다. 하지만 다양한 사람들과 함께 얘기 나누고, 배우면서, 더 깊이있는 배움을 가지고 싶습니다.