Leehyoungwoo / vacation-study

vacation study
0 stars 0 forks source link

2023-12-20 #23

Open Leehyoungwoo opened 6 months ago

Leehyoungwoo commented 6 months ago
Leehyoungwoo commented 6 months ago

일반적으로 JPA나 Hibernate를 이용해 엔티티를 수정하고 저장할 때, 해당 엔티티의 모든 필드를 대상으로 UPDATE 쿼리가 생성됩니다. 즉, 실제로 변경된 필드가 하나라도 전체 필드를 대상으로 업데이트가 이루어집니다.

하지만 @DynamicUpdate 어노테이션을 사용하면, 실제로 변경된 필드만을 대상으로 UPDATE 쿼리가 생성되어, 성능 향상에 도움이 될 수 있습니다. 이 말은 즉슨, 변경된 컬럼만을 대상으로 동적으로 업데이트 쿼리를 만들어 실행한다는 뜻입니다.

예를 들어, User 엔티티의 name과 email 필드가 있고, name 필드만 변경되었다면, @DynamicUpdate가 적용된 경우 name 필드만을 대상으로 하는 UPDATE 쿼리가 생성됩니다.

다만, @DynamicUpdate를 사용할 때 주의해야 할 점은 이 어노테이션을 사용하면 Hibernate가 내부적으로 추가적인 처리를 해야 하므로, 반드시 필요한 경우에만 사용하는 것이 좋습니다. 또한, 이 어노테이션은 Hibernate에서만 제공하는 기능으로, 다른 JPA 구현체에서는 동작하지 않을 수 있습니다.

Leehyoungwoo commented 6 months ago

이 어노테이션을 사용하면, Spring Security는 메소드 호출 전후에 보안 표현식을 평가하여 접근 제어를 수행할 수 있습니다. 이를 통해 각 메소드에 대한 세부적인 접근 제어를 설정할 수 있으며, 이는 서비스 레이어의 보안을 강화하는 데 유용합니다.

prePostEnabled 속성을 true로 설정하면, @PreAuthorize와 @PostAuthorize 어노테이션을 사용하여 메소드 호출 전후의 보안 표현식을 평가할 수 있습니다.

@PreAuthorize는 메소드를 호출하기 전에 보안 표현식을 평가합니다. 만약 이 표현식이 false를 반환하면, 메소드는 호출되지 않습니다. @PostAuthorize는 메소드 호출 이후에 보안 표현식을 평가합니다. 이 어노테이션은 메소드의 반환값을 고려할 수 있으므로, 반환된 객체에 대한 접근 제어를 수행하는 데 사용될 수 있습니다. 예를 들어, 다음과 같이 @PreAuthorize를 사용하여 특정 권한을 가진 사용자만 메소드를 호출할 수 있도록 할 수 있습니다.

Leehyoungwoo commented 6 months ago
Leehyoungwoo commented 6 months ago

무결 제약 조건이란 데이터베이스에 저장되는 데이터의 정확성을 보장하기 위해 설정하는 규칙입니다. 예를 들어, 고유해야 하는 칼럼에 중복된 값이 들어가려고 하거나, 외래키 제약 조건이 있는 칼럼에 존재하지 않는 값이 들어가려고 할 때, 또는 NOT NULL 제약 조건이 있는 칼럼에 NULL 값이 들어가려고 할 때 이 예외가 발생할 수 있습니다.

다음은 DataIntegrityViolationException이 발생하는 경우의 예시입니다:

Leehyoungwoo commented 6 months ago

@NotNull: 이 어노테이션이 붙은 필드의 값이 null이 아님을 검사합니다. 즉, 필드의 값이 null이면 유효성 검사에서 실패합니다. 하지만 필드의 값이 공백이거나 빈 컬렉션일 경우에는 유효성 검사를 통과합니다. @NotEmpty: 이 어노테이션이 붙은 필드의 값이 null이 아니고, 또한 빈 문자열이나 빈 컬렉션이 아님을 검사합니다. 즉, 필드의 값이 null이거나 빈 문자열, 또는 빈 컬렉션일 경우 유효성 검사에서 실패합니다. 하지만 필드의 값이 공백만으로 이루어진 문자열일 경우에는 유효성 검사를 통과합니다. @NotBlank: 이 어노테이션은 문자열에만 사용할 수 있으며, 필드의 값이 null이 아니고, 빈 문자열이 아니며, 공백만으로 이루어진 문자열이 아님을 검사합니다. 즉, 필드의 값이 null이거나 빈 문자열, 또는 공백만으로 이루어진 문자열일 경우 유효성 검사에서 실패합니다. 이러한 어노테이션들은 각각의 상황에 맞게 적절하게 사용하면, 데이터의 유효성을 보장하고 의도치 않은 오류를 미리 방지하는 데 도움이 됩니다.