스프링 - 비동기 1 (배경 지식)

산하·2021년 12월 15일
0

Spring

목록 보기
4/6
post-thumbnail

mail 알림을 구현하면서 응답 지연 이슈가 있었다.
사용자에게 알림 메일을 발송해야 했는데 메일 발송이 끝날 때 까지 클라이언트가 응답을 받지 못해 처리가 늦어지는 문제가 발생했다.

나는 이 문제를 스프링에서 제공하는 비동기 처리 기능을 이용하여 해결하고자 했다.

해결 전 요청 - 응답 과정은 아래와 같았다.

팀원 신청 api 호출 - 팀장에게 신청 알림 메일 발송 - 신청 완료 응답

보기엔 간단한 로직이지만 메일이 발송되는 시간 동안 사용자가 응답을 받을 수 없고 그 시간이 사용자가 불편함을 느낄 수 있는 시간이었다. 메일을 1개 발송할 때도 지연이 있었는데 발송해야하는 메일이 늘어나면 그만큼 시간이 지연됐다.


비동기 처리를 이해하기 위해 알아야 했던 개념

👉🏻 Process

  • 실행중인 프로그램
  • OS에 의해 메모리 공간을 할당받아 실행
  • 프로그램에 사용되는 데이터, 메모리 등의 자원과 Thread로 구성

👉🏻 Thread

  • Process 내에서 작업을 수행하는 주체
  • CPU를 점유하는 최소단위
    (Thread를 사용하지 않으면 최소 단위는 Process가 된다!)
  • 모든 Process 내에는 한 개 이상의 Thread가 존재하여 작업 수행
    (Process내에 두 개 이상의 Thread가 존재하면 멀티스레드 프로세스라고 부른다!)
  • LWP (Light Weight Process) - Process에 비해 가벼움

Thread 구현 방법 (양자택일 X)

👉🏻 User Thread

  • User-level에서 라이브러리로 구현
    → 컴파일시 라이브러리를 링크해서 같이 컴파일
  • Java Thread, POSIX Pthread, window Thread

👉🏻 Kerner Thread

  • Kerner-level에서 kernel이 지원하는 thread
  • Linux, window, solaris

👉🏻 Thread Pool

  • 스레드를 미리 만들어 놓은 하나의 집합

  • 작업 요청이 늘어나도 스레드의 전체 개수가 늘어나지 않음
    →프로그램 성능 저하 방지

  • 크기를 너무 크게 지정하면 메모리 낭비 야기함

profile
반갑습니다 :) 백앤드 개발자 산하입니다!

0개의 댓글