IT/Spring

스프링 어노테이션

iamhyeon 2025. 7. 15. 23:52

 

 

 

@Transactional

@Transactional
public void createUser(User user) {
    userRepository.save(user);
    emailService.sendWelcomeEmail(user);
}
  • 해당 범위 내의 DB 작업을 하나의 트랜잭션으로 묶어 처리한다.
  • 모두 성공하면 커밋, 하나라도 실패하면 모두 롤백한다.
  • 적용 위치에 따라 다르게 작동한다:
    • 클래스에 선언 → 해당 클래스의 모든 public 메서드에 적용
    • 메서드에 선언 → 해당 메서드에만 적용
  • 주의: private, protected, default 접근자 메서드에는 적용되지 않다.
  • 옵션:
    • @Transactional(rollbackFor = Exception.class)

 

@Valid

@PostMapping("/user")
public ResponseEntity<?> createUser(@RequestBody @Valid UserRequestDto dto) {
    ...
}
  • DTO의 필드 유효성 검사에 사용한다
  • DTO 클래스에 @NotNull, @Size, @Pattern 등의 제약 조건과 함께 사용한다 
  • Spring은 @Valid가 붙은 파라미터를 자동으로 검사하고, 실패 시 400 Bad Request 반환

 

롬복 어노테이션

@NoArgsConstructor 기본 생성자 생성
@AllArgsConstructor 모든 필드를 파라미터로 받는 생성자 생성
@RequiredArgsConstructor final 혹은 @NonNull 필드만 생성자에 포함
@SuperBuilder 부모/자식 클래스 간 builder 패턴을 지원 (상속 시 builder 문제 해결)
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class UserDto {
    private String name;
    private String email;
}

 

 

 

 

MapStruct 관련 어노테이션

 

@Mapper

  • DTO ↔ Entity 간 매핑을 자동으로 처리해주는 인터페이스 정의
  • 컴파일 타임에 실제 구현체가 생성된다 
@Mapper(componentModel = "spring")
public interface UserMapper {
    UserDto toDto(User entity);
}

 

 

@Mapping + @MappingTarget

@Mapping(source = "type", target = "userType", qualifiedByName = "userTypeToString")
UserDto toDto(User user);
  • source → 원본 필드
  • target → 대상 필드
  • qualifiedByName → 커스텀 변환 메서드를 지정할 때 사용
void updateEntity(@MappingTarget User user, UserDto dto);
  • @MappingTarget 이 붙은 객체는 새로 생성하지 않고, 기존 객체를 수정한다

 

@ColumnDefault("0")

@ColumnDefault("0")
@Column(nullable = false)
private Integer count;
  • DDL 생성 시 DB 컬럼의 기본값을 0으로 설정
  • int, boolean과 같은 기본형 타입에 자주 사용한다
  • Hibernate가 사용하는 DB Dialect와 JDBC 드라이버가 이를 자동으로 처리한다 

 

전역 AttributeConverter

@Converter(autoApply = true)
public class BooleanToIntegerConverter implements AttributeConverter<Boolean, Integer> {
    ...
}
  • 예: true → 1, false → 0 으로 DB 저장
  • 전역 설정 시, @Convert 없이도 적용됨
  • Hibernate + JDBC 드라이버가 자동으로 변환 처리한다 

 

반응형