스프링에서 컨트롤러를 개발하다보면, url 파라미터를 long 으로 받아도 문제없이 작동된다. @GetMapping(path = "/article/{articleId}") public String getArticleDetail(@PathVariable long articleId) { 위와 같은 컨트롤러가 있을 때, 유저는 /article/123라...
Pure DI - IoC가 없는 DI
이 포스트는 참고문서를 필자가 이해하기 쉽게 정리한 내용입니다. DI는 IoC를 사용하지 않아도 된다 DI(Dependency Injection) 다음 PizzaStore 클래스는 정해진 개수의 Pizza인스턴스를 가지고 있다. 만약 Pizza가 더 필요하면 PizzaStore를 직접 수정해야하다. 이는 OCP를 위반하며 DI로 해결해줄 수 있다...
converter
controller 인자로 enum 받는 문제를 해결했던 것은 enum 타입에 맞춘 Converter를 bean에 등록하는 것이었다. 단순히 bean에 등록하는 것으로 controller에서 httpConverter 동작할 때 이것을 적용한 것이다. 이 뒤에 무엇이 있을까 하여 조사해보았다. 스프링에서는 기본적인 타입 변환은 자동으로 지원한다. 따라...
controller에서 enum을 인자로 받기
검색 API를 개발하는 과정에서 다음과 같이 검색 타입을 enum 으로 지정하였고, controller의 param으로 받으려고 했다. @Getter @AllArgsConstructor public enum SearchType { TITLE("title"), CONTENT("content"), HASHTAG("hashtag"), NICKNAM...
ArgumentResolver 활용
ArgumentResolver 활용 ArgumentResolver는 스프링 MVC 구조의 어댑터 핸들러에서 핸들러에 필요한 파라미터를 만들어주는데 호출하는 부분이다. 이 ArgumentResolver를 직접 구현하여 활용하면 다양한 상황에서 편리하게 적용할 수 있다. 로그인 회원 정보를 편리하게 받아오는 예제 컨트롤러 @GetMapping("/...
Valid vs Validatedated
@Valid JSR-303 표준 객체 제약조건 검증 어노테이션 ArgumentResolver에 의해 처리된다. 검증에 오류가 있다면 MethodArgumentNotValidException 예외가 발생하며 디스패처 서블릿에 기본으로 등록된 예외 리졸버인 DefaultHandlerExceptionResolver에 의해 400 에러가 발생한...
클래스 초기화 블록
클래스 초기화 블록 어떤 클래스에 static 변수를 추가했더니 github copilot이 다음과 같은 문장을 추천해주었다. public class Crypto { private static CryptoProperties cryptoProperties; // github copilot suggestion static { crypto...
pinpoint
Pinpoint Pinpoint는 대규모 분산 시스템의 성능을 분석하고 문제를 진단, 처리하는 플랫폼입니다. 2012년 7월에 개발을 시작해 2015년 1월 9일에 오픈소스로 공개했습니다 Pinpoint 개발 동기와 Pinpoint의 특징 인터넷 서비스의 시스템 복잡도가 증가함에 따라 장애나 성능 문제가 발생했을 때 해결이 어려워졌다....
istio
Istio istio는 service mesh를 위한 tool입니다. istio를 사용하면 MSA(Micro Service Architecture)를 적용할 때 반복적으로 설정해야하는 L7/모니터링을 쉽고 간편하게 설정할 수 있습니다. Service mesh Service mesh는 API 등을 사용하여 마이크로 서비스 간 통신을 안전하고...
사이드카 패턴
사이드카 패턴 쿠버네티스의 패턴 중 하나로, 어플리케이션 컨테이너와 독립적으로 동작하는 별도의 컨테이너를 붙이는 패턴이다. 어플리케이션 컨테이너의 변경이나 수정 없이 독립적으로 동작하는 컨테이너를 붙였다 뗐다 할 수 있다. 파드에서의 사이드카 파드는 쿠버네티스에서 가장 기본적인 배포 단위로서 자신에게 속한 컨테이너들에게 런타임제약을 걸 수 있...