Programming/기타 24

Netflix 서버 API의 GraphQL로의 이관 여정

Netflix의 UI 팀에서 상당량의 Server API를 GraphQL로 이관하였다고 합니다. 이 포스팅에서는 운영중인 Netflix 서비스를 어떻게 안정적으로 이관하였는지 노하우를 설명하는 포스팅입니다. 원문링크: https://netflixtechblog.com/migrating-netflix-to-graphql-safely-8e1e4d4f1e72 Migrating Netflix to GraphQL Safely By Jennifer Shin, Tejas Shikhare, Will Emmanuel netflixtechblog.com 2022년에는 Netflix의 iOS 및 Android 애플리케이션에 큰 변화가 있었습니다. 다운타임 없이 Netflix의 모바일 앱을 GraphQL로 마이그레이션했으며,..

Programming/기타 2023.11.03

Functional Programming model 이 대세가 되고 있다.

총평 : 왠지 점점 개발이라는 것이.. 유지관리가 쉬워지는 쪽(사람의존성을 줄이는 방향)으로 빠르게 가고 있다. 최근에 AWS Lambda로만 어플리케이션 개발하는 것들이 심심찮게 나오는데, 앞으로 내가 생각하는 개발은 다음과 같이 변할 것 같다. - Backend 에서 이루어 지는 모든 프로그래밍은 Function화 시킨다. - Function화된 프로그래밍을 연결, 분기, 반복하는 작업은 Platform에서 한다. (AWS StepFunction, AirFlow 등 활용) Functional Programming이란? Functional Programming (FP)은 순수한 기능을 사용하여 유지 관리 가능한 소프트웨어를 만드는 소프트웨어 개발 접근 방식입니다. 즉, Function을 적용하고 구성하..

Programming/기타 2023.11.01

핵사고날 아키텍처의 설계와 구현 - 서비스

서비스 토폴로지 및 인벤토리 시스템은 네트워크 자산의 가상화와 관리에 대한 것이므로 사용자가 이러한 네트 워크 자산의 컬렉션을 처리할 수 있게 해야 한다. 이를 수행하는 방법 중 하나는 서비스를 이용하는 것이 다. 서비스를 통해 시스템 엔티티와 값 객체를 처리하기 위한 동작을 정의할 수 있다. 라우터 서비스 앞에서 Router , CoreRouter , EdgeRouter 엔티티를 구현할 때 라우터 컬렉션을 필터링하는 프레디케이 트를 반환하는 메서드도 작성했다. 도메인 서비스를 사용하면 다음과 같이 그러한 컬렉션을 필터링하는 다음과 같은 프레디케이트를 사용할 수 있다. package dev.davivieira.topologyinventory.domain.service; import dev.daviviei..

Programming/기타 2023.10.26

핵사고날 아키텍처의 설계와 구현 - 어댑터의 이해

어댑터의 이해 핵사고날 아미텍처에서 어댑터의 역할을 이해하기 위한 실용적인 비유는 컴퓨터의 원격 연결에 대한 비유다. 컴퓨터에 대한 원격 연결을 위한 텔넷, SSH, RDP 같은 다양한 프로토콜이 있다. 이러한 것들이 어댑터라고 할 수 있다. 핵사고날 시스템이 제공하는 기능에 엑세스 수단으로 지원되는 기술을 정의하는 포로토콜처럼 동작한다. 앞의 비유를 사용하면 운영체제를 자바나 다른 프로그래밍 언어를 사용해 개발된 애플리케이션으로 대체할 수 있다. 우리의 자바 어플리케이션이 핵사고날 애플리케이션이라고 가정하면 해당 애플리케이션에서 제공되는 기능은 애플리케이션 핵사곤과 도메인 핵사곤에서 제공되는 유스케이스 → 포트→ 그리고 비즈니스 규칙으로 구성된다. REST와 RPC 클라이언트에서 이러한 기능을 사용하고..

Programming/기타 2023.10.25

