1. JPA
Java Persistence API์ ์ฝ์๋ก, ์๋ฐ ์ง์์์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋ ๋ฐ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋งคํํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ํ ํ์ค ์ธํฐํ์ด์ค
Persistence -> ์๊ตฌ์ ์ธ ๋ฐ์ดํฐ ๊ด๋ฆฌ๋ฅผ ์ํ ์ธํฐํ์ด์ค
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๊ฐ๋ ๊ณผ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ ์ด๋ธ ๊ฐ์ ๋งคํ์ ์ฒ๋ฆฌํ๊ธฐ ์ํ ORM(Object-Relational Mapping) ๊ธฐ์ ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ค.
* ORM : ๊ฐ๋ฐ์๊ฐ SQL ์ฟผ๋ฆฌ๋ฅผ ์ง์ ์์ฑํ๋ ๋์ ์ ๊ฐ์ฒด ์งํฅ ์ฝ๋๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์กฐ์ํ ์ ์๋๋ก ํ๋ค.

์๋ฅผ ๋ค์๋ฉด, ํ๊ตญ์ธ๊ณผ ํ๋์ค์ธ, ์ผ๋ณธ์ธ ๋ฏธ๊ตญ์ธ์ด ์๋ค๊ณ ๊ฐ์ ํ ๋
ํ๊ตญ์ธ์ด "์๋ "์ด๋ผ๋ ์ธ์ฌ๋ฅผ ๊ฑด๋ค๋ฉด, JPA๋ ์ด "์๋ "์ ๊ฐ ๋๋ผ์ ์ธ์ด์ ๋ง๊ฒ ๋ฐ๊พธ์ด ์ ๋ฌํด์ฃผ๋ ์ญํ ์ ํ๋ค.

์ด๋ฅผ JAVA๋ก ์นํํด๋ณด๋ฉด, JAVA Object๋ฅผ JPA์ ๋๊ธฐ๋ฉด ์ด๋ฅผ DB๊ฐ ์ดํดํ ์ ์๋ ์ธ์ด(์ฟผ๋ฆฌ)๋ก ๋ฐ๊พธ์ด ์ ๋ฌํด์ฃผ๋ ์ญํ ์ ํ๋ค.
JPA๊ฐ ํ์ํ ์ด์ : ๋ชจ๋ ํต์ ์ ํ์ฑ์ด ํ์ํ๋ค.
ํ์ฑํ๋ ์ด์ : ๋ฐ์ดํฐ๋ฅผ ์ก์์ ํ๋ ์์คํ ๊ฐ ํธํ์ฑ์ ํ๋ณด, ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ดํดํ๊ณ ์ฒ๋ฆฌํ๊ธฐ ์ํจ
ํ์ฑ : ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ๊ณ ๊ตฌ๋ฌธ์ ํด์ํด ํ๋ก๊ทธ๋จ์ด๋ ์์คํ ์ด ๋ฐ์ดํฐ๋ฅผ ์ดํดํ๊ณ ํ์ฉํ ์ ์๋ ํํ๋ก ๋ณํํ๋ ๊ณผ์
ํ๋กํ ์ฝ์ ์ ์
๋ฐ์ดํฐ ํ์ ๋ณํ
2. JDBC
JDBC(Java Database Connectivity)๋ ์๋ฐ์ ํ์ค API๋ก, ์๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ ์ฐ๊ฒฐ๊ณผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ ์ํํ๋ ๋ฐ ์ฌ์ฉ
JDBC๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ๋ฐ์๋ ์ง์ SQL ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๊ณ ์คํํ๋ฉฐ, ๊ฒฐ๊ณผ๋ก ์ป์ ResultSet์ ์ง์ ๋งค ํํด์ผ ํฉ๋๋ค. ResultSet์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก๋ถํฐ ๋ฐํ๋ ๊ฒฐ๊ณผ ์งํฉ์ ๋ํ๋ด๋ ๊ฐ์ฒด์ ๋๋ค. ๊ฐ๋ฐ์ ๋ ResultSet์์ ์ปฌ๋ผ์ ๊ฐ์ ์ฝ๊ณ ํ์ํ ๊ฐ์ฒด์ ์๋์ผ๋ก ๋งคํํด์ผ ํฉ๋๋ค.

