JVM/Spring

JVM/Spring

[Spring] enum으로 @Secured 권한 관리

😀 서론 @Secured("ROLES_GUEST") 기존 권한 관리방법은 매직리터럴로 처리가 되어 있었습니다. 이는 오타날 가능성도 있고, 나중에 관리하기도 힘들다는 판단을 하였고, 이를 enum 으로 처리한 과정을 정리해봅니다. 🥸 본론 @Secured 애노테이션의 value는 String[] 를 받도록 정의되어 있기 때문에 enum 값을 받지 못합니다. 그러면 어떻게 해야할까? @RequiredArgsConstructor public enum UserGrade { ADMIN(ROLES.ADMIN, null), STAFF(ROLES.STAFF, ROLES.ADMIN), GUEST(ROLES.GUEST, ROLES.STAFF); private final String roleName; private fin..

JVM/Spring

[Spring] @PropertySource yaml 파일 Load 하는 방법

🙂 서론 제가 느끼기엔 properties 보다는 yaml 파일이 더 가독성이 좋아 관리하기 쉽다고 생각합니다. 설정 파일을 불러와 객체를 만들 때 보통 @PropertySource 애노테이션을 사용하지만, default로 yaml을 읽지 못합니다. 그렇다고, yaml과 properties를 같이 사용하는 건 통일성이 없고, 그럴 필요가 없다 생각됩니다. 그렇기 때문에 이를 yaml 파일을 읽을 수 있도록 설정한 방법을 정리해봅니다. 😛 본론 가져올 yml 파일의 설정 값입니다. @Getter @RequiredArgsConstructor @ConstructorBinding @ConfigurationProperties(value = "jwt") @PropertySource(value = "classpath..

JVM/Spring

[SPRING] 스프링 MVC 구조? (DispatcherServlet?)

🙃 서론 스프링은 정말 사용자가 사용하기 편한 기능들을 많이 제공해준다. 그 중에서도 컨트롤러는 정말 다양한 파라미터와 리턴 값을 사용자 뜻대로 이것저것 가져와서 사용할 수 있다. 예를 들어 파라미터로 String이나 Integer 로 받을 수도 있고, 직접 만든 DTO 객체로도 받을 수 있다. 또, 리턴 값으로 String으로 view 경로를 보낼 수도 있고, 진짜 String을 보낼 수도 있고, ModelAndView 를 보낼 수도 있다. 어떻게 Spring은 이렇게 다양하게 사용자 입맛대로 만들 수 있게 해주는지에 대해서 파악해보자. 스프링 MVC에서 받을 수 있는 인수 - 링크 😆 본론 Dispatcher Servlet 일단, 가장 중요한 Dispatcher Servlet에 대해서 개념을 잡고 가..

JVM/Spring

[SPRING] @Valid @Validated 사용하기 - java bean validation

😎서론 이전에는 @Valid 가 어떻게 흘러가는지 알아봤다면 이번에는 사용하는 방법에 대해서 간략하게 적어보려 한다. 이전 글 - [SPRING] @Valid 어떻게 동작할까 - java bean validation 목차 - @Valid 사용법 - Custom Aonntation - @Valid 예외처리 - @Valid 에선 안되는 것들 - @Validated 동작 원리 - @Validated 사용법 - @Validated 예외처리 🙄본론 어노테이션 종류가 어떤 것들이 있는지는 API 공식 문서를 참고해보면 좋을 것 같습니다. API 공식문서 - 링크 @Valid 사용법 의존성 추가 // Gradle implementation 'org.springframework.boot:spring-boot-start..

JVM/Spring

[SPRING] @Valid 어떻게 동작할까 - java bean validation

😐서론 애플리케이션 개발을 진행할 때 검증은 가장 중요한 작업이다. 클라이언트에서 데이터가 제대로 넘어왔는지, 비지니스 로직에서 인수가 제대로 된 값이 넘어왔는지, db에 값이 저장 혹은 수정되기 전에 제대로 된 값이 맞는지 등 정말 다양한 곳에서 데이터 검증이 필요하며 놓쳐서는 안되는 중요한 작업이다. 이 검증을 쉽게 할 수 있는 @Valid 에 대해서 알아보았다. 목차 - @Valid 는 뭐지? - @Valid 왜 사용하는거지? - @Valid 어떻게 사용하는거지? - Jakarta Validation API 살펴보기 - Jakarta Validation API 구현체 찾기 - Hibernate Validator - Spring 에서 @Valid 동작 원리 🙄본론 @Valid 는 뭐지? JSR 303..

JVM/Spring

[SPRING] 스프링의 컨트롤러는 어떻게 여러 작업을 처리할까?

🤔서론 'TDD, Clean Code with Java' 자동차 경주 미션을 진행하던 도중 해당 리뷰를 받았고, 궁금한 게 생기게 되었다. 스프링의 컨트롤러는 Bean을 통해 싱글톤으로 하나의 객체만이 생성이 될텐데.. 어떻게 여러 작업을 처리하지..?🤔 😲본론 제가 이상하다고 생각했던 부분은 이 부분입니다. 1개만이 생성된 컨트롤러가 어떻게 동시에 10건이든 10만건이든 아무 문제 없이 잘 처리할 수 있지?? 고민의 답을 찾기 위해 구글을 돌아다니던 중 저와 같은 고민을 한 글을 발견하고 답을 찾았습니다. (블로그) Controller 1개가 어떻게 수 많은 Request를 처리하는가? (spring mvc, tomcat thread, singleton bean) Controller 1개가 어떻게 수 ..

JVM/Spring

[SPRING] @Transactional readOnly 성능향상 이유

🙄서론 트랜잭션에 있는 readOnly가 읽기전용모드로서 cud가 발생하게 되면 에러를 뱉어주고, 읽기만 가능한 기능으로 알고 있었다. 그런데, 왜 성능향상에도 도움이 되는가에 대해선 자세히 몰라서 알아보았다. 😎본론 @Transactional(readOnly = true) 트랜잭션에서 readOnly=true 라는 옵션을 설정한다. FlushMode 를 MANUAL로 변경하여 dirty checking(변경감지) 을 생략한다. flush와 commit이 일어나지 않고, 이로 인해 영속성 컨텍스트에서는 스냅샷을 보관하지 않아 약간의 성능향상이 이루어지는 것. 크게 눈에 띄게 성능향상이 이루어지지는 않는다고 한다. 보통 사용하는 이유로는 해당 메소드가 변경이 되면 안되고, 조회하는 걸 명확하게 명시해주기 ..

JVM/Spring

[SPRING] synchronized와 @Transactional 을 동시에 사용 시 문제점

😗서론 @Transactional 어노테이션과 synchronized을 동시에 사용하고 싶은 경우가 있을 수 있다. 트랜잭션 격리수준과 별개로 해당 메소드를 동기화를 적용시키고 싶을 때. 하지만, 한 메소드 위에 해당 Transactional, Synchronized를 동시에 적용 시 원하는대로 작동하지 않을 수 있다. 그 이유를 알아보자. 😎본론 아래 예시는 스택오버플로우를 번역하여 풀어서 정리했습니다. 🤨뭐가 문제지? 일단 Synchronized를 사용하는 이유는 해당 메소드를 한 쓰레드에서만 돌리기 위해서다. 하지만, 트랜잭션이 같이 정의가 되어있다면 첫 번째 쓰레드가 끝나기 전 두 번째 쓰레드가 발동할 수도 있다. 그 이유를 살펴보자. @Transactional public synchronized..

Hyo Kim
'JVM/Spring' 카테고리의 글 목록 (3 Page)