지난번에 스프링의 멀티스레딩 활용 방식을 알아봤다. 여러 가지 방식 중에서 멀티스레딩을 활용한 비동기 처리 방식을 내 프로젝트에 적용시켜보고자 한다. 동기 처리를 했을 때와 비동기 처리를 했을 때의 성능 차이를 분석하여 비동기 처리 방식이 어떻게 활용될 수 있는지 살펴보자. 스프링의 비동기 처리 적용 방법 우선 스프링에서 비동기 처리를 적용시키기 위한 간단한 방법을 알아보자. @Configuration@EnableAsyncpublic class AsyncConfig {} 스프링에서 비동기 처리를 적용하려면 먼저 비동기 설정 클래스를 생성하고, @EnableAsync 어노테이션을 사용해 비동기 기능을 활성화해야 한다. 그 후, 비동기 처리를 적용할 메서드에 @Async 어노테이션을 추가하면 해당 메서드가..
3-2학기에 운영체제 과목에서 배운 프로세스와 스레드 개념을 복습해 보고, 이를 Spring Boot에서 어떻게 활용하는지 알아볼게요. 프로세스란? 프로세스는 실행 중인 프로그램의 가장 작은 단위로, 하나의 실행 흐름을 가진 프로그램을 의미해요. 즉, 프로그램이 메모리에 로드되어 실행되고 있는 상태를 프로세스라고 부릅니다. 예를 들어, 실행 중인 카카오톡이나 크롬 브라우저는 각각 하나의 프로세스로 동작합니다.각 프로세스는 자신이 소유한 자원을 보호하기 때문에, 다른 프로세스의 자원이나 메모리 영역에 접근할 수 없습니다. 실제 상용 시스템에서는 이러한 프로세스보다 더 작은 단위인 스레드 단위로 CPU 코어를 할당하여 스케줄링을 수행하고 있어요. 스레드란? 스레드는 프로세스 내에서 실행되는 흐름을 의미해요...
기존 코드의 소요 시간 측정 @Transactional(readOnly = true)public PostListDTO getPostPreviewList(final int page) { Pageable pageable = getPageable(page); return PostListDTO.toPostListDTO(postRepository.findAllByOrderByViewsDesc(pageable));}@Query("SELECT p FROM Post p ORDER BY p.views DESC")Page findAllByOrderByViewsDesc(Pageable pageable); 기존 코드를 통해서 인기 게시글 조회 소요 시간을 측정하게 되면 다음과 같은 결과가 나오게 된다. 동시에 발생한 요청이 ..
조회수 필드에 대한 문제 확인하기 // 단일 게시글 조회@Transactionalpublic PostDTO getPostById(final long id) { // 게시글이 존재하지 않을 경우 예외 처리 Post post = postRepository.findById(id).orElseThrow(() -> PostException.from(POST_NOT_FOUND)); // 조회수 증가 post.increaseViews(); // DTO로 변환하여 반환 return PostDTO.toPostDTO(post);}// 조회수 증가public void increaseViews() { this.views++;} 위 메서드에 대하여 같은 게시글에 대하여 요청이 들어올 경우, 해당 조회수에 대한 증가는 순차적으로..
20만 건의 데이터를 읽어와 데이터베이스에 저장하는 로직을 구현하면서, JPA의 saveAll() 방식과 JDBC를 활용한 Bulk Insert 방식을 비교하며 겪었던 차이를 중심으로 작성한 글이다. 대량 데이터 저장 기능은 시스템 성능에 직접적인 영향을 미치기 때문에, 효율적인 쿼리 실행 방식이 필수적이다. 성능 최적화를 목표로 두 가지 방식의 장단점을 분석하고, 그 차이를 정리했다. JPA vs JDBC 스프링 데이터 JDBC 특징JDBC 위에 얇은 추상화 계층을 제공, SQL 직접 제어가 가능.설정이 간단하며 성능 최적화가 중요한 애플리케이션에 적합.개발자가 SQL을 직접 작성하여 데이터베이스 작업을 세밀하게 제어 가능.JDBC는 Java에서 데이터베이스와 상호작용하기 위한 표준 API입니다. 이..
1주차 과제는 과제의 요구 사항를 충족하면서 기존의 코드를 객체지향적인 코드로 변경하는 과제였다. 과제를 수행하면서 고민해볼 주요 사항들은 다음과 같았다. 상수 관리코드 중복의 없애는 것가독성이 좋은 코드읽기 쉬운 변수명, 메서드명 구현 로직 추상 클래스 각 Item 별로 남은 판매 일수, Quality 등을 업데이트하는 기능이 일부 공통적으로 수행되기 때문에 중복된 코드를 없애기 위하여 추상 클래스로 공통된 부분은 일반 메소드를 통해 구현하고, 각 item 별로 맥락에 따라 구현되어야 하는 부분은 추상 메소드로 정의하였다. 대표적인 예로 update() 를 추상 메소드로 두고 각 아이템 별로 해당 메소드를 오버라이딩 하는 방식으로 중복 코드를 없애주었다. public abstract class Gild..