728x90
์ถ์ฒ : ๋ด์ผ๋ฐฐ์์บ ํ
@Transactional <<< ???
public List<Folder> addFolders(List<String> folderNames, String name) {
User user = userRepository.findByUsername(name).orElseThrow(
() -> new IllegalArgumentException("์ฌ์ฉ์๊ฐ ์กด์ฌํ์ง ์์ต๋๋ค.")
);
// ์
๋ ฅ์ผ๋ก ๋ค์ด์จ ํด๋ ์ด๋ฆ์ ๊ธฐ์ค์ผ๋ก, ํ์์ด ์ด๋ฏธ ์์ฑํ ํด๋๋ค์ ์กฐํํฉ๋๋ค.
List<Folder> existFolderList = folderRepository.findAllByUserAndNameIn(user, folderNames);
List<Folder> folderList = new ArrayList<>();
for (String folderName : folderNames) {
// ์ด๋ฏธ ์์ฑํ ํด๋๊ฐ ์๋ ๊ฒฝ์ฐ๋ง ํด๋ ์์ฑ
if (isExistFolderName(folderName, existFolderList).equals("false")) {
Folder folder = new Folder(folderName, user);
folderList.add(folder);
} else {
throw new IllegalArgumentException("์ค๋ณต๋ ํด๋๋ช
('" + isExistFolderName(folderName, existFolderList) + "')์ ์ญ์ ํ๊ณ ์ฌ์๋ํด ์ฃผ์ธ์");
}
}
return folderRepository.saveAll(folderList);
}
- ์์ ๋ก์ง์ ์์ธํ ํ์ด๋ด
์๋ค!
- ํด๋๋ค๊ณผ ์ด๋ฆ์ ์ธ์๋ก ๋๊ฒจ๋ฐ๋๋ค
- ์ ๋ ฅ์ผ๋ก ์จ ํด๋ ์ด๋ฆ์ ๊ธฐ์ค์ผ๋ก ํ์์ด ์ด๋ฏธ ์์ฑํ ํด๋๋ฅผ ์กฐํ
- ์ ๋ ฅ์ผ๋ก ์จ ํด๋๋ฅผ ์กฐํํ ํด๋๋ค๊ณผ ๋น๊ต
- ๋ง์ฝ ์ด๋ฏธ ์์ฑํ ํด๋๊ฐ ์๋๋ฉด ํด๋๋ฅผ ์์ฑ
- ๊ทธ๋ฐ๋ฐ ๋ง์ฝ ๊ทธ ์ค์ ํ๋์ ํด๋๊ฐ ์ด๋ฏธ ์์์ผ๋ฉด ํด๋๋ฅผ ๋ง๋ค์ง ์๊ณ ์๋ฌ๋ฅผ ๋ฆฌํด
- ๊ทธ๋ฐ ๋ง์ฝ 5๊ฐ์ ํด๋๋ฅผ ๋ฐ์ ์ฒ๋ฆฌํ๋์ค ์ธ ๋ฒ์งธ ํด๋๊ฐ ์ค๋ณต์ธ ๊ฒฝ์ฐ?
- ์์ฒญ์ด ์คํจํ์ผ๋, ํด๋น ๋ฉ์๋์ ์คํ ์ ๊ณผ ๋ฐ์ดํฐ๊ฐ ๊ฐ์์ผ ํ๋ฏ๋ก,
- ๋ค์ ์ง์์ค์ผ ํ ๊น?
- ์ด๋ฌํ ๊ฒ๋ค์ ์ํด์ ํธ๋์ญ์ ์ ํ์ฉํ๋ค!
Transaction์ด๋?
- ๋ ์ด์ ์ชผ๊ฐค ์ ์๋ ์ต์๋จ์์ ์์
- ํ๋์ ์ต์ ๋จ์์ ์์ ์ ์ฌ๋ฌ๊ฐ์ง ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ ๋ฃ์ผ๋ฉด, ๋ชจ๋ ์ ์ฅ๋๊ฑฐ๋, ์๋ฌด ๊ฒ๋ ์ ์ฅ๋์ง ์๊ฑฐ๋๋ฅผ ๋ณด์ฅํ๋ค.
๋ง์ฝ์ @Transactional์ด ์๋ ๋งค๋์ ๋ฅผ ์ด์ฉํ๋ค๋ฉด?
public List<Folder> addFolders(List<String> folderNames, User user) {
// ํธ๋์ญ์
์ ์์
TransactionStatus status = this.transactionManager.getTransaction(new DefaultTransactionDefinition());
try {
// 1) ์
๋ ฅ์ผ๋ก ๋ค์ด์จ ํด๋ ์ด๋ฆ์ ๊ธฐ์ค์ผ๋ก, ํ์์ด ์ด๋ฏธ ์์ฑํ ํด๋๋ค์ ์กฐํํฉ๋๋ค.
List<Folder> existFolderList = folderRepository.findAllByUserAndNameIn(user, folderNames);
List<Folder> savedFolderList = new ArrayList<>();
for (String folderName : folderNames) {
// 2) ์ด๋ฏธ ์์ฑํ ํด๋๊ฐ ์๋ ๊ฒฝ์ฐ๋ง ํด๋ ์์ฑ
if (isExistFolderName(folderName, existFolderList)) {
// Exception ๋ฐ์!
throw new IllegalArgumentException("์ค๋ณต๋ ํด๋๋ช
์ ์ ๊ฑฐํด ์ฃผ์ธ์! ํด๋๋ช
: " + folderName);
} else {
Folder folder = new Folder(folderName, user);
// ํด๋๋ช
์ ์ฅ
folder = folderRepository.save(folder);
savedFolderList.add(folder);
}
}
// ํธ๋์ญ์
commit
transactionManager.commit(status);
return savedFolderList;
} catch (Exception ex) {
// ํธ๋์ญ์
rollback
transactionManager.rollback(status);
throw ex;
}
}
@Transactional์ ์ฌ์ฉํ ๋ก์ง
728x90
'Spring๐' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๊ฒ์ํ์ ๋๊ธ์ ํฌํจํ๊ณ ์๋ ๊ฒ์๋ฌผ์ ๋๊ธ ์ญ์ ์์ด ๊ฒ์๋ฌผ๋ง ์ญ์ ํ๋ ๊ฒฝ์ฐ, ์์ธ Referential integrity constraint violation : 1) JPA (0) | 2023.01.02 |
---|---|
๋ฐ์ดํฐ ๋ฒ ์ด์ค๋ฅผ ๋ ์์ ํ๊ฒ ๊ด๋ฆฌํ๊ธฐ(Primary, Replica) (0) | 2022.12.29 |
Spring Exception (0) | 2022.12.29 |
Spring AOP (0) | 2022.12.28 |
ํ ์คํธ ์ฝ๋ (0) | 2022.12.27 |