트랜잭션?https://anythingis.tistory.com/171 [DB] 트랜잭션, 애플리케이션의 트랜잭션 제어트랜잭션이란 데이터를 저장할 때 단순히 파일에 저장해도 되지만, 데이터베이스에 저장하는 가장 큰 이유입니다. 트랜잭션은 그대로 번역하면 거래인데, 데이터베이스에선 하나의 거래를 안anythingis.tistory.com주로 DB에서 활용되는 개념이지만, 애플리케이션에서 데이터를 다루고 DB에 저장하기에, DB에서 커밋이 되거나 롤백 된 후 비즈니스 로직까지 연계된 로직을 처리하기 위해 스프링도 트랜잭션 기능을 제공합니다. 스프링 트랜잭션스프링은 다양한 DB 접근 기술과 같이 활용할 수 있습니다.JDBCpublic void accountTransfer(String fromId, String..
6v 아래로는 스프링 시큐리티 의존성 사용시 WebSecurityConfigurerAdapter의 authenticationManager() AuthenticationConfiguration.getAuthenticationManager()등을 활용했는데 6v 이상 오면서 별도의 방법이 필요합니다. WebSecurityConfigurerAdapter 대신 SecurityFilterChain을 빈 등록해줘야하고, 해당 메소드의 파라미터인 HttpSecurity를 통해 설정에서 사용되는 공유객체를 가져와 설정할 수 있습니다. 동작 방식공유 객체 검색: http.getSharedObject(AuthenticationManagerBuilder.class)는 HttpSecurity 객체 내에 공유된 Authe..
백엔드개발자로 주로 클라이언트 요청을 받아 비즈니스 로직을 처리해 응답하는 부분을 처리하지만, 서버에서도 외부 API를 사용하는 등 Http 요청을 통해 정보를 얻는 경우도 필요합니다. 지금까지 진행한 프로젝트에서는 이 부분을 깊게 공부할 시간이 없어 모두 Spring이 제공하는 RestTemplate을 사용했지만 기반이 되는 부분을 조금 더 공부한 내용을 정리하기 위한 글입니다. RestTemplate Spring3.0부터 간편하게 동기식 Rest API 호출을 할 수 있게 해주는 클래스(Spring MVC 기반)입니다. JSON, XML, String 응답을 처리할 수 있고 Header와 Contetn-Type을 지정할 수 있습니다. Header, Content-Type 지정은 exchange()의 ..
스프링부트로 스프링을 접해서 몰랐는데 레거시 스프링을 접하게 되면서 정말 스프링부트는 미쳤다는 걸 체감하고 있다. 서블렛 컨테이너 등록 VS 내장 서블렛 컨테이너 레거시는 별도의 서블렛 컨테이너(웹 애플리케이션 서버)를 미리 준비하고 그 위에 스프링 프로젝트를 올린다. 이후 빌드할 때도 war파일을 서블렛 컨테이너에 올려야 한다. 스프링부트는 기본적으로 서블렛 컨테이너가 내장되어 있어 별도의 서버 설치 없이 실행할 수 있다. 빌드시에도 jar 파일만으로 배포할 수 있다. web.xml spring legacy 프로젝트 생성시 자동으로 생성되긴 하지만 web.xml에 ContextLoaderListener를 통해 Dispatcher Servlet을 서블렛 컨테이너(톰캣)에 올리는 것을 명시한다. POST ..
AOP( Aspect-Oriented Programming) 객체지향 프로그래밍은 클래스가 단일 책임원칙을 가지도록 설계해 응집도를 높이고 결합도는 낮춘다. 하지만 클래스의 비즈니스 로직을 제외한 로깅, 트랜잭션과 같은 부가기능 여러 클래스에 중복적으로 필요한 기능이 존재한다. 이런 경우 AOP를 통해 코드의 중복성을 낮추고, 부가기능의 응집도를 높혀 관리할 수 있다. AOP 적용할만한 것들 메소드 성능검사 DB와 엮인 대량의 데이터의 조회 쿼리 시간을 측정하는 등의 비즈니스 로직 호출의 앞뒤로 시간을 체크해 성능검사에 AOP를 적용할 수 있다. 트랜잭션 처리 성능검사와 마찬가지로 비즈니스 로직의 전후에 설정되는 번거로운 try catch 대신 AOP를 적용할 수 있다. Spring AOP Target ..
Spring IoC Container가 Bean을 관리할 때는 객체관리 뿐아니라 객체 내에 필요한 객체를 의존성 주입으로 해결한다. 의존성 주입은 필요한 객체를 생성하는 것이 아닌 외부로 부터 객체를 받아 사용하는 것이다. 관련 작성 포스팅 의존성 주입은 왜 필요한가? 스프링은 @Autowired 어노테이션을 이용한 다양한 의존성 주입 방법을 제공하는데 종류는 생성자, 수정자, 필드로 나뉜다. 필드주입 1. 코드가 간결하다. 2. 외부에서 변경이 불가능해 테스트시 모킹이 필요하다 3. 스프링 컨테이너 없이 의존성 주입이 힘들다 4. 객체가 생성된 이후에 주입하므로 final 키워드를 사용할 수 없어 해당 객체의 불변을 보장하지 못한다 @Service public class ProductService { ..
오랜만에 스프링 시큐리티 설정을 건드리는데 원래 쓰던 mvcMatchers 메소드가 가버렸다. Spring Security 5.8부터 antMatchers, mvcMatchers, and regexMatchers 가 deprecated되고 6부터는 사라질 예정이다. 위의 메소드 대신 새롭게 사용될 requestMatchers 메소드는 authorizeHttpRequests, authorizeRequests, CSRF configuration, WebSecurityCustomizer와 RequstMatcher 메서드가 있는 위치에 추가되었다. requestMatchers는 애플리케이션의 클래스 경로에 Spring MVC가 있는 경우 mvcRequestMatcher 구현을 선택하고 없는 경우 AntPathR..