728x90

Spring/초기 setting 11

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..

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..

4) Querydsl 설정

Querydsl 설정 아래 내용은 https://github.com/beaver84/setting-test 에서 실제 소스를 확인할 수 있습니다. JPA 설정에 이어서 편리한 기능을 제공하는 Querydsl 설정을 추가한다. 우선, build.gradle 에 라이브러리를 추가 후, gradle을 새로고침을 한다. //Querydsl 버전 관련 buildscript { ext { queryDslVersion = "5.0.0" } } plugins { ... //Querydsl 관련 추가 id 'com.ewerk.gradle.plugins.querydsl' version '1.0.10' ... } dependencies { ... //Querydsl 관련 실제 lib 추가 implementation "com..

3) JPA 다중 스키마 설정

JPA 다중 스키마 설정 아래 내용은 https://github.com/beaver84/setting-test 에서 실제 소스를 확인할 수 있습니다. JPA 구조 Persistence: EntityManagerFactory 인스턴스를 얻기 위한 정적 메서드를 포함하는 클래스이다. EntityManagerFactory: EntityManager의 팩토리 클래스입니다. EntityManager의 여러 인스턴스를 생성하고 관리한다. EntityManager: 개체에 대한 지속성 작업을 제어하는 인터페이스이다. 쿼리 인스턴스에서 작동합니다. Entity 엔터티는 데이터베이스에 레코드로 저장되는 persistence 개체입니다. Persistence Unit: 모든 엔터티 클래스 집합을 정의합니다. 애플리케이션에..

2) MyBatis 3.0 다중 스키마 설정

MyBatis 3.0 다중 스키마 설정 아래 내용은 https://github.com/beaver84/setting-test 에서 실제 소스를 확인할 수 있습니다. 우리가 사용하는 Spring와 하이버네이트에서 제공해주는 @Transactional는 알아서 트랜잭션을 관리해주는 마법의 키워드가 아니다. 추상화해서 사용할 뿐이지 실제는 위와같이 JDBC 트랜잭션을 사용하여 구현한다. DAO에서 Database에 접근하기 위해서는 Spring-jdbc가 필요하고, 이는 DataSource 정보로부터 구할 수 있다. 또한, 스프링은 트랜잭션 처리를 TranscationManager 객체를 통해 처리한다. 구현체는 갈아끼울 수 있게 인터페이스인 PlatformTranscationManager가 주입되어 사용된다..

728x90