spring 4

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

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

Dev 2025.03.18

[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

Spring @Value를 통해 환경 변수를 주입받을 때 주의할 점

🍎 Spring에서 제공하는 @Value 사용 시 주의해야 할 점을 정리합니다.📝 Kotlin - Spring 환경에서 @Value를 사용할 때 마주한 문제1. @Value로 주입받을 변수를 선언하는 방법- @Value를 주입받기 위해선 app.name 이 application.yml 파일에 정의되어 있다는 가정 하에 아래 두 방식을 사용해 정의될 수 있습니다.// case 01@Value("\${app.name}")val appName: String = "A"// case 02@Value("\${app.name}")lateinit var appName: String// application.yml fileapp: name: abc- case 01의 경우, var를 사용할 때 lateinit을 사용..

Dev 2024.09.16

Spring Resolver, Json and ObjectMapper 내부에선 어떤 일들이 발생할까?

🍎 큰 양의 데이터를 한꺼번에 적재해본 적이 없어 다량의 데이터가 아닌 한 건의 데이터로 Flow를 잡은 후 큰 데이터를 처리하는 방법을 선택했습니다. 🍎 코드 작성 시 Domain을 우선적으로 생성하는 것이 아닌 Presentation 계층 먼저 작성하기 시작했습니다. ❓ 왜 Domain을 먼저 작성하지 않고 Presentation(Controller)부터 코드를 작성했나요? Controller 부터 작성한 이유는 행위를 먼저 결정하기 위함입니다. 여기서 이야기하는 행위는 객체가 갖는 메소드를 이야기하기보단 프로젝트에서 받은 요청이 수행되는 행위를 뜻합니다. 이를 통해 얻을 수 있는 장점은 데이터 중심적으로 생각하지 않게되고 유연하게 Domain의 상태(property)를 가져갈 수 있습니다. ⚠️ 문..

TIL 2023.04.03