Tech News

[TechNews] 유용한 개발 관련 아티클 및 영상 #14

망나니개발자 2024. 4. 5. 10:00
반응형

 

1. 유용한 개발 관련 아티클 및 영상 #14


JVM의 init과 cinit 메서드에 대하여

  • init은 인스턴스의 초기화를 위해 사용되는 메서드
  • 생성자와 초기화 블록은 자바에서 분리되어 있지만 바이트 코드 수준에서는 동일한 인스턴스 초기화 메서드에 해당함
  • cinit은 클래스 수준으로 무언가를 초기화하기 위해 사용되는 메서드
  • 컴파일할 때 컴파일러는 정적 블록을 바이트코드 수준에서 클래스 초기화 메서드로 변환함

 

출처: https://www.baeldung.com/jvm-init-clinit-methods?fbclid=IwAR0E_LUFRBNqppJPJ_WzdGkVcCCVz_sVAZ798V26icsdBjqNrpfKcfLI4f0

 

 

 

자바에서 오브젝트 생성

  • JVM이 인스턴스를 생성한 후에 init을 통해 초기화 메서드들이 호출됨(생성자 호출 등)
  • 이때 자바빈 스펙에 따라 JPA와 같은 기술들은 수정자를 사용해 값을 주입해줌
  • 따라서 JPA는 기본 생성자를 필요로 하는데, 기본 생성자 없이 객체를 만드는 방법이 있음
  • Objenesis는 인스턴스만 생성하고, 생성자는 아직 호출하지 않은 상태의 객체를 반환받을 수 있도록 도와줌
  • 스프링에서도 Objenesis를 활용하여 CGLib의 상속기반 클래스 프록시의 디폴트 생성자가 두 번 실행되는 단점을 막기 위해 활용됨, 즉 생성자가 호출되지 않은 상태의 객체를 반환받을 때 사용함

 

출처: https://www.facebook.com/1070166746/posts/10227087792995294/?mibextid=xfxF2i&rdid=BIXN1EBuuX6LJ5Se

 

 

 

TDD's Missing Skill: Behavioral Composition

  • TDD의 동작 구성 기술은 다음과 같이 세 부분으로 나눌 수 있음
    • 크고 복잡한 행동을 여러 조각으로 분해하는 능력
    • 이러한 조각을 구현하고 검증하는 것은 전체 동작이 예상대로 작동한다는 것을 의미함
    • 그리고 이 과정을 수행할 수 있는 자신감
  • TDD의 동작 구성 기술은 "시스템을 구현하기 전에 시스템이 어떻게 작동하는지 알아야 한다"는 것이 아니라 “테스트의 형태로 기대치를 점진적으로 기록하고 코드 변경의 형태로 그 기대치를 충족시키는 것”임
  • 이를 통해 2가지 프로그래밍 도움을 줄 수 있음
    • 테스트는 현재 해결 중인 문제의 범위를 제한하여, 압도당했을 때 막혔던 문제가 풀림. 아직 문제 전체를 삼킬 필요는 없고, 다음 한 입만 삼키면 됨
    • 테스트는 코드 변경이 의도한 대로 작동하는지, 이전에 의도한 대로 작동하던 코드를 실수로 변경했는지 여부를 알려줌. 계속 변경을 진행하면서 이 점이 매우 안심됨

 

출처: https://tidyfirst.substack.com/p/tdds-missing-skill-behavioral-composition?utm_source=post-email-title&publication_id=256838&post_id=143044771&utm_campaign=email-post-title&isFreemail=true&r=31obah&triedRedirect=true&utm_medium=email

 

 

 

부킹닷컴의 고수준 시스템 아키텍처(High-Level System Architecture of Booking.com)

  • 시스템 요구사항
    • 2019년에는 24시간마다 1,500,000건 이상의 체험 예약을 처리했음
    • 2022년 기준 1억 명에 달하는 모바일 사용자 등 플랫폼의 방대한 사용자가 포함됨
    • 예약하는 사용자 수에 비해 호텔을 검색하는 사용자의 빈도가 높음
  • 고수준의 시스템 아키텍처
    • 적인 부하를 효과적으로 수용할 수 있도록 마이크로서비스 아키텍처 패턴을 선택했음
    • 필요한 기능, 성능, 안정성을 제공하는 관계형 데이터베이스로 MySQL을 선택했음
    • 사용자 경험을 가속화하고 효율성을 높은 이미지 처리를 위해 CDN을 활용했음
    • API 게이트웨이는 들어오는 요청을 마이크로서비스로 라우팅하며, 레이트 리밋과 같은 기능을 제공함
    • 그 외에도 ES와 Kafka 등과 같은 컴포넌트들을 함께 사용함
    • 사용자 요청을 효율적으로 관리하기 위해 HAProxy 기반의 ADN(애플리케이션 전송 네트워크)을 사용함

 

 

출처: https://medium.com/@sahintalha1/high-level-system-architecture-of-booking-com-06c199003d94

 

 

 

실시간 추천 서비스를 위해 메시지 큐잉 도입하기(with Redis Streams)

  • 월드컵이나 올림픽 같은 실시간 이벤트나 그날 새로 올라온 뉴스를 반영하기 위해 Redis Streams를 기반으로 실시간 추천 서비스를 구축하게 됨
  • Redis Streams 자료형은 5.0 버전에서 새로 도입된 자료형으로, 추가 전용(append-only) 로그 방식으로 작동하며 pub-sub 구조에 해당함
  • 기존 pub-sub과 달리 소비자들을 소비자 그룹으로 묶을 수 있다는 것이 중요한 차이점임
  • 샤드에 하나 이상의 Stream이 분배되기 위해서도 작업이 필요했음

출처: https://techblog.lycorp.co.jp/ko/building-a-messaging-queuing-system-with-redis-streams

반응형