프로젝트를 진행 중에 비동기/동기 방식을 결정해 수정해야하는 상황이 생겼다. 비동기/동기 방식은 프로그램 개발에서 중요한 역할은 기술이다. 둘의 선택이 개발 방향, 성능 등 큰 차이점을 가져오기 때문에 개발자라면 누구나 다 안다. 그래서 구현 전에 다시 비동기/동기 방식의 차이점을 다시 한번 상기시키려고 한다.

Synchronous (동기)

쉽게 이해하기, 순차적
동기는 순차적으로 진행된다.

Amethod();
Bmethod();

예를 들어서 A,B 메서드를 호출한다고 했을때, A메서드가 끝나야 B메서드가 호출된다. 기본적으로 컴파일러는 동기식으로 처리한다. 다른 예로는 파일처리를 생각하면 된다. 파일을 가져오고, 처리할 때 파일을 선택 중에는 다른 처리를 할 수가 없다. 파일이 선택되기 전까지 thread는 대기 상태다.

Asynchronous (비동기)

비동기는 비순차적이다.

Amethod();
Bmethod();

A메서드가 호출되고 끝나기전에 기다리지 않고 B메서드가 호출된다. thread가 호출만하고 그 다음 작업을 하는 것이다. 대표적으로 javascript async/await을 생각하면 된다. 쟈바스크트립트 함수에 async를 사용하면 비동기 방식으로 진행된다. await 비동기 진행 중에 동기식으로 처리해야할때 사용한다.

자바 또는 다른 언어에서도 당연히 비동기를 지원하는 기능이 있다. 또한 스프링 프레임워크에서 @Async로 비동기를 쉽게 구현가능하다.

장단점

  동기 비동기
장점 설계가 간단하고 직관적이다. 특정 상황에서 비동기 처리를 하여 성능을 향상시킬 수 있다.
단점 특정 상황에서 성능 저하를 만들어 낼 수 있다. 프로젝트 복잡성이 증가한다.

프로젝트에서?

블로그 웹사이트 만드는 중 블로그 글과, 네비게이션 호출 방식에서 비동기를 할지 고민 했다. 크게 고민하지는 않았다. 페이지 이동을 하지 않고, 한 페이지에서 처리할 생각으로 진행하고 있는데, 다시 생각해보니 이렇게 복잡하게 하면 훗날 유지보수하기 안좋겠다는 생각이 들었다. 트래픽 처리가 많이 요구되지 않는 프로젝트에서 복잡성을 늘리고 프로젝트 기간을 늘릴 필요는 없었다. 중복되는 코드가 생기긴 하지만 구현 후 리팩토링을 하면서 줄이는 것이 지금 현재 내 실력에서 공부하기에 더 좋을 것 같다는 판단이었다.

그래서

  1. 블로그 최신 글
  2. 메뉴 선택 후 글 리스트 조회
  3. 블로그 글 조회

는 동기로 처리하고, 댓글만 비동기로 처리하기로 했다.

보통 이렇게 많이 한다.