전체 글 (202) 썸네일형 리스트형 [디베이트 타이머 - 3차 스프린트] 1차 유저 테스트 안녕하세요 브로콜리입니다. 오늘은 프로젝트, 디베이트 타이머의 1차 User Test 에 대해 포스팅해볼까 합니다.지난 1월 25일을 기점으로 디베이트 타이머의 데모 버전이 완성되었습니다. 이에 따라 토론 강의 경험이 있는 강사 한분을 모시고 프로그램의 사용성 테스트를 진행하였습니다. UT의 목적UT의 목적은 다음과 같은 포인트를 캐치하는 것이었습니다.- 프로그램이 실제로 토론 강의나 교육을 할 때 도움이 될 것 같은가?- 유저가 화면 구성 상 빠르게 사용법을 습득할 수 있는가?- 프로그램에 대한 전반적인 피드백(아쉬운 점이나 더 발전시킬만한 부분은 없는지) 수렴 UT 설계팀원들과 함께 8차 정기회의(1월 21일)에 미션을 설계하였고, 사용 유저가 사회자가 되어 타이머 프로그램을 활용해 토론을 진행.. [학습 테스트] 스레드풀 포화 정책(Saturation Policy) 알아보기 최근 알림 로직 비동기화를 진행하면서 스레드풀을 커스터마이즈하여 빈으로 등록할 일이 있었습니다. 이를 위해 스레드풀에 대해 학습하다 "코어 스레드풀과 대기 큐가 다 차면 요청을 어떻게 처리해야 할까?" 라는 의문이 든 적이 있습니다. 놀랍게도 ThreadPoolExecutor를 다음과 같은 포화상태에서 대처안을 선택할 수 있도록 4가지 정책을 제안하고 있습니다. 오늘은 학습테스트 작성을 통해 스레드풀의 4가지 포화정책을 눈으로 보며 이해해보고자 합니다.1. 스레드풀 기본 개념스레드풀이란 말 그대로 스레드를 풀링해놓는 것입니다. 풀링은 주로 생성 비용이 큰 자원을 미리 만들어놓음으로써 사용 시 반복적인 셋업 코스트를 줄이기 위해 사용됩니다. 이를 기반으로 해석해보면 매번 반복적으로 할당하는 스레드의 생성비.. [디베이트 타이머 - 3차 스프린트] Backend 기초 인프라 세팅하기 디베이트 타이머 3차 스프린트의 막바지에는 인프라 세팅 과정이 필요했습니다. 기존에 습득했던 인프라 관련 지식들을 복습할 겸, VPC를 세팅하는 처음부터 EC2 + RDS + https 세팅까지 작업해주었는데요. 오늘은 그 세팅과정에 대해 차근차근 소개해보고자 합니다. 목표 인프라세팅하고자 하는 인프라 환경은 다음과 같습니다. 가장 간소화한 인프라 환경 입니다. 그럼 디베이트 타이머 인프라 세팅의 A-Z까지의 과정을 소개해보겠습니다. 목차1. VPC - Subnet 설정하기 1-1) VPC 생성하기 1-2) Subnet 생성하기 1-3) 인터넷 게이트웨이 생성하기 1-4) 라우팅 테이블 연결하기 2. EC2 생성 및 EIP 설정 2-1) EC2 생성하기 2-2) EIP .. [핵심 정리] 대규모 트래픽 처리를 위한 부하테스트 입문/실전 해당 내용은 인프런 강의 [대규모 트래픽 처리를 위한 부하테스트 입문/실전]을 듣고 개인적인 공부 목적으로 핵심적인 내용을 정리한 요약본입니다. 자세한 원리 혹은 개념 설명이 궁금하시다면 강의를 참고하시는 것을 권장드립니다. 부하테스트란?: 시스템의 트래픽 수용량을 테스트하는 것주요 측정량 1) 처리량(Throughput) : 1초당 처리할 수 있는 트래픽 양: 단위 TPS(Transaction Per Seconds) : 1초당 처리한 트랙잭션의 수 2) 지연 시간(Latency): 요청에 대한 응답 시간ex) latency가 2.5초이다. == 하나의 API에 요청을 보내고 응답을 받기까지 2.5초가 걸렸다병목지점전체 시스템에서 특정 서버자원(CPU, Memory 등)이 한계에 도달해 전체 성능이 저.. deleteAll vs deleteAllInBatch : 성능차이 + 영속성 컨텍스트 반영여부 SimpleJpaRepository에 구현된 deleteAll을 보면 내부적으로 엔티티를 하나씩 순차적으로 돌면서 delete() 메서드를 호출하고 있습니다. 이말은 즉슨 엔티티의 개수만큼 delete 쿼리가 나가게된다는 것을 의미합니다.문제 상황 : deleteAllInBatch를 사용한 메서드 테스트 오류 디베이트 타이머 1차 스프린트의 주요 내용은 디베이트 시간표와 시간표를 구성하는 타임박스들의 CRUD를 구현하는 것이었습니다. 그중 의회식 토론 테이블의 삭제 로직을 구현하는 과정에서 더 나은 성능을 위해 deleteInBatch 메서드를 사용했습니다. @Transactional public void deleteTable(Long tableId, Member member) { .. CI 과정에서 jacoco를 활용한 테스트 커버리지 확인하기 안녕하세요 브로콜리입니다. 프로젝트를 진행하며, CI 스크립트를 맡게 되었습니다. CI 과정에서는 작성한 테스트가 모두 통과하는지 검증해 품질이 보장된 코드가 merge되도록 하였습니다. 그러나, 단순히 테스트의 결과를 검증하는 것은 테스트 결과를 보장할 뿐입니다. 오히려, 코드가 통합되는 과정에서는 다음과 같은 질문이 중요할 수 있습니다.- 내가 작성한 코드를 검증할만한 테스트를 작성하였는가?- 팀의 전반적인 테스트 커버리지는 어느정도 되는가? 그리고 이렇게 테스트에 대한 커버리지 컨벤션을 확인할 수 있도록 도와주는 것이 바로 jacoco 라이브러리입니다. 오늘은 CI 과정에서 테스트 커버리지를 검증하기 위해 사용했던 jacoco의 설정부터 CI 스크립트에 적용한 과정까지를 기록으로 남겨두고자 합니다... JsonDeserializer 커스텀으로 외부 API 에러 핸들링하기 Situation : 에러에도 200을 응답하는 외부 API 지각 방지 서비스 오디에서는 A지점에서 B지점까지의 대중교통 소요시간을 측정하기 위해 ODsay API를 활용하였습니다. 외부 API를 활용하면서 외부 API에서 에러를 반환하는 상황에 대한 핸들링도 자연스레 신경을 써야했습니다. 처음에는 자연스레 ResponseErrorHandler를 만들어서 해결하려 했습니다. 밸덩 글에 수록된 ResponseErrorHandler의 예시를 보겠습니다.@Componentpublic class RestTemplateResponseErrorHandler implements ResponseErrorHandler { //에러인지 판단 @Override public boolean hasError(C.. MapStruct로 Domain - Dto 쉽게 매핑하기 안녕하세요 브로콜리입니다. 최근 가까운 사람이 회사 면접을 보면서 Dto, Entity, Domain 간의 객체 매핑 과정에서 MapStruct를 사용해보는 것은 어떻겠냐는 조언을 들었습니다. 여기서 MapStruct라는 키워드를 알게되었고, Domain to Dto 나 Dto to Domain은 개발자에게 참으로 지루한 작업 중 하나이므로 손쉽게 매핑이 가능한 라이브러리가 있다면 한번 알아보고 쉽다는 욕심이 생겼습니다. 이로써 오늘은 MapStruct의 공식문서를 기반으로 실습 코드를 작성하며 학습한 내용을 정리해보려 합니다. MapStruct란?- 객체간 매핑을 손쉽게 도와주는 라이브러리- AnnotationProcessor를 통해 build 타임에 MapperImpl을 getter/setter를 기.. 이전 1 2 3 4 5 ··· 26 다음