Development
์ฐ๊ด๊ด๊ณ ๋งคํ, ๊ผญ ํด์ผํ ๊น์?
9/26/2024

์๋ฆผ์ ์ ๋ณด๋ด๋ณด์
์๊ตฌ์ฌํญ
ํ์ฌ ์งํ์ค์ธ ํ๋ก์ ํธ์ ๊ธฐ๋ฅ ์ค์๋ ํน์ ์๊ฑด์ ๋ํด ํฌํ๋ฅผ ๋ฐ๋ ๊ธฐ๋ฅ์ด ์์ต๋๋ค. ํฌํ๊ฐ ์ข ๋ฃ๋๋ ์๊ฐ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ด์ ์๋ฆผ์ ๋ชจ๋ ํฌํ์๋ค์๊ฒ ๋ณด๋ด์ผํ๋ฉฐ, ์๋ฆผ ์ ๋ณด๋ DB์ ์ ์ฅ๋์ด์ผ ํฉ๋๋ค. ์๋ฆผ ํ ์ด๋ธ์ด ํ์๋ก ํ๋ ์ ๋ณด๋ ์๋์ ๊ฐ์ต๋๋ค.

์ด ํ ์ด๋ธ์ ์ถํ ์ ๊ทํ๋ฅผ ์ํํ์ต๋๋ค^^
๋ฌธ์ ์
์ผ๋ฐ์ ์ผ๋ก JPA๋ฅผ ์ฌ์ฉํ์ฌ DB์ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ๋ฐฉ๋ฒ์ ์ํฐํฐ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ ์์ํ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ๊ฒ์ ๋๋ค.
// EntityManager
Notification noti = new Notification();
em.persist(noti);
// JpaRepository
Notification noti = new Notification();
notificationRepository.save(noti);ํ์ง๋ง ์ ๋ฐฉ๋ฒ์ผ๋ก ์๋ฆผ์ ๋ณด๋ด๊ธฐ์๋ ์ ์ ํ์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค. ์์ฑ๋๋ ์๋ฆผ์ ๊ฐ์๋ ๊ณง ํฌํ๋ฅผ ์ํํ ๋ชจ๋ ์ฌ์ฉ์์ ์์ ๋์ผํ๋ฏ๋ก ๋๋ฌด ๋ง์ ์ํฐํฐ ์ธ์คํด์ค๊ฐ ์์ฑ๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
// ํฌํ์๋ค์๊ฒ ๋ณด๋ผ ์๋ฆผ ์์ฑ
List<Notification> notis = createNotification(voters);
// ์ ์ฅ
notificationRepository.saveAll(notis);์ ์ฝ๋์ ๊ฒฝ์ฐ 2๊ฐ์ง ๋ฌธ์ ์ ์ด ๋ฐ์ํฉ๋๋ค.
1. ๋ถํ์ํ๊ฒ ๋ง์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ
๋ง์ฝ ํน์ ์๊ฑด์ ๋ํด ํฌํํ ์ฌ๋์ด N๋ช ์ด๋ผ๋ฉด Notification ๊ฐ์ฒด N๊ฐ๊ฐ ์์ฑ๋ฉ๋๋ค. ์ด๋ ์๊ฐ์ ์ผ๋ก ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์๋น์ค์ ๊ท๋ชจ๊ฐ ์ปค์ง์ ๋ฐ๋ผ ํ๋์ ์๊ฑด์ ๋ํด ํฌํํ ์ฌ๋์ ์๋ ๋์ด๋ ๊ฒ์ด๋ฏ๋ก, ์ด๋ฌํ ์ฝ๋๋ ์ค๋ซ๋์ ์ ์ง๋์ง ๋ชปํ ๊ฒ์ ๋๋ค.
2. ๋ฐ์ํ๋ ์ฟผ๋ฆฌ์ ๊ฐ์
JpaRepository์ saveAll() ๋ฉ์๋๋ ๊ฐ๊ฐ์ ์ํฐํฐ ๊ฐ์ ๋งํผ์ ์ฝ์
์ฟผ๋ฆฌ๋ฅผ DB์ ์ ์กํฉ๋๋ค. ๋๋ฌด ๋ง์ ์ฝ์
์ฟผ๋ฆฌ๋ ์ํ์๊ฐ๋ ๋ง์ด ๋ค๊ณ DB์ ๋ถํ๋ฅผ ์ฃผ๊ธฐ ์ฝ์ต๋๋ค.
saveAll ํธ์ถ ์ ์ ์ํฐํฐ ๊ฐ์๋งํผ์ ์ฟผ๋ฆฌ๊ฐ ๋ฐ์ํ๋?
์ฌ์ค saveAll() ๋ฉ์๋๊ฐ ํญ์ N๊ฐ์ ์ฝ์
์ฟผ๋ฆฌ๋ฅผ ๋ฐ์์ํค๋ ๊ฒ์ ์๋๋๋ค. ์ด๋ ID์ ์์ฑ ์ ๋ต์ด IDENTITY์ผ ๋์ Hibernate ์ฐ๊ธฐ ์ง์ฐ ์ ์ฑ
๊ณผ ๊ฒฐ๋ถ๋์ด ๋ํ๋๋ ๊ฒฐ๊ณผ์
๋๋ค.
Hibernate๋ ์ํฐํฐ๋ค์ ์์ฑ, ์์ , ์ญ์ ์ ๊ฐ์ ์์ ๋ค์ ์์์ฑ ์ปจํ ์คํธ์ 1์ฐจ ์บ์์์ ๊ด๋ฆฌํ๋ค๊ฐ, ํธ๋์ญ์ ์ด ์ข ๋ฃ๋๋ ์์ ์ ํด๋น ๋ด์ฉ๋ค์ DB์ ๋ฐ์ํ๋ ์ฟผ๋ฆฌ๋ฅผ ์ํํฉ๋๋ค. ์ด๋ฅผ ํตํ์ฌ ๋ถํ์ํ ์ฟผ๋ฆฌ ๋ฐ์์ ์ต์ํํ๋ฉฐ ๋คํธ์ํฌ ์ฐ๊ฒฐ์ ์ค๋ฒํค๋๋ฅผ ์ค์ผ ์ ์์ต๋๋ค.
ํ์ง๋ง IDENTITY ์ ์ฑ ์ ์ฌ์ฉํ๋ฉด ์ํฐํฐ ์์ฑ ๊ณผ์ ์์ ๊ตฌ์กฐ์ ์ธ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ํฐํฐ์ ์์ฑ ์์ ์ ์ํํ๋ฉด 1์ฐจ ์บ์์ ์ํฐํฐ ์ธ์คํด์ค๊ฐ ์ ์ฅ๋์ด์ผ ํ๋๋ฐ, ์ด ๋ ID๋ DBMS๊ฐ ์๋ ์ฆ๊ฐ ์ ์๋ก ๊ด๋ฆฌํ๋ฏ๋ก DB๋ฅผ ๊ฑฐ์น์ง ์์ผ๋ฉด ID ๊ฐ์ ์ ์ ์์ด ์จ์ ํ ์ํฐํฐ ๊ฐ์ฒด๋ฅผ ์ ์ฅํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ด๋ฌํ ์ด์ ๋ก Hibernate๋ IDENTITY ์ ์ฑ ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ persist๊ฐ ์ํ๋๋ ์์ ์ ์ฝ์ ์ฟผ๋ฆฌ๋ฅผ ๋ฐ์์์ผ ์์ฑ๋ ์๋ ์ฆ๊ฐ ์ ์๋ฅผ ์ํฐํฐ์ ํ ๋นํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํฉ๋๋ค.
์ ๋ฐฉ๋ฒ์ JDBC API๊ฐ ์ ๊ณตํ๋ ์ฝ์ ์ ์์ฑ๋ ํค๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฐฉ๋ฒ์ผ๋ก ๊ตฌํ๋ฉ๋๋ค. ์ด ๋ฐฉ๋ฒ์ ๋จ์ผ ์ฝ์ ์์๋ ์ ํจํ๋ ๋ฒํฌ์ฑ ์ฝ์ ์์๋ ์์ฑ๋ ํค๋ฅผ ๊ฒ์ํ๋๋ฐ์ ์ ์ฝ์ด ๋ง์ต๋๋ค. ๋ฐ๋ผ์ saveAll() ๋ฉ์๋๋ IDENTITY ์ ์ฑ ์ ์ฌ์ฉํ๋ ์ํฐํฐ๋ค์ ๊ด๋ฆฌํ ๋์ ์์์ฑ ์ปจํ ์คํธ์ ๊ตฌ์กฐ๋ฅผ ์ ์งํ๊ธฐ ์ํ์ฌ ๊ฐ๊ฐ์ ์ํฐํฐ๋ค์ ๊ฐ๋ณ์ ์ผ๋ก ์ฝ์ ํ๋๋ก ๋ง๋ค์ด์ ธ ์์ต๋๋ค.
๋ฒํฌ์ฑ ์ฝ์ ์ ๋์
์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ค์์ ๋ ์ฝ๋ ์ฝ์
์ ํ๋์ ์ฟผ๋ฆฌ๋ก ์ฒ๋ฆฌํ ์ ์๋๋ก JdbcTemplate์ batchUpdate()๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ํ์ต๋๋ค. batchUpdate๋ bulk inserting์ ์ํํฉ๋๋ค.
@Override
public void insertNotifications(String message, String uri, Set<Long> memberIds) {
List<Object[]> parameters = new ArrayList<>();
//์ฌ๋ฌ๋ถ๋ค์ PreparedStatement๋ฅผ ์ฌ์ฉํ์ธ์
String sql = INSERT_NOTIFICATIONS_SQL
.replace(":message", message)
.replace(":uri", uri);
for (Long memberId : memberIds) {
parameters.add(new Object[] {memberId});
}
jdbcTemplate.batchUpdate(sql, parameters);
}ํ์ง๋ง ์ด๋ฌํ ๋ฐฉ์์ ๋ ๋ค๋ฅธ ๋ฌธ์ ๋ฅผ ๋ณ์์ต๋๋ค. ์๋ฆผ์ ์์ฑ ์ฟผ๋ฆฌ๊ฐ ํ๋๋ก ๋๊ฐ๊ธฐ ๋๋ฌธ์, ๋ชจ์ข ์ ์ด์ ๋ก ์ฟผ๋ฆฌ ์ํ์ ์คํจํ๋ค๋ฉด ์ ์ฒด ์๋ฆผ์ ๋ฑ๋ก๋์ง ์์ต๋๋ค. ์ฟผ๋ฆฌ์ ํํ๋ฅผ ๋ณผ ๋ ๋ฌธ์ ์ ์ฌ์ง๊ฐ ์๋ ๋ถ๋ถ์ memberId ์ ๊ด๋ จ๋ ๋ถ๋ถ์ ๋๋ค. ํน์๋ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ์ธก์์ ์กด์ฌํ์ง ์๋ memberId๋ฅผ ์ ๋ฌํด์ฃผ๊ฑฐ๋, ๋ก์ง์ด ๋๋ ์ฌ์ด์ ํด๋น ID๋ฅผ ๊ฐ์ง ์ฌ์ฉ์๊ฐ ์ญ์ ๋๋ ๊ฒฝ์ฐ ์ฐธ์กฐ๋ฌด๊ฒฐ์ฑ์ ์ํด ์ฟผ๋ฆฌ๋ ์คํจํ ๊ฒ์ ๋๋ค. ์ฟผ๋ฆฌ๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ๋์ง๋ค๋ฉด ์ด๋ฌํ ๋ฌธ์ ๋ ๋ฐ์ํ์ง ์์ผ๋ฏ๋ก ๋ฒํฌ ์ฝ์ ์ฟผ๋ฆฌ๋ ์๋ก์ด ๋ฌธ์ ๋ฅผ ๋ณ์์ต๋๋ค. ์ด๋ฌํ ์ํฉ์ ์๋ฆผ ์์คํ ์ ๊ฒฐํจ๋ฅ ์ ๋์ด๊ฒ ๋ฉ๋๋ค.
๊ฒฐํจ๋ฅ ์ค์ด๊ธฐ
์ฟผ๋ฆฌ ์คํจ์ ํ๊ฒฉ์ ์ค์ด๊ธฐ ์ํด, ์์ธ๋ฅผ ์ก์ ์ฟผ๋ฆฌ๋ฅผ ๋ค์ ๋ณด๋ด๊ฒ ๋ง๋ค์์ต๋๋ค.
@Override
public void insertNotifications(String message, String uri, Set<Long> memberIds) {
...
try {
jdbcTemplate.batchUpdate(sql, parameters);
} catch (DataIntegrityViolationException e) {
//์๋ฆผ ๋ฑ๋ก ์ค ์ค๋ฅ ๋ฐ์, ๊ฐ๋ณ ์๋ฆผ ๋ฑ๋ก ์๋
for (Object[] parameter : parameters) {
try {
jdbcTemplate.update(sql, parameter);
} catch (DataIntegrityViolationException e2) {
//๋ฌธ์ ๊ฐ ์๋ memberId
}
}
}
}์ฟผ๋ฆฌ๊ฐ ์คํจํ์ ๋์ ๊ฐ๊ฐ์ ์๋ฆผ์ ๊ฐ๋ณ์ ์ผ๋ก ๋ฑ๋กํ๋ ๋ฐฉ์์ผ๋ก ์ ์ฒด ์๋ฆผ์ด ๋ฑ๋ก๋์ง ์๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ ๋ฌธ์ ๊ฐ ์๋ memberId๋ฅผ ์ ์ธํ ๋ชจ๋ ์๋ฆผ์ ์ ์ฅ๋ ๊ฒ์ ๋๋ค.
์ด ๋ฐฉ๋ฒ์ ์๋ฆผ ์๋น์ค์ ๊ฒฐํจ๋ฅ ์ ์ค์ฌ์ฃผ์ง๋ง ์คํจํ์ ๋์ N๊ฐ์ ์ฟผ๋ฆฌ๊ฐ ๋ฐ์ํ๋ฉฐ ์ฑ๋ฅ ์ ํ์ ์์ธ์ด ๋ ์ ์์ต๋๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ ์ด์ง ๋ถํ ๋ฐฉ์์ ์ฑํํ ์ ์์ต๋๋ค. ์ด์ง ๋ถํ ๋ฐฉ์์ ๋ฒํฌ ์ฝ์ ์ ์คํจํ์ ๋ ์ด๋ฅผ ๋ ๋ถ๋ถ์ผ๋ก ๋๋์ด ๊ฐ๊ฐ์ ์์ต์ ์ฝ์ ์ ์ํํ๋ ์ฌ๊ท์ ์ธ ํด๋ฒ์ ๋๋ค. ์ด์ง ๋ถํ ๋ฐฉ์์ผ๋ก ๋ฐฐ์น์ ํฌ๊ธฐ๋ฅผ ์ ๋ฐ์ผ๋ก ์ค์ฌ๊ฐ๋ฉฐ ํธ์ถํ๋ฉด, ํ๋์ ๋ ์ฝ๋์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค๋ ๊ฐ์ ํ์ N๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ 1 + 2รlogโก_2 N๏ปฟ ๊ฐ๋ก ์ค์ผ ์ ์์ด ๋ณด์ ๋๋ค.
์ฐ๊ด๊ด๊ณ ๋งคํ, ๊ผญ ํด์ผํ ๊น์?
์ ํด๊ฒฐ๋ฒ์ ๋ํ ์กฐ์ธ์ ๋ฃ๊ธฐ ์ํด ๋ฉํ ๋ง์ ๋ค๊ณ ๊ฐ๋๋ฐ, ์์ ๋ฐ์ ์๋ฃจ์ ์ ๋ฃ๊ฒ ๋์์ต๋๋ค.
์ฐ๊ด๊ด๊ณ ๋งคํ, ์ ํ์ จ๋์?
public class Notification extends BaseTimeEntity {
...
@ManyToOne
@JoinColumn(name = "member_id")
private Member member;
...
}Notification๊ณผ Member๋ ๋ค๋์ผ ๊ด๊ณ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฏ๋ก ๋น์ฐํ๊ฒ DB ๋ ๋ฒจ์์ FK๋ก ์ฐ๊ฒฐ๋์ด์์ด์ผ ํ๋ค๊ณ ์๊ฐํ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ํ๋ก์ ํธ๋ ์์ง ๊ฐ๋ฐ ๋จ๊ณ์ด๊ณ ์ํฐํฐ์ ํ๋๊ฐ ๊ณ์ ๋ณํํ๊ณ ์๊ธฐ ๋๋ฌธ์ Hibernate๊ฐ ์ ๊ณตํ๋ ddl ์๋ ์์ฑ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ณ ์์์ต๋๋ค. ์ด ๊ธฐ๋ฅ์ ํตํด ํธ๋ฆฌํ๊ฒ FK๋ฅผ ์ค์ ํ๋ ค๋ฉด ๋ค๋์ผ ๊ด๊ณ๋ฅผ ๋งคํํด์ฃผ์ด์ผ ํ์ต๋๋ค. ์ด ๋ถ๋ถ์ ๋ํด์ ๋ค์๊ณผ ๊ฐ์ ์ง์ ์ ๋ฐ์์ต๋๋ค.
1. Notification์ผ๋ก๋ถํฐ Member ๋ฐ์ดํฐ์ ์ ๊ทผํ ํ์๊ฐ ์์ด ๋ณด์ด๋๋ฐ ๋งคํ์ด ๋์ด์๋ค.
ํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์์ Notification ํ ์ด๋ธ์ member_id๋ ์ค์ง ํน์ ํ์์ ์๋ฆผ์ ์กฐํํ๊ธฐ ์ํ ํํฐ๋ง ์ฉ๋๋ก ์ฌ์ฉ๋ฉ๋๋ค. Notification ์กฐํ์ ํจ๊ป Member์ ํ๋์ ์ ๊ทผํ ๋ก์ง์ด ๋ฐ์ํ์ง ์๋๋ค๋ฉด, ๊ตณ์ด ์ฐ๊ด๊ด๊ณ ๋งคํ์ ํด๋์ ์ด์ ๋ ์์ ๊ฒ์ ๋๋ค.
๋ํ ์ด๋ฌํ ๊ตฌ์กฐ๋ MSA๋ฅผ ๋์ ํ๊ฒ ๋ ๋์๋ ๋ฌธ์ ๊ฐ ๋ ์ ์์ ๊ฒ์ ๋๋ค. ์๋ฆผ ์์คํ ์ด ๊ธฐ์กด ์์คํ ๊ณผ ๋ถ๋ฆฌ๋์ด ๋ ์์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก์ ๋์ํ๊ฒ ๋ ๋, Member ํ๋๋ฅผ ๊ฐ๊ณ ์๊ณ ์ด๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด ์๋ฆผ ์์คํ ์ด Member ๋๋ฉ์ธ์ ์์กดํ๊ฒ ๋์ด ๋ถ๋ฆฌํ๊ธฐ ์ด๋ ค์ธ ๊ฒ์ ๋๋ค.
2. FK๋ก ์ฐ๊ด๊ด๊ณ๋ฅผ ์ฃผ๋ ๊ฒ๋ ๋๋ฉ์ธ ๊ฐ ์์กด์ฑ์ ๋๋ฆฐ๋ค.
์ ํ๋ฆฌ์ผ์ด์ ๋ ๋ฒจ ๋ฟ๋ง ์๋๋ผ DB ๋ ๋ฒจ์์๋ FK์ ์ค์ ์ DB ํ ์ด๋ธ๊ฐ ์์กด์ฑ์ ๋ฐ์์์ผ ๋ถ๋ฆฌํ๊ธฐ ์ด๋ ค์ด ๊ตฌ์กฐ๊ฐ ๋ ๊ฒ์ ๋๋ค. ์ํฉ์ ๋ฐ๋ผ์๋ FK๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ฒ๋ ๋ฐฉ๋ฒ์ด ๋ ์ ์์ต๋๋ค.
Notification - Member FK ์ฐ๊ฒฐ์ ํ์ง ์๋๋ค๋ฉด
FK๋ ํ ์ด๋ธ ๊ฐ์ ๋ ผ๋ฆฌ์ ๊ตฌ์กฐ๋ฅผ ๋ณด์ฅํ ์ ์๋ ํ๋ฅญํ ๋ฐฉ๋ฒ์ ๋๋ค. ํ์ง๋ง FK๋ฅผ ์ค์ ํ๋ ๊ฒ์ ์ ์ฝ ์กฐ๊ฑด์ผ๋ก ์ธํ ์์ ์ ์ฑ๋ฅ ์ ํ, ์ญ์ ์ ์ ๋ฐ์ดํธ ์ ๋ฐ์ํ๋ ๋ณต์ก์ฑ, ํ ์ด๋ธ ๊ฐ ๊ฐํ ์์กด์ฑ ๋ฐ์ ๋ฑ์ ๋ฌธ์ ๋ฅผ ๋ณ์ต๋๋ค. ๋ฐ๋ผ์ ์ฐธ์กฐ ๋ฌด๊ฒฐ์ฑ์ ๊ผญ ๋ณด์ฅํด์ผํ๋ ๊ฒ์ด ์๋๋ผ๋ฉด, FK๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ฒ๋ ๊ณ ๋ คํด ๋ณผ ์ ์์ต๋๋ค.
ํ์ฌ ์ ํฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ธฐ๋ฅ์ ์๊ฐํด๋ณผ ๋ ์๋ฆผ ํ ์ด๋ธ์ ์ฐธ์กฐ ๋ฌด๊ฒฐ์ฑ์ด ๊นจ์ง๋ ๊ฒฝ์ฐ, ์๋ฅผ ๋ค์ด member_id์ ํด๋นํ๋ ์ฌ์ฉ์๊ฐ ์๋ ๊ฒฝ์ฐ๋ ์ฌ์ค ํฐ ๋ฌธ์ ๊ฐ ๋์ง ์์ต๋๋ค. ๋ชจ๋ ์๋ฆผ์ ์กฐํ๋ member_id์ ์ํด ํํฐ๋ง ๋์ด์ ์กฐํ๋์ง๋ง, ์๋ฆผ์ผ๋ก๋ถํฐ ์ฌ์ฉ์ ์ธก์ ์กฐํํ๋ ๊ฒฝ์ฐ๋ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ฐ๋ผ์ ์ด ์ผ์ด์ค๋ FK์ ์ฐ๊ฒฐ์ ํ์ง ์๋ ๋ฐฉ๋ฒ์ ์ข์ ์์๊ฐ ๋ ์ ์์ด ๋ณด์ ๋๋ค.
FK๋ฅผ ์ ๊ฑฐํ๊ณ ๋๋ค๋ฉด ์์์ ๊ณ ๋ฏผํ๋ ์ฟผ๋ฆฌ ์คํจ์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ํ ํ์์ฑ ์์ฒด๊ฐ ์์ด์ง๋๋ค. DB์ ์ ์ฝ ์กฐ๊ฑด์ ์ ๊ฑฐํ ๊ฒ์ด ์ ํ๋ฆฌ์ผ์ด์ ๋ ๋ฒจ์ ๋ณต์ก๋๋ฅผ ์ค์ด๋๋ฐ์๋ ์ํฅ์ ์ฃผ์์ต๋๋ค.
ํ์ง๋ง ์ด ๊ฒฝ์ฐ ๋ค๋ฅธ ์ง์ ์์ ๊ด๋ฆฌ ํฌ์ธํธ๊ฐ ๋ฐ์ํฉ๋๋ค. ๊ธฐ์กด์๋ ์์ฑ๋์ด์ผ ํ๋ ์๋ฆผ์ด ์์ฑ๋์ง ์๋ ๊ฒฝ์ฐ๋ฅผ ๊ด๋ฆฌํด์ผํ์ง๋ง, ์ด์ ๋ ์์ฑ๋์ง ์์์ด์ผ ํ๋ ์๋ฆผ์ด ์์ฑ๋๋ ๊ฒฝ์ฐ๋ฅผ ๊ด๋ฆฌํด์ผ ํฉ๋๋ค. ์ด๋ฌํ ๋ ์ฝ๋๋ค์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํฐ ์ํฅ์ ์ฃผ์ง๋ ์์ ๊ฒ์ด์ง๋ง, ์ง์์ ์ผ๋ก ์์ธ๋ค๋ฉด ๋ถํ์ํ ๊ณต๊ฐ์ ๋ญ๋นํ๊ฒ ๋ฉ๋๋ค. ๋ฐ๋ผ์ ์ฃผ๊ธฐ์ ์ผ๋ก ์ด๋ฌํ ๋ ์ฝ๋๋ค์ ์ง์์ฃผ๋ ์ญํ ์ ํ๋ ๋ฐฐ์น๋ฅผ ์ํ์ํค๋ ๋ฐฉ๋ฒ๋ ๊ณ ์ํด๋ณผ ํ์๊ฐ ์์ ๊ฒ์ ๋๋ค.