핵사고날 아키텍처의 설계와 구현 - 유스케이스 작성 방법

드라이버 액터는 SuD 행위 중 하나를 트리거하는 사람이나 시스템이고, 드리븐 엑터는 SuD가 소비하는 외부 시스템이다. 우선 액션을 정의한다. 예를들어 1. 라우터 ID를 찾는다. 2. 네트워크 주소가 이미 존재하는지 확인한다. 3. CIDR이 최솟값 아래인지 확인한다. 4. 이전 검사에서 문제가 없다면 통보된 라우터에 네트워크를 추가한다. 형식을 갖춘 작성 기법과 간단한 작성 기법 외에, 자동화된 테스트로 직접 사용자의 의도를 코드로 표현하는 것이 가능하다. 이 방법은 발견, 형식화, 자동화와 관련된 행위 주도 설계(BDD) 원칙에 의존한다. 이 방법에서는 비즈니스 관련자의 요구를 발견하기 위해 그들과 이야기 하는 것으로 시작한다. 이러한 발견 과정의 결과는 비즈니스 요구를 기술하는 상황과 행동에 대..

Programming/기타 2023.10.25

핵사고날 아키텍처의 설계와 구현 - 왜 핵사고날 아키텍처인가?

핵사고날 아키텍처의 이해 헥사고날 아키텍처의 주된 목적은 비즈니스 코드를 기술 코드로부터 분리하는 것이다. 그러면 애플리케이션에 대해 자동화된 회귀 테스트를 만들수 있고, 다양한 데이터베이스를 손쉽게 적용할 수 있다. 비즈니스 코드가 어디에 존재해야 하는지, 기술 문제로부터 격리되고 보호돼야 하는 위치를 결정해야 한다. 이것은 우리의 첫번째 핵사곤, 즉 도메인 헥사곤을 생성하게 될 것이다. - 도메인 핵사곤 : 소프트웨어가 해결하기를 원하는 핵심 문제를 설명하는 요소들을 결합한다. 도메인 핵사곤에서 활용되는 주된 요소는 엔티티와 값 객체다. 엔티티는 식별자를 할당할 수 있는 것을 의미하며, 값 객체는 엔티티들을 합성하기 위해 사용하는 불변 컴포넌트다. 도메인 핵사곤은 실 세계 문제를 이해하고 모델링하는 ..

Programming/기타 2023.10.24

Google의 검색 자동완성에 대해..

Google 검색창의 특징은 다음과 같다. 1) 작성중인 초성은 검색포함. (초성만 나열했을때는 영문으로 인식) 2) 자동완성(=자동추천) 제공 3) 고유명사, 인물의 경우 이미지도 같이 노출 4) 검색 History도 제공하며, 검색일치하는 내용 또한 제공 각 구현 현황에 대해 다음과 같이 확인되었다. 1), 2) 아래 autoComplete API로 검색한 결과 JSON 타입으로 다음과 같은 Suggestion이 발생했다. suggestqueries.google.com/complete/search?output=toolbar&hl=ko&q=김ㄱ 2) 초성 자동완성 시 무언가의 알고리즘을 추천이 뜨는것으로 보아, 애초에 검색된 Word List에 Weight(가중치)가 있을 것이다. 예를들어 "김ㄱ"은 ..

Programming/기타 2023.10.14

SQL Injection 에 대한 대응

공통 API 서버를 개발할때 Request로 넘어오는 Parameter의 자료형, 데이터크기, 데이터 형식을 사전에 Exception처리를 할 수 있도록 해야 좋다. 데이터형식은 정규화 할수 있다면 표현식을 사용하면 좋다. 예) if (stringValue != null && stringValue.matches("^[a-zA-Z]{2}[0-9]{3}$")) { System.out.println(stringValue + " is a ProductCode."); return "MessageCode"; } else if (stringValue != null && stringValue.matches("^[a-zA-Z]{2}-[a-zA-Z0-9]*-[a-zA-Z0-9]*$")) { System.out.printl..

Programming/기타 2023.10.13