본문 바로가기
반응형

개발/Spring7

[Spring] AOP에서 컨트롤러에서 JSON을 반환하는 지 확인하는 방법 / Class, Method에 특정 어노테이션이 있는지 확인하는 방법 Controller에 들어오는 파라미터와 응답하는 코드를 로그로 남기고, DB에 저장하려고 AOP를 이용했다 이때, 컨트롤러에서 데이터를 반환할때 @RestController, @ResponseBody 어노테이션이 있는 경우 JSON 형식으로 반환하는데 이걸 체크하기 위해서 아래 코드를 사용하여 확인했다 핵심은 리플렉션을 이용하여 정보를 확인하는 것! getClass().isAnnotationPresent(RestController.class); getMethod().isAnnotationPresent(ResponseBody.class); private boolean isJsonReturn(ProceedingJoinPoint joinPoint) { // @RestController 인지 확인 boolea.. 2023. 7. 14.
[Spring] @Transactional 핵심 정리 / 우선순위, 프록시, 예외 @Transactional 우선순위 1. 클래스의 메서드 2. 클래스의 타입 3. 인터페이스의 메서드 4. 인터페이스의 타입 -> 인터페이스에는 @Transactional을 쓰지 않는 것이 좋다(스프링5.0 이하에서 인식X, 다른 AOP 방식에서 적용 안 될 가능성) @Transactional과 프록시 - @Transactional 애노테이션이 클래스나 메서드에 하나라도 있으면 트랜잭션 AOP는 프록시를 만들어서 스프링 컨테이너에 등록 - 동일 클래스 내에 @Transactional이 붙지 않은 메서드를 호출 후 @Transational이 붙은 메서드를 호출할 때 트랜잭션 적용 안됨 이유: @Transactional이 있는 클래스는 프록시가 만들어짐.. 1) 프록시의 메서드(@Transactional X.. 2022. 11. 26.
[Springboot] 라이브러리 의존성 버전 확인 및 선택하는 방법! dependency version 사용하는 스프링 버전과 호환이 잘되는 라이브러리 의존성 버전을 사용하려면 공식 문서에서 확인하면 된다 아래 과정을 따라가서 버전을 확인해보자! 1. 스프링부트 사이트에 들어가서 사용하려는 스프링 부트 버전의 Reference Doc. 을 클릭! https://spring.io/projects/spring-boot#learn Spring Boot Commercial support Business support from Spring experts during the OSS timeline, plus extended support after OSS End-Of-Life. Publicly available releases for critical bugfixes and security issues when req.. 2022. 3. 31.
[Spring Validation] BindingResult 오류메시지 추가 / properties 파일 / 샘플 코드 @BindingResult를 @ModelAttribute 뒤에 넣어주면 검증 값을 담아줄 수 있다. BindingResult는 Errors 인터페이스를 상속받은 인터페이스이며, 스프링에서는 BeanPropertyBindingResult 구현 클래스를 넘겨준다 rejectValue 메서드는 다양한 파라미터로 오버로딩되어있는 메서드인데 여기서 오류 필드와 에러 코드, 에러 아규먼트, 디폴트 메시지를 지정해줄 수 있다 AbstractBindingResult 추상 클래스는 AbstractErrors 추상 클래스를 상속받는다 컨트롤러 코드 샘플 @PostMapping("/test") public String test(@ModelAttribute Item item, BindingResult bindingResult.. 2022. 2. 20.
[Spring Security] 요청 권한 설정 / HttpMethod, url 패턴으로 접근 권한 관리 WebSecurityConfigurerAdapter 상속 & configure 오버라이드 # 권한 체크할 패턴 적용 방법 - antMatchers() 1. HttpMethod 로 권한 체크 antMatchers(HttpMethod.POST) 2. HttpMethod + url 패턴(문자열 가변인수)으로 권한 체크 antMatchers(HttpMethod.GET, "/api/products/**", "/api/abc/**") 3. url 패턴(문자열 가변인수)으로 권한 체크 antMatchers("/api/products/**", "/api/abc/**") # 권한 체크 방법 - antMatchers 뒤에 호출 1. hasRole(String role) - USER, ADMIN 등 지정한 역할 허용(앞에 .. 2022. 1. 21.
[Springboot] DB migration Tool / Flyway 설정 방법 1. build.gradle에 flyway 의존성 추가 implementation 'org.flywaydb:flyway-core' 2. 스크립트 경로 생성 1) src/main/resources/db/migration Flyway는 기본적으로 classpath:db/migration 경로에서 스크립트를 읽어온다 2) 하나 이상의 경로에서 읽어오려면 ,(comma)를 이용해서 application.yml에 설정 spring: flyway: locations: "classpath:db/migration,filesystem:/opt/migration" 3) 특정 데이터베이스 유형에 따라 경로를 사용 가능 지원되는 데이터베이스 목록은 DatabaseDriver에서 확인 가능 spring: flyway: loca.. 2022. 1. 19.