[운영체제] 동기(Sync)와 비동기(Async) 그리고 SpringBoot 활용

하하하하하하성진·2023년 11월 26일

운영체제

목록 보기
1/2

동기와 비동기 차이는?

동기(Sync)는 요청과 응답의 순서가 보장된다. 이전 요청에 대한 응답이 마무리 되기 전까지는 다음 요청을 처리 할 수 없다. 반대로 비동기(Async)는 요청과 응답의 순서 상관없이 이전 요청에 대한 응답이 마무리 되기 전에 요청이 가능하고 응답 순서도 지키지 않아도 된다.

동기(Synchornous)란?

  • 작업을 동시에 할 수 없고 한가지 작업이 끝나야 다음 작업을 하는 방식.
  • 웹페이지 전체를 업데이트 하는 방식
    (ex : 게시글을 작성하고 "출간하기" 버튼을 누르면 게시글이 올라간 페이지가 나타나기 전까지 다른 작업을 할 수 없는 경우)

장점

  • 동기(Sync) 통신은 비동기(Async) 통신보다 코드를 작성하고 이해하는 것이 쉽다.
  • 요청과 응답이 순차적으로 이루어지기 때문에 코드의 간결성과 직관성을 유지할 수 있다.
  • 동기(Sync) 통신은 요청을 보낸 후에 응답을 받아야 다음 작업을 수행하기 때문에 요청과 응답의 순서를 보장할 수 있다. 예를들어 A와 B라는 두 개의 요청을 보냈으면, 반드시 A의 응답이 먼저 도착하고 B의 응답이 나중에 도착한다.
  • 동기(Sync) 통신은 요청과 응답이 연결되어 있기 때문에, 에러가 발생했을 때 에러에 대한 처리가 쉬울 수 있다

단점

  • 전체 페이지를 다시 로딩하기 때문에 서버와의 통신량이 많아지고, 자원과 시간이 낭비될 수 있어, 웹페이지의 속도와 성능이 저하될 수 있다. 
  • 따라서 화면이 깜빡거리거나 멈추는 현상이 발생하기 때문에 사용자가 불편함을 느껴 사용자 경험이 떨어질 수 있다. 
  • 요청과 응답이 동시에 일어나야 하기 때문에 요청을 보낸 후에는 다른 작업을 할 수 없다. 예를 들어, 네이버 메일에서 메일을 보내는 동안 다른 메일을 읽거나 쓸 수 없다.

비동기(Asynchornous)란?

  • 모든 작업을 동시에 처리할 수 있는 방식
  • 웹페이지 일부만 업데이트하는 방식
    (ex: 게시글에 댓글을 작성할 때 전체 페이지를 새로고침 하지 않아도 댓글 부분만 없데이트 되는 경우)

장점

  • 전체 페이지를 다시 로딩하지 않고 필요한 부분만 업데이트하기 때문에 웹페이지의 속도와 성능을 향상시킬 수 있다.
  • 서버와의 통신량이 줄어들고, 자원과 시간을 절약할 수 있다.화면이 깜빡거리거나 멈추지 않고 부드럽게 작동하기 때문에 사용자 경험을 개선시킬 수 있다. 
  • 요청과 응답이 동시에 일어나지 않아도 되기 때문에 요청을 보낸 후에 다른 작업을 할 수 있다.

단점

  • 비동기(Async) 통신은 동기(Sync) 통신보다 코드를 작성하고 이해하는 것이 어려워 코드의 복잡도가 증가할 수 있다.
  • 비동기(Async) 통신은 요청을 보낸 후에 응답을 기다리지 않고 다음 작업을 수행하기 때문에, 요청의 처리 속도에 따라 응답이 뒤죽박죽 될 수 있어 요청과 응답의 순서를 보장할 수 없다. 예를 들어, A와 B라는 두 개의 요청을 보냈는데, B의 처리가 더 빨라서 B의 응답이 먼저 도착하는 경우가 있을 수 있다.
  • 비동기(Async) 통신은 요청과 응답이 분리되어 있기 때문에, 에러가 발생했을 때 어떤 요청에서 에러가 발생했는지 파악하고 처리하는 것이 쉽지 않을 수 있다.

SpringBoot 비동기 처리 어노테이션

AnnotationDescription
@EnableAsync활성 비동기 처리를 가능하게 하는 어노테이션.
@Async메서드를 비동기적으로 실행하도록 지정하는 어노테이션.
@Async("customExecutor")특정 Executor를 사용하여 메서드를 비동기적으로 실행하도록 지정하는 어노테이션.
@Async("customExecutor")특정 Executor를 사용하여 메서드를 비동기적으로 실행하도록 지정하는 어노테이션.
@EnableScheduling스케줄링 기능을 가능하게 하는 어노테이션.
@Scheduled주기적으로 메서드를 실행하도록 지정하는 어노테이션.
@Scheduled(cron = "...")cron 표현식을 사용하여 주기적으로 메서드를 실행하도록 지정하는 어노테이션.
@Async("customExecutor")특정 Executor를 사용하여 메서드를 비동기적으로 실행하도록 지정하는 어노테이션.

참조

동기와 비동기

SpringBoot 비동기 처리

profile
프로그래밍은 정신력 안되면 될 때까지!

0개의 댓글