BackEnd๐ฑ118 Spring ํธ๋์ญ์ ์ ์ธ์ ์ด๋ป๊ฒ ๋กค๋ฐฑ ๋ ๊น? -2ํธ ๊ฐ์์ด์ ๊ธ์์๋ Spring์ @Transactional ์ด๋ ธํ ์ด์ ์ด ๊ธฐ๋ณธ์ ์ผ๋ก ์ด๋ป๊ฒ ๋์ํ๋์ง, ๊ทธ๋ฆฌ๊ณ ์์ธ ์ฒ๋ฆฌ์ ๋ฐ๋ผ ํธ๋์ญ์ ์ด ๋กค๋ฐฑ๋๋ ๋ฉ์ปค๋์ฆ์ ๋ํด ๋ค๋ฃจ์๋ค. ์ด๋ฒ ๊ธ์์๋ ์ค์ ์ฝ๋์ ํ ์คํธ๋ฅผ ํตํด ๋ค์ํ ์ํฉ์์ ํธ๋์ญ์ ์ด ์ด๋ป๊ฒ ๋์ํ๋์ง ์ดํด๋ณผ ์์ ์ด๋ค. ๊ธ์ ์ฝ๋ ๋ถ๋ค๋ ๊ฐ ์ํฉ์์ ๊ฒฐ๊ณผ๋ฅผ ์์ธกํด ๋ณด๋ฉฐ ๋ฐ๋ผ๊ฐ๋ฉด ์ดํด์ ๋์์ด ๋ ๊ฒ ๊ฐ๋ค.๋์ผํ ํด๋์ค ๋ด์์์ ํธ๋์ญ์ ๋์๋ณธ์ธ ๋ฉ์๋์์ ์์ธ ๋ฐ์ ์ ๋กค๋ฐฑ๋ค๋ฅธ ๋ฉ์๋ ํธ์ถ ํ ์์ธ ๋ฐ์ ์ ๋กค๋ฐฑ๋ณธ์ธ ๋ฉ์๋์์ try-catch๋ก ์์ธ ์ฒ๋ฆฌ ํ ์ปค๋ฐ๋ค๋ฅธ ๋ฉ์๋ ํธ์ถ ํ ๋ณธ์ธ ๋ฉ์๋์์ try-catch๋ก ์์ธ ์ฒ๋ฆฌ ํ ์ปค๋ฐ๋ณธ์ธ ๋ฉ์๋์์ noRollbackFor ์ค์ ํ ์์ธ ๋ฐ์ ์ ์ปค๋ฐnoRollbackFor ์ค์ ๋ ๋ค๋ฅธ ๋ฉ์๋.. 2024. 12. 22. Spring ํธ๋์ญ์ ์ ์ธ์ ์ด๋ป๊ฒ ๋กค๋ฐฑ ๋ ๊น? -1ํธ ๊ฐ์์คํ๋ง์์ @Transactional ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ๋ฉด ํธ๋์ญ์ ์ด ์๋์ผ๋ก ๊ด๋ฆฌ๋๋ค. ๋ก์ง์ด ์ฑ๊ณต์ ์ผ๋ก ์ฒ๋ฆฌ๋๋ฉด commit์ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ฐ์๋๊ณ , ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด rollback์ ํตํด ๋ชจ๋ ๋ณ๊ฒฝ ์ฌํญ์ด ์ทจ์๋๋ค. ๋ค๋ง ์ด๋ ๊ธฐ๋ณธ์ ์ธ ๊ฐ๋ ์ผ๋ก ์ด๋ฒ ๊ธ์์๋ ๋ ๋์๊ฐ ์ธ๋ถ์ ์ผ๋ก ๋กค๋ฐฑ์ด ์ ํํ ์ธ์ ๋ฐ์ํ๊ณ (1ํธ), ํน์ ์ํฉ์ ์์๋ก ํด๋น ๋ก์ง์ด ๋กค๋ฐฑ์ด ๋ ์ง ์ ๋ ์ง์ ๋ํด ๋ง์ถฐ๋ณด๋ ์(2ํธ)์ผ๋ก ์์๋ณด๊ณ ์ ํ๋ค. Check Exception, Unchecked Exception๋จผ์ ์๋ฐ์์๋ ์์ธ๋ฅผ ํฌ๊ฒ ๋ค์๊ณผ ๊ฐ์ด Exception๊ณผ Error ๋ ๊ฐ์ง๋ก ๋๋๊ณ ์๋ค.Exception์ ์ ๋ ฅ ๊ฐ์ ๋ํ ์ฒ๋ฆฌ๊ฐ ๋ถ๊ฐ๋ฅํ๊ฑฐ๋ ํ๋ก๊ทธ๋จ ์คํ ์ค์ ์ฐธ์กฐ๋ ๊ฐ์ด ์๋ชป๋ ๊ฒฝ์ฐ์ธ .. 2024. 10. 4. [gradle] implementation, api ์ฐจ์ด ๊ฐ์Gradle์์ ์์กด์ฑ์ ์ค์ ํ ๋๋ compileOnly, runtimeOnly, implementation, api ๋ฑ ์ฌ๋ฌ ๊ฐ์ง ์ต์ ์ ์ฌ์ฉํ ์ ์๋ค. ํนํ api์ implementation์ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ๋ก์ ํธ์ ์ถ๊ฐํ ๋ ๊ฐ์ฅ ์์ฃผ ์ฌ์ฉํ๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก, ์ด ๋์ ๋ชจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ถ๊ฐํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง๋ง ๊ฐ๊ธฐ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ๋์ํ๊ธฐ ๋๋ฌธ์ ์ฐจ์ด์ ์ ์์๋๋ฉด ์ข๋ค.dependencies { api 'org.apache.httpcomponents:httpclient:4.5.7' implementation 'org.apache.commons:commons-lang3:3.5'}์ฐธ๊ณ ๋ก ์ด์ Gradle ๋ฒ์ ์์๋ implementation ํค์๋๊ฐ ์์๊ณ , ๋์ comp.. 2024. 9. 7. Spring Boot์์ ์ฌ๋ฌ Kafka ํด๋ฌ์คํฐ ์ฌ์ฉํ๊ธฐ ๊ฐ์ํ๋ก์ ํธ์์ ์ผ๋ฐ์ ์ผ๋ก ํ๋์ Kafka ํด๋ฌ์คํฐ๋ง์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋๋ถ๋ถ์ด์ง๋ง, ๊ฒฝ์ฐ์ ๋ฐ๋ผ ์๋ก ๋ค๋ฅธ ํ๊ฒฝ์ Kafka ํด๋ฌ์คํฐ์ ๋์์ ์ฐ๊ฒฐํด์ผ ํ ํ์๊ฐ ์๊ธธ ์ ์๋ค.๋๋ ์ด๋ฒ์ ์์ ํ๋ฉด์ ๊ธฐ์กด์ ์ฐ๊ฒฐ๋ Kafka ํด๋ฌ์คํฐ ๋ง๊ณ ๋ ๋ ํ๋์ ์๋ก์ด ํด๋ฌ์คํฐ๋ฅผ ์ฐ๊ฒฐํด์ผ ํ๋๋ฐ, ์์ ์ ์งํํ๋ฉด์ ์ป์๋ ์ง์์ ๊ณต์ ํ๊ณ ์ ์์ฑํ๊ฒ ๋์๋ค. ์ปจ์๋จธ ์ค์ Spring Boot๋ ๊ธฐ๋ณธ์ ์ผ๋ก ConcurrentKafkaListenerContainerFactory๋ฅผ ์๋์ผ๋ก ๊ตฌ์ฑํ์ฌ Kafka ๋ฆฌ์ค๋ ์ปจํ ์ด๋๋ฅผ ์์ฑํ๋ค. ๊ทธ๋ฌ๋ ์ฌ๋ฌ Kafka ํด๋ฌ์คํฐ์ ์ฐ๊ฒฐํ๋ ค๋ฉด ๊ฐ ํด๋ฌ์คํฐ์ ๋ํด ๋ณ๋์ ConcurrentKafkaListenerContainerFactory ๋น์ ์์ฑํ๊ณ , ํด๋น ํด๋ฌ์คํฐ์ ๋ง๋ C.. 2024. 8. 17. [JPA] deleteAll(), deleteAllInBatch(), deleteInBatch() ์ ๋ฆฌ ๊ฐ์Hibernate(JPA)์์๋ ๋ ์ฝ๋๋ฅผ ์ญ์ ํ ์ ์๋ ์๋์ ๋ค์ํ ๋ฉ์๋๋ค์ ์ง์ํ๋ค.delete(),deleteById()deleteAll(), deleteAllById()deleteInBatch()deleteAllInBatch(), deleteAllByIdInBatch()๋ค์ํ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ ์ข์ง๋ง, ๋ค์ด๋ฐ๋ง ๋ณด๊ณ ํผ๋์ค๋ฌ์ด ๊ฒ๋ค์ด ๋ช๋ช ์๋ค. ๋ํ์ ์ผ๋ก deleteInBatch()์ deleteAllInBatch(), ๊ทธ๋ฆฌ๊ณ deleteAll()๊ณผ deleteAllInBatch()์ ๊ฐ์ ๋ฉ์๋๋ค์ด๋ค.์ด๋ฒ ๊ฒ์๊ธ์์๋ ์ ๋ฉ์๋๋ค์ด ์ค์ ๋ก ์ด๋ป๊ฒ ์ญ์ ๋ฅผ ์ฒ๋ฆฌํ๋์ง๋ฅผ ์ดํด๋ณผ ๊ฒ์ด๊ณ , ์ฐ๊ด๊ด๊ณ๊ฐ ์๋ ๊ฒฝ์ฐ์ ์ฐ๊ด๊ด๊ณ๊ฐ ์๋ ๊ฒฝ์ฐ๋ก ๋๋์ด ์ญ์ ๋์์ ๋ถ์ํด ๋ณผ ๊ฒ์ด๋ค. ์ฌ์ ์ธํ DB.. 2024. 8. 12. ๋จ๋ฐฉํฅ @OneToMany์ ๋ฌธ์ ์ ๊ฐ์JPA๋ฅผ ํ์ตํ๋ค ๋ณด๋ฉด @OneToMany๋ฅผ ์ฌ์ฉํ ๋ ๋จ๋ฐฉํฅ๋ณด๋ค๋ ์๋ฐฉํฅ ๋งคํ์ ์ฌ์ฉํ๋ผ๋ ๋ง์ ์์ฃผ ๋ฃ๊ฒ ๋๋ค.์ ๊ทธ๋ฐ์ง ์ดํดํ๊ธฐ ์ํด ๋จ๋ฐฉํฅ @OneToMany๋ฅผ ์ฌ์ฉํ๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ ๋ฌธ์ ์ ์ ๋ํด ์ดํด๋ณด๊ณ , ์๋ฐฉํฅ์ ์ฌ์ฉํ์ ๋ ์ด๋ค ์ ์ด ๊ฐ์ ๋๋์ง ์์๋ณด์๋งคํ ํ ์ด๋ธ์ ์ฌ์ฉํ ๋จ๋ฐฉํฅ @OneToMany ๋์ ๊ณผ์ @JoinColumn ์ฌ์ฉํ ๋จ๋ฐฉํฅ @OneToMany ๋์ ๊ณผ์ ์๋ฐฉํฅ @OneToMany๋ฅผ ์ฌ์ฉํ์ ๋์ ๋์ ๊ณผ์ 1. ๋งคํ ํ ์ด๋ธ ์ฌ์ฉ๋งคํ ํ ์ด๋ธ์ ์ด์ฉํ @OneToMany ์ํฐํฐ ์ค๊ณ ์์๋ ๋ค์๊ณผ ๊ฐ๋ค.@Entity@NoArgsConstructor(access = lombok.AccessLevel.PROTECTED)public class Book { @I.. 2024. 7. 26. @TransactionalEventListener ์ฌ์ฉ ์ ์ฃผ์์ ๋ฌธ์ ์ํฉ@Service@RequiredArgsConstructorpublic class CurrentValueChangeService { private final ExampleRepository exampleRepository; private final ApplicationEventPublisher applicationEventPublisher; @Transactional public void changeValue(String value) { Example example = exampleRepository.find(1L); String beforeValue = example.getCurrentValue(); example.updateCurren.. 2024. 7. 3. ๋๋ฉ์ธ ์ํฐํฐ์ ์์์ฑ ์ํฐํฐ ๊ฐ์์ํํธ์จ์ด ์ํคํ ์ฒ์์ ๋๋ฉ์ธ ์ํฐํฐ์ ์์์ฑ ์ํฐํฐ๋ฅผ ๋ถ๋ฆฌํ๋ ๊ฒ์ ์ค์ํ ์ค๊ณ ์์น ์ค ํ๋์ด๋ค. ์ด ์์น์ ํด๋ฆฐ ์ํคํ ์ฒ์ ํต์ฌ ๊ฐ๋ ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉฐ, ๋๋ฉ์ธ ๋ก์ง๊ณผ ์์์ฑ ๊ณ์ธต ๊ฐ์ ์์กด์ฑ์ ์ต์ํํ์ฌ ์์คํ ์ ์ ์ง ๋ณด์์ฑ๊ณผ ํ์ฅ์ฑ์ ๋์ด๋ ๋ฐ ๋ชฉ์ ์ด ์๋ค.์ด๋ฒ ๊ฒ์๊ธ์์๋ ์ด๋ฌํ ๋๋ฉ์ธ ์ํฐํฐ์ ์์์ฑ ์ํฐํฐ์ ์ฐจ์ด์ ์ ๋ํด ์์๋ณด๊ณ , ์ด ๋์ ๋ถ๋ฆฌํจ์ผ๋ก์จ ์ป์ ์ ์๋ ์ด์ ๊ณผ ์ฃผ์ํด์ผ ํ ์ ๊ทธ๋ฆฌ๊ณ ์ธ์ ๋ถ๋ฆฌํ๋ฉด ์ข์์ง์ ๋ํด ์ ๋ฆฌํ๋ค. ๋๋ฉ์ธ ์ํฐํฐ๋จผ์ ๋๋ฉ์ธ ์ํฐํฐ์ ๊ฐ๋ ๋ถํฐ ์ดํด๋ณด๋ฉด ๋๋ฉ์ธ ์ํฐํฐ๋ ๋น์ฆ๋์ค ๋๋ฉ์ธ ๋ด์ ๊ฐ๋ ์ ๋ํ๋ด๋ ๊ฐ์ฒด๋ก, ์ ์์๊ฑฐ๋ ์์คํ ์์๋ 'Order', 'Customer', 'Product'๋ฑ์ด ๋๋ฉ์ธ ์ํฐํฐ๊ฐ ๋ ์ ์๋ค. ๋ค์์ ๊ฐ๋จํ ์์ ์ฝ๋์ด๋ค.. 2024. 6. 18. ํ์ ์ ์ํด Swagger ์ข ๋ ์ ์ฌ์ฉํด๋ณด๊ธฐ ๋ชฉ์ฐจAPI ๊ทธ๋ฃนํAPI ๋ฒ์ ๊ด๋ฆฌ ์ @Deprecated ํ์ฉํ๊ธฐ๋ช ์ธ๋ง ๋จผ์ ์ ๋ฌํ๊ธฐAuthorize์ jwt ๋ฃ์ ๋ prefix์ Bearer ์๋ต์ํค๊ธฐ๋ธ๋ผ์ฐ์ ์๋ก๊ณ ์นจ ํ์๋ ์ธ์ฆ์ ๋ณด ์ ์ง์ํค๊ธฐ๊ธฐํ ์์ํ ์์ธ ์ค์ ๋ค 1. API ๊ทธ๋ฃนํSwagger์์ API๋ฅผ ๊ทธ๋ฃนํํ๋ฉด ์ฌ๋ฌ ์๋ํฌ์ธํธ๋ฅผ ๋ ผ๋ฆฌ์ ์ธ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ด ๊ด๋ฆฌํ๊ณ ๋ฌธ์๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ์ ๋ฆฌํ ์ ์์ต๋๋ค.์ค์ ํ์๋ ์ ์ด๋ฏธ์ง์ฒ๋ผ ๊ด๋ จ๋ ์๋ํฌ์ธํธ๋ง ๋ณผ ์ ์์ด ์ํ๋ API๋ฅผ ์ฝ๊ฒ ์ฐพ๊ณ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. Swagger์์ API๋ฅผ ๊ทธ๋ฃนํํ๋ ๋ฐฉ๋ฒ์ ์ด๋ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ณ ์๋๋์ ๋ฐ๋ผ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ํ์ธํด์ ์ ์ฉํ๋ฉด ๋ฉ๋๋ค.springfox-swagger2๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ@Configuration@EnableSwagger2publi.. 2024. 5. 15. ์ด์ 1 2 3 4 ยทยทยท 14 ๋ค์