2025 . 오은

repo

Supabase select, join

문제 정의

Supabase 사용 중 특정 테이블과 외래 키 관계인 다른 테이블의 데이터를 함께 가져와야 하는 상황이 발생했습니다. 처음에는 조인(join)을 활용하는 방법을 몰라 동일한 구문(.from, .select 등)을 반복하여 데이터를 개별적으로 가져와야 했습니다. 이로 인해 반복적인 코드가 많아지는 문제가 발생했습니다.

해결 과정

Supabase의 select 메서드를 활용하여 테이블 간의 관계를 설정하고, 조인을 통해 관련 데이터를 한 번에 가져오는 방법을 학습하였습니다. 이를 통해 trips와 contract 테이블 간의 외래 키(foreign key)를 활용한 조인을 구현할 수 있게 되었습니다. 다음과 같은 단계를 통해 문제를 해결했습니다:

  1. Supabase 조인 기능 학습 및 이해:

    • Supabase의 select 메서드에서 관계된 테이블을 조인하는 방법을 공식 문서와 커뮤니티 자료를 통해 학습했습니다.
    • 조인할 테이블 간의 관계를 명확히 이해하고, 필요한 데이터를 효율적으로 가져오는 쿼리 작성법을 익혔습니다.
  2. 조인 쿼리 작성 및 적용:

    • trips 테이블과 contract 테이블 간의 외래 키 관계를 활용하여 조인 쿼리를 작성했습니다.
    • 다음과 같이 select 메서드 내에서 조인할 테이블과 필요한 필드를 지정하여 한 번의 요청으로 데이터를 가져올 수 있도록 수정했습니다.
    const {
        data: trip,
        error: tripError,
      }: {
        data: TripWithContract | null;
        error: PostgrestError | null;
      } = await supabase.from('trips').select('*, contract (*)').eq('trip_id', id).maybeSingle();
    
    • 위 코드에서 select('*, contract (*)') 구문을 통해 trips 테이블의 모든 필드와 관련된 contract 테이블의 모든 필드를 함께 가져오도록 설정했습니다.
  3. 코드 최적화 및 테스트:

    • 조인 쿼리를 적용한 후, 데이터를 정상적으로 가져올 수 있는지 테스트했습니다.
    • 여러 번의 네트워크 요청을 줄이고, 한 번의 요청으로 필요한 모든 데이터를 가져오는지 확인했습니다.
    • 에러 핸들링을 추가하여 조인 과정에서 발생할 수 있는 문제를 효과적으로 처리할 수 있도록 했습니다.

결과

조인 쿼리를 활용한 후 다음과 같은 개선 효과를 얻었습니다:

  • 코드 간결성 증대: 중복된 코드가 사라지고, 조인 쿼리를 통해 필요한 데이터를 한 번에 가져올 수 있어 코드가 더욱 간결해졌습니다.
  • 유지보수 용이성: 데이터 가져오는 로직이 단순해져, 추후 수정이나 확장이 용이해졌습니다.
  • 데이터 일관성 확보: 관련된 데이터를 한 번에 가져옴으로써, 데이터 간의 일관성을 유지할 수 있게 되었습니다.

배운 점 (인사이트)

  • 조인의 효율성: Supabase의 select 메서드를 활용한 조인은 관련된 데이터를 한 번의 요청으로 가져올 수 있어, 애플리케이션의 성능과 코드의 효율성을 크게 향상시킬 수 있다는 점을 깨달았습니다.
  • 외래 키 활용의 중요성: 테이블 간의 외래 키 관계를 명확히 설정하고 활용함으로써, 데이터베이스 쿼리를 최적화할 수 있음을 배웠습니다.
  • 라이브러리 기능의 깊이 있는 이해: Supabase와 같은 백엔드 서비스의 고급 기능을 학습하고 적용함으로써, 더 효율적이고 강력한 데이터 관리가 가능하다는 점을 경험했습니다.
  • 코드 최적화의 필요성: 초기에는 단순한 방법으로 데이터를 가져왔으나, 더 효율적인 방법을 학습하고 적용함으로써 코드의 품질과 성능을 향상시킬 수 있었습니다.
  • 문제 해결을 위한 지속적인 학습의 중요성: 새로운 기능이나 방법을 학습하고 적용하는 과정이 개발자로서의 역량을 강화하고, 실제 문제를 효과적으로 해결하는 데 얼마나 중요한지를 깨달았습니다.
  • 커뮤니티와 문서 활용: Supabase의 공식 문서와 개발자 커뮤니티를 적극적으로 활용하여, 필요한 정보를 빠르게 얻고 문제를 해결할 수 있음을 경험했습니다.