MyBatis๋ ๊ธฐ์กด JDBC ์ฝ๋์ ๋ฐ๋ณต๊ณผ ๋ณต์ก์ฑ์ ์ค์ด๊ณ , ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ฐ์ฒด ๊ฐ์ ๋งคํ์ ๋ณด๋ค ํธ๋ฆฌํ๊ฒ ์ฒ๋ฆฌํ ์ ์๋๋ก ๋์
- Model -> DAO -> MyBatis -> DB
1. MyBatis ์ฌ์ฉ
public interface UserMapper {
@Select("SELECT * FROM users WHERE id = #{id}")
User getUserById(int id);
}
2. JDBC ์ฌ์ฉ
public class UserDAO {
private final DataSource dataSource;
public UserDAO(DataSource dataSource) {
this.dataSource = dataSource;
}
public User getUserById(int id) {
try (Connection connection = dataSource.getConnection();
PreparedStatement statement = connection.prepareStatement("SELECT *
FROM users WHERE id = ?")) {
statement.setInt(1, id);
try (ResultSet resultSet = statement.executeQuery()) {
if (resultSet.next()) {
User user = new User();
user.setId(resultSet.getInt("id"));
user.setEmail(resultSet.getString("email"));
user.setPassword(resultSet.getString("password"));
user.setUsername(resultSet.getString("username"));
user.setRoles(resultSet.getString("roles"));
return user;
}
}
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
}
3. Hibernate & JPA
Hibernate : ์๋ฐ ๊ธฐ๋ฐ์ ์คํ ์์ค ORM(Object-Relational Mapping) ํ๋ ์์ํฌ
- ๊ฐ๋ฐ์๊ฐ ๊ฐ์ฒด ์งํฅ์ ์ธ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ์ ์๋๋ก ๋์์ฃผ๋ฉฐ, ๊ฐ์ฒด์ ๋ฐ ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ ๋งคํ์ ๊ด๋ฆฌ
- Model -> DAO -> Persistence Context -> DB ์กฐํ์ ์ฐ๊ธฐ (์ํฐํฐ ์ ๋ฌ ๋ฐ ์ฟผ๋ฆฌ DB ์ ๋ฌ, ์์ํ, Flush, ๋ํฐ์ฒดํน, ์บ์ฑ)
'๐ต java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
JAVA | STREAM์ด๋ ? (์ฌ์ฉ๋ฒ, ๋ฐฑ์ค ๋ฌธ์ ๊น์ง ๊ฐ์ด ํ์ด๋ณด๊ธฐ) (5) | 2023.08.10 |
---|---|
JAVA | JPA Repository์ ์ฌ์ฉ๋ฒ๊ณผ ๋ฉ์๋ (0) | 2023.07.14 |
JAVA | DTO๋ (0) | 2023.07.07 |
JAVA | ๋ฆฌํ๋ ์ (Reflection) ์๊ธฐ (3) | 2023.07.05 |
JAVA | enum (0) | 2023.06.13 |
1. JPA
Java Persistence API์ ์ฝ์๋ก, ์๋ฐ ์ง์์์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋ ๋ฐ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋งคํํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ํ ํ์ค ์ธํฐํ์ด์ค
Persistence -> ์๊ตฌ์ ์ธ ๋ฐ์ดํฐ ๊ด๋ฆฌ๋ฅผ ์ํ ์ธํฐํ์ด์ค
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๊ฐ๋ ๊ณผ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ ์ด๋ธ ๊ฐ์ ๋งคํ์ ์ฒ๋ฆฌํ๊ธฐ ์ํ ORM(Object-Relational Mapping) ๊ธฐ์ ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ค.
* ORM : ๊ฐ๋ฐ์๊ฐ SQL ์ฟผ๋ฆฌ๋ฅผ ์ง์ ์์ฑํ๋ ๋์ ์ ๊ฐ์ฒด ์งํฅ ์ฝ๋๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์กฐ์ํ ์ ์๋๋ก ํ๋ค.

์๋ฅผ ๋ค์๋ฉด, ํ๊ตญ์ธ๊ณผ ํ๋์ค์ธ, ์ผ๋ณธ์ธ ๋ฏธ๊ตญ์ธ์ด ์๋ค๊ณ ๊ฐ์ ํ ๋
ํ๊ตญ์ธ์ด "์๋ "์ด๋ผ๋ ์ธ์ฌ๋ฅผ ๊ฑด๋ค๋ฉด, JPA๋ ์ด "์๋ "์ ๊ฐ ๋๋ผ์ ์ธ์ด์ ๋ง๊ฒ ๋ฐ๊พธ์ด ์ ๋ฌํด์ฃผ๋ ์ญํ ์ ํ๋ค.

์ด๋ฅผ JAVA๋ก ์นํํด๋ณด๋ฉด, JAVA Object๋ฅผ JPA์ ๋๊ธฐ๋ฉด ์ด๋ฅผ DB๊ฐ ์ดํดํ ์ ์๋ ์ธ์ด(์ฟผ๋ฆฌ)๋ก ๋ฐ๊พธ์ด ์ ๋ฌํด์ฃผ๋ ์ญํ ์ ํ๋ค.
JPA๊ฐ ํ์ํ ์ด์ : ๋ชจ๋ ํต์ ์ ํ์ฑ์ด ํ์ํ๋ค.
ํ์ฑํ๋ ์ด์ : ๋ฐ์ดํฐ๋ฅผ ์ก์์ ํ๋ ์์คํ ๊ฐ ํธํ์ฑ์ ํ๋ณด, ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ดํดํ๊ณ ์ฒ๋ฆฌํ๊ธฐ ์ํจ
ํ์ฑ : ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ๊ณ ๊ตฌ๋ฌธ์ ํด์ํด ํ๋ก๊ทธ๋จ์ด๋ ์์คํ ์ด ๋ฐ์ดํฐ๋ฅผ ์ดํดํ๊ณ ํ์ฉํ ์ ์๋ ํํ๋ก ๋ณํํ๋ ๊ณผ์
ํ๋กํ ์ฝ์ ์ ์
๋ฐ์ดํฐ ํ์ ๋ณํ
2. JDBC
JDBC(Java Database Connectivity)๋ ์๋ฐ์ ํ์ค API๋ก, ์๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ ์ฐ๊ฒฐ๊ณผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ ์ํํ๋ ๋ฐ ์ฌ์ฉ
JDBC๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ๋ฐ์๋ ์ง์ SQL ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๊ณ ์คํํ๋ฉฐ, ๊ฒฐ๊ณผ๋ก ์ป์ ResultSet์ ์ง์ ๋งค ํํด์ผ ํฉ๋๋ค. ResultSet์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก๋ถํฐ ๋ฐํ๋ ๊ฒฐ๊ณผ ์งํฉ์ ๋ํ๋ด๋ ๊ฐ์ฒด์ ๋๋ค. ๊ฐ๋ฐ์ ๋ ResultSet์์ ์ปฌ๋ผ์ ๊ฐ์ ์ฝ๊ณ ํ์ํ ๊ฐ์ฒด์ ์๋์ผ๋ก ๋งคํํด์ผ ํฉ๋๋ค.

MyBatis๋ ๊ธฐ์กด JDBC ์ฝ๋์ ๋ฐ๋ณต๊ณผ ๋ณต์ก์ฑ์ ์ค์ด๊ณ , ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ฐ์ฒด ๊ฐ์ ๋งคํ์ ๋ณด๋ค ํธ๋ฆฌํ๊ฒ ์ฒ๋ฆฌํ ์ ์๋๋ก ๋์
- Model -> DAO -> MyBatis -> DB
1. MyBatis ์ฌ์ฉ
public interface UserMapper {
@Select("SELECT * FROM users WHERE id = #{id}")
User getUserById(int id);
}
2. JDBC ์ฌ์ฉ
public class UserDAO {
private final DataSource dataSource;
public UserDAO(DataSource dataSource) {
this.dataSource = dataSource;
}
public User getUserById(int id) {
try (Connection connection = dataSource.getConnection();
PreparedStatement statement = connection.prepareStatement("SELECT *
FROM users WHERE id = ?")) {
statement.setInt(1, id);
try (ResultSet resultSet = statement.executeQuery()) {
if (resultSet.next()) {
User user = new User();
user.setId(resultSet.getInt("id"));
user.setEmail(resultSet.getString("email"));
user.setPassword(resultSet.getString("password"));
user.setUsername(resultSet.getString("username"));
user.setRoles(resultSet.getString("roles"));
return user;
}
}
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
}
3. Hibernate & JPA
Hibernate : ์๋ฐ ๊ธฐ๋ฐ์ ์คํ ์์ค ORM(Object-Relational Mapping) ํ๋ ์์ํฌ
- ๊ฐ๋ฐ์๊ฐ ๊ฐ์ฒด ์งํฅ์ ์ธ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ์ ์๋๋ก ๋์์ฃผ๋ฉฐ, ๊ฐ์ฒด์ ๋ฐ ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ ๋งคํ์ ๊ด๋ฆฌ
- Model -> DAO -> Persistence Context -> DB ์กฐํ์ ์ฐ๊ธฐ (์ํฐํฐ ์ ๋ฌ ๋ฐ ์ฟผ๋ฆฌ DB ์ ๋ฌ, ์์ํ, Flush, ๋ํฐ์ฒดํน, ์บ์ฑ)
'๐ต java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
JAVA | STREAM์ด๋ ? (์ฌ์ฉ๋ฒ, ๋ฐฑ์ค ๋ฌธ์ ๊น์ง ๊ฐ์ด ํ์ด๋ณด๊ธฐ) (5) | 2023.08.10 |
---|---|
JAVA | JPA Repository์ ์ฌ์ฉ๋ฒ๊ณผ ๋ฉ์๋ (0) | 2023.07.14 |
JAVA | DTO๋ (0) | 2023.07.07 |
JAVA | ๋ฆฌํ๋ ์ (Reflection) ์๊ธฐ (3) | 2023.07.05 |
JAVA | enum (0) | 2023.06.13 |