2025/03 5

[Kotlin] List가 MutableList를 사용하는 이유

🍎 Kotlin List 사용 중 내부 코드에서 List가 MutableList를 사용하는 것을 발견해 어떤 이유로 MutableList를 사용하는지 정리합니다.+ 또한 이에 적용된 설계 Practice를 정리하고 어떤 방식으로 설계에 녹여낼 수 있을지 정리합니다.🍏 List 생성 내부 Code✓ Immutable(불변)인 List를 호출하는 것을 기대했지만 MutableList를 호출하는 모습을 볼 수 있습니다. 🍏 MutableList 생성 내부 Code✓ List 함수 바로 아래 위치해 있는 MutableList 함수는 ArrayList를 내부 변수로 선언한 후 반복을 통해 Element를 집어 넣습니다. ❓ 왜 List는 MutableList를 호출하는 것일까요??✓ List 또한 Mutab..

TIL 2025.03.30

원자성 보장 코드에서? DB에서?

🍎 마주한 문제에서 데이터의 원자성을 어느 곳에서 관리하면 좋을지 고민하게 되어 정리합니다.🍏 문제 상황✓ 공공데이터 API에서 여러 건의 원시 데이터를 조회한 후, 이를 내부 비즈니스에 활용할 수 있도록 정제하여 저장해야 했다. 이 과정에서 데이터를 여러 개의 테이블에 나누어 저장해야 하는 상황이 발생 ✓ 처음에는 Bulk Insert를 사용하여 성능을 최적화하는 방안을 고려했지만, 하나의 테이블이 아닌 여러 개의 테이블에 데이터를 삽입해야 하기 때문에 Bulk Insert를 적용할 수 없었다. ✓ 결국 데이터를 한 건씩 개별적으로 저장하는 방식이 필요했는데 중간에 데이터 삽입이 실패할 경우 어떻게 처리할 것인가라는 고민이 생겼다. ✓ 데이터 정제 및 저장 로직이 일부만 실행되고 중단될 경우, 데이..

Dev 2025.03.18

Nginx Basic

🍎 Nginx에 관한 기본과 사용 방법을 정리합니다.❓ Nginx는 어떤 도구인가요?-> 공식 문서 출처에 의하면 NGINX(엔진 X)는 HTTP 웹 서버, 리버스 프락시, 콘텐츠 캐시, 로드 밸런서, TCP/UDP 프락시 서버 및 메일 프락시 서버입니다. ❓ 왜 사용하나요?- 어떤 불편함을 해결하기 위해 Nginx라는 도구가 탄생했는지 찾아본다면 사용 이유를 알 수 있습니다.- Nginx 이전 시중엔 Apache HTTP Server(Web Server)를 사용했고 Apache HTTP Server가 가진 몇 가지 한계를 극복하기 위해 Ningx가 등장했습니다. - 초기 웹 서버들은 클라이언트 요청이 증가할 때마다 성능이 급격히 떨어지는 문제가 있었고 특히 Apache의 프로세스 기반 아키텍처가 대량..

TIL 2025.03.06

원시 데이터가 DB에 존재하는 모습

🍎 원시 데이터(이하 Raw Data)를 내부 DB에 저장할 때 어떤 모습으로 담겨야 하는지 생각한 부분을 정리합니다.- 가공되기 전 데이터인 Raw Data는 비즈니스에 사용되기 전까지 한 번 이상의 가공을 거쳐야 하는 데이터입니다.- Raw Data가 중요한 이유는 가공되지 않기 때문에 중요하다고 생각합니다. 가공된 후 다양한 모습으로 비즈니스 데이터가 될 수 있으며 혹시나 가공 처리 과정에 오류가 있어 오염이 될 경우, 근원 데이터로 오류 추적, 개선을 할 수 있기 때문입니다. ❓ 어떻게 Raw Data를 저장해야 할까?- Raw Data의 모습은 규정할 수 없이 다양한 형태로 존재합니다. 외부 API에서 제공하는 데이터가 Raw Data가 될 수 있고 운영되는 서비스의 사용자 활동 이력도 Raw..

TIL 2025.03.05

[Tip] @Scheduled 와 Cron 어떤 것을 선택해야할까?

🍎 시스템 내부에서 반복적인 작업을 처리해 줄 도구를 고를 때 어떤 부분을 고려하면 좋을 지 정리합니다.🍏 의사 결정이 필요하게 된 이유- 공공데이터를 3분에 한 번 API 호출하여 갱신된 Raw Data를 가져와야 하는 요구 사항 존재- 반복 요청을 OpenAPI Server에 전달해야하는데 어떤 도구를 사용해야할지 고민 🍏 다룰 수 있는 도구 중 Schedule 기능을 제공해주는 도구- Spring Scheduler (@Scheduled)@Serviceclass TestService { @Scheduled(cron = "0 */3 * * * *") // 매 3분마다 실행 (초, 분, 시, 일, 월, 요일) fun executeTask() { println("TestServic..

Dev 2025.03.04