DB를 직접 다룰 때의 문제점
💡DB를 직접 다룰 때 필요한 과정
아래 형태의 객체 데이터를 DB에 저장해서 관리해야한다면 어떻게 해야 할까?
public class Memo {
private Long id;
private String username;
private String contents;
}
1️⃣ DB 테이블 생성
create table memo (
id bigint not null auto_increment,
contents varchar(500) not null,
username varchar(255) not null,
primary key (id)
);
- 직접 DB로 접속해서 SQL 작성 필요
2️⃣ 애플리케이션에서 SQL 작성
String sql = "INSERT INTO memo (username, contents) VALUES (?, ?)";
String sql = "SELECT * FROM memo";
3️⃣ JDBC로 SQL 실행
jdbcTemplate.update(sql, "Robbie", "오늘 하루도 화이팅!");
jdbcTemplate.query(sql, ...);
4️⃣ SQL 결과를 객체로 변환
@Override
public MemoResponseDto mapRow(ResultSet rs, int rowNum) throws SQLException {
// SQL 의 결과로 받아온 Memo 데이터들을 MemoResponseDto 타입으로 변환해줄 메서드
Long id = rs.getLong("id");
String username = rs.getString("username");
String contents = rs.getString("contents");
return new MemoResponseDto(id, username, contents);
}
➡️ 테이블 정의부터 SQL 작성, 실행, 결과 매핑까지 전부 직접 해줘야 함
💡SQL 의존성 문제
메모 데이터에 비밀번호를 추가해야 한다면 어떻게 될까?
public class Memo {
private Long id;
private String username;
private String contents;
// 비밀번호 추가
private String password;
}
1️⃣ SQL 직접 수정
String sql = "INSERT INTO memo (username, contents, password) VALUES (?, ?, ?)";
2️⃣ MemoResponseDto 객체에 값을 넣어주는 부분도 추가
@Override
public MemoResponseDto mapRow(ResultSet rs, int rowNum) throws SQLException {
// SQL 의 결과로 받아온 Memo 데이터들을 MemoResponseDto 타입으로 변환해줄 메서드
Long id = rs.getLong("id");
String username = rs.getString("username");
String contents = rs.getString("contents");
String password = rs.getString("password");
return new MemoResponseDto(id, username, contents, password);
}
➡️ 단순히 컬럼 하나 추가했을 뿐인데 SQL, DTO 변환, 매핑 코드까지 여러 군데를 다 수정해야 함
➡️ 반복적이고 번거로운 애플리케이션 단에서의 SQL 작업을 줄여주기 위해서 ORM(객체 관계 매핑)기술들이 등장 하게 된다.
ORM

💡ORM이란?
🔎 ORM : Object-Relational Mapping
- Object : "객체"지향 언어 (자바, 파이썬)
- Relational : "관계형" 데이터베이스 (H2, MySQL)
🔎 ORM은 이름 그대로 객체와 DB의 관계를 매핑 해주는 도구이다.
- 객체 즉, 자바의 클래스와 DB의 데이터를 직접 매핑 하려면 앞서 살펴본 것 처럼 매우 번거롭고 많은 작업들이 필요했지만 ORM을 사용하면 이를 자동으로 처리해준다.
JPA

💡JPA란?
🔎 JPA : Java Persistence API
- 자바 ORM 기술에 대한 표준 명세
- 즉, "규칙"만 정의되어 있고, 실제 구현체는 따로 존재
💡JPA 동작 흐름

- 애플리케이션과 DB(JDBC) 사이에서 동작
- JPA를 사용하면 DB 연결 과정을 직접 개발하지 않아도 자동으로 처리해준다.
- 객체를 통해 간접적으로 DB 데이터를 다룰 수 있기 때문에 매우 쉽게 DB 작업을 처리할 수 있습니다.
💡하이버네이트(Hibernate)란?
- JPA 는 표준 명세이고, 이를 실제 구현한 프레임워크 중 사실상 표준이 Hibernate이다.
- 스프링 부트에서는 기본적으로 ‘하이버네이트’ 구현체를 사용 중이다.
사실상 표준 (de facto, 디팩토)
보통 기업간 치열한 경쟁을 통해 시장에서 결정되는 비 공식적 표준이다.
출처 : 위키백과
출처
https://teamsparta.notion.site/2-6-JPA-2252dc3ef51481109a86d819dcc07fff
챕터2-6 : JPA란 무엇일까? | Notion
DB를 직접 다룰 때의 문제점
teamsparta.notion.site
'심화 > Spring' 카테고리의 다른 글
| [Lombok] @AllArgsConstructor 사용을 지양하는 이유 (0) | 2025.10.07 |
|---|---|
| [Spring] JPA와 영속성 컨텍스트 (0) | 2025.10.06 |
| [Spring] IoC Container와 Bean (0) | 2025.10.02 |
| [Spring] IoC(제어의 역전), DI(의존성 주입) (0) | 2025.10.01 |
| [Spring] JDBC란 무엇일까? (0) | 2025.09.30 |