주니어 기초 코딩공부/알고리즘에 대하여

[part1] 웹 로딩 시간 복잡도를 줄이기 위해서 무엇을 할 수 있을까?

jju_developer 2024. 8. 16. 20:53
728x90

안녕하세요 jju_developer 입니다.

 

개발을 하다보면 웹 페이지 로딩 시간을 줄이는 방안으로

코딩을 하곤 하는데...

 

웹 페이지의 로딩 시간을 줄이기 위해서 종합적인 방안을 생각해 보겠습니다.

 

종합적으로 최적화 방안이 뭐가 있을까요?

  1. 데이터베이스 인덱스 사용: 가장 먼저 데이터베이스에서 검색 성능을 향상시키기 위해 적절한 인덱스를 생성합니다.
  2. 효율적인 쿼리 작성: 필요하지 않은 데이터를 가져오지 않도록 쿼리를 최적화합니다.
    >> 개인적으로 깊게 파면 팔수록 어렵다고 생각하는 부분입니당...
  3. 캐싱 전략 적용: 자주 조회되는 데이터는 캐싱하여 데이터베이스 접근을 최소화합니다.
    >> 예를 들면 서적을 검색하는 페이지 일 경우에 1-10 랭킹은 자주 검색할 것이기 때문에 캐싱하여 저장합니다.
  4. 자바 측면의 최적화: 검색 알고리즘을 최적화하고, 적절한 자료구조를 사용하여 데이터 접근 성능을 향상시킵니다.

"jju 서점"이라는 웹 페이지를 만든다고 가정해보겠습니다.

 

웹에서 인기순위 1-10위까지의 서적은 캐싱 전략을 사용하고,

나머지 서적 검색은 인덱스와 검색 알고리즘 최적화를 통해 처리하는 예시라고 생각해주세요~

 

1. 인기 서적 캐싱 전략

인기 서적 1-10위는 자주 검색되기 때문에 캐시에 저장하여 빠르게 접근할 수 있도록 합니다.

 

캐싱을 위한 데이터 구조:

import java.util.List;
import java.util.Map;
import java.util.HashMap;

public class Cache {
    private Map<String, List<Book>> cache = new HashMap<>();
    private static final String POPULAR_BOOKS_KEY = "popular_books";

    // 인기 서적을 캐시에 저장
    public void putPopularBooks(List<Book> books) {
        cache.put(POPULAR_BOOKS_KEY, books);
    }

    // 인기 서적을 캐시에서 가져옴
    public List<Book> getPopularBooks() {
        return cache.get(POPULAR_BOOKS_KEY);
    }
}

 

 

데이터베이스에서 인기 서적을 가져와 캐시에 저장:

import java.util.List;

public class BookService {
    private Cache cache = new Cache();
    private DatabaseService databaseService = new DatabaseService();

    public void cachePopularBooks() {
        List<Book> popularBooks = databaseService.getPopularBooks(1, 10);
        cache.putPopularBooks(popularBooks);
    }

    public List<Book> getPopularBooks() {
        List<Book> popularBooks = cache.getPopularBooks();
        if (popularBooks == null) {
            popularBooks = databaseService.getPopularBooks(1, 10);
            cache.putPopularBooks(popularBooks);
        }
        return popularBooks;
    }
}

 

 

 

2. 나머지 서적 검색 최적화

나머지 서적 검색은 인덱스검색 알고리즘 최적화를 통해 처리합니다.

 

인덱스 설정 (데이터베이스):

-- 인덱스 설정
CREATE INDEX idx_title ON books(title);
CREATE INDEX idx_author ON books(author);
CREATE INDEX idx_genre ON books(genre);

 

 

자바 코드에서 검색 최적화:

import java.util.List;

public class BookService {
    private DatabaseService databaseService = new DatabaseService();

    // 키워드로 책 검색
    public List<Book> searchBooks(String keyword) {
        return databaseService.searchBooks(keyword);
    }
}

 

 

 

아직은 크게 와닿지 않은거 같은데...

그래도 계속 공부하다보면 언젠가 깨닳는 날이 있겠죠?

 

이해 안가는 부분있으시면 언제나 댓글 주세요~

 

조언도 환영입니다~~~~

 

 

 

 

 

728x90