일단 씻고 나가자
23.10.24 본문
2023. 10. 24 화요일
- [Effective Java] 병렬화가 무조건 속도가 빠를까?
: 꼭 병렬화라고 빠른 속도를 보장하는 것은 아니다.
Java에서 제공하는 ForkJoinPool을 예시로 들면, 각 상위의 스레드가 하위의 자식 스레드를 fork 하는데, 이때 fork를 하는 것도 자원이 소모될뿐더러 하위의 모든 스레드가 작업을 완료해야 상위로 넘어가기 때문에 limit 같은 연산 시 결국 모든 계산을 기다려야만 한다.
또한 외부 API의 이용 같은 경우에도, 외부 API가 일정 수의 호출 이상을 거절하거나 했을 때 에러를 발생시킬 수 있으므로 외부 요인 또한 체크하여야 한다. 즉, 병렬이 무조건 빠르다고 생각하여 아무 곳이나 적용하지 말고 상황, collection 등을 검토해보아야 한다.
- [Spring] 스프링의 validation과 data binding?
: validation은 검증의 방식으로, Java bean validation과 Spring validator 두 가지가 일반적으로 활용된다.
Java bean validation은 자바 빈 규약에 맞게 private으로 선언된 변수에 validation 관련 어노테이션을 선언하여 조건을 걸고, @RequestBody 앞에 @Valid를 선언하여 검증한다.
data binding은 특정 형식으로 도달한 request를 내가 원하는 방식의 객체로 바꾸는 방법으로, 스프링에선 Converter와 Formatter를 제공한다. 해당 인터페이스를 impl하고 바꾸는 로직을 작성하여 클래스를 @Component 선언 해놓으면 request를 해당 클래스로 바로 받았을 때, 스프링 context가 converter를 찾아 알아서 변환하여 주입한다.
- [Spring] SpEL이란?
: Spring Expression Language. 특정 문자열을 검증하여 수식으로 변환하고 변수 등에 대입하는, 스프링에서 제공하는 간단한 문법.
내부적으론 SpelExpressionParser 객체의 로직으로 이루어져 있으며, "" 사이에 존재하는 '' 문자열을 메서드 및 수식 계산하여 특정 변수에 주입한다.
일반적으로 @Value 어노테이션이 활용되며, 수식의 계산은 @Value("#{'수식 문자열'}"으로 활용되고 외부 환경 변수는 @Value("${경로.경로}")으로 특정 변수에 주입한다. 해당 어노테이션을 사용한 클래스는 @Component 등록을 해주어야 스프링 컨텍스트가 찾아서 주입해줄 수 있게 된다.