목록전체 글 (67)
개발그래머
요즘 대부분의 서버 통신은 HTTP 기반 API를 주로 사용하지만, 금융권을 비롯한 특정 산업에서는 여전히 TCP 통신이 필수적으로 사용되고 있습니다.실제로 많은 금융 시스템과 일부 기업 환경(현재 회사)에서는 TCP 기반 연동 서버가 다수 존재합니다.HTTP와 TCP 비교구분HTTPTCP표준/호환성매우 높음직접 설계 필요성능헤더/텍스트 오버헤드 큼가볍고 빠름실시간성낮음 (요청-응답)높음 (양방향 스트리밍)보안HTTPS로 간단 적용TLS 직접 적용 필요인프라 친화성게이트웨이, 로드밸런서 지원 풍부포트/방화벽 제약 많음개발 편의성쉬움 (REST, JSON)어렵지만 최적화 가능Spring에서의 TCP 통신 구현 방법Spring 환경에서 TCP 통신을 구현하는 방법으로는 크게 세 가지가 있습니다Java Soc..
서비스를 운영하면서 민원에 응답하기 위해 앱 로그 확인이 필요한 상황이 있었다.현재 서비스에서는 앱 로그를 특정 용량만큼 저장한 후, 필요할 때 푸시를 통해 서버 API를 호출하여 파일을 전송하고 있었다. 어느 날부터인지 해당 기능이 간헐적으로 동작하기 시작했다.어떤 유저의 로그는 API 호출이 정상적으로 되는 반면, 어떤 유저의 로그는 며칠이 지나도 API 호출이 되지 않는 현상이었다.이 기능은 내가 인수인계받기 전부터 개발이 완료된 지 오래되었고 계속 사용해오던 기능이었다.기존 사수 개발자에게 물어봐도 앱 쪽에서 확인해야 할 문제라고 하여, 앱 쪽에 계속 확인해달라고 하는 상황이었다.로그 전송 실패 시 보낼 API를 추가하고 상황을 지켜보았지만, 아무런 소득 없이 현상은 계속되었다. 문득 용량에 대한..
퇴근 시간대에 서버 지연이 발생했지만, 자연적으로 해소되었다는 DBA의 연락을 받았다. 서버 로그를 확인했지만 특별한 이상 징후는 발견되지 않았다. 그런데 다음 날 출근 시간대에도 동일한 서버 지연이 발생했고, 이번에는 특정 쿼리에서 문제가 있었음을 DBA가 확인해주었다. 문제의 원인은 수동 커밋 모드(auto-commit: false)로 실행된 쿼리가 commit 또는 rollback되지 않아 테이블 락이 발생한 것이었다.많은 블로그에서 DB 툴 사용 시 수동 커밋 모드를 추천하는 경우가 많다. 나 역시 한때 수동 커밋 모드를 사용했지만, 익숙하지 않아 불편함을 느꼈다. 쿼리를 실행한 후 commit 또는 rollback을 반드시 수행해야 하지만, 이를 놓치는 경우가 종종 발생했기 때문이다. 이러한 실..
필기필기는 약 1주일 동안 최신 기출문제만 풀었다.따로 문제집을 구매하지 않고, CBT 사이트에 올라온 최신 기출문제 3년 치를 반복해서 풀었다.2~3년 전에 필기시험을 본 적이 있었는데, 그때와 비교했을 때 문제은행 방식으로 변화한 것이 느껴졌다.실제 시험도 컴퓨터로 진행되었고, 합격 여부가 즉시 확인 가능했다.문제은행 방식으로 바뀌면서 난이도가 다소 낮아졌다고 생각한다. 물론, 기본적인 CS 지식이나 업무를 통해 쌓인 경험도 영향을 미쳤을 것이다.실기필기는 많은 사람들이 통과하리라 생각되어 간략히 언급했고, 실기 준비 경험을 더 자세히 적어보았다.실기 준비도 기출문제를 풀면서 시작했지만, 몇 문제를 푸는 중에 "이거, 쉽지 않겠다"라는 생각이 들었다.기출문제를 2~3회 반복해서 풀다 보니, 기출만으로..
Exception encountered during context initialization - cancelling refresh attempt: org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is java.lang.IllegalStateException: Unable to create the directory [/tmp/tomcat.*] to use as the base directory개발 서버 배포 문제 해결 과정개발 서버를 배포하는 과정에서, 배포가 완료되지 않고 애플리케이션이 계속해서 실행 종료를 반복하는 현상이 발생했다.처음에는 소스 코드 수정 과정에서 발생한..
MySQL 공간 데이터 타입(Spatial Data Types)MySQL은 OpenGIS(Simple Features Specification) 표준을 준수하며, 공간 데이터 타입은 크게 두 가지로 나눌 수 있음공간 데이터는 SRID(Spatial Reference System Identifier)를 통해 좌표계를 정의하고 사용 가능함MySQL에서 공간 데이터 타입은 SPATIAL INDEX를 지원하여 성능 향상 가능함기본 공간 데이터 타입기본 공간 데이터 타입은 개별적인 지리적 개체를 표현함데이터 타입설명GEOMETRY모든 공간 데이터 타입의 일반화된 형태로, 모든 공간 객체를 저장할 수 있는 기본 타입입니다.POINTX, Y 좌표로 구성된 한 개의 점(위치)을 표현합니다.LINESTRING두 개 이상..
개요운영 업무를 진행하면 동적으로 설정값들을 구성해야 하는 경우가 있습니다.1번 DB를 사용하여 구성2번 프로퍼티를 사용하여 구성DB를 사용하는 방법은 개발자가 아닌 실질적인 사용자가 UI를 통해 지속적으로 관리를 하는 상황일때 주로 사용하는 편입니다.가벼운 작업은 프로퍼티를 통해 하는 편인데 기본적인 프로퍼티로 설정하게 되면 서버를 재배포해야 하는 번거로움이 생깁니다.그렇기 때문에 외부파일로 프로퍼티를 동적으로 구현하여 관리하는 것을 지향하는 편이며 해당 방법을 구현하는 법을 올리고자 한다.사용법implementation("commons-configuration:commons-configuration:1.10") commons-configuration을 import하여 사용하게 된다2 버전도 있지만 ..
개요운영 업무를 하다 보면 추가해야 될 것들, 변경해야 될 것들, 등록해줘야 할 것들이 생기는데 주로 csv파일(개발자) 혹은 엑셀 파일(업무담당자)로 전달받게 된다.유저 자동 가입 처리라던지, csv 파일에 해당하는 값으로 변경한다던지 소소한 잡일들이 많이 생기는데 생각외로 많은 시간을 할애하게 되고 업무의 흐름을 방해하여 자동화하기로 하였다. WatchService 란?Java NIO(Non-blocking I/O) 패키지의 일부로서 파일 시스템의 변경 사항을 감시하고 관찰하는 데 사용되며 파일 또는 디렉토리의 생성, 수정, 삭제 등의 이벤트를 감지할 때 활용됨파일 시스템의 특정 디렉토리에 대한 변경 사항을 모니터링하기 위해 사용되며 감시 대상 디렉토리에 대한 이벤트가 발생하면 이를 감지하고 애플리케..