본문 바로가기

TIL

2022/01/12 TIL

코드컴플리트2 34장 : 소프트웨어 장인정신에 대한 주제

좋은 설계는 오직 상위 계층에 집중하는 데 많은 시간을 보내고 하위 계층은 무시할 수 있도록 하는 것이다.

좋은 개발자가 되기 위해 저수준까지 공부해야 한다는 생각에는 변함이 없지만 이 탐구의 목표가 저수준을 이해함으로써 고수준에서의 관점이 깊어지기 위함이라는 것을 말하는 것 같다.

AWS TIP

  • EC2 t2.micro t3.micro 의 가격은 같다

JPA Native 쿼리 조심하기

JPA를 사용할 때 @Modifying 애노테이션과 @Query 애노테이션을 사용하면 네이티브 쿼리(SQL)를 사용해서 데이터 베이스에 저장, 수정, 삭제할 수 있다.
하지만 연관관계가 맺어있지 않은 칼럼에 연관관계를 추가했을 때 변경을 감지하지 못한다.

변경 전

Long userId

변경 후

User user

이런 경우 테스트코드가 충분하지 않다면 에러코드가 발생할 확률이 높기 때문에 네이티브 쿼리를 쓸 때에는 충분한 이유가 필요합니다.

JPA 오류

failed to lazily initialize a collection of role

주로 영속성 컨테스트에 없는 엔티티를 조회할 때 발생합니다.
이럴 경우 트랜잭션으로 감싸서 처리하여 영속성 컨텍스트에서 관리하도록 해야 합니다.
참고 : https://www.inflearn.com/questions/33949

JPA @Modifying 정리

@Modifying 애노테이션의 공식문서의 설명은 아래와 같다. (번역이 정확하지 않을 수 있습니다.)

Indicates a query method should be considered as modifying query as that changes the way it needs to be executed.

쿼리 메소드는 수정하는 쿼리로 간주되어야 함을 나타냅니다.

This annotation is only considered if used on query methods defined through a Query annotation.

이 주석은 @Query 애노테이션을 통해 정의된 쿼리 메소드에 사용되는 경우에만 고려됩니다.

It's not applied on custom implementation methods or queries derived from the method name as they already have control over the underlying data access APIs or specify if they are modifying by their name.

기본 데이터 액세스 API를 이미 제어하거나 이름으로 수정하는지 지정하기 때문에 사용자 지정 구현 메서드 또는 메서드 이름에서 파생된 쿼리에는 적용되지 않습니다.

Queries that require a @Modifying annotation include INSERT, UPDATE, DELETE, and DDL statements.

@Modifying 애노테이션이 필요한 쿼리에는 INSERT, UPDATE, DELETE 및 DDL 문이 포함됩니다.


@Modifying 메소드는 쿼리 메소드를 사용 거나 데이터베이스를 읽어올 때는 사용하지 않는다는 것을 알 수 있었습니다.

'TIL' 카테고리의 다른 글

2022/01/14 TIL  (0) 2022.01.14
2022/01/13 TIL  (0) 2022.01.14
2022/01/11 TIL  (0) 2022.01.12
2022/01/10 TIL  (0) 2022.01.11
2022/01/09 TIL  (0) 2022.01.10