본문 바로가기

이슈와해결30

28개(+α) 클래스를 검증해야 한다면? - 커스텀 애노테이션을 사용한 Payload 검증 방식 도전기 0. 목차 개요 문제점 개선 1 - 필수 여부, 스트링 길이 개선 2 - Enum 타입 더 완벽한 캡슐화를 위하여 What remains... 결론 1. 개요 본 글은 사내 업무 효율성 향상을 목적으로 펌웨어 검증 과정을 자동화하기 위한 프로그램 개발 경험을 공유합니다. 특히, Payload 객체의 구현과 검증 로직 개발 과정에서 발생한 다양한 문제들과 이에 대한 해결 방안을 중심으로 논의합니다. 이 과정에서 여러 Payload 클래스들을 효과적으로 검증하는 방법에 대한 고민과 그 해결책을 제시하고자 합니다. 예시 코드는 실제 코드가 아닌 컨셉 코드로 대체하였습니다. 2. 문제점 먼저 28개의 클래스 중 하나인 ChangeSomethingPayload 클래스를 예시를 살펴보겠습니다. 해당 클래스는 Pay.. 2023. 12. 11.
다수의 Validators 역할 위임 방식 회고 - Chain 패턴과 Optional을 이용한 우아한 플로우 탐색기 다수의 Validators 역할 위임 방식 회고 - Chain 패턴과 Optional을 이용한 우아한 플로우 탐색기 0. 목차 개요 직면한 문제 첫 번째 구현: Chain of Responsibility 패턴 적용 첫 번째 구현의 문제점 두 번째 구현: 서비스 레벨의 방어 로직 두 번째 구현의 문제점 세 번째 구현: recorder 초기화 로직의 이동 세 번째 구현의 문제점 네 번째 구현: 체인 형식의 support 검증 결론 1. 개요 사내 업무 효율성 증진을 위해 펌웨어 검증을 자동화하는 프로그램을 만들 기회가 있었습니다. 이 글은 검증 자동화 툴을 만드는 과정에서 고민했던 Validation 로직을 다룹니다. 여러가지 검증 시나리오를 각각의 책임에 따라 검증하는 다수의 Validators 구현체들의.. 2023. 11. 16.
도메인 주도 개발 방법론(DDD)을 적용하여 3티어 아키텍처를 변경해보자 0. 배경 스프링 부트로 개발을하면서 어떻게 하면 결합도는 낮추고 응집도는 높이는 코드를 짤 수 있을까 하는 고민을 한다. 프로젝트를 하면서 MVC 패턴을 이용하는 것은 익숙했다. 하지만 보다 좋은 설계에 대한 갈증 같은 것이 항상 있었다. 엔티티 간의 연관관계가 복잡해지고 참조 Depth가 깊어질 때마다 내가 하는 이 방식이 맞는건가 하는 생각이 자주 들곤 했다. 서비스가 비대해지는 것도 문제였지만 특히 서비스와 서비스가 서로 참조관계를 맺는 것도 불편했다. 또 서비스라고 부르기에는 좀 애매한데 그렇다고 서비스가 아니라고 하기는 좀 뭐한 기능 클래스들이 있었다. 예를 들어 다음과 같은 PaginationService이다. 이에 대해서도 적절한 네이밍을 설정하고 레이어를 맞춰주는 것이 힘들었다. 이에 .. 2023. 6. 26.
GetMapping시 URI에 PK 식별자가 노출되는 문제: 대체키를 사용한 해결 배경 웹 쇼핑몰 프로젝트를 하면서 스프링 컨트롤러에서 Get Mapping 요청시 쿼리 파라미터가 노출되는 문제를 마주했다. 당장 서비스를 런칭하는 것도 아니기 때문에 큰 문제가 있는 것은 아니었지만 내부 구조가 그대로 드러나는 것 같아 상당히 찜찜했다. 조금만 생각해보아도 보안상이 의슈로 연결되기 쉬운 부분이었다. 예컨대 커뮤니티 서비스에서 게시글을 검색하는 과정에서 다음과 같이 쿼리 파라미터가 노출된다. articles?page=0&sort=&searchType=HASHTAG&searchValue=hashtag1 아래는 해당 URI를 매핑하는 search 메서드 구현부이다. 이와 같은 문제를 해결하는 방법으로 아래의 대안책들을 고려했었다. POST 방식 사용 POST 방식은 URL을 사용하지 않으며,.. 2023. 6. 24.
If 분기문 문제를 객체지향, 함수형 프로그래밍을 이용해 해결하기(feat. 우아한테크코스, 스프링 시큐리티) If문은 실생활에서도 자주 사용되는 문법이다. 만약 네가 오후 4시에 온다면, 난 3시부터 행복해지기 시작할거야! 위와 같이 간단한 조건문도 있지만 현실에서는 좀 더 복잡한 경우가 많다. 하지만 네가 5시 이후에 온다면, 난 다른 일을 계획해야 할 것이고, 만약 네가 오지 않는다면, 난 혼자 영화를 보거나 책을 읽을 거야. 게다가, 만약 비가 온다면, 우리는 실내에서 만나야 할 것이고, 맑은 날씨라면 공원에서 만나 피크닉을 즐길 수 있을 거야. ... 이런 식으로 현실 세계에는 다양한 "if" 경우의 수가 있고, 이를 "~하면 ~하다"라는 문법으로 표현한다. 프로그래밍에서도 if문은 다양하고 그리고 유용하게 쓰인다. String beverage; if (season.equals("여름") && weath.. 2023. 6. 22.