NestJS 백엔드와 클라이언트 사이드 연동

sh.j225·2023년 9월 5일
0

1. 문제 상황:

클라이언트 사이드에서 require를 사용하면서 문제가 발생하였다.
이를 해결하기 위해 require를 사용하는 로직을 백엔드로 이동시키는 방안을 모색하였다.

2. 백엔드 수정:

NestJS와 TypeORM을 사용하여 백엔드를 구성하였다.
좌석 정보를 MongoDB에서 가져오고, MySQL에서 좌석의 상세 정보를 관리하도록 구현하였다.

3. 프론트엔드 수정:

fetch를 사용하여 NestJS 백엔드에서 좌석 정보를 가져온다.
가져온 좌석 정보는 2차원 배열 형태로 반환되며, 이를 활용하여 화면에 좌석을 동적으로 그리는 기능을 구현하였다.

4. 핵심 포인트:

클라이언트 사이드에서는 require를 사용할 수 없으므로, 이러한 로직은 백엔드로 이동시켜야 한다.
NestJS에서 제공하는 데코레이터와 TypeORM을 활용하면, 백엔드 로직을 효율적으로 구성할 수 있다.
프론트엔드에서는 fetch를 사용하여 백엔드와 통신하며, 반환된 데이터를 활용하여 원하는 UI를 동적으로 생성할 수 있다.

오늘의 질의 응답😎

ORM을 사용하면서 쿼리가 복잡해지는 경우에는 어떻게 해결하는게 좋을까요?

나의 답변 😄
1. Query Builder 활용: ORM이 제공하는 Query Builder를 사용하여 복잡한 쿼리를 프로그래밍적으로 작성할 수 있습니다. 이는 SQL 문법에 익숙하지 않은 개발자에게도 쿼리 작성을 간편하게 만들어줍니다.

  1. 메소드 분리: 복잡한 쿼리를 하나의 메소드에 집중하지 말고, 관련된 로직을 여러 개의 메소드로 나눠 작성하면 코드의 가독성이 향상됩니다.

  2. 최적화: ORM이 자동 생성하는 쿼리를 분석하고 최적화해야 합니다. 데이터베이스 인덱스를 관리하거나 EXPLAIN을 사용하여 쿼리 실행 계획을 분석하여 성능을 개선할 수 있습니다.

  3. Raw 쿼리 활용: 특히 복잡한 쿼리의 경우, ORM을 통하지 않고 직접 SQL 쿼리를 작성할 수 있습니다. 이를 통해 성능을 향상시킬 수 있지만, 보안과 ORM의 이점을 유지하는 것이 중요합니다.

  4. 인덱스 관리: 데이터베이스의 필드에 인덱스를 추가하여 쿼리 성능을 최적화할 수 있습니다. 이는 ORM이 자동으로 생성해주지 않는 경우 수동으로 관리해야 합니다.

  5. 캐싱 활용: 자주 사용되는 복잡한 쿼리의 결과를 캐싱하여 데이터베이스 부하를 줄일 수 있습니다. ORM의 캐싱 기능을 활용하거나 외부 캐싱 라이브러리를 사용할 수 있습니다.

  6. 디버깅 및 튜닝: 쿼리가 복잡할 경우, 디버깅을 통해 문제를 식별하고 개선하는 과정이 필요합니다. 또한 ORM의 튜닝 기능을 사용하여 성능을 모니터링하고 최적화할 수 있습니다.

종합적으로, 복잡한 쿼리를 다루는데 있어서 Query Builder, 메소드 분리, 최적화, Raw 쿼리, 인덱스 관리, 캐싱, 디버깅 등 다양한 접근법을 조합하여 사용하는 것이 좋습니다.

0개의 댓글