본문 바로가기

개념정복💫/스프링 Spring 정복9

JPA 메서드 네이밍 & 반환 타입 Spring Data JPA는 메서드 이름만으로 쿼리를 자동으로 생성해주는 기능을 제공합니다.findByXxx, readByXxx, countByXxx처럼 메서드 이름을 규칙에 맞게 설정하면 편리하게 DB 접근이 가능.1. findByTagNo역할: 특정 tagNo 값을 가진 여러 개 태그 데이터 조회반환 타입: List예시:public interface TagsRepository extends JpaRepository { List findByTagNo(Long tagNo);}주의: DB에서 tagNo가 유일(unique)하지 않다면, 여러 개의 엔티티가 반환될 수 있습니다.2. getTagById역할: 단일 태그를 조회할 때 사용하는 서비스 레이어 메서드내부적으로 findById 등을 사용하여 O.. 2025. 2. 25.
스프링에서 Bean 주입 시 주의사항 (필드 vs 생성자 주입) Spring에서 의존성 주입(Dependency Injection)을 할 때, 흔히 @Autowired를 사용합니다.여기서 필드 주입(Field Injection)과 생성자 주입(Constructor Injection) 두 가지 중 무엇을 사용할지 자주 논의되는데요,주로 권장되는 방식은 생성자 주입입니다.1. 필드 주입(@Autowired)의 문제점가시성 부족: 클래스 내부 필드에 그냥 @Autowired 하면, 어디서 어떻게 주입되는지 한눈에 파악하기 어려움final 사용 불가: 런타임에 주입되므로, 재할당 불가능하게 만들기 힘듦테스트 어려움: 단위 테스트에서 Mock 객체를 주입하기가 번거롭거나 불가능할 수 있음2. 생성자 주입의 장점명시적 의존성: 생성자 시그니처에서 어떤 의존성이 필요한지 바로 확.. 2025. 2. 24.
양방향 매핑 시 무한 루프 문제란? JPA에서 양방향 연관 관계(예: @OneToMany, @ManyToOne 등)를 설정하면,Spring Boot에서 JSON을 직렬화(Serialize)할 때 무한 루프(Infinite Recursion) 문제가 발생할 수 있다.📌 무한 루프 발생 예시@Entitypublic class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; @OneToMany(mappedBy = "user", cascade = CascadeType.ALL) private List orders;}@Entitypublic class Order { @Id @.. 2025. 2. 23.
JPA 일대일(OneToOne) 관계 매핑 JPA에서 1:1 관계를 설정할 때는 @OneToOne과 함께 @JoinColumn 또는 mappedBy 속성을 사용합니다.어떤 엔티티가 외래 키를 가질지에 따라 설정이 달라집니다.1. @JoinColumn 사용 시@OneToOne(cascade = CascadeType.ALL)@JoinColumn(name = "diary_tags_no")private DiaryTagsEntity diaryTagsEntity;DiaryEntity 테이블에 diary_tags_no 컬럼이 생성됨 (주인, owner)2. mappedBy 사용 시@OneToOne(mappedBy = "diaryEntity", cascade = CascadeType.ALL)private DiaryTagsEntity diaryTagsEntity.. 2025. 2. 23.