https://github.com/bbbbooo/spring-cacamuca
과자 리뷰 서비스
리뷰 도메인
서버 최적화 및 쿼리 튜닝
7.1 ~ 7. 31
서버 최적화
- 리뷰 목록을 불러오는 과정에서 다수의 트래픽이 발생 시, 리뷰를 불러오는 속도가 현저히 떨어짐. 배포를 진행했기에 어느정도 트래픽에 대해 생각을 해볼 필요가 있었음
@EnableCaching, @Cacheable
@Transactional(readOnly=true)
쿼리 튜닝
fetchSize

최적화 이전 - 233tps
최적화 이후 - 1016tps
테스트 코드
단위 테스트를 진행할 때, 중복되는 코드가 존재했는데 이를 편의성으로나 코드적으로나 개선할 필요가 있었다. 그래서, 이전에 테스트 코드에 관련하여 찾다 발견한 object mother를 사용하였다.
💡 코드가 길고 밑으로도 비슷한 유형의 코드가 반복된다.

💡 획기적으로 줄일 수 있었다.

테스트 코드와 동일한 위치 Object라는 패키지 생성 및 클래스를 생성함. 클래스 내, 단위 테스트에 필요한 객체를 만들고 이를 static 메모리에서 관리하게 함.
이미지 출력
Not allowed to load local resource
- 업로드된 사진을 서버의 로컬에 저장하도록 구현하였다. 이유는 프로젝트 내 경로로 지정 시, 배포 할때마다 데이터가 삭제가 되어 따로 저장할 필요가 있었다. 하지만 이럴 경우 이미지를 불러올때 위의 에러 코드가 나오며 이미지를 출력할 수 없었다. 이유인 즉슨, 크롬은 보안상의 이유로 로컬의 이미지를 불러오지 못하도록 막아놨다.
따라서, 이를 해결하기 위해 추가적인 설정을 진행했다.
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/review/**")
.addResourceLocations("file:///C:/app-file/uploadFiles/");
registry.addResourceHandler("/request/**")
.addResourceLocations("file:///C:/app-file/uploadFiles/");
}
}
클라이언트에서 지정한 경로(review, request)로 요청이 들어오면 핸들러에 담겨있는 경로(절대경로)에 있는 정적 리소스(이미지)가 반환되도록 구현하였다.
로컬에서는 되는데 배포에서 안되는 이슈가 제일 기억에 남는다. 예를 들어, 테스트 코드가 통과되지 않거나 500에러가 뜨거나... 개발에 있어서 배포도 엄청난 비중을 차지하는걸 다시금 깨닫게 되었다.
프로젝트 기간동안 2개의 면접을 준비하느라 유지보수에 더 시간을 못 쓴점이 아쉬웠다. 특히, 성능 최적화를 위해 쓸 시간이 부족해서 차후 프로젝트에서는 다음의 목표를 이루고자 한다.
컴퓨웨어의 웹 성능 사업부에 근무하는 고메즈에 따르면 사용자의 40%가
3초동안 기다리게 되면 사이트를이탈하는 것으로 나타났다고 하였으며 월마트는 페이지 속도를 100ms까지 개선하면수익이 1% 증가한다는 사실을 발견하였다.
엄청난건 아니지만 차근차근 목표를 이뤄나가는 형식으로 진행하고자 한다. 8월도 프로젝트가 시작되었는데 다시 힘내서 달려야겠다.
djWjfxlql