기술 스택
![techstack-logo](https://image.wanted.co.kr/optimize?src=https://static.codenary.co.kr/framework_logo/javascript.png&w=720&q=90)
Javascript
![techstack-logo](https://image.wanted.co.kr/optimize?src=https://static.codenary.co.kr/framework_logo/graphql.png&w=720&q=90)
GraphQL
![techstack-logo](https://image.wanted.co.kr/optimize?src=https://static.codenary.co.kr/framework_logo/immer.png&w=720&q=90)
Immer
![techstack-logo](https://image.wanted.co.kr/optimize?src=https://static.codenary.co.kr/framework_logo/mobx.png&w=720&q=90)
MobX
![techstack-logo](https://image.wanted.co.kr/optimize?src=https://static.codenary.co.kr/framework_logo/reactjs.png&w=720&q=90)
ReactJS
![techstack-logo](https://image.wanted.co.kr/optimize?src=https://static.codenary.co.kr/framework_logo/reactquery.png&w=720&q=90)
React Query
![techstack-logo](https://image.wanted.co.kr/optimize?src=https://static.codenary.co.kr/framework_logo/typescript.png&w=720&q=90)
Typescript
![techstack-logo](https://image.wanted.co.kr/optimize?src=https://static.codenary.co.kr/framework_logo/airflow.png&w=720&q=90)
Airflow
![techstack-logo](https://image.wanted.co.kr/optimize?src=https://static.codenary.co.kr/framework_logo/alamofire.png&w=720&q=90)
Alamofire
![techstack-logo](https://image.wanted.co.kr/optimize?src=https://static.codenary.co.kr/framework_logo/ansible.png&w=720&q=90)
Ansible
![techstack-logo](https://image.wanted.co.kr/optimize?src=https://static.codenary.co.kr/framework_logo/argocd.png&w=720&q=90)
Argo CD
![techstack-logo](https://image.wanted.co.kr/optimize?src=https://static.codenary.co.kr/framework_logo/awsathena.png&w=720&q=90)
AWS Athena
![techstack-logo](https://image.wanted.co.kr/optimize?src=https://static.codenary.co.kr/framework_logo/awsauroradb.png&w=720&q=90)
AWS AuroraDB
![techstack-logo](https://image.wanted.co.kr/optimize?src=https://static.codenary.co.kr/framework_logo/awscodebuild.png&w=720&q=90)
AWS CodeBuild
![techstack-logo](https://image.wanted.co.kr/optimize?src=https://static.codenary.co.kr/framework_logo/awscodedeploy.png&w=720&q=90)
AWS CodeDeploy
![techstack-logo](https://image.wanted.co.kr/optimize?src=https://static.codenary.co.kr/framework_logo/awscodepipeline.png&w=720&q=90)
AWS CodePipeline
![techstack-logo](https://image.wanted.co.kr/optimize?src=https://static.codenary.co.kr/framework_logo/awsdynamodb.png&w=720&q=90)
AWS DynamoDB
![techstack-logo](https://image.wanted.co.kr/optimize?src=https://static.codenary.co.kr/framework_logo/awskinesis.png&w=720&q=90)
AWS Kinesis
더 보기
웹 3.0 생태계를 빠르게 꽃 피우는 법
Blockchain as a Service(이하 BaaS)는 제 3자가 Blockchain을 플랫폼으로 활용해서 다양한 응용기능이나 서비스를 제공하는 웹 3.0 분야입니다. 'as a Service' 모델은 기업과 개인이 서비스를 직접 소유하거나, 그에 준하는 권리를 보유하지 않아도 관련 서비스를 사용할 수 있게 함으로써 서비스에 대한 효율성과 접근성을 크게 향상시킵니다.이번 포스팅에서는 블록체인을 서비스 형태로 제공할 때의 장점 및 SK플래닛의 BaaS 개발 현황을 공유드리고자 합니다.대표 모델로 한 번에 이해할 수 있는 as a Service'as a Service'의 대표 모델은 SaaS(Software as a Service), PaaS(Platform as a Service) 및 IaaS(Infrastucture as a Service)로 구분할 수 있으며, BaaS 역시 이러한 모델 중 하나입니다.SaaS는 소프트웨어 애플리케이션을 온라인으로 제공하는 서비스입니다. 주로 웹 브라우저를 통해 애플리케이션에 접속하며, 서버 관리나 소프트웨어 업데이트 같은 기술적인 문제에 대해 사용자가 관여하지 않아도 됩니다. Google Docs, Microsoft 365 등이 SaaS의 대표적인 사례입니다.PaaS는 개발자가 애플리케이션을 개발하고 배포할 수 있는 플랫폼과 환경을 제공하는 서비스입니다. PaaS 운영사가 서버, 네트워크, 스토리지, 데이터베이스 관리 등의 인프라를 관리를 대행하며, 따라서 개발자는 코드 작성에 집중할 수 있습니다. PaaS의 예로는 Google App Engine, Microsoft Azure App Service 등의 서비스가 있습니다.IaaS는 가상화된 컴퓨팅 리소스를 인터넷을 통해 제공하는 서비스입니다. 사용자는 운영 체제, 스토리지, 네트워킹 등을 포함한 인프라를 임대할 수 있으며, 자신의 IT 리소스를 물리적으로 구축하거나 관리할 필요가 없습니다. 많이 사용하는 IaaS로는 Amazon Web Services(AWS), Google Cloud Platform(GCP), Microsoft Azure 등입니다.클라우드 서비스 제공자가 블록체인 기술 인프라의 구축, 호스팅, 관리를 대행하는 서비스입니다. 기업이나 개발자는 복잡한 블록체인 인프라를 직접 구축, 유지, 관리할 필요가 없으며 클라우드 기반의 솔루션을 통해 블록체인 애플리케이션과 기능을 쉽게 개발, 배포, 운영할 수 있습니다.장점: 기업이 BaaS를 이용할 경우 어떤 장점이 있을까요?BaaS는 기업이 블록체인 기술을 쉽고 효율적으로 도입할 수 있는 환경을 제공합니다. 주로 클라우드 인프라를 활용하여 배포와 관리를 하기 때문에 절차가 간단하며, 비용 효율성과 확장성을 개선할 수 있습니다. 이미 아마존, 마이크로소프트, IBM, 오라클, 알리바바와 같은 기업들이 BaaS 오퍼링 서비스를 제공 중입니다.BaaS를 사용할 경우 기업들은 다음과 같은 이점을 누릴 수 있습니다.BaaS를 사용하는 경우 BaaS 제공 업체가 블록체인 네트워크의 설정, 운영, 유지 관리를 담당하기 때문에 사용자는 복잡하고 어려운 절차 없이 사용이 가능합니다. 스마트 계약을 쉽게 개발하고, 블록체인 네트워크에 배포할 수 있다는 점도 BaaS의 큰 장점입니다.블록체인 인프라를 구축하고 관리하는 데 드는 시간과 비용을 절약할 수 있습니다. BaaS를 구독 형태로 이용함에 따라 사용자는 초기 투자 비용을 최소화하고 실제 사용한 만큼만 비용을 지불하면 됩니다.BaaS는 클라우드 인프라를 활용하기 때문에 애플리케이션 수요 변화에 따라 리소스를 유연하게 조정할 수 있습니다. 이는 비즈니스가 성장할 경우 블록체인 네트워크를 쉽게 확장할 수 있다는 의미입니다.현재 BaaS는 주로 IaaS를 기반으로 블록체인 기술을 쉽게 활용할 수 있는 형태로 발전하고 있으며, 기존의 범용 클라우드 업체를 중심으로 서비스되고 있습니다.SK플래닛은 지난 수 년간 UPTN을 통해 블록체인과 관련된 다양한 경험을 축적해 왔으며, 웹 3.0 기반 서비스에 블록체인 기술을 보다 쉽게 도입하고 활용할 수 있도록 지원하고자 합니다. UPTN이 제공하는 주요 BaaS는 다음과 같으며, 고객들은 이를 통하여 쉽게 웹 3.0에 온보딩할 수 있습니다.UPTN Station을 이용하면 웹 2.0에서도 블록체인 지갑을 사용할 수 있습니다. 기존의 웹 2.0 서비스들은 대부분 소셜 로그인 또는 ID-Password 체계를 사용하며, 서비스 간 연동이 필요할 경우에는 연계 정보(CI, Connecting Information)를 이용합니다. 이러한 방식은 웹 2.0에서 블록체인 지갑을 사용할 때는 한계로 작용합니다.이에 비해 UPTN은 신원이 확인된 고객의 CI 정보를 기반으로 블록체인 지갑 주소를 발급, 관리하고 있어 기존의 방식으로도 블록체인 지갑을 사용할 수 있습니다. 뿐만 아니라 SK플래닛 B2B 네트워크 및 서비스를 활용하여 멤버십, 쿠폰, 이벤트, 마일리지 등을 쉽게 웹 3.0화 함으로써 다양한 비즈니스에 활용할 수 있는 유틸리티 솔루션을 제공합니다.EVM(Ethereum Virtual Machine)이 탑재된 UPTN Station은 이더리움 기반의 다수의 블록체인과 호환됩니다. 아발란체(https://www.avax.network/ )뿐만 아니라 위믹스, 바이낸스 스마트 체인과 같은 Layer 1 블록체인, 그리고 폴리곤, 옵티미즘, 아비트럼 등의 Layer 2 블록체인도 폭넓게 지원할 수 있으며, TSS(Threshold Signature Scheme) 방식의 개인 키 관리를 사용하여 높은 보안 수준을 가지고 있습니다.Block Explore(블록 탐색기)는 블록체인 네트워크의 블록과 트랜잭션 상세 정보를 조회할 수 있는 도구입니다. 사용자는 특정 블록, 거래, 주소 그리고 블록체인 네트워크의 현재 상태와 같은 다양한 데이터를 조회 및 분석할 수 있으며, 이를 통해 블록체인을 추적하고 투명성을 유지할 수 있습니다.현재 UPTN에는 아발란체 서브넷 기반의 블록 익스플로러가 구축되어 있으며, 블록체인을 구축하고자 하는 고객과 UPTN에 온보딩하고자 하는 서비스
Planet AD 서비스 안정화 가이드
SK플래닛의 Planet AD 는 리워드 광고 플랫폼으로 현재 시럽, OK 캐쉬백, 오락, T 멤버십 등에 광고를 제공하고 있습니다. 2023년 4월에 처음 서비스를 시작하여 이제 1년을 맞이하고 있습니다. 1년 동안 서비스를 운영하면서 팀원들이 맞닥뜨린 여러 사례들과 문제 해결을 위해 어떤 노력들을 하였는지 사례를 중심으로 말씀드리고자 합니다.Planet AD 는 여러 AWS 서비스를 사용하고 있습니다. Amazon EKS 에서 여러 서비스를 운영하고 있으며, 광고 할당에는 Opensearch, DMP 타겟팅에는 DynamoDB, 데이터베이스는 Aurora MySQL 을 사용하고 있습니다. 이처럼 다양한 AWS 서비스를 사용하다 보면 비용 절감이라는 주제를 빠트릴 수 없으므로, 서비스 안정화와 비용 절감이라는 두 가지의 주제로 말씀드리고자 합니다.Planet AD 는 Amazon EKS(Elastic Kubernetes Service)에서 서비스를 운영하고 있습니다. EKS에서 서비스를 운영 할 때 중요한 부분 중 하나는 부하에 따른 Autoscaling인데요, Planet AD 에서도 CPU/RAM 사용량으로 Autoscaling 설정을 해놨습니다. 그런데 트래픽이 집중되는 시간에 Node 가 새로 생성이 되었는데, IP 가 부족하여 Node 생성이 Pending 되는 현상이 발생했습니다.이와 같은 현상은 EKS Node의 기본 설정을 사용하게 될 경우 발생할 수 있습니다. EKS Node는 보다 빠른 Pod 생성을 위해서 Pod 에 할당 가능한 IP를 Warm pool 로 구성하여 유지하게 됩니다. Warm pool 에 있는 IP 는 실제 Pod 에 할당되어 있지 않더라도 사용중인 IP 로 간주합니다. Warm pool 에 할당되는 IP 수는 Node의 ENI (Elastic Network Interface) 수에 따라서 결정되고, ENI 수는 Node 타입(인스턴스 타입)으로 결정됩니다. 예를 들어서 m5.4xlarge의 경우 최대 8개의 ENI 가 붙을 수 있고 각 인터페이스 당 30개의 IP 주소가 할당 될 수 있습니다. 즉 Node에서 Warm pool 에 할당하는 IP 가 30개라고 했을때, Pod가 10개만 생성이 된다면 나머지 20개의 IP는 실제 사용하지 않지만 사용중으로 취급되어 낭비되는 IP 가 생기게 됩니다.Pod 에 IP가 할당되는 과정즉, 많은 수의 Node 가 스케일 아웃 되면서 기본 값으로 Warm Pool 에 할당 될 IP가 부족하여 Node 가 생성되지 않았던 것이었습니다. 따라서 낭비되는 IP 가 없도록 Warm Pool 설정의 변경이 필요합니다. Planet AD에서 변경한 설정 값은 아래와 같습니다.• WARM_ENI_TARGET : WARM IP POOL 을 유지 하기 위한 추가 ENI 의 수• MINIMUM_IP_TARGET : Node 생성 시 Pod에 할당하기 위해 확보해야 하는 최소의 IP 수의 기본값은 1인데, 이는 기본 ENI외의 추가 ENI 1개에서도 Warm Pool 을 유지한다는
awsdynamodb
kubernetes
ARHIS: 음향 기반 도로 노면 검지 솔루션
SK플래닛이 자체 개발한 ARHIS(Audio & AI based Road Hazard Information System)는 차량이 달릴 때 도로 노면에서 발생하는 음향을 탐지하여, 블랙 아이스와 같이 눈에 보이지 않는 도로 노면의 상태를 검지(detection)하는 기술입니다.이 기술을 솔루션화한 RB ARHIS는 기상청 등 관련 기관으로부터 우수한 평가를 받았으며, 제 18회 대한민국 기상산업대상에서 국무총리상을 수상하였습니다.상세한 내용은 ARHIS 웹사이트(https://www.rbarhis.com/) 에서 확인할 수 있습니다.ARHIS는 도로 위험 탐지 시스템으로, 도로에서 차량의 주행 소리를 활용하여 노면상태를 검지합니다. ARHIS가 검지하는 도로의 노면 상태는 크게 Dry(마른 노면), Wet(젖은 노면), Icy(결빙 노면)와 같이 3가지로 구분되며, Icy는 세부적으로 Snow(적설), Slush(슬러쉬), Black Ice(블랙 아이스)로 구분됩니다.도로의 노면 상태는 AI(Artificial Intelligence)기술로 판단합니다. 도로 노면 상태에 따라 차량의 주행소리가 다르기 때문에, 다양한 노면 상태의 주행소리를 AI에 사전 학습시키면 AI 모델이 현장에서 발생되는 주행 소리를 통해 도로 노면 상태를 판단할 수 있습니다.이렇게 ARHIS는 노면 상태를 실시간으로 검지함으로써 도로 상태를 24시간 모니터링하고 점검해야 하는 사람의 노력을 대신할 수 있으며, 따라서 도로 관리자는 ARHIS 운영 시스템의 알림에 따라 도로 결빙, 침수 등과 같은 위험 요소를 빠르게 파악하고 조치할 수 있습니다.ARHIS는 도로 노면의 주행 소리를 AI가 학습하여 현장의 도로 노면 상태를 추론합니다. AI 모델이 노면 상태를 판단하기 위해서는 (1)현장 이미지 및 주행소리 데이터 수집, (2)전처리, (3)AI 모델(라벨링, 학습, 모델배포, 추론) 및 (4)시스템 후처리와 같이 4단계로 진행됩니다.(1)현장 이미지 및 주행소리 데이터는 ARHIS 디바이스에 내장된 카메라와 마이크가 수집하고, 수집된 데이터는 디바이스에 탑재된 LTE 통신 모듈이 운영시스템으로 전송합니다. 운영자는 운영시스템에 수집된 이미지와 음원으로 현장의 도로 노면을 판단하여 라벨링 작업을 합니다.(2)전처리를 거친 500개 이상의 라벨링된 음원은 (3)AI모델이 학습하고, 학습된 모델은 해당 ARHIS 디바이스에 배포되어 실시간으로 현장 노면을 추론합니다. 노면 판단 추론값은 다시 운영시스템으로 전송되어 (4)시스템 후처리를 거쳐서 1분 단위로 노면 종류를 판단합니다.ARHIS의 핵심 기술은 (1)음원 전처리 기술과 (2)AI 모델입니다.(1)음원 전처리 기술을 통해 수집된 음원에서 불필요한 노이즈를 제거하여 음원의 품질 향상, 시스템 리소스 최적화 및 AI 모델의 추론 성능을 향상시킬 수 있습니다.전처리 과정은 AI 모델이 추론 가능한 MFCC(Mel-Frequency Cepstral Coefficient) 형태의 Feature를 추출한 후, 소프트웨어로 구
Syrup 모바일 웹 개선 사례
Syrup은 재미있게 포인트 모으기, 모은 포인트 투자, 쿠폰 활용, 할인 혜택, 멤버십과 자산 내역 등을 한 곳에서 관리하는 SK플래닛의 대표 서비스입니다. SK플래닛은 고객에게 더 좋은 경험을 제공하기 위해서 응답 속도 위주로 Syrup 서비스를 개선했습니다. 본 내용은 Syrup 서비스 개선에 적용한 기술, 해당 기술을 채택한 이유, 개선 과정에서 경험한 시행 착오 그리고 개선 결과입니다.Syrup 서비스는 2010년에 처음 출시되어 13년 이상, SK플래닛 고객이 사용하고 있습니다(2023년 기준). 이렇게 오랜 기간 Syrup 서비스를 제공하면서 API 서버의 레거시화가 진행되었는데, 특히 모바일 웹이 호출하는 웹 게이트웨이 서버의 응답 속도가 문제였습니다. 이러한 웹 게이트웨이의 느린 응답은 전체 Syrup 모바일 웹의 로딩과 렌더링 속도에 직접적인 영향을 주었고, Syrup 모바일 웹의 응답 속도와 서비스 개선을 위하여 신규 서버 구축의 필요성이 대두되었습니다.Syrup은 멤버십 카드/쿠폰, 불리기(금, 조각, 주식, 가상화폐, 부동산), 마이데이터 등의 서비스를 제공하기 위하여 많은 외부 파트너와 제휴하고 있습니다.지금까지 Syrup 웹 게이트웨이는 파트너가 제공하는 정보를 조회하기 위하여 다수의 API를 호출하는데, 다음의 방법으로 API를 호출했습니다.첫 번째는 웹 게이트웨이가 순차적으로 API를 호출하여 모든 응답이 완료될 때까지 대기한 후, 최종으로 데이터를 병합하여 클라이언트(프론트엔드)로 보내는 방법입니다. 이처럼 다수의 API를 순차적으로 처리할 때, 응답 시간이 지연되는 문제가 있습니다.예를 들어, 다음 그림에서 Gateway의 getSummary API 응답 시간은 Gateway 내부에서 호출하는 API인 getToken, getMember, getFinanceInfo, getCardInfo, getCouponInfo, getProfitInfo 의 응답 시간을 합한 것입니다. 이러한 결과로 전체 API 응답 시간은 402.063 ms가 되어 클라이언트가 getSummary API를 호출한 후, 대기 시간이 길어지는 문제가 있었습니다.이때 응답 시간을 줄이기 위한 방법으로 서로 의존성이 없는 API를 비동기로 호출하기도 했습니다. 이 방법은 getSummary API의 응답 시간은 단축되지만, 가장 많은 시간이 소요되는 API에 의존하게 됩니다(다음 그림에서 ProfitService의 getProfitInfo API 응답 시간에 의존). 특히 특정 API가 타임아웃 시간까지 대기하면, 전체 응답 시간은 타임아웃 시간까지 지연됩니다.또한 스프링 MVC(Model, View, Controller)를 사용할 경우, 비동기 호출을 위해 일반적으로 CompletableFuture를 사용하는데, CompletableFuture는 다음과 같은 문제가 있습니다.CompletableFuture를 사용하면 코드가 복잡해질 수 있습니다. 특히 여러 개의 thenCombine을 조합하여 연결할 때, 다음 코드와 같이 콜백 함수와
memcached
nextjs
spring