소소한 개발팁

김동영·2024년 6월 28일
1

개발 업무를 진행함에 있어 몰랐던 팁들을 종합하기 위한 게시물입니다.

  1. [DB] Not Null 컬럼에 default 값이 필요한 이유
    기존 테이블에 신규 컬럼이 추가되어 null 값이 입력되는 경우 사용할 수 있음.

    • null 입력 -> default 값 저장 순으로 진행됨.
    • default 값은 신규 컬럼을 사용하는 비즈니스 로직에서 오류가 발생하지 않도록 고려해야 한다.(예. ENUM 컬럼의 String 값)
  2. [JPA] java Optional 오용 주의

    • 옵셔널한 값이 올 수 있는 경우 사용함.
    • 존재 or Null
    • 따라서 Null 이 될 수 없는 경우 Optional 을 사용하는 것은 보편적인 방식이 아니기 때문에 가독성이 떨어질 수 있다.
    • JPA List 리턴 참고 블로그
  3. [JPA] Stream 과 JPA 와의 관계

    • 스트림으로 리스트를 받을 경우, Lazy 로딩처럼 값을 구체화하지 않고 한건 씩 처리할 준비만 한 상태가 된다.

    • 따라서 값을 유지시킬 영속성 컨텍스트가 필요하며,
      이를 위해 트랜잭션을 설정해야한다.

    • 그렇지 않을 경우, JPA 메소드가 끝남과 동시에 컨텍스트가 유지되지 않아 데이터가 없어지게 되고, 아래와 같은 오류가 발생한다.

      org.springframework.dao.InvalidDataAccessApiUsageException: 
      You're trying to execute a streaming query method without a surrounding transaction that keeps the connection open so that the Stream can actually be consumed. Make sure the code consuming the stream uses @Transactional or any other way of declaring a (read-only) transaction.
      
  4. [Kafka] 컨슈머 그룹

    • 컨슈머를 그룹화하여 토픽을 소비함에 있어 안정성을 더한다.(컨슈머가 다운되는 경우 다른 컨슈머가 받아서 처리 가능)
    • 그룹 별 오프셋을 별도로 관리하여 하나의 토픽에 대해 각각 컨슈머 그룹 별로 독립적으로 소비한다.
    • 이를 활용하여 서비스 간 결합도를 낮추고 확장성을 올려 유지보수 효율성을 올릴 수 있다.(pub-sub 패턴)
profile
k8s, 프레임워크와 함께하는 백엔드 개발자입니다.

0개의 댓글