[북스터디] 스프링 프레임워크 첫걸음 04

jina·2024년 7월 14일

Spring

목록 보기
6/8

'스프링 프레임워크 첫걸음'을 읽고 어플리케이션 제작에 필요한 레이어와 Spring Framework 기능 적용에 대해 정리한 글입니다 💭

📌 도메인 레이어

도메인 레이어에서는 비즈니스 로직데이터 모델을 정의합니다.

  1. 도메인 객체
    도메인 객체는 비즈니스 로직 처리에 필요한 객체를 말합니다. 엔티티 클래스를 작성해서 생성하며 데이터베이스 테이블의 각 행과 대응됩니다.
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String username;
    private String password;
}
  1. 레포지토리
    레포지토리는 도메인 객체에 접근하는 계층입니다. 이때 Spring Data JPA를 사용하면, 인터페이스 정의만으로도 기본적인 CRUD 메소드를 자동으로 구현해줍니다.
public interface UserRepository extends JpaRepository<User, Long> {
    Optional<User> findByUsername(String username);
}
  1. 서비스
    서비스는 비즈니스 로직을 작성하는 계층입니다. 레포지토리를 통해서 데이터베이스와 상호작용합니다. Spring의 @Service 어노테이션을 사용해서 서비스 클래스를 빈으로 동록합니다.
@RequiredArgsConstructor
@Service
public class UserService {
	private final UserRepository userRepository;
    
    public User registerUser(String username, String password) {
    // 비즈니스 로직
    return userRepository.save(user);
   }
}

📌 인프라스트럭처 레이어

인프라스트럭처 레이어는 데이터페이스와 ORM을 포함합니다.
도메인 레이어의 도메인 객체가 인프라스트럭처 레이어를 활용해서 데이터베이스에 접속할 수 있습니다.

  1. O/R Mapper
    ORM은 객체지향 프로그래밍 언어와 관계형 데이터베이스의 테이블을 매핑하는 기술입니다. Spring Data JPA와 Hibernate가 이러한 ORM 기술을 구현하는 데 도움을 줍니다.
    데이터베이스와의 연결을 위해서는 Spring Boot 제공하는 application.properties 설정 파일에 입력합니다. 이 내용을 바탕으로 데이터베이스 연결과 Hibernate 설정이 자동으로 이루어집니다.
    (Spring Boot는 HikariCP, Tomcat JDBC Connection Pool 등 다양한 DataSource 구현체를 지원하며, 설정 파일에 명시된 정보를 기반으로 적절한 구현체를 선택하고 설정합니다.)

  2. 커스텀 레포지토리 구현
    Spring Data JPA가 제공하는 JpaRepository 외에도 복잡한 비즈니스 로직이 필요한 경우 커스텀 레포지토리 인터페이스를 만들 수 있습니다.

// 1. 원하는 커스텀 레포지토리 인터페이스를 만든다
public interface CustomUserRepository {
    List<UserActivity> findUserActivitiesByCustomCriteria(Long userId, LocalDate startDate, LocalDate endDate);
}

// 2. 구현 클래스를 만든다
public class CustomUserRepositoryImpl implements CustomUserRepository {
    @PersistenceContext
    private EntityManager entityManager;

    @Override
    public List<UserActivity> findUserActivitiesByCustomCriteria(Long userId, LocalDate startDate, LocalDate endDate) {
        // 복잡한 쿼리 로직
    }
}

// 3. 1에서 만든 커스텀 레포지토리를 기존 레포지토리에 추가로 상속한다
public interface UserRepository extends JpaRepository<User, Long>, CustomUserRepository {
}

(여기서 Entity Manager는 JPA의 핵심 인터페이스로 데이터베이스와 상호작용하는 도구입니다. 엔티티의 생명주기를 관리하고 데이터베이스 작업을 수행하는데 사용합니다.)

📌 어플리케이션 레이어

어플리케이션 레이어는 사용자와 상호작용하기 위해서 필요한 컨트롤러, 뷰, 폼 등을 포함합니다.

  1. 컨트롤러
    HTTP 요청을 처리하는 요청 핸들러 메소드를 생성합니다.
    Spring MVC가 제공하는 @Controller, @RequestMapping("/getInfo"), @GetMapping, @PostMapping 등의 어노테이션을 사용합니다.

📌 정리

  • Spring Boot: application.properties 파일에 입력하면 데이터베이스 연결을 관리하는 DataSource 객체를 생성하고 JPA 설정을 자동으로 구성
  • Spring Data JPA: 복잡한 쿼리도 메소드 이름을 통해 생성 가능
  • Spring MVC: 웹 요청을 처리하는 컨트롤러를 쉽게 정의
  • DI (의존성 주입): 어플리케이션 컴포넌트 간의 의존성을 Spring Container가 관리하면서 객체 생성이나 의존성 주입을 자동으로 처리
profile
오늘의 기록은 내일의 보물

0개의 댓글