티스토리 뷰
반응형
1. 유용한 개발 관련 아티클 및 영상 #14
JVM의 init과 cinit 메서드에 대하여
- init은 인스턴스의 초기화를 위해 사용되는 메서드
- 생성자와 초기화 블록은 자바에서 분리되어 있지만 바이트 코드 수준에서는 동일한 인스턴스 초기화 메서드에 해당함
- cinit은 클래스 수준으로 무언가를 초기화하기 위해 사용되는 메서드
- 컴파일할 때 컴파일러는 정적 블록을 바이트코드 수준에서 클래스 초기화 메서드로 변환함
자바에서 오브젝트 생성
- 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가지 프로그래밍 도움을 줄 수 있음
- 테스트는 현재 해결 중인 문제의 범위를 제한하여, 압도당했을 때 막혔던 문제가 풀림. 아직 문제 전체를 삼킬 필요는 없고, 다음 한 입만 삼키면 됨
- 테스트는 코드 변경이 의도한 대로 작동하는지, 이전에 의도한 대로 작동하던 코드를 실수로 변경했는지 여부를 알려줌. 계속 변경을 진행하면서 이 점이 매우 안심됨
부킹닷컴의 고수준 시스템 아키텍처(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
반응형
'Tech News' 카테고리의 다른 글
[TechNews] 유용한 개발 관련 아티클 및 영상 #16 (0) | 2024.04.19 |
---|---|
[TechNews] 유용한 개발 관련 아티클 및 영상 #15 (0) | 2024.04.12 |
[TechNews] 유용한 개발 관련 아티클 및 영상 #13 (4) | 2024.03.29 |
[TechNews] 유용한 개발 관련 아티클 및 영상 #12 (2) | 2024.03.22 |
[TechNews] 유용한 개발 관련 아티클 및 영상 #11 (4) | 2024.03.15 |
댓글