REST와 GraphQL은 서버와 클라이언트 간의 데이터 통신을 위한 두 가지 주요 방식이다.
각 방식은 NestJS에서 각각 Controller와 Resolver를 사용하여 구현된다.
Resolver와 Controller는 목적과 사용되는 환경에서 차이가 있다. 둘 다 요청을 처리하고 응답을 반환하는 역할을 하지만, 사용하는 프로토콜과 구체적인 사용 사례에서 차이를 보인다.
REST와 Controller
@Controller('users')
export class UserController {
constructor(private readonly userService: UserService) {}
@Get()
findAll(): Promise<User[]> {
return this.userService.findAll();
}
@Post()
create(@Body() createUserDto: CreateUserDto): Promise<User> {
return this.userService.create(createUserDto);
}
}
- 사용되는 프로토콜 - 주로 REST API와 함께 사용
- 역할 - HTTP 요청(GET, POST, PUT, DELETE 등)을 처리하고, 적절한 응답을 반환하는 역할
- 사용 예 - URL 라우팅을 통해 특정 엔드포인트로 들어오는 요청을 처리
- 이 예시에서 UserController는 /users 엔드포인트에서의 요청을 처리한다.
GraphQL과 Resolver
@Resolver(() => User)
export class UserResolver {
constructor(private userService: UserService) {}
@Query(() => [User])
async getUsers(): Promise<User[]> {
return this.userService.findAll();
}
@Mutation(() => User)
async createUser(@Args('name') name: string): Promise<User> {
return this.userService.create({ name });
}
}
- 사용되는 프로토콜 - 주로 GraphQL API와 함께 사용
- 역할 - GraphQL 쿼리 및 변이 요청을 처리하고, 필요한 데이터를 반환하거나 데이터베이스에 변경을 가하는 역할
- 사용 예 - GraphQL 스키마에 정의된 쿼리 및 변이에 대한 요청을 처리
- 이 예시에서 UserResolver는 GraphQL 쿼리 getUsers와 변이 createUser를 처리한다.
주요 차이점
- 프로토콜:
- Controller - HTTP RESTful API 요청을 처리.
- Resolver - GraphQL 요청을 처리.
- Controller - HTTP RESTful API 요청을 처리.
- 데이터 처리 방식:
- Controller - REST API의 각 HTTP 메서드(GET, POST 등)에 대한 핸들러를 작성.
- Resolver - GraphQL 스키마에 정의된 타입과 필드에 대한 핸들러를 작성.
- Controller - REST API의 각 HTTP 메서드(GET, POST 등)에 대한 핸들러를 작성.
- 클라이언트와의 상호작용 방식:
- REST API에서는 클라이언트가 특정 엔드포인트로 요청을 보내고 서버는 이를 처리하여 응답을 보낸다.
- GraphQL에서는 클라이언트가 요청 시 필요한 데이터와 그 구조를 명시하고 서버는 이를 처리하여 지정된 형식으로 응답을 반환한다.
- REST API에서는 클라이언트가 특정 엔드포인트로 요청을 보내고 서버는 이를 처리하여 응답을 보낸다.
두 방식 모두 데이터를 관리하고 처리하는 역할을 하지만, 클라이언트와 서버 간의 통신 방식에 따라 적합한 기술을 선택하면 된다.
'Frontend > Nest.js' 카테고리의 다른 글
Task Scheduling (0) | 2024.08.26 |
---|---|
relationship 옵션 ( eager relationships, Lazy relations) (0) | 2024.08.24 |
NestJS의 기본 모듈 구조 (0) | 2024.07.30 |
GraphQL 스키마에서 enum 타입을 정의할 때 사용, registerEnumType (0) | 2024.07.29 |
GraphQL 스키마를 정의할 때 매우 유용한 도구 MapperType (0) | 2024.07.29 |