학교 수업 정리용입니다.
🥠 SpringBoot
- H2 database library와 spring-jdbc 모듈이 classpath에 포함되어 있다면, 명시적 설정(JavaConfig/XML)을 하지 않아도 Spring Boot가 필요한 bean들을 자동 설정 및 생성함
🥠 @SpringBootApplication
- @SpringBootApplication: 다음 세 가지 annotations들을 포함
- @SpringBootConfiguration: @Configuration 기능을 포함 (JavaConfig)
- @EnableAutoConfiguration: classpath를 기반으로 자동 설정 실행
- @ComponentScan: 현재의 package를 기반으로 자동 bean scan 실행 (하위도)
🥠 Lombok의 주요 annotations
- @Getter, @Setter
- @ToString
- @EqualsAndHashCode
- equals() 및 hashCode() method를 생성 (hashMap, hashCode)
- hashCode: 객체의 해시 코드를 반환하는 메서드, 객체의 고유 식별과 해시 기반 컬렉션에서의 빠른 검색을 위해 사용됨
- hashMap: 키-값 쌍을 저장하는 자료구조, 내부적으로 해시 테이블을 사용하여 데이터를 저장 및 검색, 키의 hashCode 메서드를 사용하여 저장 위치를 결정.
- @NoArgsConstructor, @AllArgsConstructor
- @RequiredArgsConstructor
- @Data: 위에 있는 걸 모든 걸 포함한 어노테이션
- @NotNull
🎈 @RequiredArgsConstructor란?
public class Person {
private final String name;
private final int age;
@NonNull private String email;
- @NonNull 필드는 생성자에서 null 값이 전달되면 NullPointerException이 발생하도록 합니다.
- final 필드는 한 번만 초기화할 수 있으며, 생성자를 통해 초기화해야 합니다.
🥠 @Id, @GeneratedValue
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
1) @Id
: 이 어노테이션은 해당 필드가 엔티티의 식별자(identifier)인 것을 나타냅니다. 즉, 이 필드는 데이터베이스에서 해당 엔티티를 식별하는 데 사용됩니다.
2) @GeneratedValue
: 이 어노테이션은 엔티티의 식별자 값이 자동으로 생성되어야 함을 나타냅니다. 주로 데이터베이스에서 자동으로 생성되는 값(예: AUTO_INCREMENT, SEQUENCE)을 사용하여 엔티티의 식별자 값을 자동으로 생성할 때 이 어노테이션을 사용합니다.
🥠 DAO interface
- DAO(Data Access Object)란?
DAO는 말 그대로 실제 DB에 접근하는 객체를 뜻한다. DAO는 Service와 실제 데이터베이스를 연결하는 역할을 하게 된다. 즉, DB에서 데이터를 꺼내오거나 넣는 역할을 DAO가 담당한다.
❓ DAO와 Repository의 차이점
- DAO와 REPOSITORY 모두 퍼시스턴스 로직에 대한 객체-지향적인 인터페이스를 제공하고 도메인 로직과 퍼시스턴스 로직을 분리하여 관심의 분리(separation of concerns) 원리를 만족시키는데 목적이 있다. 그러나 비록 의도와 인터페이스의 메서드 시그니처에 유사성이 존재한다고 해서 DAO와 REPOSITORY를 동일한 패턴으로 취급하는 것은 성급한 일반화의 오류를 범하는 것이다.
- DAO는 퍼시스턴스 로직인 Entity Bean을 대체하기 위해 만들어진 개념이다. DAO가 비록 객체-지향적인 인터페이스를 제공하려는 의도를 가지고 있다고 하더라도 실제 개발 시에는 하부의 퍼시스턴스 메커니즘이 데이터베이스라는 사실을 숨기려고 하지 않는다. DAO의 인터페이스는 데이터베이스의 CRUD 쿼리와 1:1 매칭 되는 세밀한 단위의 오퍼레이션을 제공한다. 반면 REPOSITORY는 메모리에 로드된 객체 컬렉션에 대한 집합 처리를 위한 인터페이스를 제공한다. DAO가 제공하는 오퍼레이션이 REPOSITORY 가 제공하는 오퍼레이션보다 더 세밀하며, 결과적으로 REPOSITORY에서 제공하는 하나의 오퍼레이션이 DAO의 여러 오퍼레이션에 매핑되는 것이 일반적이다. 따라서 하나의 REPOSITORY 내부에서 다수의 DAO를 호출하는 방식으로 REPOSITORY를 구현할 수 있다.
🥠 Spring Data JPA 기반 구현
- JpaRepository 인터페이스를 상속하여 DAO 인터페이스 정의
- findById(), findAll(), count(), save(), delete() 등의 메소드 상속
- Spring Data JPA에 의해 자동 생성됨
- JPA의 경우 Repository가 DAO의 역할을 한다고 볼 수 있다. (하지만 DAO와 Repository가 같은 것은 아니다.)
🪐출처:
https://code-lab1.tistory.com/201 [코드 연구소:티스토리]