Tech News
[TechNews] 유용한 개발 관련 아티클 및 영상 #16
망나니개발자
2024. 4. 19. 10:00
반응형
1. 유용한 개발 관련 아티클 및 영상 #16
Spring Framework 6.2.0-M1: all the little things(비교작 작지만 요구가 많았던 개선 사항)
- property placeholders에 대한 개선
- property placeholder는 Environment의 속성을 임의의 문자열로 대체하는 방법임
- Environment의 customer.name이 "John Smith"로 설정되어 있다면 "Customer ${customer.name}"는 "Customer: John Smith"로 치환됨
- Spring 6.2.0-M1에서는 구성 가능한 이스케이프 문자(기본적으로 백슬래시)를 사용하여 플레이스홀더를 이스케이프 처리할 수 있음, "Customer \${customer.name}"은 이제 "Customer ${customer.name}"으로 치환됨
- fallback bean에 대한 구현
- Fallback bean은 해당 유형의 빈이 존재하지 않을 경우 사용할 수 있음
- Fallback bean 구현을 위해 @Fallback 애노테이션을 사용할 수 있음
- Bean의 백그라운드 초기화
- 새롭게 추가되는 @Bean의 bootstrap 속성을 사용하면 백그라운드로 초기화 할 수 있음
- TaskDecorator이 scheduled tasks를 지원함
- 예약 작업을 위해 TaskDecorator를 사용할 수 있음
- MockMvc를 위한 AssertJ 기능을 지원함
- MockMvc에 대한 Assertion을 확장된 AssertJ를 통해 처리할 수 있음
- 기타 등등
- 이것들 외에도 그 동안 백로그로 존재하던 100개가 넘는 이슈들이 개선되었음
출처: https://github.com/spring-projects/spring-framework/releases/tag/v6.2.0-M1
레디스에서의 만료된 키 삭제
- passive 방식
- 클라이언트가 키에 접근하고자 할 때 키가 만료됐다면 메모리에서 수동으로 삭제함
- 사용자가 접근할 때만 수동으로 삭제되므로 passive 방식의 만료라 함
- 사용자가 다시 접근하지 않는 만료된 키가 존재하는 경우에 이 방식으로 충분하지 않음
- active 방식
- TTL 값이 있는 키 중 20개를 무작위로 뽑고, 만료된 키를 모두 메모리에서 삭제함
- 만약 25% 이상의 키가 삭제됐다면 다시 20개의 키를 무작위로 뽑고, 아니라면 뽑아놓은 20개의 키 집합에서 다시 확인함
- 해당 작업은 1초에 10번씩 수행됨
출처: https://twitter.com/John_Grib/status/1778256977317294256
Pull Request로 협업하는 또 다른 방식, Stacked Diffs(PR)
- 기존 PR 및 코드리뷰 방식의 문제점
- PR에 대한 코드리뷰는 오랜 시간이 걸릴 수 있으므로 다음 작업을 이어서 하는 데 어려움이 생길 수 있음
- mian 브랜치에서 브랜치를 만들어서 작업할 수도 있지만, 보통은 앞의 PR에서 이어서 작업해야 하기 때문임
- 코드 리뷰가 잘 되기 위해서는 변경사항을 작게 만드는 것이 좋기 때문에 이런 경우는 PR이 계속 이어짐
- Stacked PR 이란
- 각 PR이 이어져서 쌓이는(stacked) 방식으로 Facebook에서 많이 사용
- 다소 거창하게 말한 것 같지만, 비슷한 맥락의 작업이라면 PR을 생성할 때 매번 현재 Feature Branch를 기준으로 생성하는 것임
- Stacked PR이 간단해 보이지만 첫번째 PR이 수정이 되거나 하면 다른 PR들도 리베이스를 해주어기 하므로 손이 많이 가는데, 이를 해결하게 해주는 Graphite 등의 도구들도 함께 사용할 수 있음
출처:
https://careerly.co.kr/comments/103008
https://sungjk.github.io/2024/03/17/stacked-diffs.html
레딧의 아키텍처: 진화하는 여정
(Upgrade to paid Reddit's Architecture: The Evolutionary Journey)
- 초기의 레딧
- Reddit은 원래 Lisp로 작성되었지만 테스트된 라이브러리 부족으로, 2005년 12월에 Python으로 재작성됨
- 처음에는 web.py라는 웹 프레임워크를 사용했고, 2009년 후반에 Pylons를 사용하기 시작했음
- 레딧의 핵심 아키텍처
- CDN: CDN은 도메인과 경로를 기반으로 특정 요청이 라우팅되는 방식을 파악하기 위해 엣지에서 많은 의사 결정 로직을 처리함
- FE-App: jQuery에서 타입스크립트를 사용하여 UI를 재설계하기 시작했고, Node.js 기반 프레임워크로 전환했음
- R2 모놀리스: Python 기반 최초의 모놀리식 애플리케이션으로, 검색 등과 같은 기능으로 구성됨
- AWS: 2009년에 마지막 물리적 서버를 폐기하고 전체 웹사이트를 AWS로 이전함, 꽤 오랫동안 썸네일 호스팅과 로그 저장에 S3를 사용하고 있었음
- R2 Deep Dive
- 확장성을 위해 동일한 애플리케이션 코드가 여러 서버에 배포되고 실행됨
- 로드 밸런서는 맨 앞에 위치하여 요청을 적절한 서버 풀로 라우팅하는 작업을 수행함
- 사용자 투표나 링크 제출과 같이 비용이 많이 드는 작업은 Rabbit MQ를 통해 비동기 작업 대기열로 연기됨
- 핵심 데이터 모델을 위해 Postgres를 사용하고, DB 부하를 줄이기 위해 멤캐시 클러스터를 배치하고, 복원력과 가용성 특성으로 인해 새로운 기능에 Cassandra를 상당히 많이 사용함
출처: https://blog.bytebytego.com/p/reddits-architecture-the-evolutionary
반응형