지연 로딩이란, 데이터가 실제로 필요한 시점에 데이터베이스로부터 조회하는 방법을 말한다. 이는 애플리케이션의 성능 향상에 크게 기여한다.
예를 들어, 사용자 정보와 그 사용자가 작성한 게시물 정보가 모두 필요하지 않는 상황에서 지연 로딩을 사용하면, 사용자 정보만 조회하고, 게시물 정보는 필요할 때 조회하게 된다.
📌 지연 로딩의 장점
초기 로딩 시간 감소: 데이터가 실제로 필요한 시점에만 로딩되므로 초기 로딩 시간을 줄일 수 있습니다.
메모리 사용량 감소: 사용하지 않는 데이터를 로딩하지 않으므로 메모리 사용량을 줄일 수 있습니다.
네트워크 사용량 감소: 필요한 데이터만 서버로부터 가져오므로 네트워크 사용량을 줄일 수 있습니다.
📌 지연 로딩의 단점
데이터 접근 지연: 데이터가 필요한 시점에 로딩되므로, 데이터 접근이 지연될 수 있습니다.
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를 설정함으로써 게시물 정보는 사용자 정보가 필요할 때만 데이터베이스에서 조회하게 된다.
영속성 전이(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를 이용한 웹 디자인을 위한 기본적인 클래스 구성은 다음과 같다.
@RestController
public class HomeController {
@GetMapping("/")
public String home() {
return "Hello, Spring Boot!";
}
}
@Service
public class HomeService {
public String getHomeMessage() {
return "Hello, Spring Boot!";
}
}
public interface UserRepository extends JpaRepository<User, Long> {
}
@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의 다양한 기능과 편의성 덕분에 개발 시간을 크게 단축시킬 수 있다.
이러한 지식을 바탕으로 더 효율적이고 성능 좋은 애플리케이션을 개발할 수 있을 것이라고 생각한다.