🔑상황에 따라 유연하게
💡 MyBatis란?
📃 MyBatis는 자바 오브젝트와 SQL 사이의 자동 매핑 기능을 지원하는 ORM(Object Relational Mapping) 프레임워크로, SQL을 보다 효율적으로 관리할 수 있도록 도와줍니다. (JPA와 비슷한 역할 수행)
📃MyBatis는 반복적인 JDBC(Java Database Connectivity) 프로그래밍을 단순화하여, 불필요한 Boilerplate 코드를 제거합니다.
(💡 Boilerplate 코드란? → 개발 과정에서 자주 작성해야 하지만, 핵심 로직과 직접적인 관련이 없는 코드) 또한, Java 코드에서 SQL 문을 분리하여 XML 파일로 관리하며, 이를 Java 메서드와 연결해주는 기능을 제공합니다
💻Java 코드와 SQL 매핑
⬆️ MyBatis 내부에서 보일러플레이트 코드가 구현되어 있어, 개발자는 Java 메서드 선언과 SQL 문만 작성하면 자동으로 매핑이 이루어집니다
💡 MyBatis의 동적 SQL 기능
📃 MyBatis는 동적 SQL(Dynamic SQL) 생성 기능을 제공하여, 실행 중 입력되는 파라미터에 따라 다른 SQL 문을 동적으로 생성할 수 있습니다
💻 정적 SQL 처리 (고정된 쿼리)
<mapper namespace="com.example.mapper.BoardMapper">
<select id="selectByAuthor" resultType="Board">
SELECT * FROM board WHERE author = #{author};
</select>
</mapper>
💻 동적 SQL 처리
<mapper namespace="com.example.mapper.BoardMapper">
<select id="searchBoard" resultType="Board">
SELECT * FROM board WHERE 1=1
<if test="author != null and author != ''">
AND author = #{author}
</if>
<if test="title != null and title != ''">
AND title LIKE CONCAT('%', #{title}, '%')
</if>
</select>
</mapper>
⬆️ WHERE 1=1을 사용하여 조건문을 동적으로 추가할 수 있도록 설계
⬆️ if문을 활용해 입력값에 따라 SQL 조건을 추가 가능
⬆️ #{author} → 사용자의 입력을 받는 파라미터 바인딩
💡 Hikari와 커넥션 풀
📃 애플리케이션이 데이터베이스와 효율적으로 통신하도록 돕는 기술로, 새로운 커넥션(Connection) 을 매번 생성하는 것이 아니라 미리 생성된 커넥션을 재사용하여 성능을 최적화합니다.
💻 기존 커넥션 방식 (비효율적)
// 매번 새 객체를 생성
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "user", "password");
⬆️ 매번 새로운 커넥션을 생성해야 하므로 성능 저하 발생
💻 커넥션 풀을 사용한 방식 (효율적)
// 커넥션 풀에서 기존 커넥션을 대여
Connection conn = dataSource.getConnection();
⬆️ 미리 생성된 커넥션을 가져와 재사용 → 성능 최적화 가능
💡 커넥션 풀 동작 과정
1️⃣ 애플리케이션 시작 시 초기화
- 커넥션 풀은 일정 수의 커넥션 객체를 미리 생성
- 이 객체들은 데이터베이스와 연결된 상태로 대기
2️⃣ 객체 대여
- 데이터베이스 작업이 필요하면 커넥션 풀에서 커넥션을 가져옴
3️⃣ 작업 완료 후 반환
- 커넥션을 닫지 않고 풀로 다시 반환하여 재사용 가능
💡 JPA(Java Persistance API) 란?
📃 JPA(Java Persistence API)는 Java 객체와 관계형 데이터베이스 간의 매핑을 위한 API입니다. JPA는 ORM(Object-Relational Mapping)을 구현하는 자바 표준 스펙으로, 개발자가 객체지향 프로그래밍 언어에서 사용하는 객체 모델과 관계형 데이터베이스의 테이블 간의 매핑을 자동으로 처리해 줍니다
즉, Java 개발자는 jpa.persist(member)라고 사용하면, Insert SQL 문이 자동으로 생성되어 DB에 저장이 됩니다
⬆️ MyBatis와 JPA 모두 DB를 사용할 때 번거로운 반복작업을 줄여줍니다. 상황에 따라 다르겠지만, MyBatis는 Java코드와 SQL문을 Mapper로 분리시켜 관리하기때문에, SQL문 유지보수에 용이하고, JPA는 이런 SQL문 자체를 작성할 필요가 없기때문에 반복 작업을 줄여줍니다
💡 그래서 어떤게 더 좋나요?
📃 사실 JPA가 현업에서 더 많이 사용되고 있는 것은 사실이지만, 어떤 것이 더 효율적이고, 낫다라고 말할 수 없습니다. 상황에 따라 쓰임이 다르고, 개발자가 복잡한 쿼리와 SQL 제어를 한다면, MyBatis를 사용할 수 있고, 단순하게 간단한 매핑 및 객체 지향적인 접근이 필요한 경우는 JPA가 SQL작성 등의 반복적인 부분을 해결해 줍니다
📝 Reference
https://www.elancer.co.kr/blog/detail/231
JPA vs Mybatis, 현직 개발자는 이럴 때 사용합니다. I 이랜서 블로그
서버에서 데이터 베이스를 효율적으로 사용하기 위해 사용하는 JPA와 Mybatis를 실무에서는 언제 어떻게 사용할까요? 이랜서에서 알려드립니다. I 소트프웨어, 소프트웨어 개발자, 네이버 소프트
www.elancer.co.kr
https://ultrakain.gitbooks.io/jpa/content/chapter1/chapter1.3.html
1.3 JPA란 무엇인가? · jpa
ultrakain.gitbooks.io