@Modifying의 동작 알아보기
·
스프링
📌 @Modifying?Spring Data JPA를 사용하는 경우, @Query를 통해 JPQL을 작성하는 상황이 있습니다. 예시로, 상품의 모든 가격을 인상해야 하는 상황이라고 가정해 보겠습니다. 이때 변경 감지를 통해서 정보를 업데이트한다면 상품 개수별로 쿼리가 각각 실행됩니다. 주로 이러한 상황에 우리는 @Query를 통해 벌크 연산을 수행하게 됩니다.@Query("update Item i set i.price = i.price + 1000")@Modifyingvoid increasePrice();@Query는 네임드 쿼리(Named Query)를 인터페이스에서 바로 사용할 수 있게 하는 어노테이션입니다.이때 @Query로 작성된 JPQL이 DML(INSERT, DELETE, UPDATE 쿼리)..
[JPA] 연관관계의 주인이란?
·
스프링
JPA에서 연관관계 매핑은 총 4가지가 존재합니다.@OneToOne@ManyToOne@OneToMany@ManyToMany이때 방향이 단방향인지, 양방향인지에 따라 또 나뉘게 됩니다. 예를 들어 팀과 멤버가 있다고 가정해 봅시다.간단하게 생각해 보면 멤버만 팀을 알고 있다면 단방향, 팀 또한 멤버에 대해 알고있다면 양방향이 됩니다. 양방향 연관관계를 코드로 한번 확인해 보겠습니다.@Entitypublic class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; @Column(name = "USERNAME") private String username; @ManyToOne(fe..
Mybatis vs JPA
·
스프링
프로젝트를 진행하면서 DB 접근 기술로 Mybatis를 사용할지, JPA를 사용할지 고민이 되었습니다. 결국 Mybatis를 사용하기로 결정되었는데, 사용하면서 느낀 점에 대해서 이야기해보겠습니다.저의 짧은 지식으로 작성된 글이니, 틀린 내용이 있을 수 있습니다.Mybatis를 사용하며 불편한 점개발의 중점Mybatis를 사용하게 되면, SQL을 직접 작성해야 합니다. 물론 JPA를 사용한다고 해서 작성할 일이 없는 건 아니지만, Mybatis와 비교하면 상당히 적습니다.이는 전체 개발 시간에서 SQL을 작성하는 시간이 차지하는 비율이 더 높아진다고 할 수 있습니다. 프로젝트를 진행하면서 비즈니스 로직에 해당하는 코드보다 SQL을 작성하는 시간이 많아지게 되면서 소요 시간의 볼륨 자체가 커지는 듯한 느낌..
SELECT 작업에 트랜잭션은 필요할까?
·
스프링
우선 트랜잭션은 간단하게 설명하면, 하나의 안전한 작업을 보장합니다.계좌이체를 예시로 들어보겠습니다.A 잔고 5000원 감소B 잔고 5000원 증가A 잔고에서 5000원이 감소하고 나서, B 잔고가 5000원 증가하기 전에 이 과정이 실패했다고 가정해봅시다. 그러면 A 잔고에서만 5000원이 감소하는 문제가 발생합니다.이 때 데이터베이스가 제공하는 트랜잭션 기능을 사용하면, 둘 다 함께 성공해야 저장하고, 중간에 실패한다면 이전의 상태로 돌아갑니다. 이 때 데이터베이스에 정상 반영하는 것을 커밋(Commit), 작업 중 하나라도 실패해서 이전 상태로 돌아가는 것을 롤백(Rollback)이라고 합니다.스프링에서는 @Transactional 을 통해 트랜잭션을 수행합니다.그런데 ‘단순히 DB에 조회하는 작업..
테스트는 왜 필요할까?
·
스프링
인프런의 Practical Testing: 실용적인 테스트 가이드를 듣고 작성한 글입니다. 테스트 코드는 말 그대로 프로덕션 코드를 테스트하기 위한 코드입니다. 그래서 사실 귀찮다고 느껴질 때가 많습니다.프로덕션 코드를 작성하기에도 시간이 부족한데 테스트 코드를 왜 작성해야 할까요?📌 테스트 코드가 없다면..테스트 코드가 없다면, 프로덕션 코드를 수동으로 테스트하게 됩니다.포스트맨을 이용직접 웹사이트에 접속간략하게 위와 같은 방법으로 만든 기능들을 테스트하게 됩니다. 그리고 추후 프로덕션 코드가 확장하게 됩니다. 기존 코드와 별개로 동작한다면 상관이 없지만, 겹치는 부분이 있다면 어떨까요?테스트 영역이 겹치게 되거나, 코드가 변경된다면 기존 코드가 정상적으로 동작하는지 확인이 필요합니다. 즉, 다시 검..