팀 프로젝트 회고 [Pet Hub]

2024. 6. 26. 20:09·IT

프로젝트에서 배운 점

MVC 패턴과 데이터베이스 접근 방법의 최적화

 

 

문제점

프로젝트 진행 중, 트랜잭션 내 데이터 접근과 데이터베이스 조인 최적화에 관련된 두 가지 주요 문제를 겪었습니다.

  1. 트랜잭션 내 데이터 접근 문제:
    MVC 패턴을 사용하며 MyBatis로 데이터베이스 접근을 하는 중, 서비스 레이어에 @Transactional을 적용하여 트랜잭션 내에서 작동하도록 설계했습니다. 회원가입 서비스에서, 주소(Address) 테이블이 회원(Member) 테이블을 참조하는 구조를 사용했습니다. 회원 테이블에 데이터를 먼저 삽입한 후 자동 증가된 PK 값을 주소 테이블에 삽입하려 했으나, 트랜잭션이 완료되기 전에 데이터를 조회하려다 보니 멤버의 ID를 정상적으로 얻을 수 없었습니다.
  2. 데이터베이스 조인 최적화 문제:
    처음에는 필요한 데이터만 선택적으로 가져오는 쿼리를 작성했으나, 다른 팀원들이 작성한 코드는 3~4개의 테이블을 모두 조인하여 모든 정보를 가져오는 방식으로 설계되었습니다. 이 방식은 데이터베이스 성능에 부정적인 영향을 미쳤고, 성능 테스트 결과 해당 작업이 200ms가 걸리는 것을 확인했습니다.

해결과정 및 배운점

해결과정

  1. 트랜잭션 내 데이터 접근 문제 해결:
    • 문제를 디버깅하여 트랜잭션이 완료되지 않아 조회 시 null이 반환되는 것을 확인했습니다.
    • 이를 해결하기 위해 메서드를 두 개로 나누어 트랜잭션이 완료된 후 ID를 조회하는 방식으로 처리했습니다.
    • 이후 JPA를 공부하면서, JPA에서는 EntityManager의 flush와 clear 메서드를 사용하여 한 메서드 내에서 문제를 해결할 수 있음을 알게 되었습니다.
  2. 데이터베이스 조인 최적화 문제 해결:
    • 모든 데이터를 한 번에 조인하는 방식에서 필요한 데이터만 선택적으로 조인하는 방식으로 쿼리를 수정했습니다.
    • 성능 테스트 결과, 쿼리를 2개로 나누어 2개씩 조인하는 방식으로 수정하고 성능 테스트를 진행한 결과, 50ms로 줄어드는 것을 확인했습니다.
    • JPA를 공부하면서 lazy loading과 fetch join 등을 활용하여 이 문제를 더욱 간편하게 해결할 수 있음을 알게 되었습니다.

배운점

  1. 트랜잭션의 동작 원리:
    • 트랜잭션이 완료되기 전에는 데이터베이스의 변경 사항이 반영되지 않음을 명확히 이해하게 되었습니다.
    • JPA를 사용하면 EntityManager의 flush와 clear를 통해 트랜잭션 내에서도 데이터 변경 사항을 반영할 수 있어 코드를 더욱 간편하게 작성할 수 있음을 배웠습니다.
  2. 쿼리 최적화의 중요성:
    • 데이터베이스 성능을 고려하여 쿼리를 작성하는 것이 중요하며, 불필요한 데이터를 모두 가져오는 방식은 성능 저하를 초래할 수 있음을 깨달았습니다.
    • JPA를 사용하면 lazy loading과 fetch join을 통해 데이터베이스 성능을 더욱 효율적으로 관리할 수 있음을 배웠습니다.

이번 프로젝트를 통해 트랜잭션 관리와 데이터베이스 최적화의 중요성을 깨달았고, JPA를 사용하여 이러한 문제들을 더욱 효과적으로 해결할 수 있음을 배웠습니다. 추후 프로젝트에서는 JPA를 적극 활용하여 성능과 효율성을 고려한 코드를 작성할 계획입니다.

'IT' 카테고리의 다른 글

Spring 웹 애플리케이션 마이그레이션: 파일 권한 문제 해결기  (0) 2024.12.06
팀 프로젝트 회고 [Smart Farm]  (0) 2024.06.26
MVC 패턴의 낯선 세계  (0) 2024.04.10
객체지향의 5가지 원칙, SOLID에 대한 이해  (0) 2024.04.02
CORS 에러에 대해 알아보자  (0) 2024.04.01
'IT' 카테고리의 다른 글
  • Spring 웹 애플리케이션 마이그레이션: 파일 권한 문제 해결기
  • 팀 프로젝트 회고 [Smart Farm]
  • MVC 패턴의 낯선 세계
  • 객체지향의 5가지 원칙, SOLID에 대한 이해
Komorebi__
Komorebi__
Back-End 개발 학습일지
  • Komorebi__
    KOMOREBI@Controller
    Komorebi__
  • 전체
    오늘
    어제
    • 분류 전체보기 (74)
      • Today I Learned (7)
      • Language (1)
        • Java (1)
        • Python (0)
        • C (0)
      • Framework&Tools (5)
        • Spring (3)
        • GIT (2)
        • React (0)
      • IT (8)
        • 혼자 만들어 본거 (2)
      • Algorithm (2)
        • Baekjoon (34)
      • Mac (1)
      • 외국어 공부 (15)
        • 日本語の本の翻訳 (7)
        • English conversation (7)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    git
    형상관리
    버전관리
    github
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
Komorebi__
팀 프로젝트 회고 [Pet Hub]
상단으로

티스토리툴바