codevillain
@codevillain
Students
1,780
Reviews
111
Course Rating
4.9
19๋ ์ฐจ ๋ฐฑ์๋ ๊ฐ๋ฐ์
Kakao (2018 ~ 2024, ๅ ๋ฆฌ๋)
LF (LG Fashion, 2017, IT ํ๋ซํผํ ์ฐจ์ฅ)
์ฟ ํก (2013~2017, Sr. Software Engineer)
์คํ์์ค ๊ฐ๋ฐ์ ๋ํ ์์ (2012. ์ง์๊ฒฝ์ ๋ถ, NIPA)
์ฃผ์ ๋ถ์ผ
Java, Spring, MSA ํ๊ฒฝ์์ ์ค๋ ์๊ฐ ์ผ์ ํ์์ต๋๋ค. ๋์ฉ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ฐ ๋ง์ดํฌ๋ก ์๋น์ค ์ํคํ
์ณ ์ค๊ณ, ๋ณต์กํ ๋๋ฉ์ธ์ ์ํฐํฐ ์ค๊ณ ๊ฒฝํ๊ณผ ํ์ ์ด๋์ด๋ณธ ๊ฒฝํ์ ํตํด ๊ธฐ์ ์ ์ง์๊ณผ 10๋
์ด์์ ๋ฉด์ ๊ด ๊ฒฝํ์ ํตํด ์ธํฐ๋ทฐ๋ฅผ ์ค๋นํ๋ ๋ฐฉ๋ฒ๊ณผ ์ปค๋ฆฌ์ด์ ๋ก๋๋งต ๋ฐฉํฅ์ ์ก๋๋ฐ ๋์์ ๋๋ฆฌ๊ณ ์ถ์ต๋๋ค.
๊ฐ์ ๊ฒฝ๋ ฅ
2024.11 ๋๊ตฌ๋ํ๊ต ๊ฒฝ์ฐ์ด๋ ธ๋ฒ ์ด์ ์์นด๋ฐ๋ฏธ ์ทจ์ ํน๊ฐ
2024.10 ํ๋น๋ฏธ๋์ด ์ฃผ๋์ด ๊ฐ๋ฐ์๋ฅผ ์ํ ์ทจ์ ์ธ๋ฏธ๋ 2์ฐจ ํน๊ฐ
2024.09 ๋ถ์ฐ๋ํ๊ต SW์ตํฉ๊ต์ก์ ์ทจ์ ํน๊ฐ
2024.04 ํ๋น๋ฏธ๋์ด ์ฃผ๋์ด ๊ฐ๋ฐ์๋ฅผ ์ํ ์ทจ์ ์ธ๋ฏธ๋ ํน๊ฐ
์ ์ (๊ฐ๋ฐ์ ๊ธฐ์ ๋ฉด์ ๋ ธํธ, ํ๋น๋ฏธ๋์ด, 2024.03)
๊ต๋ณด๋ฌธ๊ณ ์ค์๊ฐ ๊ฒ์ 1์ (2024.04.07)
Courses
Reviews
- Solving asynchronous architecture using RabbitMQ in one go
polynomeer
ยท
Solving Developer Job Seeking and Changing Jobs in One Go: Tips from a Senior Interviewer [Practical Guide]Solving Developer Job Seeking and Changing Jobs in One Go: Tips from a Senior Interviewer [Practical Guide]- Solving asynchronous architecture using RabbitMQ in one go
gguu
ยท
Solving Developer Job Seeking and Changing Jobs in One Go: Tips from a Senior Interviewer [Practical Guide]Solving Developer Job Seeking and Changing Jobs in One Go: Tips from a Senior Interviewer [Practical Guide]- Solving asynchronous architecture using RabbitMQ in one go
Posts
Q&A
step 4 - fanout ๊ด๋ จ ์ง๋ฌธ
์๋ ํ์ธ์. ์๊ฐ์๋ 1๋ฒ๋ถํฐ ๋ต๋ณ๋๋ฆฌ๋ฉด, ์์ ๊ตฌ์กฐ๋ง ๋๊ณ ๋ณด๋ฉด Topic์ด ๋ ์ข์ ์ ํ์ง์ ๋๋ค. ๋ค๋ง step4์์ Fanout์ ์ฌ์ฉํ ์ด์ ๋ ๋์ ๋ฐฉ์์ ๋ํ ์ค๋ช (ํ๋์ ๋ฉ์์ง๋ฅผ ๋ชจ๋ ๊ตฌ๋ ์์๊ฒ ๋ธ๋ก๋ ์บ์คํธ ํ๋ pub/sub์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ํํ)์ ๊ตฌํํ๊ณ ์ ํ๋ ์ธก๋ฉด๊ณผ ์ค๋ฌด์์ ๊ฐ์ ๋ด์ค ๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌํ๋๋ผ๋ ๊ฐ Consumer๊ฐ ๋ค๋ฅธ ๋ก์ง์ผ๋ก ์ฒ๋ฆฌ ํด์ผ ํ ๊ฒฝ์ฐ (์๋ฅผ๋ค๋ฉด 1๋ฒ์ DB์ ์ ์ฅ, 2๋ฒ์ ํธ์ ์๋ฆผ, 3๋ฒ์ ๋ก์ง ์ฒ๋ฆฌ ๋ฑ) Fanout์ ํตํด ๋์ผํ ๋ฉ์์ง๋ฅผ ๋ฐ์ ํ์์ ์ ์ฒ๋ฆฌํ ์ ์๋ค๋ ์ ์ด๋ ๊ฒ ๋๊ฐ์ง ์ธก๋ฉด์ ๊ณ ๋ ค์์ ๋น์ทํ ํํ์ ๋ฉ์์ง์ ๋ํด ์๋ก ๋ค๋ฅด๊ฒ ์ฒ๋ฆฌํ๋ ๋ค์์ consumer ๋ก์ fanout ๋ธ๋ก๋์บ์คํ ์ ์ง์ ํ๊ฑฐ๋ผ๊ณ ๋ณด์๋ฉด ๋ฉ๋๋ค. Step 4 ์์ ๋ ๋ด์ค๋ ํฐ๋ผ๋ ์๋๋ฆฌ์ค๋ฅผ ๋น๋ ธ์ง๋ง, ์ค์ ๋ก ๋ณด์ฌ์ฃผ๊ณ ์ ํ๋ ๊ฒ์ Fanout Exchange์ ๋ธ๋ก๋์บ์คํธ ๋์ ๋ฐฉ์์ ๋๋ค. 2๋ฒ์ ๊ฒฝ์ฐ pub/sub์ ํน์ง์ค ํ๋๋ ๊ตฌ๋ ์ ์ค๋ฆฝ์ฑ์ ๋๋ค. Consumer ์ค ํ๋๊ฐ ์ฅ์ ๊ฐ ๋๋ ๋๋จธ์ง ์ปจ์๋จธ๋ ์ํฅ์ ๋ฐ์ง ์์ผ๋ ์ด๊ฑธ ํ๋๋ก ํฉ์น๋ฉด ์ฅ์ ์ ๋ชจ๋ ๋ด์ค์ฒ๋ฆฌ๊ฐ ์ค๋จ๋๊ฑฐ๋ ํธ๋ํฝ ํญ์ฆ์ผ๋ก ์ธํด ์ง์ฐ์ด ๋ฐ์ํ ๋ ์ ์ฒด ์ดํ๋ฆฌ์ผ์ด์ ์ ์ํฅ์ ์ค๋๋ค. ์ด๋ฐ ๋ ๋ฆฝ์ฑ๊ณผ ํ์ฅ์ฑ (ํ๋์ ํ์ ์ด ์ถ๊ฐ๋๋ฉด consumer๋ง ์ถ๊ฐ ๋ฐ์ธ๋ฉ)์ ๊ณ ๋ คํด ์๋ก ์ํฅ์ ๋์ฃผ๊ณ ์ฒ๋ฆฌ๊ฐ ๋ณด์ฅ๋๋ ๊ฐ๋จํ ํํ์ ์์ ์ธ ๋ด์ค๋ ํฐ๋ก ์ค๋ช ํ์๊ณ , ๋ง์ํ์ ๋ฐฉ์๋ ๋์์ ํฉ๋๋ค. ๋ค๋ง ๋ฉ์์ง ์ฒ๋ฆฌ ์คํจ์ ์ํฅ ๋ฒ์, consumer ๋ด๋ถ ๋ถ๊ธฐ ๋ก์ง, ๋ ๋ฆฝ์ ์ค์ผ์ผ๋ง ๋ฑ์ ๊ณ ๋ คํ๋ฉด ํ๋ฅผ ๋ถ๋ฆฌํ๋ ๊ฒ์ด ์ด์ ์ธก๋ฉด์์ ์ด์ ์ด ์์ต๋๋ค.๋จ๊ณ๋ณ๋ก ์์ ๋ฅผ ์ฐ๊ฒฐํ๋ค๋ณด๋ ์์ ์ฑ๊ฒฉ์ด ๋ถ์กฑํ๊ฑฐ ๊ฐ์ต๋๋ค๋ง, ๋ฉ์์ง ์ฒ๋ฆฌ ์คํจ์ ์ํฅ ๋ฒ์๋ consumer ๋ด๋ถ ๋ถ๊ธฐ ๋ก์ง (๋ฉ์์ง ํ์ ์ ๋ฐ๋ผ ํ์ฑ ๋ฐ ํ๋จ ๋ถ๊ธฐ)์ ๊ณ ๋ ค, ๋ ๋ฆฝ์ ์ธ ์ค์ผ์ผ๋ง (ํน์ ๋ด์ค๋ง ํธ๋ํฝ์ด ํญ์ฆํ ๋) ๋ฑ์ ๊ณ ๋ คํ๋ฉด Fanout ์ผ๋ก ์ฐ๊ฒฐํ๊ณ consumer์ ์์ปค๋ฅผ ๋๋ฆฌ๋ ๋ฑ์ ์ผ๊ด์ฑ์ด๋ ์ ์ฐ์ฑ์ ์ฅ์ ์ผ๋ก ๋ณผ ์ ์์ต๋๋ค.๋ํ ๋จ์ผ ํ ์์ฒด๋ ๋ชจ๋ํฐ๋งํ ๋๋ ์ํ๊ตฌ๋ถ์ด fanout ๋ณด๋ค ์ด๋ ต์ต๋๋ค. ํ์ ๊ฒฉ๋ฆฌ ๋ ๋ฒจ์์ ์ฅ์ ๋ ๋ ๋ฆฝ ์ค์ผ์ผ๋ง, ๋ชจ๋ํฐ๋ง ์ด๋ฐ ์ ์ ๊ณ ๋ คํ ๋ fanout์ด ์ ํฉํ๋ค๋ผ๊ณ ๋ณด์๋ฉด ๋๊ฒ ์ต๋๋ค.๊ฐ์ฌํฉ๋๋ค.
- 0
- 2
- 35
Q&A
๋์ ํ ์ด๋ฆ ์ค์ ๋ฐฉ๋ฒ ๋ฐ SimpleRabbitListenerContainerFactory์ ์ฌ์ ์์ ๋ฐ๋ฅธ Retry ์ค์ ๋ฏธ์ ์ฉ ๊ด๋ จ ์ง๋ฌธ์ ๋๋ค.
์๋ ํ์ธ์. ์๊ฐ์๋ ๋์ ํ ๋ค์ ๋ฐ์ธ๋ฉ๊ณผ ๊ด๋ จํด์๋ SpEL๋ ๋์์ ํ๊ฒ ์ผ๋ (์ ๋ ํ ์คํธ๋ ์ํด๋ดค์ต๋๋ค) ์ ๊ฐ ์ดํดํ ์ง๋ฌธ์ ๋์ ํ ๋ฐ์ธ๋ฉ์ ํตํด ๋ธ๋ก๋ ์บ์คํธ ํ๋ ๋ฐฉ์์ด ๋ง๋์ง ๋ฌผ์ด๋ณด์ ๊ฑฐ ๊ฐ์ต๋๋ค. @Configuration public class RabbitMQConfig { // Bean์ผ๋ก ํ ์ด๋ฆ ์ ์ฅ (ํ ๋ฒ๋ง ์์ฑ) @Bean public String dynamicPublishNotificationQueueName() { return PUBLISH_NOTIFICATION_QUEUE + ":" + UUID.randomUUID().toString(); } @Bean public Queue publishNotificationQueue( @Qualifier("dynamicPublishNotificationQueueName") String queueName) { // ์ฃผ์ ๋ฐ์์ ์ฌ์ฉ return new Queue(queueName, false, true, true); // durable=false, exclusive=true, autoDelete=true } @Bean public FanoutExchange publishNotificationExchange() { return new FanoutExchange(PUBLISH_NOTIFICATION_EXCHANGE); } @Bean public Binding publishNotificationBinding( Queue publishNotificationQueue, FanoutExchange publishNotificationExchange) { return BindingBuilder .bind(publishNotificationQueue) .to(publishNotificationExchange); } } @Component public class NotificationSubscriber { @RabbitListener(queues = "#{@dynamicPublishNotificationQueueName}") public void consumePublishNotificationMessage(Notification notification) { notificationService.publishNotification(notification); } }์ด๋ฐ์์ผ๋ก ์์ฑํด์ 3๊ฐ์ ์ธ์คํด์ค๋ฅผ ๋ฐํ์ผ๋ก ํ ์คํธ ํด๋ณด์๊ณ , ๋ก๊น ์ ์ถ๊ฐํด์ ํ ์คํธ ํด๋ณด์๋ฉด ์ข์๊ฑฐ ๊ฐ์ต๋๋ค. ๋๋ฒ์งธ ์ง๋ฌธ์ retry ๊ด๋ จํด์๋, SimpleRabbitListenerContainerFactory ๋ฅผ ์๋์ผ๋ก ์ ์ํ๊ณ RabbitListenerContainerFactoryConfigurer.configure ๋ฅผ ๋ณ๋๋ก ํธ๋ค๋งํ์ง ์์ผ๋ฉด Spring boot์ property๊ฐ ์๋ํ์ง ์๋๋ค๊ณ ์๋๋ค๊ณ ์๊ณ ์์ต๋๋ค. ์๋์ ์ฝ๋๋ฅผ ๋ณด์๊ณ ํ ์คํธ๋ฅผ ํ๋ฒ ํด๋ณด์๊ธฐ ๋ฐ๋๋๋ค. @Bean public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory( ConnectionFactory connectionFactory) { SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory(); factory.setConnectionFactory(connectionFactory); // configurer.configure()๋ฅผ ํธ์ถํ์ง ์์! // YAML ์ค์ ์ด ์ ํ ์ ์ฉ๋์ง ์์ return factory; }์ด ์ฝ๋๋ ์๋์ ๊ฐ์ด ์ ์ํ ์ ์์ต๋๋ค.@Bean public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory( ConnectionFactory connectionFactory, RabbitListenerContainerFactoryConfigurer configurer) { // โญ ์ฃผ์ SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory(); // Boot ์ค์ ๋จผ์ ์ ์ฉ configurer.configure(factory, connectionFactory); // ์ถ๊ฐ ์ปค์คํฐ๋ง์ด์ง (Boot ์ค์ ๋ฎ์ด์ฐ๊ธฐ) factory.setDefaultRequeueRejected(false); factory.setMessageConverter(myCustomConverter()); return factory; }configurer์ configure ์ ๋๋นํฉํ ๋ฆฌ์ ์ปค๋ฅ์ ํฉํ ๋ฆฌ๋ฅผ ํตํด application.yml์ ์ค์ ์ ๋ฐ์ํด์ผ ํฉ๋๋ค. ์๊ฑด์ด๋ ํ๊ฒฝ์ด ์ ํํ์ง ์์์ ๋ค์ ์์ธํ๊ฒ ๋ต๋ณ ๋๋ฆฌ๊ธฐ ์ด๋ ค์ด ์ ์ฐธ๊ณ ํ์๊ธฐ ๋ฐ๋๋๋ค.
- 0
- 1
- 74
Q&A
RabbitMQ ์ต์ค์ฒด์ธ์ง ์ง๋ฌธ
์๋ ํ์ธ์ ์๊ฐ์๋. ์ง๋ฌธํ์ ๋ด์ฉ์ด ์ ํํฉ๋๋ค. Direct exchange์ ํด๋นํ๋ ๋ด์ฉ์ธ๋ฐ ์ ๊ฐ ์ฐฉ๊ฐํ๊ณ ์๋ชป ์ค๋ช ํ๋ค์. ๊ฐ์ ์๋ฃ ์์ ํ๊ฒ ์ต๋๋ค. ์ข์ ๋ด์ฉ ์๋ ค์ฃผ์ ์ ์ ๋ง ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
- 1
- 3
- 69
Q&A
๊ฐ์ ์๋ฃ ๊ด๋ จ
์๋ ํ์ธ์. ์๊ฐ์๋. 2๊ฐ์ ๊ฐ์์๋ฃ ๊ณต์ง๊ฐ ์์๋๋ฐ ๋ชป๋ณด์ จ๋๋ด ๋๋ค. https://2dell.notion.site/RabbitMQ-1792d6475f85808eaf95c4b66b4bf7dc?pvs=4 ์ฐธ๊ณ ํ์๊ธฐ ๋ฐ๋๋๋ค. ๊ฐ์ ์๊ฐํด์ฃผ์ ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
- 0
- 2
- 67
Q&A
์ง์์ ์์ฑ ๊ฐ์ด๋์ ์ํ์ด๋ ฅ์ ์ดํด๋ณด๊ธฐ ๊ฐ์์ง๋ฌธ
์๋ ํ์ธ์. ์๊ฐ์๋ํฌํธํด๋ฆฌ์ค๋ ํ์ฅ์ ํ๋์ ํ๋ก์ ํธ๊ฐ ๋ค ๋ค์ด๊ฐ๋๋ก ํต์ฌ์ ์ ๋ฆฌํด์ ๋ณด์ฌ์ค์ผ ํฉ๋๋ค.๋ฌผ๋ก ์ ์ ์ผ ๊ฒฝ์ฐ ๋ง์ ๋ด์ฉ์ ๋ณด์ฌ์ฃผ๊ณ ์ถ์ ๋ง์์ด ์๊ฒ ์ผ๋, ์๋ฅ๋ฅผ ๊ฒํ ํ๋ ์ ์ฅ์์๋ ๋ด์ฉ์ด ๋ง๋ค๊ณ ๋ ๋ณด์ง๋ ์๊ณ ์คํ๋ ค ์๋ฅ๊ฐ ๋ง์์ ธ์ ์ ์ ์ค์ํ๊ฒ ๋ถ๊ฐ๋์ด์ผ ํ ๋ด์ฉ์ด ๋ณด์ด์ง ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.๋ฐ๋ผ์ ์ด๋ ฅ์์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋จ์ํ๊ณ ๋ช ํํ๊ฒ ์์ฑํ๋๊ฒ ์ค์ํฉ๋๋ค. ๊ฒฝ๋ ฅ์ง์ธ ๊ฒฝ์ฐ ํฌํธํด๋ฆฌ์ค๋ ํ์์์ต๋๋ค. ๊ฒฝ๋ ฅ๊ธฐ์ ์์ ์์ธํ ์ ์ผ๋ฉด ๋๊ณ , ๋ณธ์ธ์ด ์ง์ ํ ์ ๋ฌด๋ผ๋ฉด ๊ทธ์ ๋ฐ๋ฅธ ์ค๋ช ๋ ์ง์ํ๊ณ ์ ํ๋ ํ์ฌ์ ์ ๋ฌด ๋ฐฉํฅ์ ๋ง๊ฒ ์์ฑํด์ ์ดํํด์ผ ํฉ๋๋ค. ์ฐ๊ด๊ด๊ณ๊ฐ ์๋ค๋ฉด ๋์ฑ ์ข๊ฒ ์ฃ ? ๋ฌด๋ฃํธ์๋ ํ์ฌ ๊ณต๊ณ ๋ถ์์ด ๋ค์ ์ ์ ๋ถ๋์ผ๋ก ์ฌ๋ผ๊ฐ์์ต๋๋ค๋ง, ์ฑ์ฉ ๊ณต๊ณ ๋ฅผ ๋ถ์ํด์ ๊ทธ์ ๋ง๋ ๋ฐฉํฅ์ผ๋ก ์ด๋ ฅ์๋ฅผ ์์ ํด์ ์ ์ถํด์ผ ํฉ๋๋ค. ์ฐธ๊ณ ํ์๊ธฐ ๋ฐ๋๋๋ค.
- 0
- 2
- 88
Q&A
์ธ์ฆ ์๋ฌ
์๋ ํ์ธ์. ๋ฉ์์ง ์๋ฌ ์์ฒด๋ RabbitMQ์ ์ธ์ฆ ์๋ฌ ์ธ๋ฐ์, ๋์ปค ps์ log๋ฅผ ํ์ธํด๋ณด์๊ณ , management ์ ์ ๊ทผํด๋ณด์๊ธฐ ๋ฐ๋๋๋ค. (admin/admin์ผ๋ก http://localhost:15672์ ์ ๊ทผ๋๋์ง) ์๋ ๊ธฐ๋ณธ ๊ณ์ ์ guest/guest ์ ๋๋ค. ๊ฐ์์ ๋์จ๋๋ก RabbitMQ๋ฅผ ๋จผ์ ์ค์นํ ๋ค ํ ์คํธ ํด๋ณด์๊ณ ์ ๋๋ก ๋๋ค๋ฉด ๋์ปค ์ค์ ์ ๋ฌธ์ ์ด๋ฏ๋ก (๋ก๊ทธ๋ ๊ถํ ์คํ ํ์ด๋ฐ์ผ๋ก ์ธํ ์๋ฌ)์ผ ์ด ๋ถ๋ถ์ ์ฒดํฌ ๋จผ์ ํ์๊ณ ๋ฒ์๋ฅผ ์ค์ฌ์ค๋ฅ ์ฌํญ์ ์์ธกํด๋ด์ผ ํฉ๋๋ค.๊ตฌ๊ธ์์ docker rabbitmq access reused error ๋ก ๊ฒ์ํ์๋ ์์ ์ธ๊ธํ ๋ฌธ์ ๋ค์ ํด๊ฒฐ๋ฐฉ๋ฒ์ด ๋์ค๋ฏ๋ก ์ฐธ๊ณ ํด๋ณด์๋, ๋จผ์ ์ด๋๋ฏผ ์ฝ์ ๋ถํฐ ์ ๊ทผ ๋๋์ง, ๊ณ์ ์ด ๋ง๋์ง ๋ถํฐ ์ ๊ฒ ํด๋ณด์๊ธฐ ๋ฐ๋๋๋ค. ๊ฐ์ฌํฉ๋๋ค.
- 0
- 2
- 72
Q&A
RabbitMQ์์์ ํธ๋์ญ์ ๋ฉ์์ง ์ง๋ฌธ
์๋ ํ์ธ์. ์๊ฐ์๋ DB์ RabbitMQ๊ฐ์ ๋ฉ์์ง ๋ธ๋ก์ปค์ ํธ๋์ญ์ ์ ์๋ก ๋ ๋ฆฝ์ ์ ๋๋ค.๊ทธ๋์ RabbitMQ์์ ํธ๋์ญ์ ์ ๊ตฌํํ๋ ค๋ฉด DB์๋ ๋ณ๋๋ก ์์ฒด์์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ผ๋ก "์ฒ๋ฆฌ๋ ๊ฐ๋ฅ" ํฉ๋๋ค. 19๊ฐ ์๋ฃ์ ๋์์๋๋ฐ, amqp-client์ ์์กด์ฑ (starter-amqp์ ํฌํจ)channel.txSelect():ํธ๋์ญ์ ์์. ์ดํ ๋ชจ๋ ๋ฉ์์ง ์ ์ก ์์ ์ ์ด ํธ๋์ญ์ ๋ด์์ ์คํ.channel.txCommit():ํธ๋์ญ์ ์ปค๋ฐ. ๋ชจ๋ ์์ ์ด ์ฑ๊ณต์ ์ผ๋ก ์ํ๋์์์ RabbitMQ์ ์๋ฆผ.channel.txRollback():ํธ๋์ญ์ ๋กค๋ฐฑ. ํธ๋์ญ์ ๋ด ์์ ์ ๋ฌดํจํํ๊ณ ๋ณ๊ฒฝ์ฌํญ์ ๋๋๋ฆผ.์ด ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌ๋ ๊ฐ๋ฅํฉ๋๋ค๋ง, ์์๋ค์ํผ ๋ฉ์์งํ๋ ๋น๋๊ธฐ ํ๊ฒฝ์์ ๋ถ์ฐ ๋ฉ์์ง์ ์ฒ๋ฆฌํ๋๋ฐ ํ์ํ ๋ฏธ๋ค์จ์ด์ด๊ธฐ ๋๋ฌธ์ ์ด ๋ฐฉ์์ผ๋ก ๊ตณ์ด ํธ๋์ญ์ ์ ๊ตฌํํ๋๊ฒ ์๋ฏธ์๋? ๋ผ๋ ๊ด์ ์์ ๋ณด๋ฉด ๊ตฌํ ๋น์ฉ๋๋น ์คํจ์ฑ์ด ๋จ์ด์ง๋ ํธ์ ๋๋ค๋ฐ๋ผ์ 19๊ฐ์์ ์ค๋ช ํ๋ ๋ฐ์ ๊ฐ์ด Outbox ํจํด(db์ ๋ณ๋๋ก ์ ์ฅ ํ ๋ค ๋ค๋ฅธ ํ๋ก์ธ์ค๋ฅผ ํตํด ๋ฉ์์ง ์ฒ๋ฆฌ)์ด๋ TCC์ ๊ฐ์ ํํ์ ์ฌ์๋์ ๋ณด์ ์ ํตํ ๋ฉฑ๋ฑ์ฑ์ ๋ณด์ฅํ๋๊ฒ ํจ์ฌ ์ ๋ฌด์ ์ผ๋ก๋ ์ข์ ์ ํ์ด๋ผ๊ณ ํ๋จํฉ๋๋ค. ์๊ฐ์ด ์ผ๋ง ๋จ์ง ์์ผ์ จ๋ค์. ๋ง๋ฌด๋ฆฌ ์ ํ์๊ธฐ ๋ฐ๋๋๋ค. ๊ฐ์ฌํฉ๋๋ค.
- 0
- 2
- 97
Q&A
๊ธฐ์ ๋ถ์ - ๋ฐฐํฌ์์คํ ์ ๊ตฌ์ถํด์ผํ๋ค๋ฉด? ๋ถ๋ถ์ ๊ฐ์๊ฐ ์ ๊ณต๋์ง ์๋๊ฑด๊ฐ์?
์๋ ํ์ธ์. ์๊ฐ์๋๋น๋ ๋ฐฐํฌ ๊ด๋ จ ์ฌํญ์ ์ ๊ฐ ์์์ ์๋๋ฆฌ์ค๋ฅผ ํตํด CI/CD๋ฅผ ๊ฐ๋ฐํ๋ค๋ฉด ์ด๋ป๊ฒ ์์ผํ ์ฒ๋ฅผ ๋ถ์ํด์ ์ ์ฉํ ์ ์๋๊ฐ๋ฅผ ๊ฐ์์ผ๋ก ์ค์ ํด์ ์ค๋ช ํด๋ณด๋ ค๊ณ ๋ฃ์์ต๋๋ค๋ง, ์ค์๋์ ๋นํด ๊ฐ์ ๋ถ๋์ด ๋ค์ ๊ณผํ๊ณ ๋ฉด์ ์์ ํ์ํ ๋ถ๋ถ์ ๊ฐ๋ ์ ๊ฐ์ ์๋ฃ์ ๋์จ ํค์๋๋ง ์ดํดํ์ ๋ ๋ฌด๋ฆฌ์๊ฒ ๋ค ์๊ฐํด์ ์๋ต ํ์ต๋๋ค.ํด๋น ์ค๋ช ์ด 19๊ฐ์์ ๋ค์ ์ธ๊ธ์ ๋์๋๋ฐ, ๋ชฉ์ฐจ์์ ๊ด๋ จ ๋ด์ฉ์ ์ ๋ฐ์ดํธ ํ์ง ๋ชปํ๋ค์. ํผ๋์ ๋๋ ค ์ฃ์กํฉ๋๋ค.๋ธ๋ฃจ๊ทธ๋ฆฐ/์นด๋๋ฆฌ ๋ฐฐํฌ ์ ๋์ ์ฐจ์ด์ ํน์ง ๋ฑ์ ์ดํดํ์๋ฉด ๋๋๋ฐ ์ฌ๊ธฐ์ ๋ํด์ ๋ฐฐํฌ ์์คํ ์ ๊ฐ๋ฐ ํ ๋ ๋ถ์ํ๊ณ ์ ์ฉํด์ผ ํ ๊ธฐ๋ฅ๋ค์ ์ ๋ฆฌํ๋๊ฑด ๊ธฐ์ ๋ฉด์ ์ ํฐ ๋์์ ์๋ ๊ฑฐ ๊ฐ์ ๊ฐ์๋ฅผ ๋ฃ๋ ์ ์ฅ์์ ํจ์จ์ ์๊ฐ ๋ถ๋ด์ ๋์ด ๋๋ฆฌ๊ณ ์ ๊ณผ๊ฐํ ์๋ตํ์ผ๋ ์ํด ๋ถํ๋๋ฆฝ๋๋ค. ๊ฐ์ฌํฉ๋๋ค.
- 0
- 2
- 66
Q&A
Nginx์ ๋ก๋๋ฐธ๋ฐ์์ ๊ด๊ณ
์๋ ํ์ธ์. ์ง๋ฌธ ์๋์ ์ ๋ ๋ชป๋ฐ์์ ๋ต๋ณ์ด ๋ค์ ๋ฆ์ด์ง ์ ์ฃ์กํฉ๋๋ค. ๊ฐ์์์ ์ธ๊ธํ Nginx๋ฅผ ํตํด ๋ถํ๋ถ์ฐ์ ํ๋ค์ ์ดํ์ ๋ก๋ ๋ฐธ๋ฐ์ฑ ๊ธฐ๋ฒ์ ๋ํด์ ๋ฐ๋ก ์ค๋ช ์ ์ด์ด์ ํ์์ต๋๋ค. ์น ์๋ฒ ์์ฒด์ ๋ก๋ ๋ฐธ๋ฐ์ฑ์ ํตํด ๋ถํ๋ถ์ฐ์ ํ ์ ์๋ค๊ณ ์ดํดํ์๋ฉด ๋๊ฒ ์ต๋๋ค.์ฅํ์ ๊ทธ๋ฆผ์์ผ๋ก๋ ๋ณ๋์ ๋ก๋๋ฐธ๋ฐ์ ์ฅ๋น๊ฐ ์์์ผ๋, ์์ ๊ฒฝ์ฐ ์น ์๋ฒ๋ค๋ก๋ ์ถฉ๋ถํ ๋ก๋๋ฐธ๋ฐ์ฑ์ ๊ตฌ์ฑํ ์ ์๋ค๋ ๋ด์ฉ์ ๋๋ค. ๊ฐ์ฌํฉ๋๋ค.
- 0
- 1
- 91
Q&A
์๋ ํ์ธ์ "์น์ 2 8. Consumer๊ฐ ์์ ๋ถ๋ฐฐ" ์์ ์ง๋ฌธ ์์ต๋๋ค.
์๋ ํ์ธ์. ์๊ฐ์๋ ์ปจ์๋จธ๊ฐ ๋ถ์ ์ํ์์ ์ ์์ ์ผ๋ก ๋ฉ์์ง ํ์์ ์ปจ์๋จธ์ ์ ๋ฌ ๋๋ฉด ์ ํํ๊ฒ๋ ์ฒ๋ฆฌ์ค์ธ ์ํ์ ๋๋ค.๋ด๋ถ์์ ๋ฐ๋ก ์ค์ ํ ๋ก์ง (์ฌ๊ธฐ์๋ ์ฌ๋ฆฝ ํ ์ฒ๋ฆฌ) ์ดํ ์์ง์ด ์๋ฃ๋๊ณ ack ๊ฐ ํธ์ถ๋๊ณ ์ด๋๊ฐ ์์ง์ด ์๋ฃ๋ ์์ ์ด ๋ฉ๋๋ค. ๋ก๊ทธ๊ฐ ๋นจ๋ฆฌ ์ฌ๋ผ์์ ๊ตฌ๋ถ์ด ์ด๋ ค์ธ ์ ์์ผ๋ ์ด ๋จ์๋ก ๋๊ธฐ๋ฅผ ์ค ๋ถ๋ถ์ด ์์ง ์ฒ๋ฆฌ๊ฐ ์๋ ์ํ์ด๊ณ , ์ด ํ์ ๋ฉ์์ง๊ฐ ์ถ๋ ฅ๋ ์ดํ์ ack ๊ฐ ์ ๋ฌ๋๋ฉด ์๋น๊ฐ ์๋ฃ๋ ์ํ์ ๋๋ค.ํด๋น ๊ฐ์๋ ๋ฉ์์ง์ ์ ๋ฌ๊ณผ ์ฒ๋ฆฌ, ์ฒ๋ฆฌ ์๋ฃ ํ ํ๋ก์ธ์ค๋ฅผ ์ค๋ช ํ ๊ฒ์ด๋ฏ๋ก ์ด ๋จ์ ์ฒ๋ฆฌํ๋ ๋ถ๋ถ์ด ์ค์ ๋น์ฆ๋์ค ์์ญ์ ๋ก์ง์ ๋์ฒดํด์ ์์ง ์๋ฃ ์ด์ ์ ๋ก์ง์ ์คํํ๊ณ ์คํ ํ act ๊ฐ ๋ ๋ผ๊ฐ๊ณ ์ฒ๋ฆฌ์๋ฃ(์์ง์๋ฃ) ๋๋ค๊ณ ์ดํดํ์๋ฉด ๋ฉ๋๋ค. ๊ฐ์ฌํฉ๋๋ค.
- 0
- 2
- 78






![Thumbnail image of the Solving Developer Job Seeking and Changing Jobs in One Go: Tips from a Senior Interviewer [Practical Guide]](https://cdn.inflearn.com/public/courses/334899/cover/aa860a68-f4f2-4554-91bb-2dd48b47f14d/334899.png?w=148)