각 실시간 통신을 스프링 환경에서 구현하는 방법과 테스트 로직을 앞서 구현하였다. 이제는 각 통신 방법을 시나리오에 따라 테스트하고 결과를 분석해보겠다.테스트 시나리오를 구성할 때 몇가지 상황을 고려하였다.서비스가 시작되고 사용자들이 진입하는 상황 : 정상 진입 확인사
앞서 실시간 통신 방법에 대한 이론을 전체적으로 다뤄봤다. 이번에는 각 실시간 통신을 Spring 환경에서 구현하는 방법에 대해 설명하고 비교 분석 테스트를 위한 코드를 설명하겠다.‘그룹별 실시간 위치 공유’ 로직을 위한 테스트 코드를 작성할 것이다. 사용자가 각 좌표
Polling, Long Polling, SSE, WebSocket, STOMP와 같은 실시간 통신 방법에 대한 이론
Java Virtual Machine (자바 가상 머신)자바 기반 애플리케이션의 실행 환경 제공사용자 언어로 작성된 프로그램이 실행되기 위한 흐름에 대한 이해가 필요하다결국 사용자가 작성한 프로그램이 실행되기 위해서는 OS와의 통신이 필요하다.기계어로 변환된 코드가 사
FCM 오류 처리그룹 초대 , 친구 요청 서비스를 수행하는데 있어 ‘알림 전송 서비스’를 구현할 때 FCM을 사용했다. 1\. FCM 자체의 성능 개선을 위해 RabbitMQ을 사용함. 2\. FCM 요청에 있어 오류가 발생할 경우 처리를 위해 데드레터 처리기존 Spr
사용자 경로 제공에 있어 Kakao, Naver, Tmap Open API를 사용하였고 Open API에 장애가 발생한 경우 처리에 있어 유연한 처리가 필요함을 느낌Resilience4j를 통해 Open API에 장애가 발생한 경우 close - open - half
사용자에게 경로를 제공하기 위해 Kakao, Naver, Tmap Open API를 사용한다. 위 API 제공에 있어 호출까지의 시간이 소요되고 비용 낭비가 발생이미 반환된 경로를 사용자가 재사용하는 경우가 많기 때문에 경로를 임시 메모리에 저장하는 로직 필요‘경로’
‘TWTW’의 테스트는 크게 Controller, Service, Repository Layer에서 진행되었다. 우리의 목표는 단위 테스트 적용이었다. 하지만 Service 테스트 코드 내에서 Repository를 통한 실제 DB 접근이 이루어져 완벽한 단위 테스트를
Abstraction (추상화)Polymorphism (다형성)Inheritance (상속)Encapsulation (캡슐화)우리는 자동차라는 클래스를 생성했다. 근데 ‘소나타’ 라는 새로운 클래스를 작성해야 한다 가정하자. 소나타는 자동차가 가지고 있는 모든 정보를
(Top - Down 방식)코드가 위에서부터 아래로 순차적 진행되는 형태자주 사용되는 코드를 함수로 만들어 중복 방지장점컴퓨터의 작업 처리 방식과 유사하기 때문에 시간적 유리단점유지보수가 어렵다.하나의 절차가 바뀐다면 ? : 전체에 대한 변경이 불가피하다.코드의 순서가
Java Bean 유형 간의 매핑 구현 단순화하는 코드 생성기컴파일 시점에 코드 생성 반복적 구현을 줄여준다.Annotation processor를 이용하여 객체 간 매핑 자동화MapStruct는 Lombok의 Getter,Setter,Builder를 이용한다.꺼내오는
아키텍처 관점에서 특정 계층에 사용하는 어노테이션명명을 통해 직관적으로 구조를 파악할 수 있다.스프링은 자동으로 StereoType 어노테이션이 붙은 클래스들을 빈으로 등록한다.@ComponentScan의 감지 대상AOP 적용시 관점 적용을 위해 역할에 맞게 사용해야
IOC → 프로그램의 제어 흐름이 뒤바끼는 것스프링 관점에서 바라보자면 스프링 컨테이너가 빈 오브젝트에 대한 생성 및 생명 주기를 관리하는 것이다.이러한 IOC는 조금 더 포괄적인 개념으로 바라볼 수 있다. DI는 스프링에서 IOC 기능의 대표적인 동작 방식으로 바라
스타벅스의 주문 시스템수많은 추가 옵션과 파생 음료를 깔끔하게 포용할 수 있는 시스템을 설계하라 !가격 산출추가된 옵션에 따른 설명 변경기존 시스템UntitledUntitled첨가물의 종류가 많아진다면 → 새로운 메소드를 추가해야 한다.첨가물 가격이 바뀔 때마다 기존
UntitledWeatherData온도 , 습도 , 기압각 정보를 최신화하여 디스플레이에 전달 !Display 종류현재 조건기상 통계기상 예보WeatherDataDisplay의 종류가 많아진다면? (확장성의 문제)늘어날때마다 measurementsChange() 메소
AOP의 등장 배경으로는 핵심 기능과 부가 기능의 분리였다. 그리고 AOP를 학습하다 보면 프록시라는 개념이 많이 등장한다. 오늘은 프록시에 대한 설명과 Spring AOP에서 프록시를 사용하는 방법에 대해 기술하겠다.목표 : 핵심 기능이 작성된 클래스와 부가 기능이
ObjectMapper의 NamingStrategies를 여러개 쓰이게 되는 상황이 발생했다.여러 종류의 외부 API를 반영하는 서비스였기에 외부 API 마다의 json 네이밍 컨벤션이 달랐다.특히, 하나의 NamingStrategies가 늘어날 때 마다 ObjectM
Untitled구체적인 지명에 대한 정보는 Kakao Maps API를 사용하고 자동차 경로에 대한 정보는 Naver Maps API를 사용해야 하는 상황이다.각각의 WebClientConfig에서는 서로 다른 설정의 ObjectMapper를 주입받아 사용한다.Kaka