[TIL - 0911] sync/async, blocking/non-blocking, 어노테이션
sync/async, blocking/non-blocking
- Java9도, Spring5도, nodejs도 얘기할 때 가장 큰 토픽이 async/non-blocking이라고 하던데 정확히 구분을 할 수 없어 공부해야겠다는 생각이 들었음
헷갈리는 부분 두 그룹의 구분해서 이해하기
- blocking/non-blocking : 시스템 콜에 대한 결과 반환 전까지 대기(wait), 처리가 완료되지않아도 결과가 반환되어 제어권이 넘어와서 다음 처리를 할 수 있음
- sync/async : 호출하는 쪽에서 작업 완료 여부를 신경씀(완료 확인을 계속함)과 작업 완료 여부 신경쓰지않고 호출한 함수에 맡겨버림(완료 처리는 콜백함수로 호출받은 쪽에서 완료 후 처리함)
참고자료
- HomoEfficio - Blocking-NonBlocking-Synchronous-Asynchronous
- nesoy - Synchronous(동기) Vs Asynchronous(비동기)
- slipp - sync와 async, blocking과 non-blocking 차이점은?
- JSConf - What the heck is the event loop anyway?
java 어노테이션
- 메타 프로그래밍을 하기위한 자바 구성요소
사용하고 있는 어노테이션 조금 더 알기
- 단점
- 어떠한 행동을 규정하는 것이 아니라서 테스트 하기위해서는 어노테이션을 사용하는 환경에 얹어두고(예를 들어 스프링 컨테이너 세팅 다 해두고) 제대로 동작하는지 테스트 해야함(테스트 코드 작성에 어려움) : POJO이지 않은 부분이 있다는 것(순수 자바로 테스트가 불가함) - 아래 예제 코드와 같이 맵핑이 제대로 되었는지 테스트를 하기위해서는 환경 구성이 먼저 되어야함
- 확장 가능하지않음
- 상속 관계에 있을 때 같은 어노테이션이 적용되어있을 경우 어떻게 적용되는지 명확하게 규정되어있지않음(일관성 있지 않음 - 표준이 없으므로 어노테이션을 사용하는 쪽에서 규정한 것들을 모두 기억해야함)
- 리플렉션을 통해서 코드를 생성하므로 성능 저하 문제가 있음
@Controller
@RequestMapping("/users")
public class UserController {
@GetMapping("")
.
.
.
}