Contents

MyBatis์— ๋Œ€ํ•˜์—ฌ

   Aug 14, 2025     3 min read

MyBatis: ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ์œ ์—ฐํ•œ SQL ๋งคํผ ํ”„๋ ˆ์ž„์›Œํฌ์— ๋Œ€ํ•˜์—ฌ ์•Œ์•„๋ณธ ๊ธ€์ž…๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š”!

Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ์ƒํ˜ธ์ž‘์šฉ์€ ํ•„์ˆ˜์ ์ธ ์ž‘์—…์ž…๋‹ˆ๋‹ค.

MyBatis๋Š” ์ด ๊ณผ์ •์„ ๊ฐ„์†Œํ™”ํ•˜๊ณ  ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋œ SQL ๋งคํผ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฟผ๋ฆฌ ์‹คํ–‰๊ณผ ๊ฐ์ฒด ๋งคํ•‘์˜ ์œ ์—ฐ์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” MyBatis์˜ ํŠน์ง•, ์žฅ๋‹จ์ , ๊ทธ๋ฆฌ๊ณ  ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

MyBatis๋ž€?

MyBatis๋Š” Java ๋ฐ SQL ๊ธฐ๋ฐ˜์˜ ํผ์‹œ์Šคํ„ด์Šค ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, ๊ฐœ๋ฐœ์ž๊ฐ€ SQL, ์ €์žฅ ํ”„๋กœ์‹œ์ €, ๊ทธ๋ฆฌ๊ณ  ๊ณ ์œ ํ•œ ๋งคํ•‘ ๊ทœ์น™์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

ํŠนํžˆ MyBatis๋Š” ORM(Object-Relational Mapping) ๋„๊ตฌ์ธ Hibernate์™€๋Š” ๋‹ค๋ฅด๊ฒŒ, SQL์„ ์ง์ ‘ ์ž‘์„ฑํ•˜์—ฌ ์„ธ๋ฐ€ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์กฐ์ž‘์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

MyBatis์˜ ์ฃผ์š” ํŠน์ง•

  1. SQL ์ค‘์‹ฌ์˜ ๋ฐ์ดํ„ฐ ๋งคํ•‘

    • ๊ฐœ๋ฐœ์ž๊ฐ€ SQL์„ ์ง์ ‘ ์ž‘์„ฑํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…์„ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค.
    • XML ๋˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•ด SQL ๋ฌธ์žฅ์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ์œ ์—ฐํ•œ ๋งคํ•‘

    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ…Œ์ด๋ธ”๊ณผ Java ๊ฐ์ฒด ๊ฐ„์˜ ๋งคํ•‘์„ ๊ฐ„๋‹จํžˆ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋ณต์žกํ•œ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์กฐ๋ฅผ ์†์‰ฝ๊ฒŒ ๊ฐ์ฒดํ™”ํ•ฉ๋‹ˆ๋‹ค.
  3. ๊ฐ•๋ ฅํ•œ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•

    • MyBatis๋Š” SQL์„ ์ง์ ‘ ์ œ์–ดํ•˜๋ฏ€๋กœ ๋ณต์žกํ•œ ์ฟผ๋ฆฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜ ๊ณ ์„ฑ๋Šฅ ์ฟผ๋ฆฌ๋ฅผ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋‹ค์–‘ํ•œ ์บ์‹ฑ ์ „๋žต๊ณผ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ œ๊ณตํ•˜์—ฌ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  4. ๊ฐ„๋‹จํ•œ ์„ค์ •

    • MyBatis๋Š” ์„ค์ • ํŒŒ์ผ(XML)๊ณผ ์ตœ์†Œํ•œ์˜ Java ์ฝ”๋“œ๋งŒ์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
    • ๋ณ„๋„์˜ ์Šคํ‚ค๋งˆ ์ƒ์„ฑ์ด๋‚˜ ORM์— ์˜์กดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

MyBatis์˜ ์žฅ๋‹จ์ 

์žฅ์ 

  • SQL ์ œ์–ด: ๊ฐœ๋ฐœ์ž๊ฐ€ SQL ๋ฌธ์„ ์ง์ ‘ ์ž‘์„ฑํ•˜์—ฌ ๋†’์€ ์ˆ˜์ค€์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ œ์–ด ๊ฐ€๋Šฅ.
  • ์œ ์—ฐ์„ฑ: ORM ๋„๊ตฌ๊ฐ€ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์–ด๋ ค์šด ๋ณต์žกํ•œ ์ฟผ๋ฆฌ์™€ ๊ด€๊ณ„๋ฅผ ์‰ฝ๊ฒŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์Œ.
  • ๋น ๋ฅธ ํ•™์Šต ๊ณก์„ : SQL์— ์ต์ˆ™ํ•œ ๊ฐœ๋ฐœ์ž๋Š” ๋น ๋ฅด๊ฒŒ MyBatis๋ฅผ ์Šต๋“ํ•  ์ˆ˜ ์žˆ์Œ.
  • XML ์ง€์›: XML ํŒŒ์ผ์„ ํ†ตํ•ด ๋ช…ํ™•ํ•˜๊ณ  ์„ ์–ธ์ ์ธ ๋ฐฉ์‹์œผ๋กœ ๋งคํ•‘ ์„ค์ • ๊ฐ€๋Šฅ.

