이번 글에서는 SpringBoot에서 DispatcherServlet을 활용하여 HTTP 요청을 처리하는 과정을 살펴보려 합니다. 그전에 간단히 DispatcherServlet이 HTTP 요청을 처리하는 과정을 살펴보면 위의 사진과 같습니다.DispatcherServlet에서 요청을 받습니다.HandlerMapping에서 적합한 Handler를 찾습니다.적합한 Handler를 반환합니다.HandlerAdapter에게 Handler를 전달하고 실행합니다.Handler를 실행합니다.Handler 실행 결과를 반환합니다.HandlerAdapter의 실행 결과를 반환합니다.요청 처리 결과를 반환합니다.그럼 요청을 처리하는 DispatcherServlet, HandlerMapping, HandlerAdapter ..
프로젝트 MVP 개발 이후 개발한 코드의 병목지점과 장애 발생 구간을 모니터링하기 위해 Pinpoint를 도입하였습니다. 이번 글에서는 Pinpoint를 도입하며 발생하였던 이모저모를 소개하겠습니다. 환경API 서버 (AWS)ECS/EC2를 활용한 도커 기반t2.microPinpoint 서버 (GCP)n2-highmem-2* GCP의 경우 처음 가입하면 제공하는 3개월에 300달러의 자원을 사용할 수 있는 크레딧을 사용하였습니다. Pinpoint Agent설치wget https://repo1.maven.org/maven2/com/navercorp/pinpoint/pinpoint-agent/3.0.0/pinpoint-agent-3.0.0.tar.gztar -zxvf pinpoint-agent-3.0.0.t..
FEW의 메인 화면에는 아래 사진에서 확인할 수 있는 3가지 상태의 워크북 카드가 정렬되어 제공됩니다. 정렬 기준은 아래와 같습니다.기본 정렬 기준구독자 수가 많은 워크북을 우선 노출합니다.구독자 수가 동일하다면 최근에 생성된 워크북을 우선 노출합니다.멤버가 로그인한 경우멤버가 구독 중인 워크북을 우선 노출합니다.여러 워크북을 구독 중이라면 Day가 더 많이 진행된 것을 우선 노출합니다.멤버가 구독 완료한 워크북을 나중에 노출합니다.멤버가 구독하지 않은 워크북은 기본 정렬 기준을 따릅니다. 워크북은 FEW 프로젝트의 주요 개념으로 다양한 화면에서 그에 맞는 정렬 기준을 가진 요구사항이 추가될 것이라 예상합니다.이에 저는 전략 패턴을 활용하여 앞으로 추가될 정렬 기준에 대응할 수 있는 코드를 개발하였습니다..
FEW의 메인 페이지에는 위의 사진에서 보이는 것처럼 아티클이 모인 학습지 목록을 제공하고 있습니다. 그리고 해당 워크북의 기본 정렬 기준은 아래와 같습니다.현재 학습 중인 학습지를 가장 먼저 보여준다.학습을 완료한 학습지는 가장 나중에 보여준다.학습하고 있지 않는 학습지의 경우 구독자가 많은 학습지를 우선하여 보여준다. 학습하고 있지 않는 학습지의 경우 구독자가 많은 학습지를 우선하여 보여준다 현재 DB 테이블의 경우 '학습지' 테이블과 '구독자' 테이블을 구분하여 관리하고 있습니다.-- 학습지 테이블create table WORKBOOK( id bigint auto_increment primary key, title varchar(255) ..
캐싱은 시스템의 성능 및 확장성을 개선하는 데 목표를 두는 기술입니다.자주 액세스하는 데이터를 애플리케이션 가까이에 있는 빠른 스토리지에 일시적으로 복사하여 데이터를 캐시 합니다.그렇게 캐시 된 데이터를 사용한다면 보다 클라이언트 애플리케이션에 대한 응답 시간을 훨씬 향상할 수 있습니다. 어떤 데이터를 캐싱해야 할까?하지만 우리는 모든 데이터를 캐싱할 수 없고 다른 데이터보다 접근이 많고 변화가 적은 데이터를 선택하여 캐싱을 진행하여야 합니다.저의 캐싱에 대한 오해 역시 잘못된 데이터를 선택하며 시작되었습니다.# 게시판 메인화면 조회 기능[GET] /posts?category={category}- 최근 20개의 게시글을 보여줍니다.- category 파라미터가 지정되지 않으면 전체, 지정된다면 지정된 카..
간단한 프로젝트를 수행할 때에는 JpaRepository가 제공하는 메서드만으로 충분히 쿼리 구현할 수 있었지만 기능이 복잡해지면서 JpaRepository의 @Query를 사용해 쿼리를 직접 작성해야 하는 경우가 많아졌습니다.@Query는 문자열을 사용해 쿼리를 작성하기에 타입세이프하지 않고 쿼리 작성에도 불편함이 있습니다.그래서 이번 프로젝트에서는 타입세이프 하고 복잡한 쿼리도 편리하게 작성하기 위해 jOOQ를 도입하고 사용해 보았습니다. jOOQ 사용 세팅의존성jOOQ는 spring boot starter에 포함되어 있어 아래와 같이 간단히 의존성을 추가할 수 있습니다.implementation org.springframework.boot:spring-boot-starter-jooq jOOQ Cod..