클라이언트 사이드에서 require를 사용하면서 문제가 발생하였다.
이를 해결하기 위해 require를 사용하는 로직을 백엔드로 이동시키는 방안을 모색하였다.
NestJS와 TypeORM을 사용하여 백엔드를 구성하였다.
좌석 정보를 MongoDB에서 가져오고, MySQL에서 좌석의 상세 정보를 관리하도록 구현하였다.
fetch를 사용하여 NestJS 백엔드에서 좌석 정보를 가져온다.
가져온 좌석 정보는 2차원 배열 형태로 반환되며, 이를 활용하여 화면에 좌석을 동적으로 그리는 기능을 구현하였다.
클라이언트 사이드에서는 require를 사용할 수 없으므로, 이러한 로직은 백엔드로 이동시켜야 한다.
NestJS에서 제공하는 데코레이터와 TypeORM을 활용하면, 백엔드 로직을 효율적으로 구성할 수 있다.
프론트엔드에서는 fetch를 사용하여 백엔드와 통신하며, 반환된 데이터를 활용하여 원하는 UI를 동적으로 생성할 수 있다.
나의 답변 😄
1. Query Builder 활용: ORM이 제공하는 Query Builder를 사용하여 복잡한 쿼리를 프로그래밍적으로 작성할 수 있습니다. 이는 SQL 문법에 익숙하지 않은 개발자에게도 쿼리 작성을 간편하게 만들어줍니다.
메소드 분리: 복잡한 쿼리를 하나의 메소드에 집중하지 말고, 관련된 로직을 여러 개의 메소드로 나눠 작성하면 코드의 가독성이 향상됩니다.
최적화: ORM이 자동 생성하는 쿼리를 분석하고 최적화해야 합니다. 데이터베이스 인덱스를 관리하거나 EXPLAIN을 사용하여 쿼리 실행 계획을 분석하여 성능을 개선할 수 있습니다.
Raw 쿼리 활용: 특히 복잡한 쿼리의 경우, ORM을 통하지 않고 직접 SQL 쿼리를 작성할 수 있습니다. 이를 통해 성능을 향상시킬 수 있지만, 보안과 ORM의 이점을 유지하는 것이 중요합니다.
인덱스 관리: 데이터베이스의 필드에 인덱스를 추가하여 쿼리 성능을 최적화할 수 있습니다. 이는 ORM이 자동으로 생성해주지 않는 경우 수동으로 관리해야 합니다.
캐싱 활용: 자주 사용되는 복잡한 쿼리의 결과를 캐싱하여 데이터베이스 부하를 줄일 수 있습니다. ORM의 캐싱 기능을 활용하거나 외부 캐싱 라이브러리를 사용할 수 있습니다.
디버깅 및 튜닝: 쿼리가 복잡할 경우, 디버깅을 통해 문제를 식별하고 개선하는 과정이 필요합니다. 또한 ORM의 튜닝 기능을 사용하여 성능을 모니터링하고 최적화할 수 있습니다.
종합적으로, 복잡한 쿼리를 다루는데 있어서 Query Builder, 메소드 분리, 최적화, Raw 쿼리, 인덱스 관리, 캐싱, 디버깅 등 다양한 접근법을 조합하여 사용하는 것이 좋습니다.