이슈와해결30 리팩토링 회고 - 복잡한 코드, 중복 코드, 비효율적 코드 개선 경험 0. 개요 본 글은 사내 자동화 툴의 사용성 확장에 대비하여 코드를 개선한 리팩토링 내용을 다룹니다. 처음 설계에서는 특정 도메인만을 대상으로 하였는데 요구사항이 확대되어 다른 도메인에서도 사용하게 된 경우입니다. 이와 같은 비즈니스 요구사항에 대한 대응으로 코드 레벨의 복잡성을 개선한 경험을 공유하고자 합니다. 예시 코드는 실제 코드가 아닌 컨셉 코드로 대체하였습니다. 1. 목차 개요 목차 1차 리팩토링 - Deserializer를 일반화하여 41개의 중복 클래스를 통합하기 문제 정의 목표 설정 리팩토링 전략 결과 및 평가 2차 리팩토링 - enum의 제거와 대안 문제 정의 목표 설정 리팩토링 전략 결과 및 평가 결론 2. 1차 리팩토링 2.1 문제 정의 문제 상황 기존의 Deserializer 구현은.. 2023. 12. 12. 고도화 회고 - 유효성 검증 로직에서 최소한의 변화로 리턴 타입 변경하기 0. 목차 개요 문제점 첫 시도 첫 시도의 문제점 두 번째 시도 두 번째 시도의 문제점 최종 해결 방식 결론 1. 개요 이번 글에서는 유효성 검증 로직에서 변화를 최소화하면서 고도화하는 내용을 다룹니다. 기존 boolean 값만을 리턴하는 로직을 변경해 실패 상세 detail 메시지를 전달하는 것이 목표였습니다. 이를 달성하는 과정에서 시도한 여러가지 방법과 최종적으로 채택한 방식에 대해 소개합니다. 예시 코드는 실제 코드가 아닌 컨셉 코드로 대체하였습니다. 2. 문제점 기존 시스템에서는 다음과 같이 boolean 값을 체크하고 이에 대한 결과를 리턴했습니다. public abstract class Payload { public boolean isInValid() { return !isValid(); }.. 2023. 12. 12. 순차 탐색 중 이미 지나친 정보를 알고 싶다면? 자료구조를 활용한 메모리 캐싱 직접 구현해보기 (feat. 알고리즘 vs 자료구조) 0. 목차 1. 개요 2. 문제 상황 3. 가장 쉬운 접근 4. 캐싱 5. 결론 1. 개요 본 글에서는 로그 파일을 파싱하고 구조화 할때 사용한 메모리 캐싱에 대해 다룹니다. 파일을 순차적으로 탐색하며 진행할 때 이미 지나친 파일에 대한 정보가 필요했습니다. 이를 해결하는 방식으로 한 차례 더 순차 탐색을 진행할 수도 있었지만 내부적으로 캐싱 방식을 구현하여 해결한 케이스입니다. 스프링 캐시나 별도의 캐시 라이브러리를 사용하지 않고 직접 구현한 경험을 소개합니다. 예시 코드는 실제 코드가 아닌 컨셉 코드로 대체하였습니다. 2. 문제 상황 아래와 같은 SimpleLogEventReader는 LogData를 String으로 받아 이를 읽고 LogEvent로 변환하는 작업을 수행합니다. 이때 LogEvent는.. 2023. 12. 11. 리팩토링 회고 - 스프링 Bean 주입을 활용해 Validator 확장성 개선하기 0. 목차 개요 문제 상황 해결 방법: Bean 주입을 활용한 리팩토링 테스트 코드에 적용하기 결론 1. 개요 본 글에서는 비즈니스 시나리오를 검증하는 Validator의 설계 및 구현 방식에 대해 다룹니다. 여러 개의 다양한 비즈니스 시나리오들이 존재하며 앞으로도 생성될 것을 고려한 확장성이 필요한 상황에서 처음 방식과 개선된 방식을 소개합니다. 예시 코드는 실제 코드가 아닌 컨셉 코드로 대체하였습니다. 2. 문제 상황 문제의 핵심은 코드의 중복이었습니다. 동일한 기능을 하는 서로 다른 Validator들이 중복으로 존재했는데요. 비즈니스 시나리오는 다양한 시나리오가 존재할 수 있습니다. 예를 들어 "어떤 특정" 시나리오를 살펴 보면 다음과 같습니다. Payload1 -> 응답 -> Payload2 -.. 2023. 12. 11. 리팩토링 회고 - 상태 패턴을 이용해서 복잡한 비즈니스 시나리오 검증 로직을 개선...! 0. 목차 개요 로직의 목표 초기 구현 코드 2.1. 템플릿 정의 방식 2.2. Validator의 메인 로직 상태 패턴을 적용하기 4.1. 고민한 내용 4.2. 상태 패턴 4.3. 구조 설계 4.4. 적용 결과 여전히 남은 문제들 결론 1. 개요 본 글에서는 사내 업무 시스템 개발 과정에서 겪은 리팩토링 경험을 공유합니다. 비즈니스 프로세스의 순서를 검증하는 로직을 구현했는데 너무 복잡하여 이를 상태 패턴을 적용하여 개선해보는 내용입니다. 만족할 만큼의 클린 코드에는 달성하지 못해 결과적으로는 기술 부채로 남겨두었지만 나름 많은 고민을 했던 내용이라 작성해보았습니다. 예시 코드는 실제 코드가 아닌 컨셉 코드로 대체하였습니다. 1. 로직의 목표 먼저 리팩토링의 대상이 되는 로직의 주 목표에 대해서 생각해.. 2023. 12. 11. 이전 1 2 3 4 5 6 다음