๋‹จ์ 

  • SQL ์ž‘์„ฑ ๋ถ€๋‹ด: SQL์„ ์ง์ ‘ ์ž‘์„ฑํ•ด์•ผ ํ•˜๋ฏ€๋กœ, ์ฝ”๋“œ ์–‘์ด ๋งŽ์•„์งˆ ์ˆ˜ ์žˆ์Œ.
  • ์œ ์ง€๋ณด์ˆ˜ ์–ด๋ ค์›€: ์ฟผ๋ฆฌ๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ๋ณต์žกํ•ด์งˆ ์ˆ˜ ์žˆ์Œ.
  • ๋น„ํ‘œ์ค€ํ™”: ํŠน์ • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์˜์กด์ ์ธ SQL ๋ฌธ์žฅ์„ ์ž‘์„ฑํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Œ.

MyBatis ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•

1. ์„ค์ • ํŒŒ์ผ ๊ตฌ์„ฑ

MyBatis๋Š” mybatis-config.xml ํŒŒ์ผ์„ ํ†ตํ•ด ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/mydb" />
                <property name="username" value="root" />
                <property name="password" value="password" />
            </dataSource>
        </environment>
    </environments>
</configuration>

2. ๋งคํ•‘ ํŒŒ์ผ ๊ตฌ์„ฑ

mapper.xml ํŒŒ์ผ์—์„œ SQL ๋ฌธ๊ณผ ๊ฐ์ฒด ๋งคํ•‘์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

<mapper namespace="com.example.mapper.UserMapper">
    <select id="getUserById" parameterType="int" resultType="com.example.model.User">
        SELECT * FROM users WHERE id = #{id}
    </select>
</mapper>

3. DAO ์ธํ„ฐํŽ˜์ด์Šค ์ž‘์„ฑ

๋งคํผ ํŒŒ์ผ๊ณผ ์—ฐ๊ฒฐ๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

package com.example.mapper;

import com.example.model.User;

public interface UserMapper {
    User getUserById(int id);
}

4. MyBatis๋ฅผ ์‚ฌ์šฉํ•œ ๋ฐ์ดํ„ฐ ์กฐํšŒ

Java ์ฝ”๋“œ์—์„œ MyBatis ์„ธ์…˜์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

public class MyBatisExample {
    public static void main(String[] args) {
        SqlSessionFactory sqlSessionFactory = MyBatisUtil.getSqlSessionFactory();
        try (SqlSession session = sqlSessionFactory.openSession()) {
            UserMapper userMapper = session.getMapper(UserMapper.class);
            User user = userMapper.getUserById(1);
            System.out.println("User Name: " + user.getName());
        }
    }
}

MyBatis๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๊ณ ๋ คํ•ด์•ผ ํ•  ์ 

  1. SQL ์žฌ์‚ฌ์šฉ

    • XML ๋งคํผ์—์„œ <sql> ํƒœ๊ทธ๋ฅผ ํ™œ์šฉํ•ด ๊ณตํ†ต SQL ๊ตฌ๋ฌธ์„ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ

    • MyBatis ์ž์ฒด์ ์œผ๋กœ ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ๋ฅผ ์ œ๊ณตํ•˜์ง€๋งŒ, Spring๊ณผ ํ†ตํ•ฉํ•˜์—ฌ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ๋” ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค.
  3. ์บ์‹ฑ ํ™œ์šฉ

    • MyBatis๋Š” 1์ฐจ, 2์ฐจ ์บ์‹ฑ์„ ์ œ๊ณตํ•˜๋ฏ€๋กœ, ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด ์ ์ ˆํžˆ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ๋ก 

MyBatis๋Š” SQL ์ค‘์‹ฌ์˜ ๋ฐ์ดํ„ฐ ๋งคํ•‘์„ ์„ ํ˜ธํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ ์ ํ•ฉํ•œ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, ๊ฐ„๋‹จํ•œ ์„ค์ •๊ณผ ๊ฐ•๋ ฅํ•œ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

SQL์„ ์ง์ ‘ ์ž‘์„ฑํ•จ์œผ๋กœ์จ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…์„ ๋” ์„ธ๋ฐ€ํžˆ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ, SQL ๊ด€๋ฆฌ๊ฐ€ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ฝ”๋“œ ํ’ˆ์งˆ๊ณผ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ๊ณ ๋ คํ•œ ์„ค๊ณ„๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

MyBatis์˜ ์žฅ์ ์„ ๊ทน๋Œ€ํ™”ํ•˜๋ ค๋ฉด Spring๊ณผ ํ†ตํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์ ์ ˆํ•œ ๋งคํ•‘ ์ „๋žต์„ ์ˆ˜๋ฆฝํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

MyBatis๋ฅผ ํ™œ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ํšจ๊ณผ์ ์œผ๋กœ ๊ด€๋ฆฌํ•ด ๋ณด์„ธ์š”! ๐Ÿš€