본문 바로가기

IT/Java Spring

[Spring] 순차적 프로세스의 비동기식 프로세스로의 전환 삽질 1. 서론 및 얽힌 이야기 내부 시스템에 대해 지속적으로 healthCheck를 하는 Spring Boot기반 서비스를 개발한 적이 있다. DB에 등록된 시스템 리스트를 가져와 순차적으로 healthCheck를 실행하는 방식의 서비스이다. 그러나, 10/12 HealthCheck Target별로 HealthCheck 시점의 정합성이 맞지 않는 문제가 발생하였다. 문제 상황 서술 전에 적용중인 시스템 아키텍처 및 HealthChecker 서비스에 대한 개요를 먼저 풀어본다. A Group의 WAS에 대해 배포를 진행하였다. 배포가 진행되면, 해당 인스턴스로의 직접적인 호출에 대해서는 동작하지 않게 된다. static file을 제외한 모든 경로에 대해서 reverse proxy를 통하여 데이터가 was로 .. 더보기
[HikariCP] Possibly consider using a shorter maxLifetime value Table Of Contents 0. 서론 1. Connection Pool이 무엇인가 2. Connection Pool이 왜 필요한가? 3. HikariCP의 주요 파라미터 4. 문제 분석 5. 후기 및 조치 6. 참고 문헌 클릭하시면 해당 content로 넘어갑니다. 0. 서론 지난주, 플랫폼 각 내부의 엔드포인트를 호출하여 각 서비스 및 데이터베이스가 살아있는지에 대해 모니터링 하는 Spring Boot Application에서 다음과 같은 에러 메시지를 보았다. [WARN ] 2020-07-30 16:43:39 299545737 [PoolBase.java][isConnectionAlive](184) : HikariPool-1 - Failed to validate connection org.mari.. 더보기
[Spring] Factory Design Pattern 0. Table Of Content 1. 서론 2. Factory Pattern이란 무엇인가 2.1. Factory Parrern 예제 3. Factory Pattern 사용으로 얻을 수 있는 기대 효과 4. 실무에서 적용한 코드 일부 5. 후기 1. 서론 배치 프로세스에 대한 공통 프레임워크를 담당하여 작업을 진행하고 있었다. Spring Batch Starter를 사용하여 작업을 진행하는 것이 가장 효율적이었지만, 기존 만들어진 테이블에 맞춰야 했기 때문에 해당 테이블에 맞게 배치 프레임워크를 새로 개발하게 되었다. 프레임워크에서 build된 결과물인 jar파일은 crontab에 등록이 되어 jar 실행 시 입력받은 augument값으로 해당 batch job이 실행되어야 하기 때문에, 입력 argu.. 더보기
[Spring] @RestController vs @Controller 1. @Controller 전통적인 Spring MVC Controller는 View 기술을 이용하여 화면을 리턴하는 방식이다. json, xml형태의 객체를 반환하기 위해서는 @ResponseBody를 사용하여 json, xml형태의 객체를 리턴 할 수 있다. @Controller의 workflow는 다음과 같다. 위 workflow의 순서를 간략히 설명하면 다음과 같다. Client는 URL로 서비스에 Request를 보낸다. 해당 요청을 처리할 수 있는 Handler를 찾아 Mapping 하기 위해 Dispatcher Servlet가 인터셉트 한다. Mapping 된 Handler가 존재하는 Controller에서 해당 요청을 처리하고, Model and View 객체를 반환한다. Dispatche.. 더보기
[Spring] Servlet의 동작 과정과 메모리 적재 어제 학습한 servlet에 대해 의문점이 생겼다. Chrome에서 servlet을 1회 최초 호출하고, Safari에서 servlet을 1회 호출한 결과는 위 사진과 같이 나왔다. 2번 호출 했으니, init 매서드가 2번 호출 될 것이라고 생각했었는데 아니었다. 그 이유는 다음과 같다. 서블릿의 동작과정을 한눈에 보기 쉽게 다이어그램으로 정리해보았다. Servlet는 최초 호출이 되면 해당 selvlet은 메모리에 적재됩니다. 그 이후로 다른곳에서도 중복 호출 하게 되면, 똑같이 Servlet를 불러오는 것이 아니라, 메모리에 적재된 Servlet을 재사용해서 사용자와의 인터페이스를 제공한다고 한다. Servlet는 메모리에 이미 init()이 실행된 채로 메모리에 적재되어 있기 때문에 또 다시 같은.. 더보기
[Spring] Servlet과 web.xml의 관계 기본적인 프로젝트를 생성하면 다음과 같은 web.xml이 생성되어 있을 것이다. 기본적으로 "/"경로를 호출할 때, 쓰일 수 있는 페이지의 형식을 로 정의해 놓았다. servlettest index.html index.htm index.jsp default.html default.htm default.jsp 앱을 외부로 디플로이 하기 위해 자신의 프로젝트를 톰캣에 추가 하였을 것이다. web.xml에 매핑을 하지 않았을 경우, Servlet을 호출 할 때 http://// 과 같이 매우 긴 주소로 호출 할 것이다. 하지만 이러한 형식은 클래스 이름이 그대로 노출되기 때문에 보안상 좋지 않습니다. 따라서 이런 방식으로 사용하지 않고, 서블릿 클래스에 대해 대응하는 매핑된 이름으로 실제 서블릿을 요청한다. .. 더보기