개발자

MySQL과 비동기 동기에 관한 궁금증

2022년 12월 18일조회 617

생각없이 코드를 치다가 문득 궁금해서 질문을 남깁니다. 몽고 디비를 사용할 때 습관적으로 DB에서 원하는 데이터를 가져올때 비동기처리를 했었고 지금은 mysql을 사용하는데 마찬가지로 query를 날려서 데이터를 가져오는 작업은 시간이 걸리는 작업이라 생각해서 async await을 사용해 비동기 처리를 하려고 하는데 반드시 DB에 쿼리를 날리는 일은 비동기적 처리를 해야하는것인지? 아니면 상황에 따라 다른것인지… 상황에 따라 다르다면 그 상황의 예를 알려주실수 있으실까요?

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 1

황민호님의 프로필 사진

데이터베이스에 쿼리를 보내고 응답을 받기 전까지 다른 코드를 계속 실행할 수 있기 때문에 유용할 수 있다고 봅니다. 이는 애플리케이션의 전체 성능과 응답 시간을 향상 시킬 수 있죠. 그러나 데이터베이스 쿼리할 때 반드시 비동기 처리를 해야 하는 것은 아닙니다. 동기식 데이터베이스 라이브러리를 사용중이고 애플리케이션 쿼리가 완료되기를 기다리는 동안 다른 작업을 수행할 필요가 없는 경우 쿼리를 보내고 결과가 올 때까지 기다릴 수 있겠죠. 비동기적 처리를 해야하는지 고려해 볼 부분은 몇 가지 있을 것 같습니다. 먼저 사용 중인 데이터베이스 유형에 따라 달라질 것 같습니다. MongoDB와 같은 NoSQL 일부는 여러 요청을 동시에 처리할 수 있도록 설계되어 있어서 비동기식으로 액세스할 때 더 효율적일 수 있습니다. 반면에 MySQL과 같은 일부 데이터베이스 시스템은 동기적으로 엑세스할 때 더 효율적일 수 있습니다. 두번째는 애플리케이션에서 데이터베이스 응답을 기다리는 동안 다른 많은 작업을 수행해야 하는지 따져볼 수 있을 것 같습니다. 이 경우 비동기가 더 유리하겠구요. 세번째는 데이터베이스 라이브러리에 따라 비동기를 지원하도록 설계되었는지 고려해보아야 합니다. async await 를 쓰산다고 하신걸 보니 javascript 인것 같은데요. java나 spring 개발에서는 비동기 처리를 위해 R2DBC 를 쓰는 것이 고려되고 있습니다. 마지막으로 전송되는 쿼리 특성을 고려해보면 좋을 것 같네요. 많은 수의 복잡한 쿼리를 데이터베이스에 요청하는 경우 비동기 처리를 하게 되면 전체 성능이 낮아질 수 있습니다. 반면에 주로 간단한 쿼리를 비동기로 처리한다면 효율이 더 좋아지겠죠. 답변이 도움이 되셨길 바랍니다.

profile picture

익명

작성자

2022년 12월 18일

그러면 한 어플리케이션 안에서도 쿼리의 특성에 따라 어느 쿼리는 비동기로 처리하거나 다른 쿼리는 동기처리 하거나 둘을 혼용해서도 쓸 수 있는건가요?

황민호님의 프로필 사진

황민호

Kakao General Developer2022년 12월 18일

쿼리를 동기식으로 처리할지 비동기식으로 처리할지는 개발자의 구현에 따라 결정되는거죠.

profile picture

익명

작성자

2022년 12월 18일

감사합니다. 공부하는데 큰 도움이되었습니다.

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!