이번에 내가 담당한 부분 중 다른 분이 개발하신 파일 업로드 기능의 수정 개발이 있다. 어떤 수정이냐하면 서버 디스크 용량이 부족할 경우 적절한 처리를 하는 수정이다. 수정개발은 다 했는데 테스트 환경을 만들기가 애매했다. 실제로 더미 파일을 인터넷에서 받아서 넣을수도 있지만 큰 용량의 파일을 FTP로 옮기는 데 시간이 걸릴 것 같았고, 좀 더 쉽게 테스트할 수 있는 방법이 없나 찾아보다가 fallocate 명령어를 이용했다. ChatGPT에 fallocate에 대해 물어봤는데 아래와 같이 대답했다. df -h 로 디스크 사용량을 확인한 후, 아래의 명령어로 파일을 만들어줬다.(fallocate는 실제 파일을 채우지 않고 파일 크기만 설정하기 때문에 20G의 파일도 금방 만들어졌다.) fallocate ..
KEEP 제각각이던 통계정책을 정리했다. 기존에 정리 안되어 있던 부분을 정리하니 내용을 더 파악하기 쉬웠다. CountDownLatch에 대해 공부했었는데, 그 내용을 프로젝트에 적용해볼 수 있었다.(https://dakafakadev.tistory.com/220) 배우기에만 그치지 않고 이렇게 실무에 적용하는 것이 좋다. 원래 문서작업은 각자 하고 취합을 따로 하는 방식이었는데, MS제품의 공유 기능을 사용해보자고 제안했고 결과적으로 문서작업에 드는 시간을 단축할 수 있었다.(https://dakafakadev.tistory.com/208) PROBLEM 통계 쿼리 때문에 어려움을 겪었다. 그래도 문제있는 쿼리가 있다면 어떻게 접근해야할지 경험해볼 수 있는 기회였다. 계속 비슷한 업무(CRUD)가 반..
얼마전 신입분이 현재 개발중인 소스에 결함이 있다며 부르셨다. 내용을 보니 JSESSIONID가 같아서 한쪽에서 세션이 풀리는 문제였는데, 그렇게 설명은 해드렸지만 좀 더 자세하게 알아볼 필요가 있어서 글로 남긴다. JSESSIONID는 서블릿 컨테이너에서 접속한 사용자를 식별하기 위한 식별자라고 보면 된다. 톰캣에서는 아래와 같이 JSESSIONID를 생성한다.(https://tomcat.apache.org/ 에서 Source Code Distributions에서 tar.gz이나 zip으로 소스를 받은 뒤 열어보면 확인할 수 있다.) package org.apache.catalina.util; public class StandardSessionIdGenerator extends SessionIdGene..
이번 프로젝트에서 나를 제일 애먹인 건 데이트피커였다... 챗GPT한테도 물어보고 인터넷에도 찾아봤지만 비슷한 기능에 대한 정보가 없어서 내가 구현한 내용을 정리해본다. 구현해야 하는 기능은 아래와 같았다. 라디오버튼 "일", "월"이 있고, "일"을 선택하면 데이트피커로 일단위 선택을 할 수 있고, "월"을 선택하면 데이트피커로 월단위 선택을 할 수 있다. 선택한 날짜에 따라 날짜 선택 범위가 제한된다.(예를 들어, 시작일을 4월을 선택하면 종료일은 4월 전을 선택할 수 없고, 시작일도 종료일을 넘겨서 선택할 수 없다.) 기본 데이트피커에서 선택 가능한 최대 과거일은 3개월전, 선택 가능한 최소 현재일은 전일이다. 일 월 위와 같은 라디오버튼을 만들었고, 각 라디오버튼에 클릭하면 데이트피커를 변경하는 ..
이번 프로젝트에서 여러 서버로 요청을 보내는 기능을 하나 맡게 되었는데, 구현하는 과정에서 겪은 어려움과 어떻게 해결했는지 기록해본다. 내가 맡은 기능은 스케줄을 돌면서 여러 서버로 요청을 보내고 결과를 받아서 처리하는 기능이었다. 기존코드는 한 스케줄이 시작되면 다른 스케줄은 접근할 수 없도록 AtomicBoolean으로 처리가 되어 있었고, 서버를 for문을 돌리며 요청하고 있었다. 그런데 한 가지 문제가 발생했다. 결과를 줘야하는 상대서버에서도 고도화를 진행하면서 응답속도가 현저히 느려졌다. 각 서버를 굳이 for문을 돌리며 요청할 필요가 없었기 때문에 속도를 위해 서버들에 비동기로 요청하는 것으로 변경했다. 서버들에 비동기로 요청하면서 발생하는 문제 중 하나는 비동기작업이 끝났는지 어떻게 알 수 ..
기획자가 따로 없는 우리팀은 산출물을 개발자 본인이 직접 작성해서 대리님들이 그 자료를 취합하여 산출물을 작성해왔다. 근데 이걸 몇 번 해오다보니 비효율적이라는 생각이 들었다. 취합을 한 사람이 맡아서 하게 되면 그사람은 그만큼 다른 업무를 해결할 시간을 뺏기게 된다. 그리고 한사람이 취합하다보니 놓치는 부분이 있을지도 몰라서 각 부분을 담당한 사람들이 다시 한 번 체크할 겸 확인을 해야하고, 수정할 부분이 있으면 수정을 요청해야 한다. 문서를 동시에 작성할 수 있는 방법이 없을까 찾아보다가 MS Office 제품의 공동 작업 기능을 알아보게 되었다. 마침 회사에서 Office365를 결제해줘서 직접 사용해보면서 결정할 수 있어서 좋았다. 내가 혼자 테스트로 사용해본 바로는 공동작업을 할 때 변경내용이 ..
발단 나는 회사에서 개발 외에 운영업무도 맡고 있는데, 어느날 고객사로부터 우리 서버가 메모리를 과도하게 사용하고 있다는 알림이 왔다고 전해들었다. 그래서 문제의 원인이 우리가 개발한 소스인지 아니면 그외의 원인이 있는 것인지 확인하기 위해 서버에 접속했다. 전개 우선은 제일 먼저 한 일은 우리가 개발한 애플리케이션이 실제로 메모리를 과도하게 사용하고 있는지 보는 것이다. ps -ef --sort -rss 위 명령어를 사용하면 메모리를 많이 사용하는 순으로 볼 수 있다. 또, top으로도 확인할 수 있다. 이때 shift + M을 누르면 메모리 사용 내림차순으로 정렬해서 볼 수 있다. 주의해서 봐야할 것은 RES이다. 또, 해당 프로세스에 대한 정보를 확인하기 위해 아래의 명령어를 이용하여 정보를 확인했..
작년 7월에 @ControllerAdvice로 같은 예외일 때 뷰나 데이터를 내려주는 분기처리를 할 수 없을까 고민했었다. @ControllerAdvice로 같은 예외일 때 뷰나 데이터를 내려주는 분기처리를 할 수 없을까에 대한 고민 @ControllerAdvice로 같은 예외일 때 뷰나 데이터를 내려주는 분기처리를 할 수 없을까에 대한 고민 이 고민은 파라미터 유효성 체크를 편하게 하는 방법을 찾아보다가 시작되었다.(파라미터 유효성 체크를 편하게 해보자) 현재 우리 프로젝트는 JSP뷰를 사용하고 있다. 그리고 한 컨트롤러 클래 dakafakadev.tistory.com 내내 저 고민을 하고 있었지만 이것저것 할 게 많아서 손을 못 대고 있던 찰나, 마침 내게... 예외에 따른 뷰와 객체 반환 분기처리를..