11월 10일

Yullgiii·2023년 11월 10일
0
post-thumbnail

지연 로딩

1. 지연 로딩(Lazy Loading) 이해하기 🚀

지연 로딩이란, 데이터가 실제로 필요한 시점에 데이터베이스로부터 조회하는 방법을 말한다. 이는 애플리케이션의 성능 향상에 크게 기여한다.

예를 들어, 사용자 정보와 그 사용자가 작성한 게시물 정보가 모두 필요하지 않는 상황에서 지연 로딩을 사용하면, 사용자 정보만 조회하고, 게시물 정보는 필요할 때 조회하게 된다.

📌 지연 로딩의 장점
초기 로딩 시간 감소: 데이터가 실제로 필요한 시점에만 로딩되므로 초기 로딩 시간을 줄일 수 있습니다.
메모리 사용량 감소: 사용하지 않는 데이터를 로딩하지 않으므로 메모리 사용량을 줄일 수 있습니다.
네트워크 사용량 감소: 필요한 데이터만 서버로부터 가져오므로 네트워크 사용량을 줄일 수 있습니다.
📌 지연 로딩의 단점
데이터 접근 지연: 데이터가 필요한 시점에 로딩되므로, 데이터 접근이 지연될 수 있습니다.
N+1 문제: 한 번에 많은 양의 데이터를 로딩하지 않으므로, 데이터베이스에 대한 요청 횟수가 증가할 수 있습니다.

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @OneToMany(fetch = FetchType.LAZY)
    private List<Post> posts = new ArrayList<>();

    // getter, setter
}

이 예제에서는 User 엔티티와 Post 엔티티 간의 일대다 관계를 설정하고 있다. FetchType.LAZY를 설정함으로써 게시물 정보는 사용자 정보가 필요할 때만 데이터베이스에서 조회하게 된다.

2. 영속성 전이(Cascade) 이해하기 🚀

영속성 전이(Cascade)는 특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함께 영속 상태로 만들거나, 특정 엔티티를 삭제할 때 연관된 엔티티도 함께 삭제하는 것을 의미한다. 이 기능은 객체 지향 프로그래밍에서 연관된 객체들 사이의 관계를 관리하는 데 유용하다.

예를 들어, 사용자 엔티티와 게시물 엔티티가 있고, 사용자 엔티티가 삭제되면 해당 사용자가 작성한 게시물 엔티티도 함께 삭제되어야 하는 경우에 영속성 전이를 사용할 수 있다.

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    private List<Post> posts = new ArrayList<>();

    // getter, setter
}

위 코드에서 User 엔티티와 Post 엔티티 간의 일대다 관계가 설정되어 있고, cascade = CascadeType.ALL 옵션이 추가되어 있다. 이 옵션은 User 엔티티가 영속 상태로 전이되거나 삭제될 때 관련된 Post 엔티티도 함께 영속 상태로 전이되거나 삭제되게 한다.

이처럼, 영속성 전이는 특정 엔티티의 생명주기와 다른 엔티티의 생명주기가 밀접하게 연관되어 있을 때 사용하면 편리하다. 하지만, 모든 상황에서 적용할 수 있는 것은 아니므로 주의 깊게 사용해야 한다.

프로젝트를 위한 처음부터 파보는 Spring Boot

Spring Boot를 이용한 웹 디자인 구성 🚀

Spring Boot를 이용한 웹 디자인을 위한 기본적인 클래스 구성은 다음과 같다.

Controller 클래스는 사용자의 요청을 받아 처리하는 클래스로, 주로 @Controller 또는 @RestController 어노테이션을 사용하여 선언한다.

@RestController
public class HomeController {
    @GetMapping("/")
    public String home() {
        return "Hello, Spring Boot!";
    }
}

Service 클래스는 비즈니스 로직을 처리하는 클래스로, @Service 어노테이션을 사용하여 선언한다.

@Service
public class HomeService {
    public String getHomeMessage() {
        return "Hello, Spring Boot!";
    }
}

Repository 클래스는 데이터베이스와의 연동을 담당하는 클래스로, Spring Data JPA를 사용할 경우 JpaRepository 인터페이스를 상속받아 선언한다.

public interface UserRepository extends JpaRepository<User, Long> {
}

Entity 클래스는 데이터베이스의 테이블을 Java 객체로 매핑하는 클래스로, @Entity 어노테이션을 사용하여 선언한다.

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false)
    private String name;

    // getter, setter
}

회고

지연 로딩과 Spring Boot를 이용한 웹 디자인에 대해 학습하면서, 두 기술 모두 애플리케이션의 성능을 향상시키는 데 중요한 역할을 한다는 것을 알게 됐다.
지연 로딩은 실제로 필요한 시점에만 데이터를 로딩해 초기 로딩 시간을 줄이고 메모리 사용량을 감소시키는 장점이 있다. 하지만 데이터 접근이 지연될 수 있으니 이 점을 주의하며 사용해야 한다.
Spring Boot를 이용한 웹 디자인은 MVC 패턴을 기반으로 하며 각 클래스의 역할이 명확하게 구분되어 있어 코드의 가독성과 유지보수성이 높다. 또한, Spring Boot의 다양한 기능과 편의성 덕분에 개발 시간을 크게 단축시킬 수 있다.
이러한 지식을 바탕으로 더 효율적이고 성능 좋은 애플리케이션을 개발할 수 있을 것이라고 생각한다.

profile
개발이란 무엇인가..를 공부하는 거북이의 성장일기 🐢

0개의 댓글