5. 비동기 연동, 언제 어떻게 써야 할까

비동기 연동 | 별도 스레드 이용한 비동기 연동 | 메시징 이용한 비동기 연동 | 트랜잭션 아웃박스 패턴 | CDC

동기 연동과 비동기 연동

로그인 성공 시 포인트 지급하는 기능

public boolean login(String id, String password) {
	Optional<User> opt = findUser(id); // 1. User 찾기
	if (opt.isEmpty()) { // 2. User X -> false
		return false; 
	}
	User u = opt.get();
	if (!u.matchPassword(password)) { // 3. 암호 일치 X -> false
		return false;
	}
	PointResult result = pointClient.giveLoginPoint(id); // 포인트 지급 서비스 호출
	if (result.isFailed()) { // 5. 포인트 지급 실패 -> 예외
		throw new PointException();
	}
	appendLoginHistory(id); // 6. 로그인 내역 추가
	return true;
}
  1. User 정보 찾음
  2. User X → return false
  3. 암호 일치 X → return false
  4. 로그인 포인트 지급 서비스 호출
  5. 포인트 지급 실패 → Exception
  6. 로그인 내역 기록
  7. return true

동기(synchronous) 방식: 순차적 실행 (한 작업 끝날 때까지 다음 작업 진행 X) / 코드 순서 = 실행 순서

스크린샷 2025-08-26 오후 5.23.09.png

public boolean login(String id, String password) {
	Optional<User> opt = findUser(id); // 1. User 찾기
	if (opt.isEmpty()) { // 2. User X -> false
		return false; 
	}
	User u = opt.get();
	if (!u.matchPassword(password)) { // 3. 암호 일치 X -> false
		return false;
	}
	PointResult result = pointClient.giveLoginPoint(id); // 포인트 지급 서비스 호출
	if (result.isFailed()) { // 5. 포인트 지급 실패 -> 후처리 위해 내역 남김
		recordPointFailure(id, result);
	}
	appendLoginHistory(id); // 6. 로그인 내역 추가
	return true;
}