Mockito를 이용해서 단위 테스트 작성하기
·
Project
JUnit5, AssertJ 단위 테스트하기(given, when, then)테스트와 TDD(Test Driven Development)Test란?테스트란 개발된 코드가 기대한 대로 동작하는지 검증하는 일련의 과정이다.테스트를 통해 버그를 사전에 방지하고, 코드의 신뢰성과 유지보수성을 높일constant1601.tistory.com지난번에 JUnit과 AssertJ를 이용해서 단위 테스트 하는 법을 알아봤다.이번에는 현재 진행 중인 프로젝트(자바 + 스프링 기반)에 단위테스트를 작성해 봤다. Mockito란?Mockito는 Java기반의 목(mock) 객체 생성 프레임워크이다.한마디로 개발자가 직접 제어할 수 있는 가짜 객체를 생성해 줌으로써테스트를 하기 용이하게 도와주는 프레임워크이다. Mockito ..
WebSocket HTTP Connection 문제 해결하기
·
Project
문제 상황개발 환경에서는 아무런 문제 없이 잘 되던 채팅이운영 서버에서는 안 되는 문제가 발생했다.서버의 로그를 확인해보니 아래의 오류가 발생했다.원인 가정과 문제해결1. 요청에 Upgrade 헤더 미포함우선 에러 메시지를 보고 가장 먼저 클라이언트의 요청에서Upgrade헤더가 미포함되었는지 확인했다.하지만 실제로 확인해보니 stomp.js를 사용하고 있어 자동으로 포함되어 있다는 것을 알 수 있었다.  2. ELB 설정 문제로 웹소켓 헤더 유실ELB(Elastic Load Balancer)에서 지연 시간 설정을 짧게 설정할 경우 요청이 유실될 수 있다. 하지만 확인해보니 운영 서버는 ELB를 사용하고 있지 않았다.따라서 이것도 문제의 원인이 아니었다. 3. EC2 Nginx 설정 문제로 웹소켓 헤더 유..
Redis를 이용한 최근 조회수 기반 인기공연 조회
·
Project
요구 사항 진행 중이던 프로젝트에서 실시간 인기 공연목록을 제공하기로 했다.인기 공연을 선정하는 방식은 최근 조회수를 기반으로 하여가장 높은 순으로 최대 10개의 공연을 선정했다.서비스가 작고 이용자가 많지 않았기 때문에완전한 실시간성을 보장하는 방식이 아닌 최근 조회수가 많은 공연을 제공하기로 했다.설계 과정조회수 증가우선 사용자가 공연을 누르면 해당 공연의 조회수를 증가시켜야 했다.당시 프로젝트에서 DB는 MySQL만 사용 중이었는데 이러한 단순한 조회수 증가를MySQL로 실행하기에는 DB의 부하가 많을 것이라 판단했다. @Overridepublic void incrementViewCount(Long performanceId) { longRedisTemplate.opsForList().leftP..
Quartz 스케줄러 이용하여 경매 마감 관리하기
·
Project
중고물품 블라인드 경매라는 컨셉으로 프로젝트를 진행하고 있던 중에 경매가 마감되었을 때자동으로 서버에서 특정 처리를 해야 하는 서비스 요구사항이 발생하였다.이를 해결하기 위해 Quartz라는 오픈소스 스케줄러 라이브러리를 도입하였다. Quartz란?들어가기에 앞서 간단하게 Quartz에 대해 설명하자면 Quartz는 특정 작업(Job)을 원하는 시점(Trigger)에 자동으로 실행할 수 있도록 지원하는 오픈소스 스케줄러 라이브러리라이브러리이다. Quartz를 사용한 이유  프로젝트의 입찰 서비스를 크게 보면 위와 같은 과정을 거친다. 일반적으로 경매라고 하면 실시간으로 이루어지며 더 이상 높은 가격으로 입찰을 원하는 사용자가 없을 경우 경매가 마감되게 된다.하지만 우리 서비스는 블라인드 입찰 시스템으로 ..