반응형 공부399 if-else 지옥에서 탈출하기: Visitor 패턴을 활용한 조건부 직렬화 리팩토링 들어가며코드를 작성하다 보면 다양한 타입의 객체를 처리해야 하는 상황을 마주하게 됩니다. 특히 여러 구현체를 가진 추상 클래스나 인터페이스를 다룰 때, instanceof와, if-else 체인으로 타입을 검사하는 코드를 작성하게 되죠. 오늘은 이런 코드를 Visitor 패턴으로 리팩토링한 경험을 공유하려고 합니다. 문제사항이번 프로젝트에서는 다양한 규칙 조건(RuleCondition)을 처리하는 시스템을 개발하고 있었습니다. 각 조건은 JSON으로 직렬화되어 데이터베이스에 저장되는데, 조건 타입별로 다른 직렬화 로직이 필요했습니다. 이전 코드public String serializeConditionWithRuleField(RuleCondition condition) throws JsonProcess.. 2025. 7. 22. python 버전별 설치하기(다운그레이드 가능, MAC) Python으로 개발하다 보면 프로젝트마다 다른 Python 버전을 사용해야 하는 경우가 많습니다. 최신 버전을 설치했다가 특정 라이브러리가 지원하지 않아서 다운그레이드해야 하는 상황, 다들 한 번쯤은 겪어보셨을 텐데요. 오늘은 이런 상황을 우아하게 해결할 수 있는 pyenv에 대해 알아보겠습니다.왜 pyenv인가?Python 버전을 관리하는 방법은 여러 가지가 있지만, pyenv를 추천하는 이유는 다음과 같습니다:시스템 Python을 건드리지 않음 - macOS나 Linux의 시스템 Python을 그대로 둔 채 작업 가능프로젝트별 버전 관리 - 각 프로젝트마다 다른 Python 버전 사용 가능간편한 버전 전환 - 명령어 한 줄로 버전 전환다양한 Python 버전 지원 - 거의 모든 Python 버.. 2025. 7. 17. Spring Boot에서 Sendbird 관리자 메시지 전송 구현하기 Sendbird 채팅에 관리자 메세지를 전송하는 경우, 채팅을 하고있는 앱이 아닌 백엔드에서 진행되어야 합니다. 그래서 백엔드가 Springboot 로 구성되어 있는 곳에서 어떻게 연동하여 전송하는지를 정리했습니다. 1. Sendbird 라이브러리 추가라이브러리 버전은 다음 github에서 확인할 수 있습니다.https://github.com/sendbird/sendbird-platform-sdk-java GitHub - sendbird/sendbird-platform-sdk-java: Sendbird Platform SDK for JavaSendbird Platform SDK for Java. Contribute to sendbird/sendbird-platform-sdk-java developmen.. 2025. 6. 30. Spring scheduling 을 DB 기반으로 동적 스케줄링 하기 1. 들어가며스프링 프레임워크에서는 @Scheduled 어노테이션을 사용하여 정적인 스케줄링을 쉽게 구현할 수 있습니다. 하지만 이 방식은 코드에 하드코딩되어 있어 변경 시 재배포가 필요하다는 단점이 있습니다. @Componentpublic class StaticScheduler { @Scheduled(cron = "0 0 12 * * ?") // 매일 정오에 실행 public void dailyTask() { // 작업 내용 }} 대부분의 경우 이런 정적 스케줄링으로도 충분하지만, 다음과 같은 상황에서는 동적 스케줄링이 필요합니다:마케팅 캠페인 알림 시간을 유연하게 변경해야 할 때데이터 집계 작업의 주기를 운영 중에 조정해야 할 때환경별(개발, 테스트, 운영)로 다른 스케줄.. 2025. 3. 21. React에서 자식 컴포넌트 제어하기(useRef, forwardRef) React 개발을 하다 보면 부모 컴포넌트에서 자식 컴포넌트의 메서드나 상태에 직접 접근해야 할 필요가 있습니다. 이런 경우 useRef와 forwardRef 를 사용한다면 도움이 됩니다. 이 글에서는 이 두 기능을 활용하여 자식 컴포넌트를 효과적으로 제어하는 방법을 살펴보겠습니다. 왜 useRef와 forwardRef가 필요한가?React의 기본 철학은 단방향 데이터 흐름입니다. 부모에서 자식으로 props를 전달하고, 자식은 이벤트를 통해 부모와 소통합니다. 하지만 이런 패턴만으로는 해결하기 어려운 상황이 있습니다: 폼 요소의 초기화나 포커스 제어애니메이션 직접 트리거미디어 요소(비디오, 오디오) 제어모달이나 드롭다운 같은 UI 요소 직접 제어 이럴 때 useRef와 forwardRef를 활용하면 .. 2025. 3. 18. flutter 무한스크롤: riverpod 상태관리 삽질(스크롤 위치 초기화 및 리빌드 문제) Flutter에서 무한 스크롤을 구현할 때 흔히 겪는 문제 중 하나는 바로 데이터 로딩 시 스크롤 위치가 초기화되는 것입니다. 최근 제가 겪었던 문제와 해결 과정을 공유합니다. 문제 상황 파악하기제가 최근 상담 후기 목록 화면을 Flutter로 개발하며 무한 스크롤을 적용했습니다. 일반적인 무한 스크롤 구현 방법처럼 사용자가 리스트를 가장 아래까지 스크롤하면 추가 데이터를 자동으로 불러오도록 했습니다. 그런데 예상치 못하게 새로운 데이터를 로딩할 때마다 화면이 전체적으로 다시 그려지면서 스크롤 위치가 맨 위로 강제로 이동하는 현상이 발생했습니다. 처음에는 스크롤 컨트롤러나 ListView의 설정이 잘못됐을 거라 생각하여 여러 번 점검해봤지만, 문제는 전혀 개선되지 않았습니다. 고민 끝에 상태 관리 라이.. 2025. 3. 13. 이전 1 2 3 4 ··· 67 다음 반응형