😀
Hyune's Wiki
  • Welcome
  • Article
    • Link
  • Mentor & Code Reviewer
    • 진행하기에 앞서..
    • Code Review History
      • 한방 쿼리 vs 애플리케이션에서 조립
      • DB에서 TIMESTAMP와 DATETIME 타입의 차이
      • Service는 어떤 dto를 반환해야 할까?
        • 확장 질문
  • Legacy
    • 실무 경험 & 팁
      • Kotlin
        • 파일 조작하기
      • Infra
        • Lightsail
          • 인스턴스 구성 예제
        • 공인 ip 확인하기
      • Database
        • INSERT INTO SELECT SHARED LOCK(row LOCK)
      • API Document
        • OpenAPI (Swagger 3.0)
          • 정적 문서 내보내기
      • Side Project
        • Codesquad
      • ETC
        • HTTP Request 추적하기 with HAR File
    • Study
      • Language
        • Java
          • Copy
          • 메모리 관리
          • Garbage Collection
          • 자료구조
          • Java 17
        • Kotlin
          • Coroutine
      • Framework & Library
        • Spring
          • Spring Security
          • @Component vs @Configuration
        • JPA
          • show-sql 설정의 단점
          • @GeneratedValue strategy
          • Entity의 field type
        • Logback
          • 기본 설정
        • Monitoring
          • VisualVM
            • 설치
            • 문자열 생성으로 테스트
          • nGrinder
      • Database
        • MySQL
          • SQL 문 수행 절차
          • 트랜잭션과 잠금
          • 인덱스
      • Infra
        • AWS
          • S3
            • 용어
            • Amazon SDK 1.x with Spring
          • DynamoDB
            • Get vs Query vs Scan
        • Docker & Kubernetes
      • Computer Science
        • OS
          • Process vs Thread
          • Process
        • Web
          • HTTP
            • HTTP vs HTTPS
            • HTTP 구성
            • HTTP 그외
          • REST API
            • GET 메서드에 payload를 사용해도 되는가?
            • 특정 목적의 API는 어떻게 만들어야 할까?
          • TCP / UDP
          • 인터넷의 작동 원리
          • OAuth 2.0
        • Design Pattern
          • Builder Pattern
        • MSA
        • DDD
      • Test
        • Test Doule
      • Book & Online Class
        • 한 번에 끝내는 Spring 완.전.판 초격차 패키지 Online
          • AOP, Aspect Oriented Programming
          • Data Binding
          • IoC(Inversion of Control), DI(Dependency Injection)
          • Null Safety
          • Spring Resource
          • Spring Boot 버전별 변화
          • SpEL, Spring Expression Language
          • Validation
        • 이펙티브 자바 3판
          • 2장 객체 생성과 파괴
            • 아이템 1. 생성자 대신 정적 팩터리 메서드를 고려하라
            • 아이템 2. 생성자에 매개변수가 많다면 빌더를 고려하라
            • 아이템 3. private 생성자나 열거 타입으로 싱글턴임을 보증하라
            • 아이템 4. 인스턴스화를 막으려거든 private 생성자를 사용하라
            • 아이템 5. 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라
            • 아이템 7. 다 쓴 객체 참조를 해제하라
          • 3장 모든 객체의 공통 메서드
            • 아이템 11. equals를 재정의하려거든 hashCode도 재정의하라
            • 아이템 12. toString을 항상 재정의하라
            • 아이템 14. Comparable을 구현할지 고려하라
          • 4장 클래스와 인터페이스
      • Webinar
        • 요즘 힙한 스타트업의 DBDB DEEP한 이야기
Powered by GitBook
On this page
  • 한방 쿼리
  • 애플리케이션에서 조립
  • 심화 질문에 대한 일부 리뷰

Was this helpful?

Edit on GitHub
  1. Mentor & Code Reviewer
  2. Code Review History

한방 쿼리 vs 애플리케이션에서 조립

아키텍처까지도 확장될 수 있는 내용이며, 트레이드 오프의 대상이기에 정답이 없습니다. 따라서 이 리뷰에서는 조금 단순화된 범위에서 답변합니다. 확장 hint

  • DB Replica, DB Cache

  • CQRS

  • MSA - API 통신, Cache, CDC

  • JPA - OneToMany가 아닌 OneToFew

한방 쿼리

장점

  • 비용이 큰 요청 중 하나인 DB I/O를 절약할 수 있습니다.

  • native SQL에 익숙한 사람이라면 오히려 가독성이 좋을 수 있습니다.

    • 직관적인 쿼리 튜닝이 가능합니다. with DBA

    • SQL만으로 업무 흐름을 파악할 수 있습니다.

    • 러닝 커브가 낮습니다.

  • 코드량이 줄어듭니다.

단점

  • 시간이 지날수록 쿼리 복잡도가 늘어나 유지보수의 어려움이 있습니다.

  • 거대한 쿼리는 DB 부하를 초래합니다.

  • 영속성 레이어에 업무 로직이 들어가게 될 위험이 있습니다.

  • 런타임시 에러 감지가 될 확률이 높습니다.

애플리케이션에서 조립

장점

  • 충분히 작은 단위의 조회 후 projection을 하기에 재사용이(작은 단위의 조회를) 가능합니다.

  • ORM의 장점을 활용할 수 있습니다.

    • 다양한 라이브러리의 도움을 받을 수 있습니다.

    • 컴파일시 에러 감지가 될 확률이 높습니다.

    • 러닝 커브가 높습니다.

  • 상대적으로 저렴한 서버 인프라를 활용할 수 있습니다.

단점

  • 비용이 큰 요청 중 하나인 DB I/O가 추가 발생합니다.

  • 코드량이 많아지고 도메인 로직이 튼튼하지 않다면 오히려 로직 파악이 어렵습니다.

    • ORM 개념이 필요할 수도 있습니다.

심화 질문에 대한 일부 리뷰

PreviousCode Review HistoryNextDB에서 TIMESTAMP와 DATETIME 타입의 차이

Last updated 2 years ago

Was this helpful?

[Team-30] [BE] 3주차 첫 번째 PR by nathan29849 · Pull Request #217 · codesquad-members-2022/issue-trackerGitHub
Logo