반응형

Programming/Spring Boot 101

UsernameNotFoundException Not Working 이유 파헤치기

Spring security, JWT 로그인 구현 중 UsernameNotFoundException 처리가 안 되는 현상이 발생하였습니다. 분명 해당 Exception 이 발생하지만 최종적으로는 BadCredentialsException 으로 처리되어 최종 response는 403 Forbidden 이 발생하였고, 디버깅을 통해 원인을 찾아봤습니다. @Service @RequiredArgsConstructor public class CustomUserDetailsService implements UserDetailsService { private final UsersRepository usersRepository; @Override public UserDetails loadUserByUsername(St..

Spring Security 시큐리티 동작 원리 이해하기 - 2

Spring Security 시큐리티 동작 원리 이해하기 - 1 스프링 시큐리티 (Spring Security)는 스프링 기반 어플리케이션의 보안(인증과 권한, 인가)을 담당하는 스프링 하위 프레임워크입니다. 보안과 관련해서 체계적으로 많은 옵션들을 제공해주기 때문 wildeveloperetrain.tistory.com 첫 번째 포스팅에서 이어지는 내용입니다. 참고 부탁드리겠습니다. AuthenticationProvider 인터페이스를 구현하는 클래스 만들기 @RequiredArgsConstructor public class CustomAuthenticationProvider implements AuthenticationProvider { private final CustomUserDetailsServi..

Spring Security 시큐리티 동작 원리 이해하기 - 1

스프링 시큐리티 (Spring Security)는 스프링 기반 어플리케이션의 보안(인증과 권한, 인가)을 담당하는 스프링 하위 프레임워크입니다. 보안과 관련해서 체계적으로 많은 옵션들을 제공해주기 때문에 개발자의 입장에서는 하나하나 보안 관련 로직을 작성하지 않아도 된다는 장점이 있습니다. 알고 시작해야할 Spring Security 용어 및 기본 이론 인증 Authentication : 해당 사용자가 본인이 맞는지를 확인하는 절차 인가 Authorization : 인증된 사용자가 요청한 자원에 접근 가능한지를 결정하는 절차 접근 주체 Principal : 보호받는 Resource에 접근하는 대상 비밀번호 Credential : Resource에 접근하는 대상의 비밀번호 권한 : 인증된 주체가 어플리케이..

관습적인 추상화 Service, ServiceImpl 구조를 사용해야 할까?

Service interface와 ServiceImpl class 구조를 사용하는 이유? 대부분의 프로젝트는 Service를 만들 때 MemberService와 같이 서비스를 인터페이스로 설계하고, MemberServiceImpl 라는 구현체인 클래스를 생성해서 사용하는 방식으로 설계됩니다. 그동안 프로젝트를 하며 이유도 모른체 그냥 구조가 그런가 보다 하면서 계속 만들어서 사용하다가 이번에 그 이유에 대해 알고 싶어서 잘 정리된 몇몇 분들의 자료를 참고하여 정리하게 되었습니다. 내용 중 잘못된 부분은 댓글을 통해 말씀해주시면 찾아보고 수정하며 공부하겠습니다. 이론상으로 위와 같은 Service, ServiceImpl 패턴으로 설계를 해야하는 이유는 인터페이스와 구현체를 분리함으로써 구현체를 독립적으로 ..

IntelliJ 인텔리제이 properties 파일 한글 깨짐 설정 방법

IntelliJ properties 파일 한글 깨짐 설정 방법 기존에 작업된 프로젝트를 clone하여 작업하는 중 properties 파일의 한글이 깨지는 현상이 발생하였습니다. 이 부분은 IntelliJ 인코딩 설정 때문인데요. 한글이 깨지지 않도록 설정하는 방법입니다. Preferences 또는 Settings -> File Encodings 를 확인해보면 상단에 Global Encoding, Project Encoding 두 가지가 있고, 아래에 Properties Files (*.properties) 설정이 존재합니다. 해당 부분을 모두 UTF-8로 적용하고, 아래 Properties Files 부분은 Transparent native-to-ascii conversion 부분도 체크해줍니다. pr..

관점 지향 프로그래밍 Spring AOP 개념과 사용법 - 2

Spring AOP 사용법 org.springframework.boot spring-boot-starter-aop 2.4.10 Maven 의존성 추가 // https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-aop implementation group: 'org.springframework.boot', name: 'spring-boot-starter-aop', version: '2.4.10' Gradle 의존성 추가 @Aspect public class AspectTest { @Around("execution(* com.project.hss.aspect.TestService.test(..))") public Obj..

관점 지향 프로그래밍 Spring AOP 개념과 사용법 - 1

AOP 란? (Aspect Oriented Programming) (관점 지향 프로그래밍) AOP(Aspect Oriented Programming)는 프로그램 구조에 대한 또 다른 사고 방식을 제공하여 객체 지향 프로그래밍 OOP(Object Oriendted Programming)를 보완합니다. 객체 지향 프로그래밍에서는 모듈화의 핵심 단위가 클래스인 반면, 관점 지향 프로그래밍에서 모듈화의 단위는 부가 기능적인 측면입니다. 여기서 메서드 aa(), bb(), cc()는 여러 곳에서 쓰이는 공통 기능입니다. 이 공통 기능이 이미지처럼 흩어져 있으면 코드 수정이 있을 때 각각의 메소드의 코드를 다 수정해야 하는 등 유지보수, 재사용을 할 때 불편합니다. 관점 지향 프로그래밍 AOP는 간단하게 이처럼 여..

Spring Boot 실행 배너 변경하는 방법 (banner.txt)

스프링부트 실행 배너 변경하는 방법 Spring Boot를 실행하면 다음과 같이 Spring>> 이라는 배너로 스프링 프로젝트가 실행되었다는 것을 알 수 있습니다. 프로젝트의 배너도 사용자가 원하는대로 바꿀 수 있는데요. 아주 간단합니다. 먼저 src > main > resources 폴더 아래에 banner.txt 파일을 만들어줍니다. banner에 원하는 문구를 입력하고 프로젝트를 실행하면 기존에 Spring>> 배너에서 입력한 값이 출력되는 것을 볼 수 있습니다. Text to ASCII Art Generator (TAAG) patorjk.com 원하는 문구를 이미지화 시키는 것은 위 'Text to ASCll Art Generator' 사이트를 통해 쉽게 가능합니다. 원하는 문구를 입력하고 좌측 ..

Spring Boot 프로젝트 외부 경로 파일 접근하기 addResourceHandlers

Spring Boot 프로젝트 외부 경로에 있는 파일 접근하기 addResourceHandlers 실서버에서 배포하여 실행중인 웹 애플리케이션 상에서 웹 사이트에 접속하여 파일 및 이미지 업로드를 실시할 때, 이미지 업로드 경로를 웹 애플리케이션 내부로 설정할 경우 새로 웹 애플리케이션을 배포할 시 실행 중에 추가했던 이미지 파일들이 삭제되는 현상이 발생합니다. 스프링 부트 프로젝트 실행 시 따로 서버를 설정하지 않은 경우 spring boot 내부 톰캣 서버가 작동되는데, 이 서버가 실행되면서 /tmp 폴더 아래에 해당 서버에 대한 데이터를 하나의 폴더로 저장했습니다. 그리고 새로 구동할 때마다 새로운 폴더를 만들어서 이전에 구동했던 데이터가 담긴 폴더는 무시되고 새로 생성된 폴더에서만 해당 서버의 데..

Spring Boot Logging 이란? (log4j, logback, log4j2)

Log, Logging이란? 로깅(logging)이란 시스템 동작시 시스템의 상태와 작동 정보를 시간의 경과에 따라 기록하는 것을 말합니다. 그리고 그 기록을 로그라고 합니다. 로깅을 하는 이유는 소프트웨어의 동작 상태를 파악하고 문제가 발생했을 때, 그 동작을 파악해 소프트웨어의 문재를 찾아내고 해결하기 위해서 입니다. 즉, 소프트웨어의 디버깅이나 모니터링을 위하여 정보를 기록하는 곳에 사용되는데 기존의 Debugger나 println에 비해 로그가 가지는 장점은 아래와 같습니다. 상황별 Level 지정하여 Level별 메시지를 선택 가능 응용 프로그램의 실행에 대한 흐름과 에러 확인 가능 프레임워크를 이용하여 간단하고 쉬운 사용 환경 조성 기능 모듈 별로 유연하게 메세지 출력 가능 자유로운 출력 위치..

반응형