25.01.09 TIL 동기와 비동기

신성훈·2025년 1월 9일
0

TIL

목록 보기
116/162

1. 동기(Synchronous)란?

동기는 작업이 순차적으로 실행되는 방식입니다.
한 작업이 완료되기 전까지는 다음 작업이 시작되지 않습니다.

특징

  • 작업이 끝날 때까지 기다렸다가 결과를 받아 실행
  • 흐름이 직관적이고 이해하기 쉬움
  • 작업 대기 시간이 길면 전체 성능이 저하될 수 있음

예시

System.out.println("작업 1 시작");
Thread.sleep(1000); // 1초 동안 대기
System.out.println("작업 1 완료");
System.out.println("작업 2 시작");

2. 비동기(Asynchronous)란?

비동기는 작업이 병렬적으로 실행되는 방식입니다.
한 작업이 실행되는 동안 다른 작업이 진행될 수 있습니다.

특징

  • 작업 완료를 기다리지 않고, 다음 작업을 실행
  • 효율적인 자원 활용 가능
  • 콜백이나 Future/Promise와 같은 비동기 처리 메커니즘이 필요

예시

CompletableFuture.runAsync(() -> {
    try {
        Thread.sleep(1000); // 1초 대기
        System.out.println("비동기 작업 완료");
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
});

System.out.println("다른 작업 실행 중");

3. 동기와 비동기 비교

특징동기비동기
작업 실행 방식순차적으로 실행병렬적으로 실행
결과 반환작업 완료 후 결과 반환작업 완료 후 콜백 또는 Future로 결과 반환
성능대기 시간이 길면 성능 저하자원을 효율적으로 사용 가능
사용 예시데이터베이스 쿼리, 파일 읽기/쓰기네트워크 요청, 사용자 인터페이스 응답 처리

4. 동기와 비동기의 장단점

동기

  • 장점: 코드 흐름이 직관적이고 디버깅이 쉬움
  • 단점: 작업 대기 시간이 길면 전체 성능이 저하됨

비동기

  • 장점: 자원을 효율적으로 활용하여 병렬 작업 처리 가능
  • 단점: 코드가 복잡해질 수 있으며, 디버깅이 어려울 수 있음

5. 동기와 비동기 사용 사례

  1. 동기

    • 데이터베이스에서 트랜잭션 처리가 필요한 경우(순차적 작업 중요).
    • 작업 결과가 바로 필요할 때(예: 계산 작업).
  2. 비동기

    • 네트워크 요청 처리(응답 대기 시간이 긴 작업).
    • 파일 업로드/다운로드 같은 I/O 작업.
    • 사용자 인터페이스 이벤트 처리(응답성을 높이기 위해).

6. 마무리

동기와 비동기의 차이를 이해하며, 상황에 맞는 방식의 중요성을 알게 되었습니다. Java의 CompletableFuture를 사용해 비동기 작업을 구현하면서 자원을 효율적으로 사용하는 방법을 배웠고, 비동기 작업의 콜백 지옥을 방지하기 위한 코드 구조화의 중요성도 깨달았습니다. 동기와 비동기를 적절히 조합하여 효율적인 시스템 설계가 가능하다는 점이 인상 깊었습니다.

profile
조급해하지 말고, 흐름을 만들고, 기록하면서 쌓아가자.

0개의 댓글