wam
w__am 개발노트
wam
  • 분류 전체보기 (165)
    • CS 지식 (10)
      • 자료구조 (0)
      • 알고리즘 (0)
      • 컴퓨터 구조 (0)
      • 운영체제 (0)
      • 네트워크 (7)
      • 데이터베이스 (0)
      • 디자인 패턴 (3)
    • Frontend (131)
      • Three.js (64)
      • NPM (1)
      • Nest.js (19)
      • React (10)
      • Apollo (7)
      • TypeScript (2)
      • JavaScript (12)
      • HTML, CSS (1)
      • Jest (3)
      • E2E (5)
      • Cypress (7)
    • Database (12)
      • TypeORM (12)
    • IT 지식 (8)
      • 클라우드 서비스 (3)
      • 네트워크 (1)
      • 데이터 포맷 (2)
      • 기타 (2)
    • IT Book (2)
    • 유용한 사이트 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 🐱 Github

인기 글

태그

  • Interface
  • Decorators
  • 함수의 범위
  • 렌더링 성능 최적화
  • reactive variables
  • 삼각함수
  • API
  • three.js 구성 요소
  • mapped types
  • 스코프
  • 초기 환경설정
  • math.sin()
  • 오프-프레미스(off-premise) 방식
  • 데이터 포맷
  • math.cos()
  • 함수 표현식
  • joi 에러
  • getdelta()
  • 디자인 패턴
  • react 성능 최적화
  • 함수 리터럴
  • isabstract
  • getelapsedtime()
  • 함수 선언문
  • axeshelper
  • 원형적인 움직임
  • gridhelper
  • e.preventdefault()
  • threejs 개발 할 때 도움을 줄 수 있는 유틸리티
  • type-graphql

최근 글

관리자

글쓰기 / 스킨편집 / 관리자페이지
hELLO · Designed By 정상우.
wam

w__am 개발노트

REST와 GraphQL: Controller와 Resolver의 차이점 이해하기
Frontend/Nest.js

REST와 GraphQL: Controller와 Resolver의 차이점 이해하기

2024. 7. 30. 18:34

 

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를 처리한다.

 

 

주요 차이점

 

  1. 프로토콜:
    • Controller - HTTP RESTful API 요청을 처리.

    • Resolver - GraphQL 요청을 처리.




  2. 데이터 처리 방식:
    • Controller - REST API의 각 HTTP 메서드(GET, POST 등)에 대한 핸들러를 작성.

    • Resolver - GraphQL 스키마에 정의된 타입과 필드에 대한 핸들러를 작성.




  3. 클라이언트와의 상호작용 방식:
    • REST API에서는 클라이언트가 특정 엔드포인트로 요청을 보내고 서버는 이를 처리하여 응답을 보낸다.

    • GraphQL에서는 클라이언트가 요청 시 필요한 데이터와 그 구조를 명시하고 서버는 이를 처리하여 지정된 형식으로 응답을 반환한다.




두 방식 모두 데이터를 관리하고 처리하는 역할을 하지만, 클라이언트와 서버 간의 통신 방식에 따라 적합한 기술을 선택하면 된다.

 

 

 

저작자표시 변경금지 (새창열림)

'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
    'Frontend/Nest.js' 카테고리의 다른 글
    • Task Scheduling
    • relationship 옵션 ( eager relationships, Lazy relations)
    • NestJS의 기본 모듈 구조
    • GraphQL 스키마에서 enum 타입을 정의할 때 사용, registerEnumType
    wam
    wam

    티스토리툴바