728x90

Spring 34

Bean의 Scope 중 싱글톤과 프로토타입의 차이

Scope: Bean Object가 생성되어 존재할 수 있는 범위 1. 싱글톤(Singleton) Scope 아무런 설정을 하지 않으면 기본적으로 싱글톤 Scope를 가지며, Property가 공유된다. DI DL 시 매번 같은 Object가 사용된다. 싱글톤 Scope를 가지는 Bean이 많아지면 어플리케이션 구동 시 등록될 Bean의 수가 많아짐으로 구동속도가 느려지게 된다. 등록방법 -> @Component Annotation 사용 시, 기본적으로 싱글톤 Scope을 가지는 Bean으로 등록된다. 2. 프로토타입(Prototype) Scope 싱글톤 Scope과 달리 DI DL 시 매번 새로운 Object가 사용된다. 등록방법 -> @Component Annotation과 더불어 @Scope("pr..

Spring 2024.04.19

(@Scheduled 관련) 스케쥴러 관련 메소드안에 JPA 저장하는 메서드가 같이 있을 경우 저장이 안되는 오류

스케쥴러 메소드안에 JPA 저장하는 메서드가 같이 있을 경우, 저장이 안되는 오류가 발생하였다. 스케쥴러가 돌면서 JPA의 프록시에 있는 값에 영향을 준다(프록시 초기화)고 한다. 또한, 트랜잭션 매니저가 @EnableTransactionManagement를 통해 DataSourceTransactionManager로 구성된 경우, 하이버네이트의 begin() 메소드가 AbstractTransactionImpl을 부르지 않는다고 한다. 해결 → @Scheduled 클래스와 @Transacional이 있는 xxService를 분리하여 해결한다. //예제 class schedule { @Schedule go() { service.call(); } } @Transactional class xxService { ..

Spring 2023.08.24

11) Logback 설정

아래 내용은 https://github.com/beaver84/setting-test 에서 실제 소스를 확인할 수 있습니다. Logback 의존성 추가 implementation 'org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16' application.properties 에 설정 추가 logging.level.root=debug logging.level.org.springframework.web=DEBUG logging.config=classpath:logback-local.xml logback-local.xml 파일 추가 // 30초마다 자동 리로드 설정 %green(%d{ISO8601}) %highlight(%-5level) [%magenta(%t)] ..

10) Spring Data Redis 셋팅

아래 내용은 https://github.com/beaver84/setting-test 에서 실제 소스를 확인할 수 있습니다. CacheRepository - RedisRepository의 인터페이스(객체 지향의 DIP를 지키기 위한) import java.time.Duration; import java.util.Map; public interface CacheRepository { String getValue(String key); void setValue(String key, String value, int minutes); void setValue(String key, String value); void setValue(String key, String value, Duration duration);..

9) 비밀번호 암/복호화(Encrypt/Decrypt) 설정

아래 내용은 https://github.com/beaver84/setting-test 에서 실제 소스를 확인할 수 있습니다. 비밀번호를 암호화할 때, RSA → Base64 인코딩 알고리즘을 사용한다(복호화는 반대). private final AuthEncrypter authEncrypter; @Transactional public Member login(LoginFormDto loginForm, HttpServletRequest request, HttpServletResponse response) { ... //클라이언트에서 온 암호를 복호화하여 DB에 저장된 암호를 복호화 한것과 비교한다. if (StringUtils.equals(authEncrypter.decrypt(member.getPasswor..

8) API Response(@ControllerAdvice) 설정

아래 내용은 https://github.com/beaver84/setting-test 에서 실제 소스를 확인할 수 있습니다. @ControllerAdvice는 Spring에서 제공하는 Annotation입니다. Spring 애플리케이션에서 예외 처리를 관리하는 데 사용됩니다. 단일 클래스 또는 하나의 메서드가 아닌 애플리케이션의 모든 클래스에서 발생하는 모든 예외를 처리할 수 있습니다. API 서버일 경우, 기본적으로 성공함을 가정한 API 응답을 정의하고, 그다음 Exception이 발생했을 때, 응답을 정의하는 것이 일반적이다(성공 → 실패 advice 참조) 200(성공)일 때, 적용 예시 @ControllerAdvice(basePackages = "com.marvrus.moon_app_api.co..

7) JWT(JSON Web Token) 설정

아래 내용은 https://github.com/beaver84/setting-test 에서 실제 소스를 확인할 수 있습니다. JWT(JSON Web Token)는 당사자 간에 정보를 JSON 개체로 안전하게 전송하기 위한 간결하고 독립적인 방법을 정의하는 개방형 표준( RFC 7519 )입니다. JWT는 비밀( HMAC 알고리즘 포함) 또는 RSA 또는 ECDSA를 사용하는 공개/개인 키 쌍을 사용하여 서명할 수 있습니다. 공개/개인 키 쌍을 사용하여 토큰에 서명할 때 서명은 개인 키를 보유한 당사자만이 서명한 당사자임을 인증합니다.(세션, 쿠키 기반 인증과 차이) 권한 부여 : JWT를 사용하는 가장 일반적인 시나리오입니다. Single Sign On은 오버헤드가 적고 다양한 도메인에서 쉽게 사용할 수..

Spring/Security 2023.04.18

mapStruct 소개 및 활용

아래 내용은 https://github.com/beaver84/setting-test 에서 실제 소스를 확인할 수 있습니다. JPA를 쓰다보면 Entity로 값을 가져오는 일이 많은데, 이를 그대로 리턴하는 일은 드물고 DTO를 상황에 맞게 가공을 거쳐서 반환을 하게 된다. 이 때, 단순 필드(컬럼)를 반복 나열하는 일이 많은데, 반복작업을 편리하게 도와주는 라이브러리 중 하나가 mapStruct 이다. 남용하기 보다는 필드가 많은 경우만 사용하는 것을 추천한다. //문제 상황 - entity에서 DTO로 변환하는데 너무 많은 코드가 필요 private GoodsDTO getGoodsDTO(Goods goods) { // return GoodsDTO.builder().id(goods.getId()) //..

6) 스프링 시큐리티(spring-security) 적용

스프링 시큐리티 적용 방법 이제 build.gradle Spring Security 의존성을 추가해준다. 프로젝트를 실행하니 처음 보는 security password가 콘솔에 찍히게 된다. implementation 'org.springframework.boot:spring-boot-starter-security' 임의로 localhost:8080/hello에 접근을 해보았다. 302 상태가 반환되며 localhost:8080/login으로 리다이렉트가 되었다. 위 로그인 화면은 Spring Security가 기본으로 제공해주는 화면이다. Username에 user, Password에 콘솔에 찍힌 문자열을 입력하면 정상적으로 localhost:8080/hello로 넘어가게 된다. 참고로 localhos..

5) 스프링 시큐리티(spring-security) 개요

스프링 시큐리티(Spring Security) 개요 Spring Security는 Spring 기반의 애플리케이션의 보안(인증과 권한, 인가 등)을 담당하는 스프링 하위 프레임워크이다. Spring Security는 '인증'과 '권한'에 대한 부분을 Filter 흐름에 따라 처리하고 있다. Filter는 Dispatcher Servlet으로 가기 전에 적용되므로 가장 먼저 URL 요청을 받지만, Interceptor는 Dispatcher와 Controller사이에 위치한다는 점에서 적용 시기의 차이가 있다. Spring Security는 보안과 관련해서 체계적으로 많은 옵션을 제공해주기 때문에 개발자 입장에서는 일일이 보안관련 로직을 작성하지 않아도 된다는 장점이 있다. 아래 내용은 https://git..

728x90