스프링 프로젝트에서 특히 관계형 DB를 사용하는 경우, 일반적으로 스프링 데이터 JPA + Querydsl의 조합을 사용한다. 사실 자바에서 관계형 데이터베이스와의 연결을 위해서는 JDBC(자바 프로그램 안에서 SQL을 실행하기 위해 데이터베이스를 연결해주는 응용프로그램 인터페이스)가 필요한데, 왜 JDBC가 아닌 JPA를 사용는지, 또한 Querydsl을 함께 사용했을 때의 이점은 무엇인지 간단히 알아보고자 한다. 단순히 Querydsl 설정이 궁금하신 분들을 스킵하고 링크로 바로 넘어가시길... What is ORM? ORM은 Object-Relational Mapping의 약어로, 말 그대로 '객체지향 패러다임을 사용해서 데이터베이스로부터 조회된 데이터를 조작할 수 있도록 하는 기술'을 의미한다. ..
지난 글에서는 Mockito로 mock 객체를 만들고 JUnit과 함께 간단한 테스트를 작성하는 방법과 여러 Mockito 어노테이션에 대해 알아보았다. 이번 글에서는 Mockito를 사용하여 Spring Boot에서 Service 계층을 어떻게 테스트하면 좋을지 여러 테스트 케이스들을 살펴볼 것이다. Mockito에 대한 기본 개념이 궁금하신 분들은 이전 글을 먼저 참고하시길. 스프링 부트에서는 Mockito, JUnit 라이브러리가 자동으로 포함되기 때문에 별도의 설정없이도 테스트 코드를 작성할 수 있다. 그럼 테스트를 작성하기 위해 간단하면서도 의미있는 어플리케이션을 먼저 개발해보자. 이 어플리케이션은 Member, Team 엔티티로만 구성되며, 각 Member는 하나의 Team에 소속된다. (즉 ..
service 계층에서 @Transactional(readOnly = true) 임에도 불구하고 insert 쿼리가 나가는 것을 보게 되었다. @Transactional(readOnly = true)의 정의대로라면 DB에 변경을 가하는 CUD 작업 즉 insert, update, delete는 불가능하다. 이번 글에서는 왜 readOnly 트랜잭션에서 insert 쿼리가 나갈 수 밖에 없었는지 알아보고자 한다. @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @Entity public class Team { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "team_id..
김영한님의 스프링 강의를 들어오면서 CUD에는 @Transactional을 R에는 아무 어노테이션을 붙여오지 않았다. 이게 정석인 줄 알았는데 같이 프로젝트를 진행한 팀원이 service 계층의 모든 메소드에 해당 어노테이션을 붙이는 것을 보고 관련 내용들을 찾아보니 이 3개가 엄연히 말하면 모두 다른 것이었다. 이번 글에서는 @Transactional, @Transactional(readOnly = true), 트랜잭션 어노테이션 없음 간 동작방식의 차이에 대해서 자세히 알아보고자 한다. public class Service { @Transactional public void createOrUpdateOrDeleteSomething() {} @Transactional(readOnly = true) pu..
- Total
- Today
- Yesterday
- facade 패턴
- vscode
- 모두의 리눅스
- JPA
- Transaction
- spring boot
- Git
- 단위 테스트
- spring
- junit5
- Java
- FrontController
- SSE
- Assertions
- github
- Front Controller
- QueryDSL
- ParameterizedTest
- 템플릿 콜백 패턴
- C++
- mockito
- spring aop
- 전략 패턴
- 서블릿 컨테이너
- Linux
- servlet filter
- 디자인 패턴
- rest api
- Gitflow
- Spring Security
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |