[TIL] 2024-08-05

성장일기·2024년 8월 5일

회고

목록 보기
16/37

중요 학습 내용 [JDBC & DDD]

JDBC

  • mysql:mysql-connector-java:8.0.28를 통해 DB와 서버를 연결한다.
  • 기본적으로 Connection, Statement, ResultSet으로 데이터베이스와 서버를 연결하고 statement를 통해 resultSet을 가져올 수 있다.

Statement vs PreparedStatement

  • Statement: 완성된 쿼리문을 db로 전달
    • DB는 전달되는 쿼리문을 매번 파싱하여 optimizer를 통해 실행계획이 생성되고 resultSet을 반환한다.
    • 전달되는 query의 싱글쿼티션(')를 삽입하여도 쿼리가 실행되기에 SQL Injection에 취약하다.
      • db의 컬럼값 등을 추론하여 악의적인 값을 대입할 수 있다.
  • Prepared Statement: placeholder로 매개변수를 지정하여 db에 전달
    • 최초 query만 컴파일하여 Statement와 같이 반환하지만, 동일한 형식의 쿼리에 대해서는 미리 처리해둔 캐싱된 resultSet을 반환
  • SQL Injection
    • Statement
      String userId = "1 OR 1=1";
      Statement stmt = connection.createStatement();
      String sql = "SELECT * FROM users WHERE id = " + userId;
      ResultSet rs = stmt.executeQuery(sql);
      // SELECT * FROM users WHERE id = 1 OR 1=1 => SELECT * FROM users WHERE TRUE
    • Prepared Statement => 매개변수 바인딩(placeholder)
      String userId = "1 OR 1=1";
      PreparedStatement pstmt = connection.prepareStatement("SELECT * FROM users WHERE id = ?");
      pstmt.setString(1, userId);
      ResultSet rs = pstmt.executeQuery();
      // SELECT * FROM USERS WHERE ID = '1' => SELECT * FROM users WHERE id = '1 OR 1=1' -> 무의미

DDD(Domain Driven Development)

  • event storming을 통한 bounded context -> context mapping -> Snap-E
  • 유비쿼터스 언어를 사용하여 event storming을 통해 bounded contextsubDomain을 정의한다.

EVENT STORMING

  • Domain Event
    • 도메인 내에서 중요한 사건이나 변화를 나타내는 사건
    • 이벤트는 특정 상태의 변화를 나타내며, 대개는 과거 시제로 이름을 지음
      • ex: OrderPlaced, ProductShipped
  • External System
    • 도메인의 외부에 있는 시스템
    • DDD 시스템은 종종 다른 외부 시스템과 상호 작용
    • 상호 작용은 통합 이벤트나 인터페이스를 통해 이뤄짐
  • Command
    • 시스템에 특정한 동작이나 행동을 수행하도록 요청하는 메시지
    • 커맨드는 대개 명령형과 현재 시제로 이름을 지음
      • ex: PlaceOrder, ShipProduct
  • Hot Spot
    • 도메인 모델 내에서 변경이나 확장성이 빈번하게 발생할 것으로 예상되는 영역
    • 이러한 핫 스팟은 모델의 유연성과 확장성에 큰 영향을 미칠 수 있음
  • Actor
    • 도메인이나 시스템과 상호 작용하는 사용자나 시스템
    • 액터는 특정 역할이나 책임을 가질 수 있음
  • Aggregate
    • 관련된 객체와 엔터티의 클러스터
    • 외부 객체들과의 일관성 경계를 제공
    • 어그리게이트 루트는 해당 애그리게이트의 대표 엔터티로서, 외부 객체가 해당 어그리게이트와 상호 작용할 때 사용
  • Policy
    • 특정한 조건이 충족될 때 어떤 행동이나 연산이 발생해야 하는지를 정의한 규칙이나 지침
    • 정책은 비즈니스 로직을 표현하는 데 중요한 역할
  • Read Model
    • CQRS (Command Query Responsibility Segregation) 아키텍처에서 사용되는 패턴 중 하나로, 시스템의 쿼리 모델이다.
    • 읽기 모델은 데이터를 사용자에게 보여주는 데 최적화되어 있다.
profile
엔지니어로의 성장일지

0개의 댓글