📝 정리

    [트러블 슈팅] 도메인 설계에 대한 고민

    제가 첫 프로젝트에 참여함으로써 고민했던 도메인 설계에 대한 내용을 공유하고자합니다. AS - IS 프로젝트 초기 단계에서 "퍼디"의 핵심 기능 중 하나인 "전문가" 기능에 대해 고민하게 되었습니다. "전문가"는 일반 사용자와 다르게 특정 조건을 만족한 사용자만이 등록할 수 있는 기능으로, 자신의 전문성을 바탕으로 다른 사용자들의 질문에 답변을 제공하는 역할을 합니다. 이를 표현하기 위한 초기 도메인 모델 설계는 "전문가"를 사용자 도메인 내의 추가적인 정보, 즉 일종의 부가적인 속성으로 생각했습니다. 즉, 기본적으로 모든 사용자는 "전문가"가 될 가능성을 가지고 있으므로, 그에 따른 전문가 정보를 포함하는 사용자 테이블을 생성하는 것이 자연스러워 보였습니다. 그러나, 이렇게 설계할 경우 아래와 같은 몇..

    [PUDDY] 첫 프로젝트 마무리

    4월 20일 첫 팀 프로젝트가 마무리되었다. 지금 멤버들을 만나기 전, 팀 프로젝트 경험이 없어서 잘할 수 있을까에 대한 고민을 수십 번 더 하고 참여를 했지만, 회고를 작성하는 지금, 되돌이켜보면 하길 잘 한 경험인 것 같다. 우여곡절 끝에 프론트 개발자 2명, 백엔드 개발자는 나 혼자서 프로젝트를 마무리하게 되었다. 다른 백엔드 개발자와의 협업을 초반에 잠깐 해본 것이 아쉽지만, 프런트 - 백을 나누어서 팀 프로젝트의 모든 백엔드 파트를 담당할 수 있었기에 값진 경험이 되었다. 또한, 모든 단계를 직접 해야 했기에 어떤 부분에서 내가 부족함이 있는지, 앞으로 어떻게 개선해야 할지 다는 아니지만 어느 정도 내가 부족한 부분을 알 수 있었다. 그래서 이 글에서는 내가 부족했다고 느꼈던 순간, 현재 프로젝..

    [PUDDY] JPA N+1 문제 해결하기

    전에 일대일 양방향 관계에서 발생했던 문제로 질문글 한개를 조회할때 발생하는 쿼리가 7개나 되었다. 프론트에서도 테스트할 때 별로 성능 이슈가 발생하지 않아서 상관 없을 것이라고 했지만, 백엔드 개발을 담당하는 사람으로써 엔티티 하나를 조회할때 필요한 정보가 많더라도 쿼리가 7개나 발생하는 것은 양심에 가책을 느꼈다. 그래서 이번 기회에 쿼리 수를 최대한 줄여보자 라는 마음에 기존 로직을 뜯어보게 되었다. https://waveofymymind.tistory.com/112 [트러블 슈팅] 일대일 관계에서의 지연로딩 트레이드 오프 프로젝트가 진행됨에 따라 테이블이 점점 많아지고 있다. 그에 따라 하나를 조회할 때 발생하는 쿼리 수도 예상치 못하게 많아지게 되어 한 테이블 조회 시 쿼리가 6개나 발생하는 것..

    [PUDDY] 일대일 관계에서의 지연로딩 고민해보기

    프로젝트가 진행됨에 따라 테이블이 점점 많아지고 있다. 그에 따라 하나를 조회할 때 발생하는 쿼리 수도 예상치 못하게 많아지게 되어 한 테이블 조회 시 쿼리가 6개나 발생하는 것도 경험해 보았다. 테이블 중 유저 테이블은 펫과, 전문가 테이블과 일대일 관계이다. 한 명의 유저는 한 마리의 펫, 만약 전문가일 경우 전문가 테이블 한 개만 가질 수 있기 때문에 일대일 관계로 설정했다. 그러나, 일대일 관계에서 지연 로딩으로 설정해도 즉시 로딩으로 데이터를 가져오는 바람에 유저 테이블과 연관된 펫, 전문가 테이블을 조회하게 된다. 질문글 테이블과 유저 테이블은 다대일 관계인데, 질문글의 작성자 정보를 가져올 때 유저 테이블과 연관된 펫, 전문가 테이블까지 조회하기 때문에 쿼리가 추가로 발생한다. 발생 순서는 ..

    클린 아키텍처에 대한 지난 프로젝트 회고

    https://techblog.woowahan.com/2647/ 주니어 개발자의 클린 아키텍처 맛보기 | 우아한형제들 기술블로그 {{item.name}} 안녕하세요 딜리버리플랫폼팀 송인태입니다. 우아한테크캠프를 마치고 팀에서 들어온 지 1년 정도 되면서 개발을 할 때 어떻게 하면 유지 보수하기 쉽게 개발할지 고민을 하던 도중 R techblog.woowahan.com 해당 글을 읽고 나니 내 개인 프로젝트에서 클린 아키텍처로 어떻게 적용할 수 있을지 고민해 보았다. 용도별 DTO 분리 컨트롤러에서 서비스, 서비스에서 DAO까지 데이터를 전달할 때 뷰에서 받은 객체를 넘기는 것은 좋지 않다. 레이어 간 의존성이 강하게 생기므로 단순하고 고립된 형태의 DTO로 넘기는 것이 좋다고 한다. 클라이언트에서 받은 ..