본문 바로가기

Web/Spring15

[Spring] 트랜잭션 사용 조심하기 😇 들어가기 앞서 로그인 실패 시 핸들링을 구현하면서 발생했던 트랜잭션으로 발생했던 이슈가 있어서 공유하고자 합니다. 트랜잭션에 대해서 추가적인 내용들은 따로 정리를 할 예정입니다. 🙋 트랜잭션이란? 하나의 작업의 단위를 트랜잭션이라고 합니다. 스프링에서는 트랜잭션을 편하게 사용할 수 있도록 AOP와 어노테이션 기반으로 동작합니다. 우리가 꼭 짚고 넘어가야 것은 트랜잭션은 기본적으로 상위 트랜잭션에 포함된다 입니다. 1️⃣ 로그인 실패 로그인 실패 핸들링은 다음과 같은 요구사항을 가집니다. 로그인 실패 시 로그인 실패 회수를 카운팅한다. 카운팅한 결과를 예외에 담아서 던진다. 코드는 다음과 같이 작성했습니다. 인증을 진행하다가 BadCredentialsException가 발생하면 핸들링 로직을 실행합니다.. 2023. 5. 29.
[Spring] @ModelAttribute 🌞 들어가기 앞서 스프링에서 요청한 파라미터를 바인딩하는 방법은 여러 가지 있다. 오늘은 그중에서 @ModelAttribute에 대해서 이야기해 볼 생각이다. 사용은 쉽지만 주의할 점이 있기 때문에 어떻게 동작하는지와 같이 주의점도 정리해 보겠다. 😋😋 🪄 @ModelAttribute란? 파라미터를 바인딩하는 여러 어노테이션 중에 모델 객체를 바인딩하는 어노테이션이다. 다음과 같은 모델 객체(혹은 DTO)가 존재할 때 정보를 받아오는 방법은 여러 가지가 있겠지만 이 글에서는 @RequestParam과 @ModelAttribute를 비교해서 사용법을 알아보겠다! 가볍게 참고만 하자 ㅎㅎ.. // 모델 객체 public class User { private String name; private int age.. 2023. 4. 19.
[Spring] @Valid, @Validated과 Custom Annotation (2) 😋 들어가기 앞서 1편에 이어서 커스텀 어노테이션을 구현하고 이에 필요한 예외를 어떻게 처리했는지 다루겠다! 유효성 처리를 위해서 세 가지 단계가 필요하다. 어노테이션 구현하기 유효성 검사기 구현하기 발생하는 예외 다루기 🪄 어노테이션 구현하기 비밀번호를 검증하는 어노테이션을 통해서 이해해 보겠다! 어노테이션이 어떻게, 어디서, 무엇으로, 누구에게 사용될지 등의 정보는 메타 어노테이션과 필드값으로 명시해줘야 한다. @Target({ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) @Constraint(validatedBy = PasswordFormatValidator.class) public @interface PasswordFormat { String .. 2023. 3. 21.
[Spring] @Valid, @Validated과 Custom Annotation (1) 👀 들어가기 앞서 이번에 프로젝트를 진행하다가 DTO와 객체에 대한 유효성 검증을 어떻게 할까 많이 고민했다. 별도로 검증하는 클래스를 만들자니 대상이 많이 없어서 괜히 구현하면 의존성만 커질 것 같았다. 그래서 Annotation을 구현해서 검증을 해보도록 했다. 🤔 왜 사용했나요? 커스텀 어노테이션은 양날의 검이라고 생각한다. 덕지덕지 붙은 어노테이션 불호..! 어노테이션을 까보지 않는 이상 어떤 의도로 동작하는지 정확하게 알 수 없기 때문이다! 하지만 간결함이 큰 강점이기 때문에 고민했다. 이메일을 후보키처럼 사용해 많은 로직에 이메일을 요구했는데, 검증용 클래스가 그만큼 여러 곳에서 사용되었다. 커스텀을 통해서 검증 클래스를 없애 의존성을 줄이고, 서비스 계층에 들어오기 전에 처리하고 싶었다. 추.. 2023. 3. 19.
[토비의 스프링] 테스트 (2장) 2.1 UserDaoTest 다시 보기 2.1.1 테스트의 유용성 UserDao에서 관심을 분리하고 기능을 확장할 때 테스트가 없었다면 불안했을 것이다. 머릿속으로 시뮬레이션을 돌려보는 방법은 100% 확신할 수 없기 때문에 테스트란 내가 예상하고 의도했던 대로 코드가 정확히 동작하는지 확신할 수 있게 해주는 작업이 필요하다. 2.1.2 UserDaoTest의 특징 웹을 통한 DAO 테스트 방법의 문제점 웹 화면을 통한 테스트는 가장 흔히 쓰이는 방법이지만 단점이 너무 많다. 테스트를 위해 사용되는 자원이 많기 때문에 DAO만 테스트하고 싶은데 다른 곳에서 문제가 발생할 수 있다. 작은 단위의 테스트 테스트 수행 과정을 간단히 하고 오류를 쉽게 찾을 수 있게 하기 위해서 작은 단위로 쪼개는 것이 중요하다.. 2023. 1. 16.
[토비의 스프링] 오브젝트와 의존관계 (1장) 1.2 dao의 분리 객체지향의 꽃은 결국 관심사를 분리하는 것 (Seperating of Concerns) 왜? 자유로운 변경, 발전, 확장을 위해서 어떻게? 관심이 다른 것을 가능한 분리하여 서로 영향을 주지 않게 템플릿 메소드 패턴 : 슈퍼 클래스에 기본적인 기능을 구현하고 기능의 일부를 서브 클래스에 필요에 맞게 구현할 수 있도록 하는 패턴. (protect로 선택 가능하게, 추상 메서드로는 꼭 구현하게) 여기서 템플릿 메소드란? 기본 알고리즘 골격을 담은 메소드, 애플리케이션의 run() 같은게 템플릿 메서드이다. 훅 메서드 : protect로 구현된 선택적으로 오버라이드가 가능한 메서드 팩토리 메서드 패턴 : 서브 클래스에서 구체적인 오브젝트 생성 방법과 클래스를 결정하게 하는 패턴. 슈퍼클래.. 2022. 12. 21.