비동기 연동 | 별도 스레드 이용한 비동기 연동 | 메시징 이용한 비동기 연동 | 트랜잭션 아웃박스 패턴 | 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;
}
User
정보 찾음User
X → return false
return false
Exception
return true
동기(synchronous) 방식: 순차적 실행 (한 작업 끝날 때까지 다음 작업 진행 X) / 코드 순서 = 실행 순서
프로그램 흐름 직관적 이해 O, 디버깅 용이
외부 연동 실패: 전체 기능 실패인지 확인
ex. 포인트 지급 서비스 실패 → 로그인 실패
IF. 포인트 지급 서비스 장애 발생 → 로그인 X ⇒ 전체 기능 사용 X
포인트 지급 실패해도 로그인 자체 정상적으로 동작하고 나머지 기능 사용할 수 있어야 함
→ 포인트 지급 실패 시 나중에 후처리하도록 지급 실패 내역 따로 남기는 방식
연동하는 외부 서비스의 응답 시간도 고려
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;
}