자바스크립트는 싱글 스레드 언어
다. 즉, 한 번에 한 가지 작업만 할 수 있다는 뜻이다.
웹 서비스는 다양한 동작이 필요하다. DB 읽기, 파일 읽기, API 요청 보내기, 사용자 입력...
이 작업 하나하나가 끝날 때까지 기다려야 한다면 어떨까? 파일 하나가 다운로드 완료 될 때까지 기다려야 다음 파일을 받을 수 있고, 파일들이 다운로드 되는 동안에는 다른 동작을 아무것도 할 수 없을 것이다. 그래서 자바스크립트에서는 비동기asynchronous로 작업을 처리하는 경우가 많다. 그렇구나~ 하고 넘어가기에는 또 이상한 점이 있다. 비동기로 작업을 하려면 스레드가 두 개 이상 있어야 하는 거 아닌가? 하는 점이다.
쉽게 말해서 카페에 직원이 두 명은 있어야 한 명이 주문 받고 한 명은 음료 제조를 할 텐데, 직원이 하나 뿐이라면 어떻게 작업 분담이 가능하냐는 것이다.
트랜잭셔널 아웃박스(Transactional Outbox) 패턴 알아보기
MSA구조의 서비스들이 있다고 생각해보자. 하나의 서비스에서 데이터를 변경하면 다른 서비스들에게도 변경되었음을 알려야 하는 경우가 많다. 예를 들어 주문 서비스에서 주문이 생성되었을 때, 결제 서비스와 재고 서비스가 이 이벤트를 감지해야 결제와 재고 차감을 할 수 있다. 이를 위해 메시지 브로커(Kafka, RabbitMQ)를 사용한다고 치자. 어떤 문제가 발생할 수 있을까?
스프링 트랜잭션 전파 쉽게 이해하기
트랜잭션이란 데이터베이스 작업을 하나의 묶음으로 관리하는 기능
이다. 이 묶음은 한 배를 탄 운명이라서 안에 몇 가지 내부 기능이 들어 있든 둘 중에 하나다. 전부 성공하거나, 전부 실패하거나.
예를 들어, ATM에서 계좌이체를 한다고 생각해보자. A의 계좌에서 10만원이 출금되고
B의 계좌에 10만원이 입금되어야 한다.
만약 출금만 되고 입금이 되지 않으면 심각한 문제다. 이렇게 모든 작업이 다 성공해야 성공으로 인정하는 것을 트랜잭션이라고 한다.
트랜잭션의 4가지 특성인 ACID도 위 개념을 이해하고 나면 자연스럽게 이해가 된다.
코드 리뷰는 어떻게 해야할까?
남에게 코드 리뷰를 받는 건 왜 항상 긴장되는 걸까? 내 작업물과 나를 동일시 하면 안 된다는 건 알고 있지만, 그래도 열심히 짠 코드에 생각지도 못했던 결함이 있었다는 걸 남을 통해 알게 되는 건 참 감사하면서도 부끄러운 경험이다ㅠ_ㅠ. 하지만 이런 부끄러움이 있어야 더 성장하려는 의지가 생기는 거겠지. 이번에는 좋은 코드 리뷰를 하기 위해 고려해야 할 것들에 대해 정리해보았다. 내가 받는 코드 리뷰도 중요하지만, 남에게 해 줄 때도 성의를 보여야 한다는 것을 잊지 말자!
[독서기록] 적을 만들지 않는 대화법
📖 제목 : 적을 만들지 않는 대화법
🙋♂️ 저자 : 샘 혼
어릴 땐 논쟁을 하면 무조건 이겨야 했다. 조금 더 철이 들고 나니 때로는 관계를 위해 내가 옳아도 져 줘야 할 때가 있다는 것을 알게 되었다. 하지만 여전히 종종 이럴 땐 어떻게 말하는 게 제일 나았을까
하고 고민하게 되는 순간들이 있다. 일부러 적을 만들고 싶은 사람은 아무도 없지만, 내 의견을 관철시키면서 관계도 유지하려면 많은 노력이 필요하다. 이 책은 상대방과 내 마음을 동시에 살피는 방법을 여러가지 사례들과 함께 소개하고 있다. 오래 기억하고 싶은 몇 가지 사례들을 정리해둔다.
Native Query, Query Method, QueryDSL, JPQL 차이와 장단점 알아보기
MyBatis를 쓸 때는 항상 SQL을 작성해서 사용해야 했지만 JPA를 사용하면 몇 가지 선택지가 생긴다. Native Query, Query Method, QueryDSL, JPQL
인데, 이 각각의 방식들이 어떻게 생겼고 장단점은 뭔지, 어떤 경우에 사용하면 좋은지에 대해 정리해보자.
[독서기록] 운명을 바꾸는 말하기 수업
📖 제목 : 운명을 바꾸는 말하기 수업
🙋♂️ 저자 : 이영선
어디가서 말 못한다는 말은 안 듣고 사는데 최근 들어 여기저기 면접을 보러 다니면서 고민이 생겼다. 두괄식으로, 핵심만 간결하게 전달
해야 한다는 걸 머리로는 아는데 잘 보이고 싶은 곳일수록 바보 같이 대답하게 되어서다. 좋아하는 사람 앞에서 더 멍청한 행동을 하게 되는 것처럼, 면접관들에게 구구절절하게 불필요한 설명을 덧붙여가며 어떻게든 나에 대해 한 줄이라도 더 설명하려 하는 내 모습이 싫어서 말하기 방법에 대한 책이라도 읽어보자는 결심을 했다.
그리고 인성 면접의 단골 질문인 동료와 의견이 다를 때 어떻게 대처 하시나요?
에 대해서도 고민하게 된 요즘이다. 나는 데이터 기반으로 더 나은 방법을 채택하는 데에 거부감이나 서운함이 없다. 일을 할 때 감정적으로 대처하는 동료를 더 어려워한다. 하지만 이건 일이니까 감정을 완전히 배제한 대화
를 하는 게 정말 맞는 걸까? 하는 의문을 오래 전부터 가지고 있었다. 고민 끝에 내 나름대로의 대처 방법을 가지게 되었고 커뮤니케이션에서도 실제로 많은 효과를 보았지만, 왜 그래야 하는지를 설명하자니 어려웠다. 이 책에는 왜 그렇게 말해야 하는지
에 대한 이야기가 실려 있다. 아래는 인상적이었던 부분을 내 경험과 함께 정리한 내용이다.
Node.js에 저장된 데이터에 인덱스 붙이기, 데이터 삭제하기 4
🙋♂️1. Node.js로 5분만에 API 만들기
🙋♂️2. Node.js로 POST API 만들기
🙋♂️3. Node.js로 데이터 저장하기
MongoDB에는 id를 Auto Increment 하는 기능이 없다. 게시판의 글번호 같은 기능을 만들려면 따로 구현이 필요한데, 이번에 어떻게 하는지 알아보자. 그리고 게시물을 삭제하는 것까지 해 볼 생각이다(Update, Delete).
Node.js로 데이터 저장하기 3
NodeJS로 간단한 GET/POST API 구현을 해 보았으니 이번에는 데이터를 저장하고 가져오는 것 까지 해보자. DB는 MongoDB를 사용했지만 아무거나 상관없다.
🙋♂️1. Node.js로 5분만에 API 만들기
🙋♂️2. Node.js로 POST API 만들기
RDBMS와 NoSQL의 차이와 장단점을 알아보자
요즘 구인 공고를 보면 온갖 NoSQL 써본 사람🙋♂️을 구하는 곳이 무척 많다. NoSQL의 장점이 대체 뭐길래 그렇게들 쓰려고 하는지, 반대로 RDBMS를 쓰는 이유는 뭔지 정리해보려고 한다.