Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 백준 자바
- 자바
- IT
- 백엔드개발자
- 개발자
- IT개발자
- IT개발
- apm 소스설치
- 기술면접
- IT취업
- 원티드
- 프리온보딩
- 개발자취준
- 백준 java
- apm 수동설치
- IT취준
- Java
- cs지식
- 백엔드 개발자
- 코테
- 프로그래머스
- 프리온보딩 백엔드 챌린지
- 알고리즘
- 개발공부
- 코딩
- 알고리즘풀이
- 백엔드
- IT공부
- 코딩테스트
- 백준
Archives
- Today
- Total
코이팅
[프리온보딩 백엔드 챌린지 Week 1-2] Nest.js 로 객체지향 이해해 보기 본문
728x90
반응형
📝 Week 1-2
Nest.js로 객체지향 이해해보기
🟡 Controllers
- controller는 client의 요청을 받고, 응답을 다시 client에게 반환합니다.
- 어플리케이션을 향한 요청을 받는 첫번째 스텝입니다.
- 외부세계로 부터 들어온 요청이 어느 곳으로 가야하는지 안내하는 역할입니다.
- 하나 이상의 route를 가지며 각각 다른 action을 수행합니다.
import { Controller, Get } from '@nestjs/common';
// @Controller : 해당 클래스가 컨트롤러라는 것을 명시합니다.
@Controller('cats')
export class CatsController {
// @Get, @Post, @Put, @Patch... : REST API 메소드
@Get()
async findAll(): Promise<string> {
return 'This action returns all cats';
}
}
🟡 Providers
- Nest.js의 근본으로 대다수의 클래스들이 provider입니다.
- provider는 dependency로 주입될 수 있습니다.
- 컨트롤러는 HTTP 요청을 핸들링하고 더 복잡한 일들을 provider에게 위임해야합니다.
- provider는 그저 JavaScript의 class일 뿐입니다.
@Injectable()
export class CatsService {
private readonly cats: Cat[] = [];
create(cat: Cat) {
this.cats.push(cat);
}
}
@Controller('cats')
export class CatsController {
constructor(private catsService: CatsService) {}
@Post()
async create(@Body() createCatDto: CreateCatDto) {
this.catsService.create(createCatDto);
}
}
🟡 Modules
- 같은 도메인에 속한 것들을 응집화 할 수 있도록 도와줍니다.
- 앱의 사이즈가 커질수록, 경계를 설정해서 복잡도를 매니징 할 수 있습니다.
import { Module } from '@nestjs/common';
import { CatsController } from './cats.controller';
import { CatsService } from './cats.service';
@Module({
controllers: [CatsController],
providers: [CatsService],
})
export class CatsModule {}
🟡 Dependency Injection
- 의존성 주입입니다. 하나의 객체가 다른 객체의 의존성을 제공하는 기술입니다.
- Nest.js 런타임 시스템이 dependency 인스턴스화를 위임합니다.
- 클래스에 @Module() 데코레이터를 붙여서 선언합니다.
- 코드의 결합도를 느슨하게 하도록 하고, 객체의 생성과 사용을 분리합니다.
- 코드의 가독성과 재사용성을 높여줍니다.
@Injectable()
export class CatsService {
@Controller('cats')
export class CatsController {
constructor(private catsService: CatsService) {}
@Module({
controllers: [CatsController],
providers: [{
Provide: CatsService,
useClass: CatsService,
}],
})
// 1. CatsController 를 인스턴스화 할 때, dependency 를 살펴봅니다.
// 2. CatsService 토큰은 CatsService 클래스를 리턴합니다.
// 3. SINGLETON 스코프(default)로 CatsService를 인스턴스화 합니다.
// 4. 메모리 내에 캐시를 하고 재사용가능 하도록 만듭니다.
// 5. 이 모든 과정은 bottom up 으로 dependency 가 정확한 순서로 관리됩니다.
728x90
반응형
'대외활동 > 원티드 프리온보딩 백엔드 챌린지' 카테고리의 다른 글
[프리온보딩 백엔드 챌린지 Week 2-1] 실무 함수형 프로그래밍 1 (0) | 2023.01.21 |
---|---|
[프리온보딩 백엔드 챌린지 Week 1-1] 함수형 프로그래밍이 뭔데요? (0) | 2023.01.11 |
프리온보딩 백엔드 챌린지 시작 (0) | 2023.01.11 |
Comments