본문 바로가기
728x90

[Spring]/Spring 기본23

누구나 쉽게 적용 가능한 RestTemplate를 만들어보자. 💡 진행 중인 프로젝트에서 다른 api 서버와 통신이 필요했다. 여러 선택지 중에 Spring RestTemplate를 사용하는 것으로 결정되었기 때문에 이를 공부하고 나중에도 참고하여 사용할 수 있도록 정리해 보았다. 이 글에서는 외부 api 서버와의 통신 기술 중 restTemplate를 선택한 과정과 그 이유를 이야기하고, 누구나 참고하여 본인의 코드에 적용할 수 있도록 예시 코드를 작성하려고 한다. RestTemplate RestTemplate은 Spring 3.0부터 제공되어 왔던 동기식 HTTP 클라이언트로, RESTful 서비스를 호출할 때 많이 사용된다. 🙂 장점 사용하기 쉽고 코드가 직관적이다. HTTP 메서드(GET, POST 등)에 대한 다양한 메서드를 제공한다. 가장 무난한 방법으로.. 2023. 10. 17.
Spring Boot에서 외부 API 서버와 통신하는 기술에 대해 알아보자 💡 프로젝트에서 클라이언트로부터 받은 요청을 다른 API 서버에 전달하고 데이터를 받아 로직 처리 후 응답하는 기능이 필요했다. 지금까지 만들어 본 서버는 3-tier architecture라고 불리는 클라이언트 - 서버 - 데이터베이스 서버 간 통신의 범주에 크게 벗어나지 않았기 때문에 요청을 받아 다른 서버로 다시 넘겨주려면 어떻게 해야 하는지 감이 잡히지 않았다. GPT와 블로그 검색을 통해 찾아보니 정말 많은 방법이 있었다. 그중 5가지 방법을 추려내어 정리하려고 한다. 📌 여러 가지 방법과 장단점 Spring Boot를 사용하여 외부 API 서버와 통신하는 다양한 방법 중 RestTemplate, Spring WebClient, Spring Cloud OpenFeign, OkHttp, HttpC.. 2023. 8. 27.
@Valid & @Validated 차이점에 대해 알아보자.(JSR 380 정리) @Valid & @Validated 자바 프로그래밍에서 입력값에 대한 유효성 검사를 도와주는 주석이다. 두 주석의 역할이 비슷한 것 같으면서도 분명한 차이점이 있어 이번 기회에 정리해보려고 한다. @Valid JSR 380(Java Bean Validation) 사양의 일부로 주석이 달린 개체의 유효성 검사를 하는 데 사용된다. 클래스 또는 메서드의 파라미터에서 @Valid라고 표시되면 기본 유효성 검증 제공자를 사용하여 미리 정의된 유효성 검증 제한 조건을 기반으로 유효성 검증을 수행하도록 spring에 지시한다. 사용 예시 Spring boot에서 컨트롤러 단 메서드에 @RequestBody 주석이 달린 파라미터 값에 적용되어 입력받는 값을 검증할 수 있다. 위의 예시로 보면 입력받는 requestB.. 2023. 6. 7.
빈 스코프 스프링의 빈 스코프 스프링 컨테이너에서 빈이 존재하는 범위를 의미한다. 스프링은 다양한 스코프를 지원한다. 싱글톤 스프링의 기본 스코프로, 스프링 컨테이너의 시작부터 종료까지 유지되는 가장 넓은 범위의 스코프이다. 프로토타입 스프링 컨테이너는 프로토타입 빈의 생성과 의존 관계 주입, 초기화까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프이다. 클라이언트에 생성된 빈을 반환하게 되면 이후 빈을 관리할 책임은 클라이언트에 있다. 따라서 @PreDestory와 같은 종료 메서드가 호출되지 않는다. 스프링 컨테이너에 요청할 때마다 새로 생성된다. 프로토 타입 스코프의 빈과 싱글톤 빈을 함께 사용할 때의 문제점 싱글톤 빈이 의존 관계 주입을 통해 프로토타입 빈을 주입받아서 사용하는 경우, 싱글톤 빈은 .. 2023. 3. 7.
빈 생명주기 콜백 빈 생명주기 콜백 스프링은 의존관계 주입이 완료되면 스프링 빈에서 콜백 메서드를 통해 초기화 시점을 알려주는 다양한 기능을 제공한다. 스프링 컨테이너가 종료되기 직전에는 소멸 콜백을 주기 때문에 안전하게 종료 작업을 진행할 수 있다. 스프링 빈의 이벤트 라이프 사이클 스프링 컨테이너 생성 -> 스프링 빈 생성 -> 의존관계 주입 -> 초기화 콜백 -> 사용 -> 소멸 전 콜백 -> 스프링 종료 초기화 콜백 : 빈이 생성되고 빈의 의존관계 주입이 완료된 후 호출 소멸 전 콜백: 빈이 소멸되기 직전에 호출 잠깐! 생성자에 초기화 관련된 작업을 함께 하면 안 될까? 객체의 생성과 초기화를 분리하는 것이 좋다. 생성자는 필수 정보(파라미터)를 받고, 메모리를 할당해서 객체를 생성하는 책임을 가진다. 초기화는 이.. 2023. 3. 6.
자동 빈 등록과 수동 빈 등록을 사용하는 기준 자동 기능을 기본으로 사용 스프링 부트가 컴포넌트 스캔을 기본으로 사용하고, 다양한 스프링 빈들을 자동으로 등록하도록 설계했기 때문에 굳이 수동으로 만들 필요가 없다. 자동으로 빈을 등록해도 OCP, DIP를 지킬 수 있다. 그럼 수동 빈은 언제 사용할까? 애플리케이션은 업무 로직과 기술지원 로직으로 나뉜다. 업무 로직 빈 웹을 지원하는 컨트롤러, 핵심 비즈니스 로직이 있는 서비스, 데이터 계층의 로직을 처리하는 리포지토리 등이 모두 업무 로직이다. 업무 로직은 문제가 발생했을 때 명확하게 파악하기 쉽다. 기술 지원 빈 기술적인 문제나 공통 관심사(AOP)를 처리할 때 사용된다. 기술 지원 로직은 로직 적용이 잘 되는지 파악하기 힘들다. 따라서, 수동으로 빈을 등록하여 명확하게 드러내는 것이 좋다. 다형.. 2023. 3. 6.
조회하는 빈이 2 개 이상일 때 해결 방법 @Authowired가 붙는 필드의 이름을 구체적으로 변경한다. @Autowired private DiscountPolicy discountPolicy // 전 @Autowired private DiscountPolicy rateDiscountPolicy // 후 @Qualifier 추가 구분자를 붙여주는 방법이다. 조회된 빈이 2개 이상일 때 어떤 빈을 선택할지 명시할 수 있다. @Primary 우선순위를 정하는 방법이다. @Autowired 시에 여러 빈이 매칭되면 @Primary가 붙은 쪽이 우선권을 가진다. @Qualifier, @Primary의 우선순위 @Qualifier는 @Primary 보다 상세한 동작을 하므로 @Qualifier의 우선순위가 더 높다. 참고 김영한 - 스프링 핵심 이론 2023. 3. 6.
의존관계 주입 다양한 의존관계 주입 방법 생성자 주입 생성자 호출 시점에 딱 1번만 호출되는 것이 보장된다. 불변, 필수 의존관계에 사용한다.(주입받은 객체가 변하지 않거나, 반드시 객체의 주입이 필요한 경우에 이를 강제하기 귀해 사용할 수 있다.) 스프링 프레임워크에서는 생성자 주입을 적극 지원하고 있다. 생성자가 1개만 있으면 @Autowired를 생략해도 자동 주입된다. 물론 스프링 빈에만 해당. @Service public class exampleService { private ExampleRepository exampleRepository; private ExampleService exampleService; public ExampleService(ExampleRepository exampleRepositor.. 2023. 3. 6.
728x90