독서 공부

[책 요약] 배달의 민족의 IT이야기, 요즘 우아한 개발(2편)

책길사 2024. 2. 3. 01:38
반응형

요즘 우아한 개발

보안을 위해서는 백엔드에서 중요로직을 수행해야 한다.
완벽한 시스템은 없다. 선택과 집중을 해야 한다. 감당할 수 있는 사항은 감당하면서 움직이자!
AI의 재현성과 추적성은 많은 고민이 필요할 것 같다.
테스트는 어떻게 해야할지. 재현성의 모니터링을 어떻게 해야할지. 고민해야 할 것 같다.

3. 백엔드 개발자로 성장하기

사용자의 입력은 무조건 검증한다.


모든 계산은 서버에서 한다.


사용자의 입력 유효성 검사는 항상 서버에서 해야하며 특히 계산로직은 사용자의 편의를 위해 프론트엔드에서 일시적으로 해서 보여 줄 수는 있으나 최종 결과는 서버에서 재계산해야 합니다.


의도치 않게 모든 조회 조건이 사라지게 해서는 안되고 조회 조건을 생성하는 사용자 요청 데이터는 무조건 서버 측 검증을 거쳐야 합니다.


성능 측정 없는 캐시 사용은 성능을 저하시킬 수 있다.

- 네트워크 대역폭, 직렬화/역직렬화 시 충분한 성능, 데이터 필드 변경에 따른 데이터 동기화문제, 이벤트랜딩 페이지는 이미지크기 최적화 등

 

인증만 하고 내부 API서버로 요청을 바이패스하면 절대 안됩니다.

권한 검사까지 잊지말고 해야 합니다.


사용자의 로그인 실패 횟수를 트래킹해야 한다.(로그인 횟수 쿠키 관리 X)


운영DB에 접근하는 계정은 통제 된 몇명(DBA)이 아니면 DDL(가급적 DML까지) 권한을 제거해야 합니다.

 

API서버도 접근 통제해야 한다.

 

모든 서버는 프라이빗 망에서만 접근 가능해야 하고, 꼭 필요한 것만 프록시(Proxy, AWS에서는 ELB/ALB 등)를 통해서만 퍼블릭에서 접근 가능해야 합니다.


중요한 배치잡들은 별개의 모니터링 솔루션을 사용해 특정시간 범위에 성공적으로 실행됐는지를 확인해 그렇지 못한 경우 알림을 주게 만들어야 합니다. influxDB와 그라파나를 사용하면 가능할 것 같네요.


로그를 외부 서버로 수집하는 것은 별도 프로세스에서 비동기로 처리


기본키는 Integer가 아니라 Long으로

 

오류 로그는 일시적인 것과 크리티컬한 것을 구분한다.

 

롤백 가능한 배포


판단결과 장애 정도가 너무 크다면 그 장애는 이미 발생한 것으로 간주합니다.

그리고 실제 장애가 발생했을때처럼 최우선 처리를 합니다.

그러나 감당할 수 있는 수준이라면 그것은 그것대로 넘어가야 합니다.

세상의 모든일에 미리 대비한다면 아무 일도 못하고 어떤 서비스도 배포해보지 못할 테니까요.

 


하나의 메인 데이터베이스에 모든 데이터와 로직을 집중시키는 모노리틱 아키텍처방식을 택했습니다.

루비는 메인 데이터베이스의 사내 명칭입니다.

 

하나의 큰 데이터베이스는 여러 개의 데이터베이스로 분리되었고 메인 데이터베이스 하나에 의존했던 배달의 민족 서비스는 이제 100개 이상의 데이터베이스가 빠른 비즈니스 변화에 맞춰서 유기적으로 움직이고 있습니다.


프로젝트를 계획할 때 레거시 제거도 프로젝트 범위에 포함하자.

 

명명규칙을 미리 정하고 최대한 많은 사람에게 공유하자.


코드에 대한 오너십을 갖자.


로직은 가급적 단순하고 명료하게 만들자.


검색 플랫폼 과제 때문이 아니라 모든 시스템과 모든 기능에는 문서화가 필요함을 새삼 깨달았습니다.

 

중간 통계 결과를 저장하는 하이브(하둡에 저장된 데이터를 쉽게 처리할 수 있는 데이터웨어하우스 패키지) 테이블을 두고 중간 결과를 합친 최종 결과만 팀 내 RDB로 저장하도록 만들었습니다. 통계 데이터를 계산하는 로직은 데이터 레이크에서 대이터를 추출하는 SparkSQL에 있습니다.


4. 인공지능으로 한 단계 업그레이드하기

허위 리뷰를 작성하는 행위를 효과적으로 막고 정직한 리뷰를 제공하기 위해 준지도 학습 알고리즘과 소셜 네트워크 분석을 결합하여 리뷰 조작 업체를 탐지하는 모델을 개발했습니다.


높은 품질의 모델을 신속하게 개발하고 지속적으로 운영 가능한 AI서비스를 구축하려면 MLOps가 필요합니다.

MLOps는 머신러닝 시스템 개발과 시스템 운영을 통합하여 머신러닝 개발 관리의 전 과정을 더욱 빠르고 효율적으로 만드는 것을 목표로 합니다.

 

첫번째 문제는 모델의 품질입니다. 두번째 문제는 모델의 재현성과 추적성 입니다.

 

MLOps는 레벨0부터 시작되며 레벨0은 수동 프로세스를 의미합니다.

레벨1은 머신러닝 파이프라인 자동화를 통해 지속적으로 모델을 학습하고 서비스에 제공하여 모델의 품질을 유지하는 것을 목표로 합니다.

마지막으로 레벨2는 CI/CD파이프라인 자동화를 통해 데이터 과학자가 아이디어를 구현하고 파이프라인 구성 요소를 대상 환경에 자동으로 빌드, 테스트, 배포할 수 있도록 지원합니다. 이를 통해 데이터 과학자는 특성 추출, 모델 아키텍처, 하이퍼파라미터 등에 대한 새로운 아이디어를 빠르게 검증할 수 있습니다.


파이프라인이란 여러 단계의 작업을 순차적으로 연결하여 자동화하는 프로세스를 의미하는 것으로 일반적으로 데이터 수집, 전처리, 특성 추출, 모델 훈련, 평가 및 모의 배포 단계로 구성됩니다.


ChatGPT 활용
- Support-IT채널에 ChatGPT 적용 : 요청의 키워드를 분석하여 실제로 이것이 어떤 요청인지를 파악하는 것은 인공지능 ChatGPT의 힘을 빌려 진행하였습니다.
- 슬랙에 ChatGPT 추가하기

반응형