개발/Spring
[Spring]@Transactional과 JUnit Test
JUnit으로 테스트 케이스를 만들어 실험을 하다가 h2 데이터베이스를 사용했을 때는 되던것이 로컬 MySQL서버와 연결하니 되지 않았다. 문제는 primary key가 reset이 되지 않고 @Transaciton에 대한 이해가 부족하여 많은 문제가 발생했기 때문이다. 이에 @Transactional에 대해 정리해보려고 한다. 다음 글은 두가지 질문에 답을 하고자 한다. 1. JUnit에서 @Before~과 @After의 트랜잭션 범위는? 2. JUnit에서 @Transaction에서는 롤백이 되는데 다른 곳에서는 @Transaction은 롤백이 되지 않을까? 트랜잭션 트랜잭션이란 데이터 베이스의 상태를 변화시키기 해서 수행하는 작업의 단위를 뜻한다. 작업의 단위는 단순히 SQL의 질의어 하나만이 아닌..
[Spring MVC] DispatcherServlet은 어떻게 request랑 controller를 이어줄까?
DispatcherServlet는 HandlerMapping이라는 중요한 역할을 해준다. HandlerMapping이란 request와 이에 맞는 RequestController를 이어주는 역할을 하는데 어떻게 이어주는지 내부 구조가 궁금해졌다. 먼저 Dispatcher의 변수 선언을 보면 public class DispatcherServlet extends FrameworkServlet { ... @Nullable ... private boolean detectAllHandlerMappings = true; ... ... } 다음과 같이 detectAllHandlerMappings라는 부분이 있다. 해당 플래그가 세워지고 아래 함수가 호출이 되는데 해당 함수에서 BeanFactoryUtils에서 bea..
[Spring JPA] ORM과 JPA
[Spring JPA] ORM과 JPA Status: Done ✨ ORM이란? ORM은 객체와 DB 테이블이 매핑을 이루는 것을 의미한다. 즉, 내가 코드 상에서 생성한 객체가 DB상에 어떤 테이블과 연결이 된다는 것을 의미한다. 이렇게 되면 내가 객체를 조작함으로써 DB를 조작할 수 있게 된다. 이러한 예시로 우리는 JPA를 떠올릴 수 있다. 우리는 JPA에서 DB에 대한 접근을 시도할 때 직접 sql 쿼리문을 만들지 않는다. 다만 객체를 이용한 메소드를 통해 이를 관리할 뿐이다. 예시를 보자 SELECT * FROM user → user.findAll() 해당 예시는 user라는 테이블에 모든 정보를 가져오는 것인데 우리는 이를 user라는 객체와 user테이블을 맵핑한 후 findAll이라는 메소드..
[Spring] Controller request 유효성 검사
Request 유효성 검사 서버는 client로 부터 값을 받아서 사용할 때 client로 받은 정보가 서버에서 원하는 형식 혹은 값의 조건에 맞는지 검사를 해야한다. 이를 유효성 검사라고 한다. 이러한 유효성 검사는 class내에 method를 사용하여 검사를 진행했었다. 하지만 유효성 검사는 dto마다 동일하게 혹은 비슷하게 적용 될 수 있고 이에 따라 전체적인 코드 내에서 유효성 검사가 이뤄지는 곳이 여러 Controller에 산재할 수 있다. 따라서 Spring에서는 제약 조건이 부여된 객체에 대해 빈 검증기(Bean Validator)를 이용해서 검증하도록 해주는 어노테이션이 존재한다. 이번에는 이에 대해 정리하려고 한다. BeanValidation 우리가 사용하는 dto에는 원하는 형식이 존재..