트러블슈팅 4

[node.js]커넥션 수에 따른 속도차이 (속도개선,createPool)

서비스 중 속도가 느리다는 요청을 받았다. Spring의 Tomcat을 포함한 대다수의 웹 서버는 멀티 스레드 방식을 따르고 Client의 요청이 있을 때마다 Thread를 생성하여 해당 요청을 처리한다고 한다. 하지만 node에 경우 싱글 스레드 방식을 따르고 그렇기 때문에 하나의 스레드가 모든 요청을 처리하기 위해 비동기 방식을 지원한다. 이미지와 같이 동시에 요청이 들어오면 요청1이 끝나고 요청2가 실행되는 방식이 아닌 모든 요청을 일단은 실행후 완료된 순서대로 응답을 한다. 여기서 속도가 느린 원인을 발견했다. 현재 서비스의 커넥션은 1개로 운영하고 있는데 1개의 커넥션이 실행되는 동안 다른 요청이 들어오면 커넥션이 반납 시기까지 대기 후 실행하게 되어 시간지연이 발생하는 것이었다. 이미지와 같이..

트러블슈팅 2023.03.29

[node.js]PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR 에러 원인 및 해결

서비스 중 인증이 안된다는 요청이 들어왔습니다. 그리하여 로그 확인 결과 노드 서버에서 PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR 라는 로그가 찍혀있었고 검색 결과 DB커넥션이 끊겨있는 상태에서 query요청을 하여 발생한 에러로 확인하였습니다. 그리하여 DB서버에서 현재 연결된 커넥션을 조회(SHOW processlist;) 결과 총 7개의 커넥션이 있어야하는데 2개의 커넥션만 연결되어 있는 것을 확인하였습니다. 리눅스 WAS서버에서 node서버를 재시작하기 위해 pm2 restart all을 하여 서버를 재시작 하였습니다. 재시작 후 DB 커넥션 조회를 하였을때 7개의 커넥션이 연결되어 있는 것을 확인하였고 pm2 restart 후 서비스가 정상적으로 작동하는 것까지 확인하였습니다..

트러블슈팅 2023.03.29

[spring]@Value와 빈 생명주기(Bean LifeCycle)

API 개발 프로젝트를 진행하는 도중 application.properties를 이용하여 상수관리를 하였다. API마다의 header객체를 하나로 만들어 공유하도록 설계를 진행했다. @ToString public class Header { private Map header; public Header(String remote_token, String Cookie, String client_id, String swap_key) { this.header = new HashMap(); this.header.put("remote_token",remote_token); this.header.put("Cookie",Cookie); this.header.put("client_id",client_id); this.hea..

트러블슈팅 2023.03.02

[php]UTF-8 BOM 이슈 원인 및 해결

프로젝트를 진행하며 php api를 만들었습니다. 결과값을 확인하기 위해 POSTMAN을 이용하여 테스트를 진행 하고 있었습니다 값은 의도한 대로 json으로 리턴한 것을 확인하였습니다. 하지만 javascript에서 ajax로 호출하였는데 json parse 에러가 발생했습니다. 응답 header도 로그로 찍어서 확인결과 content-type: application/json 인것을 확인 하였습니다. 왜 json을 파싱을 못하는 것일까... 그래서 직접 url로 직접 접근해서 json을 받아서 json validation 체크를 해보았습니다. https://jsonformatter.curiousconcept.com/# JSON Formatter & Validator Format and validate ..

트러블슈팅 2023.02.23