본문 바로가기

스프링

[Spring] 스프링 의존관계 주입 방법 [Spring] 스프링 의존관계 주입 방법 스프링의 가장 큰 특징이라고 할 수 있는 것이 제어의 역전입니다. 이 제어의 역전은 프레임워크와 라이브러리를 구분하는 기준이 되기도 하는데요. 스프링 프레임워크는 객체의 생성과 세팅 등을 개발자가 직접 관리하지 않고, 스프링에서 관리하도록 설계되어 있습니다. 여기서 스프링이 관리하는 객체를 스프링 빈, 빈을 관리하는 주체를 DI 컨테이너라고 부릅니다. 한 스프링 빈에서 다른 스프링 빈을 사용할 때, 즉 한 스프링 빈이 다른 스프링 빈이 의존할 때 의존하는 객체를 스프링 DI 컨테이너에서 알아서 넣어줍니다. 이것을 의존성 주입이라고 부릅니다. 의존성 주입 방법에는 대표적으로 3가지가 있습니다. 주입 방법 1. 생성자 주입(Constructor) @Service p.. 더보기
[Spring] 스프링 컨트롤러 인터페이스 저장 방식 개선 [Spring] 스프링 컨트롤러 인터페이스 저장 방식 개선 예시 코드는 단순화된 코드입니다. 스프링 컨트롤러에서 들어오는 모든 요청/응답의 HTTP 바디 메시지를 예외없이 DB에 저장하는 과정 기록. 우리 팀은 업무 특성상 들어오는 모든 요청과 응답 인터페이스 내용을 DB에 저장하도록 되어있다. 인터페이스 테이블은 인터페이스 ID, 요청 전문, 응답 전문, 그리고 그 외 HTTP 헤더 정보 중 필요한 것들을 저장한다. 혹시 모를 유실을 방지하기 위해 일단 들어오자마자 요청 정보를 인서트 하고, 모든 처리가 완료된 후 클라이언트로 주는 응답 결과를 업데이트 하는 방식이다. 다음 내용은 단계별로 어떤 문제점이 있었고, 어떻게 개선해나갔는지로 이어진다. [1] 서비스 로직 수행 중 예외 발생시 업데이트 불가 .. 더보기
[Spring] Feign으로 MultiPart 요청 보내기 [Spring] Feign으로 MultiPart 요청 보내기 예시 코드는 단순화된 코드입니다. 기 시작은 회사 공통 프레임워크의 버전 업그레이드였다. pom.xml에서 1.0.x를 1.0.y로 바꿔주기만 하면 될 줄 알았다. 그런데 메이븐 업데이트를 하고 나니 스프링이 안 뜬다. requestpart.value() was empty on parameter 0로그를 살펴보니 특정 업체 G랑 통신하는 FeignClient 객체를 생성하는 과정에서 오류가 발생했고, 위 같은 에러 메시지를 확인했다. 구글링을 해보니 정확히 일치하는 케이스가 없다. @FeignClient public interface GFeignClient extends MultiPartFeignClient { @RequestMapping(me.. 더보기
[Spring Boot] @Transactional 어노테이션의 롤백 테스트 [Spring Boot] @Transactional 어노테이션의 롤백 테스트 스프링의 @Transactional 어노테이션, 언제 커밋이 되고 롤백이 되는가. 중요한 것도 알고 개념도 알겠는데 와닿지가 않아서 직접 테스트 후 정리해봤다. Checked vs Unchecked Throwable Exception Checked Exception Unchecked Exception Error 이 포스팅의 목적은 @Transactional이 롤백 수행을 직접 확인해보기 위함이다. 따라서 익셉션의 종류에 대한 설명은 생략한다. 결론만 얘기하면 @Transactional로 묶인 메소드는 기본적으로 Unchecked Exception과 Error가 발생하면 DB 작업 내역을 롤백한다. 별도의 설정을 통해 롤백 기준을.. 더보기
[Spring Boot] 스프링부트 어노테이션 정리 [Spring Boot] 스프링부트 어노테이션 정리 개인적 학습을 위한 스프링부트 어노테이션 정리 어노테이션이 포함된 최상위 패키지를 기준으로 분류 context @Bean 어노테이션이 붙은 클래스에서 리턴하는 객체를 Bean으로 등록한다. 사용되는 클래스에 @Configuration 어노테이션을 반드시 명시해줘야 한다. [MEMO] Bean은 스프링 IoC 컨테이너에 의해 인스턴스화, 관리, 생성되는 객체를 의미한다. @Configuration 해당 클래스에서 Bean을 생성함을 명시한다. 내부적으로 @Bean 어노테이션이 붙은 메소드를 사용한다. @Configuration public class SampleConfig { @Bean public SampleController sampleControll.. 더보기