[TIL - 0911] sync/async, blocking/non-blocking, 어노테이션

sync/async, blocking/non-blocking

  • Java9도, Spring5도, nodejs도 얘기할 때 가장 큰 토픽이 async/non-blocking이라고 하던데 정확히 구분을 할 수 없어 공부해야겠다는 생각이 들었음

헷갈리는 부분 두 그룹의 구분해서 이해하기

  • blocking/non-blocking : 시스템 콜에 대한 결과 반환 전까지 대기(wait), 처리가 완료되지않아도 결과가 반환되어 제어권이 넘어와서 다음 처리를 할 수 있음
  • sync/async : 호출하는 쪽에서 작업 완료 여부를 신경씀(완료 확인을 계속함)과 작업 완료 여부 신경쓰지않고 호출한 함수에 맡겨버림(완료 처리는 콜백함수로 호출받은 쪽에서 완료 후 처리함)

참고자료

java 어노테이션

  • 메타 프로그래밍을 하기위한 자바 구성요소

사용하고 있는 어노테이션 조금 더 알기

  • 단점
    1. 어떠한 행동을 규정하는 것이 아니라서 테스트 하기위해서는 어노테이션을 사용하는 환경에 얹어두고(예를 들어 스프링 컨테이너 세팅 다 해두고) 제대로 동작하는지 테스트 해야함(테스트 코드 작성에 어려움) : POJO이지 않은 부분이 있다는 것(순수 자바로 테스트가 불가함) - 아래 예제 코드와 같이 맵핑이 제대로 되었는지 테스트를 하기위해서는 환경 구성이 먼저 되어야함
    2. 확장 가능하지않음
    3. 상속 관계에 있을 때 같은 어노테이션이 적용되어있을 경우 어떻게 적용되는지 명확하게 규정되어있지않음(일관성 있지 않음 - 표준이 없으므로 어노테이션을 사용하는 쪽에서 규정한 것들을 모두 기억해야함)
    4. 리플렉션을 통해서 코드를 생성하므로 성능 저하 문제가 있음
@Controller
@RequestMapping("/users")
public class UserController {

    @GetMapping("")
    .
    .
    .
}

참고자료