어떡해 일단 해야지
MyBatis — Dependency injection까지 이해하자. 본문

📌 이번 주 학습 요약
이번 주에는 MyBatis를 중심으로 DB 연동 구조를 학습했다. 기존 JDBC의 단점인 코드 혼합 문제를 해결하며 SQL을 XML로 분리하는 방식을 이해했다. Controller → Service → DAO 구조를 통해 역할 분리와 유지보수의 중요성을 체감했다. 오늘 사담은 짧게하고 바로 본론으로 넘어가보겠다!

MyBatis
ORM프레임 워크 (Object Relational Mapping: 객체 관계 맵핑) 자바에서 JDBC를 이용할 경우 java와 sql 언어가 한 파일에 존재해서 재사용성이 좋지 않음. MyBatis가 JDBC의 단점을 개선했다.
- SQL 명령어를 자바 코드에서 분리하여 XML 파일에서 관리 (SQL 재사용, 효율적, 쉬움)
- DAO는 인터페이스로 생성한다.
- IDAO 인터페이스의 메소드 이름과 mapper.xml의 id 이름과 동일해야 한다.
pom.xml에 데이터베이스 의존성 설정이 필요하다. <dependency> 추가
- Spring JDBC 의존성, Connection Pool 의존성, oracle의존성, mybatis/ mybatis-spring 의존성
- jdbc.propertis 파일 생성 [driverClassName, url/username/password]
- application-dbconfig.xml → web.xml 에 변경된 내용 설정
📌 SQL Mapper - MyBatis


- SQL Mapper - 객체와 SQL문을 매핑
- 내부에 JDBC 사용
- SQL로 직접 DB 데이터 다룸
- 복잡한 쿼리 짤 때 좋음
- 간단한 CRUD 쿼리도 모두 작성해야 하는 단점 존재
패키지
- controller - @Controller
- model - MyBatis에서는 DAO 인터페이스(추상메소드) 필수, 구현 클래스 말고 Mapper(xml)로 생성
- service
- 인터페이스 : 모든 기능을 추상메소드로 선언(규격)
- 구현클래스: @Service 어노테이션

Request → Controller → Service → DAO → Mapping → Service → Controller → view
호출방법 DI 설정 : 자동 설정하도록 @Autowired 사용
DI란?
DI는 Dependency injection의 준말로 '의존성 주입' 이라는 뜻을 가진다. 소프트웨어 공학에서 말하는 의존성 주입은 하나의 객체에 다른 객체의 의존성을 제공하는 기술이라고 표현한다.

+ 이미지 저장법
- 프로젝트 내부에 저장하는 경우
- w ebapp / resource 폴더 안에 image 폴더 생성
- servlet-context.xml 에 맵핑 설정
- 프로젝트 외부에 저장하는 경우 대량의 이미지의 경우 외부 폴더에 저장하고 접근가능한 설정 필요하다.
- servlet-context.xml의 에 location과 mapping 이름 지정
<?xml version="1.0" encoding="UTF-8" ?>
<!-- mapper DTD 선언 -->
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- SQL Mapping -->
<mapper namespace="BoardDAO">
<insert id="insertBoard"></insert>
<update id="updateBoard"></update>
<delete id="deleteBoard"></delete>
<select id="getBoard" resultType="board"></select>
<select id="getBoardList" resultMap="boardResult"></select>
</mapper>

이번 주를 정리하며 ✍️
기능 구현보다 “왜 이렇게 구조를 나누는지”를 고민하게 된 한 주였다. MyBatis를 통해 코드가 정리되는 경험을 하며 설계의 중요성을 느꼈다. 앞으로는 단순 구현이 아닌, 구조까지 고려하는 개발을 목표로 해야겠다고 생각했다.
참고
https://velog.io/@ashwon1218/DIDependency-injection-%EB%9E%80
https://velog.io/@suk13574/JDBC-vs-myBatis-vs-JPA-%EC%B0%A8%EC%9D%B4%EC%A0%90-%EC%95%8C%EA%B8%B0
'현대이지엘 JAVA 풀스택 개발자 아카데미 7회차' 카테고리의 다른 글
| Spring — MVC패턴에 대해 알아보자 (1) | 2026.04.04 |
|---|---|
| JSP — 표현언어 EL & JSTL (0) | 2026.03.30 |
| Servlet — (0) | 2026.03.23 |
| 시큐어 코딩 — OWASP Top 10 보안 취약점1 (3) | 2026.03.16 |
| Stack과 Deque — 자료구조 문제 해결 방식 (0) | 2026.03.09 |
