본문 바로가기

이슈와해결28

도메인 주도 개발 방법론(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.