• 티스토리 홈
  • 프로필사진
    imaginaring
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
imaginaring
  • 프로필사진
    imaginaring
    • 분류 전체보기 (66)
      • 프로그래밍 (30)
        • 알고리즘 자료구조 (0)
        • 문제풀이 (0)
        • 기록 (3)
        • Java (4)
        • 스프링, JPA, MyBatis (11)
        • JS, 리액트 등 웹 프론트 (11)
        • 파이썬 (1)
      • DB (1)
        • MySQL (1)
      • 네트워크 (6)
        • AWS (2)
        • NCP (0)
        • 클라우드 공통 (2)
        • 네트워크 (2)
      • OS (9)
        • 리눅스 (8)
        • 윈도우 (1)
      • 게임엔진 (4)
        • 유니티 (0)
        • 언리얼 (4)
        • 그래픽스 (0)
      • 프로젝트 관리 (0)
        • Git & SVN (0)
      • 사이드 프로젝트 (0)
        • 외주 (0)
        • 아이디어 (0)
        • 기록 (0)
      • 프로젝트 (0)
      • 자격증 (15)
        • 리눅스마스터 (14)
        • SQLD (1)
        • 정보처리기사 (0)
        • 네트워크관리사 (0)
        • CCNA (0)
        • AWS SAA (0)
        • NCP (0)
      • 생활수학 (0)
      • 일상 (1)
        • 여행 (0)
        • 바이크 (0)
        • 기타 (1)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • MyBatis vs JPA
        2024년 12월 26일
        • imaginaring
        • 작성자
        • 2024.12.26.:21

        스프링 애플리케이션에서 데이터베이스 연결을 위해 대표적으로 MyBatis와 JPA를 사용한다.

        두가지의 차이점을 알아보자

         

         

        MyBatis

        • SQL 매핑 프레임워크, 데이터베이스와의 직접적인 연동을 지원
        • 특징
          • 복잡한 조건문, JOIN등 연산과 같은 작업을 명시적으로 작성 가능
          • SQL을 직접 제어, 세밀한 튜닝 가능
          • 동적쿼리 지원 - <if> <choose> 등을 포함해 동적 쿼리 생성 가능
          • 사용이 편하다
            • XML기반으로 SQL과 자바 객체를 매핑
            • 쿼리를 명확하게 정의 할 수 있어 이해하기 쉬움
          • 저장 프로시저와의 통합 - DB 저장 프로시저를 호출하고 결과를 쉽게 처리할 수 있다
        • 단점
          • SQL 작성과 유지보수 부담이 크다
          • 객체관계매핑(ORM) 기능이 제한적
          • 코드와 SQL의 분리로 코드간 일관성이 떨어질 수 있다
        • 예시
        // Mapper XML
        
        <mapper namespace="com.example.mapper.UserMapper">
            <select id="getUserById" parameterType="int" resultType="User">
                SELECT * FROM users WHERE id = #{id}
            </select>
        </mapper>
        // Mapper 인터페이스
        public interface UserMapper {
            User getUserById(int id);
        }
        
        // 사용
        @Autowired
        private UserMapper userMapper;
        
        User user = userMapper.getUserById(1);

         

         

        JPA

        • 자바 표준 ORM 기술, 객체와 DB테이블간 매핑을 자동화
        • 특징
          • ORM : 자바 객체와 DB 테이블을 매핑하여 SQL대신 메서드를 통해 DB 조작, 좀 더 객체지향적이다
          • 코드 간결성 보장 : SQL 직접 작성안함, 엔티티 객체와 메서드로 DB 연산 수행
          • QueryDSL 지원 : JPA와 함께 동적 쿼리 작성을 간편하게 도와주는 라이브러리
          • 마이크로서비스 환경 적합 : DB와 독립성을 유지하면서도 효율적인 DB 접근 계층 구현
          • 객체 중심의 설계로 유지보수와 확장성이 뛰어남
          • SQL 자동 생성 => 코드 중복 감소
          • 캐시, 페이징, 지연쓰기, 지연로딩(Lazy Loading) 등 고급 기능 지원
        • 단점
          • 복잡한 쿼리나 DB 튜닝이 필요한 경우 제약이 있을 수 있음
          • 초기 설정과 '어렵다'
          • 일부 DB 벤더 특화 기능 지원에 한계점
        • 예시
        // 엔티티 클래스
        
        @Entity
        public class User {
            @Id
            @GeneratedValue(strategy = GenerationType.IDENTITY)
            private Long id;
        
            private String name;
            private String email;
            // Getters and Setters
        }
        // 리포지토리 인터페이스
        
        public interface UserRepository extends JpaRepository<User, Long> {
            User findByName(String name);
        }
        
        
        // 사용
        @Autowired
        private UserRepository userRepository;
        
        User user = userRepository.findByName("John Doe");

         

         

        요약

        특징 MyBatis JPA
        사용 목적 복잡한 SQL 작성에 적합 객체 중심 설계와 ORM 지원
        SQL 관리 SQL 직접 작성 SQL 자동 생성
        동적 쿼리 강력한 지원 (<if>, <choose> 등) QueryDSL로 지원
        러닝 커브 비교적 쉬움 초기 학습 곡선이 있음
        벤더 종속성 데이터베이스 벤더 기능 활용 용이 벤더 독립적인 설계에 초점
        복잡한 연산 처리 명시적으로 제어 가능 제약이 있을 수 있음
        마이크로서비스 단일 모듈 환경에 적합 분산 시스템에서 유리

         

        '프로그래밍 > 스프링, JPA, MyBatis' 카테고리의 다른 글

        WebFlux  (0) 2024.12.26
        레이어드 아키텍처  (0) 2024.12.26
        스프링 MVC  (2) 2024.12.26
        Bean 스코프  (1) 2024.12.26
        Mock  (0) 2024.12.24
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바