Spring Boot (5) 썸네일형 리스트형 [Spring Boot] WebSocket 서버 설정 1 - 연결 설정 및 메세지 매핑 Why WebSocket?이전 포스팅에 이어 현재 작업중인 개인 프로젝트를 진행하면서 배운 부분에 대한 기록으로 남기는 포스팅이다. 단순한 웹 애플리케이션 개발과 같은 주제로는 개인 프로젝트 규모에서 상용 서비스를 개발하고 운영해보는 과정에서 경험할 수 있는 동시성 문제나 실시간 처리에 대한 성능 개선 등 백엔드 개발자로 성장할 때 필요한 인사이트를 얻기에는 어렵다는 판단이 들었고 적은 수의 유저로도 이러한 경험들을 비슷하게나마 해보며 성장할 수 있는 주제가 무엇이 있을까 고민하는 과정에서 실시간 처리가 필요한 게임이나 채팅을 메인으로 한 서비스를 개발해보면 좋겠다는 생각이 들어 주제를 정하게 되었다. 오픈 이후에는 커뮤니티 기능과 메인 컨텐츠를 분리해 나갈 수 있도록 구조를 잡아 분산 아키텍처나 서비스.. [Spring Boot] 동시성 문제 - 동기 및 비동기 분산락 적용 최근 개인 프로젝트를 하나 진행하면서 약 120만건 정도 되는 json 데이터를 파싱해 정제한 후 DB에 적재해야 되는 부분을 개발하게 되었고, 그 과정에서 배운 부분들 중 동시성 문제를 분산락 도입으로 해결하는 과정에서 배운 부분을 기록으로 남긴다. Spring Batch 쓰면 되잖아?Spring Batch의 개발 및 운영 환경이 구성이 되어 있는 회사 환경에서의 경우에는 배치 job을 개발하고 등록해서 사용하면 될 터였지만, 아직까지 개인 프로젝트에서는 Spring Batch까지 써가며 처리해야 될 문제들이 없었다보니 Spring Batch 환경을 구성하고 개발하는 것 부터가 오버 엔지니어링으로 느껴졌다. 특히 개발 단계에서야 테이블을 drop하고, 다시 파싱하는 과정을 여러번 거치다보니 배치를 개발.. [Lessons learned] 대용량 파일 다운로드 처리 현재 수행하고 있는 프로젝트를 진행하면서 대용량 파일 다운로드 기능을 개선해야 될 일이 생겼다. 기능 개선 과정에서 처리한 방법을 기록용으로 남겨둔다. 기존 로직을 간단하게 표현하면 다음과 같다. 1-1. Application에서 대용량 데이터를 DB로부터 조회해 호스트에 마운트되어 있는 NAS에 파일을 생성 1-2. 생성된 파일의 상대 경로를 Frontend로 응답 2-1. Frontend의 콜백에서 NAS가 마운트되어 있는 Web server로 파일 다운로드 요청 2-2. 다운로드 다른 추가적인 문제점들이 있을 수 있겠지만, 가장 크게 보인 문제점은 다음과 같다. 1. 서버 디렉터리 구조 노출 2. 파일 생성 요청과 파일 다운로드 요청으로 나뉘어 요청을 두 번 하도록 구성이 되어있어, 불필요한 오.. [Spring Boot] default locale 및 encoding 관련 이슈 해결 기록 이번 포스팅은 이후에 비슷한 상황 발생시에 참고용으로 사용하기 위한 기록의 목적이 큰 포스팅이다. Linux 호스트의 로케일이 ko_KR.euckr 인 환경에서 Spring Boot 애플리케이션을 배포해야하는 상황에서 발생한 이슈를 처리하는 과정에 대해 기록한다.프로세스를 실행하는 유저의 Locale은 아래와 같이 ko_KR.euckr로 되어있다. 이 환경에서 Spring boot 애플리케이션을 실행했을 땐 정상적으로 한글 파라미터를 받아 처리하는 로직이 잘 동작했다. 그런데 DRM을 적용하는 과정에서 .bash_profile을 명시적으로 적용해야하는 상황이었고, .bash_profile을 적용하자마자 한글이 깨지는 이슈가 발생했다. 적용한 .bash_profile 파일을 살펴보니 안에서 export .. [Spring Boot] MappingJackson2HttpMessageConverter 커스터마이징 놀랍게도 Spring Boot 관련 첫 포스팅개인 프로젝트로 작업하다가 관련 내용들이 섞여 있었던 적도 있었지만 이론이 메인이 되는 포스팅은 처음이다.회사 업무던 개인 프로젝트던 새로 알게 된 게 있더라도, github이나 사내 gitlab에 올리고서는 아~ 알았다~ 하고 말았었기 때문에 생겼던 문제였다. 오늘 회사에서 API Response로 나가는 Json의 필드가 생각한대로 셋팅이 안되는 문제를 해결하면서 알게되고 배운 부분에 대해 포스팅을 해보려고 한다. 1. 문제회사 코드다보니 예제 코드로 대체한다.import lombok.Data;@Datapublic class MyDto { private String oWEIRDField; // ...} 이런 Dto가 있다고 가정해보자.필드명이 카멜케이.. 이전 1 다음