Spring
[Spring Batch] 배치 도메인 이해
[Spring Batch] 배치 도메인 이해
2024.06.30@SpringBootApplication@EnableBatchProcessing(dataSourceRef = "batchDataSource", transactionManagerRef = "batchTransactionManager")public class SpringBatchMasterApplication { public static void main(String[] args) { SpringApplication.run(SpringBatchMasterApplication.class, args); }} 스프링 배치 애플리케이션을 활성화하려면 @EnableBatchProcessing 애너테이션을 메인 클래스 위에 붙여줘야 한다. 애너테이션은 4개의 설정 클래스를 실행시켜 스프링 배치 초기 설정과 초기화를..
[Spring Security] 인가 프로세스
[Spring Security] 인가 프로세스
2024.06.22스프링 시큐리티는 요청과 메서드 단위로 권한을 부여해 보안을 관리한다. 요청 기반 권한 부여는 HttpServletRequest에 대한 권한 부여를 모델링해 HttpSecurity 인스턴스를 사용해 권한 규칙을 선언할 수 있다. http.authorizeHttpRequests(authorize -> authorize .requestMatchers("/user").hasAuthority("USER") .requestMatchers("/mypage/**").hasAuthority("USER") .requestMatchers(HttpMethod.GET, "/**").hasAuthority("read") .requestMatchers(RegexRequestMatcher.regexMatch..
[Spring Security] 예외 처리
[Spring Security] 예외 처리
2024.06.12스프링 시큐리티에서 발생하는 예외는 AuthenticationException과 AccessDeniedException으로 나뉘며, ExceptionTranslationFilter가 예외를 처리한다. AuthenticationException 발생 시 SecurityContext 에서 인증 정보를 삭제하고 Authentication을 초기화한다. 필터는 authenticationEntryPoint를 실행해 인증 실패를 공통적으로 처리하고 인증을 요청할 수 있는 화면으로 이동시킨다.인증 프로세스의 요청 정보는 RequestCache, SavedRequest에 저장해 사용자가 인증을 마친 후 재사용한다. AccessDeniedException 발생 시 필터는 사용자가 익명 사용자인지를 먼저 판단하고, 익명 ..
[Spring Security] 인증 상태 영속성
[Spring Security] 인증 상태 영속성
2024.06.10사용자가 인증을 마친 이후 인증을 유지하기 위해 SecurityContextRepository 클래스를 사용한다.인증 정보와 권한은 SecurityContext에 저장되고, SecurityContext는 다시 HttpSession에 저장돼 요청 간 영속이 이루어진다. SpringContextRepository 인터페이스를 구현한 구현체로는 두 가지가 있는데, 그 중 하나가 HttpSession에 인증 상태를 저장하는 역할을 수행한다. 인증을 마친 후 요청할 때는 SecurityCOntextHolderFilter에서 컨텍스트를 로드해 인증 상태가 저장되어있는지 확인한다. public interface SecurityContextRepository { @Deprecated SecurityCon..
[Spring Security] 인증 아키텍처
[Spring Security] 인증 아키텍처
2024.06.08사용자가 요청하면 서블릿 필터인 DelegatingFilterProxy가 요청을 받아 스프링 필터 쪽으로 요청을 넘긴다. AuthenticationFilter는 Authentication 객체를 만들어 AuthenticationManager에게 넘겨준다. Manager는Provider에게 인증을 위임해 사용자의 ID / PASSWORD를 검증시키는데, 이 때 UserDetailsService 객체로 사용자 정보를 가져온다. 인증에 성공했다면 UserDetailService는UserDeatils 타입의 객체를 만들고, 이 객체는 다시 Provider로 올라간 후 Authentication 객체를 만든다. 만들어진 Authentication 객체는 SecurityContextHolder를 통해 Securi..
[Spring Security] 인증 메커니즘
[Spring Security] 인증 메커니즘
2024.05.30기본적으로 HTTP 기반 form 로그인 인증을 사용한다. @Beanpublic SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http .authorizeHttpRequests(auth -> auth.anyRequest().authenticated()) .formLogin((form) -> form .loginPage("/login") .loginProcessingUrl("/loginProcess") .defaultSuccessUrl("/", true) .failureUrl("/failed") ..
[Spring Security] 초기화 과정
[Spring Security] 초기화 과정
2024.05.27스프링 시큐리티는 애플리케이션 시작 시 수행되는 초기화 과정에서 인증이나 인가에 관련된 여러 작업을 수행한다. 스프링 시큐리티 의존성을 추가한 후 애플리케이션을 실행하면 의존성으로 내려받은 SpringBootWebSecurityConfiguration 클래스를 통해 초기 설정을 진행한다. @Configuration(proxyBeanMethods = false)@ConditionalOnDefaultWebSecuritystatic class SecurityFilterChainConfiguration { @Bean @Order(SecurityProperties.BASIC_AUTH_ORDER) SecurityFilterChain defaultSecurityFilterChain(HttpSecu..
[Spring Batch] ItemReader / ItemWriter
[Spring Batch] ItemReader / ItemWriter
2024.02.27Step에서 데이터를 읽어오는 역할을 담당하는 ItemReader를 구현할 때는 개발자가 직접 ItemReader 인터페이스를 구현해 read 메서드를 구현한 후 Step에 추가할 수도 있고, 스프링 배치가 기본적으로 제공하는 ItemReader를 사용할 수도 있다. @Bean @StepScope public FlatFileItemReader flatFileItemReader( @Value("#{jobParameters['inputFile']}") FileSystemResource fileSystemResource ) { FlatFileItemReader flatFileItemReader = new FlatFileItemReader(); // flatFileItemReader.setResource(new..
[Spring Batch] 스프링 배치 내부 흐름
[Spring Batch] 스프링 배치 내부 흐름
2024.02.25스프링 배치는 대용량 데이터를 효율적으로 처리하기 위해 설계된 프레임워크이다. 1. Chunk 단위로 나눠서 작업 데이터를 일정량의 Chunk 단위로 묶어서 처리한다. 각 Chunk는 여러 Item으로 구성되고 배치 작업은 Item을 하나씩 읽고 처리한 후 모든 Item이 처리되면 결과를 갱신한다. 대량의 데이터를 한 번에 처리할 때 발생할 수 있는 메모리 부하를 줄이고 로직 수행 중 오류가 발생한 경우 유연하게 복구할 수 있다. 2. 예외처리 스프링 배치는 Job을 여러 Step으로 구성하는 방식으로 사용한다. Step은 독립적인 작업 단위로, 특정 Step에서 예외가 발생했을 때 그 Step에 대해서만 예외를 처리할 수 있어 유연하다. 3. 트랜잭션 각 Chunk 처리 과정에서 트랜잭션을 시작하고 처..
[Spring Security6] 인증 서버 구축
[Spring Security6] 인증 서버 구축
2023.08.15페이스북, 구글, 깃허브 등 대기업들은 자신만의 OAuth2 인증 서버를 가지고 있다. 따라서 사용자의 구글 정보를 활용하는 서드 파티 애플리케이션을 개발할 때는 구글이 제공하는 Auth Server를 사용해 사용자의 정보에 안전하게 접근하거나 사용자를 인증할 수 있다. 만들어진 Auth Server를 사용하는건 쉽지만, 직접 Auth Server를 구축하는건 쉽지 않다. 애플리케이션을 개발할 때 MSA 기반으로 설계한다면 인증 서버를 다른 요소들과 독립적으로 구축해야 한다. Keycloak, Spring Security OAuth, AWS Cognito, Okta 등 여러 가지 기술을 활용해 인증 서버를 구축할 수 있다. 각 기술들은 OAuth2, OpenID Connect 등의 프로토콜을 지원하고, ..
[Spring Security6] OAuth2와 OpenID Connect
[Spring Security6] OAuth2와 OpenID Connect
2023.08.13OAuth는 웹에서의 인증과 권한 부여에 대한 개방 표준이다. (특정 기술에 대한 구현이 아니다) 한 서비스에서 사용자가 다른 서비스의 정보와 기능을 안전하게 활용할 수 있도록 권한을 부여하고 관리하기 위한 매커니즘을 제공한다. 초기의 애플리케이션은 다른 애플리케이션의 정보를 사용할 때 사용자가 해당 애플리케이션의 아이디와 비밀번호를 직접 제공해 로그인하는 방법을 사용했다. 이 방식은 보안에 취약하고 권한의 범위와 기간도 설정할 수 없다는 단점이 있고, 다양한 제3자 인증 방식이 개발됐지만 공통된 표준이 없어 다양한 방식의 인증 시스템을 다뤄야 했다. 이런 문제점을 해결하기 위해 OAuth 표준이 도입됐다. 처음에는 OAuth1이 도입됐고, 구현의 복잡성과 보안 문제가 있어 개선된 버전인 OAuth2가 ..
[Spring Security 6] 메서드 단위 권한 요청
[Spring Security 6] 메서드 단위 권한 요청
2023.08.12스프링 시큐리티는 권한 요청 및 접근 제어를 수행하는 방법으로 크게 두 가지 방법을 제공한다. 1. URL 기반 권한 요청 시큐리티 설정 클래스에서 URL을 기반으로 접근 권한을 제어한다. HttpSecurity 클래스의 authorizeRequests() 메서드를 사용해 구현한다. 2. 메서드 수준에서의 권한 요청 특정 애너테이션을 사용해 권한을 제어한다. 클래스의 메서드 단위로 권한을 제어할 수 있다. URL 기반 접근 제어만 사용하는 경우도 많지만, 보안 요구사항이 복잡한 경우 두 가지 방법을 함께 사용하기도 한다. 요청이 들어오면 URL 기반 접근 제어가 먼저 실행되고, 그 다음에 메서드 기반의 접근 제어가 수행된다. 전반적인 보안은 URL 기반으로, 세부적인 접근 제어는 메서드 수준에서 수행하자..