All
6 posts
OpenAI로 서비스 사용성 개선하기

개요 최근에 앱을 출시했답니다.⭐️ 는 링크 아카이빙 서비스로, 링크를 복사하거나 Share Extension 을 사용하여 북마크를 자동으로 생성해주는 서비스입니다. 사용자 편의성을 위해 링크 입력 후 북마크의 이름을 지정하지 않으면, url(링크)을 북마크의 이름으로 자동 저장합니다. 하지만 편의성을 위한 이 기능이 어느날 … (아직 베타버전이라 본격적인 홍보는 하지 않았지만 🔗앱스토어 에서 다운받을 수 있습니다) OpenAI 도입 배경 특정 링크(url)의 길이가 300자를 넘을 경우 DB table 의 column 에서 Too long for column 에러가 발생합니다. 당시에는 단순히 컬럼의 최대 길이를 500자로 늘려 대처했지만, 근본적인 대처 방법은 아니라 생각했습니다. 특정 케이스만을 위해 name column 을 500자로 늘리는 건 오바라 생각했거든요. DB 에서 Table column 설정을 바꾸기 보단, 링크의 적절한 name 을 생성할 수 있는 방법을 …

May 28, 2023
Tidify
OpenAi
about OAuth2.0

OAuth 등장배경 (Open Authorization) 초기 트위터 시절, 써드 파티 앱을 사용해 트위터에 글을 올리는 기능이 있었다. 지금은 상상도 하기 힘든 일이지만, 당시에는 트위터의 비밀번호를 써드 파티 앱이 그대로 전달받아 트위터 로그인을 진행했다. 트위터 계정의 비밀번호를 써드 파티 앱이 그대로(plain text) 저장하는 등 보안상 허점이 굉장히 많았다. 이런 초기 문제 해결하기 위해 Google의 AuthSub, Yahoo BBAuth 등 다양한 회사에서 유사한 기능을 구현했지만 표준화 되어 있지 않고, 상호간 호환되지 않는 문제점이 존재했다. 2007년 당시 트위터 치프 아키텍트 Blaine Cook 은 이런 말을 했다. We want something like Flickr Auth / Google AuthSub / Yahoo! BBAuth, but published as an open standard, with common server and client li…

May 15, 2023
Oauth2
Prime Video 서비스의 오디오/비디오 모니터링 서비스 확장 및 비용 절감 90% 사례

아마존의 OTT 의 결함 감지 서비스를 MSA에서 모놀리스 아키텍처로 마이그레이션한 사례입니다. 보통은 모놀리스에서 MSA로 마이그레이션한 사례만 접했는데, 해당 사례는 역으로 마이그레이션 한 케이스라 흥미롭습니다. 원문은 🔗Prime Video 테크 블로그에서 확인하실 수 있습니다. 분산형 마이크로서비스 아키텍처에서 모놀리스 애플리케이션으로 전환하여 더 높은 규모, 내구성을 달성하고 비용을 줄일 수 있었습니다. 프라임 비디오(이하 프라임)에서는 수천개의 라이브 스트림을 고객에게 제공합니다. 원할한 영상 제공을 위해 프라임에서는 고객이 시청하는 모든 영상을 모니터링 하고 있습니다. 모니터링 툴 덕분에 사용자가 느끼는 품질 문제(예: 차단 손상 또는 오디오/비디오 동기화 문제)를 자동으로 식별하고 이를 해결하기 위한 프로세스를 시행할 수 있습니다. 프라임의 비디오 품질 분석 팀은 오디오/비디오 품질 검사 도구를 이미 보유하고 있었지만, 대규모 라이브 스트림을 모니터링 하기 위해 설…

May 07, 2023
Architecture
Springboot 원리 알아가기

자바의 서블릿 컨테이너(Tomcat)가 실행되고, 스프링 컨테이너도 실행된다. 스프링 프로젝트를 처음 생성했을 때 모습. main() 메서드 이외엔 크게 볼게 없다, 하지만 정말 그럴까? 보이는게 다가 아니라는게 알기에 @SpringbootApplication 기저에 깔린 여러 동작원리를 살펴보겠습니다. 모든 imports 를 삭제하고, 어노테이션과 SpringApplication 도 삭제하여 main 메서드를 실행하면 아무일도 일어나지 않는다. 톰캣 서블릿 컨테이너와 스프링 컨테이너 모두 실행되지 않은 것을 볼 수 있다. 이제 서블릿 컨테이너를 띄우고, 내부에 서블릿을 추가해보자. 여기서 서블릿이란 서블릿 컨테이너에 들어가는 웹 컴포넌트를 의미한다. 우선 빈(empty) 서블릿 컨테이너를 띄워보자. WebserFactory 를 상속받는 ServletWebFactory 인터페이스가 등장한다. 내부에는 getWebServer() 추상 메서드가 정의돼 있습니다. getWebServ…

April 30, 2023
springboot
글또 8기 다짐

처음 글또를 시작했던 2021년 7월의 글 6기, 7기를 거쳐 8기에 참여하게 됐다. 내가 애정하는 커뮤니티가 점점 커지는 모습을 보니 뿌듯하다. 기여한 건 별로 없지만 ㅎ.. 글또 8기 다짐 8기 회고 글 제출 6기의 다짐글을 다시 읽으니, 2년 전의 나는 어떤 주제에 관심을 가졌고, 무슨 목표가 있었는지 되돌아볼 수 있었다. 이런 류의 기록이 많이 남지 않아 아쉬웠다. 회고를 패스로 대체한 것도 살짝 후회했다. 한 기수의 마무리와 소회를 글로 남겨둘 수 있는 건 큰 행운이다. 기억은 휘발되고 왜곡될 수 있지만, 기록은 그 자체로 남는다, Immutable U know. No Pass 7기 때 벌금(?)을 내진 않았지만 패스는 2회 모두 사용했다. 이번 기수는 No Pass 가 목표다. 쓸 주제는 차고 넘치는데, 뭘 써야 할지 모르겠다는 핑계를 대지 않았으면 한다. 긴장하라 미래의 나 영양가 있는 글 제출 추상적인 다짐이지만 내가 생각하는 영양가 있는 글은 ‘문제 해결 과정과 결…

February 06, 2023
글또
스프링 @Cacheable 메서드 내부 호출 개선하기(feat. self invocation)

목차 배경 문제 API 개선 요구사항 현재 API 사항 개선된 API 요구사항 첫 번째 시도 두 번째 시도 세 번째 시도 Self-Invocation 해결 방안 (Proxy 생성) ApplicationContext DI @Resource으로 AutoWiring 마무리 배경 클라이언트에서 특정 키워드로 조회하면, 해당 키워드에 해당하는 상품 목록을 받아온다. 쇼핑몰 API 에서 상품을 보내주며, 12개의 상품을 디폴트로 보내준다. 쇼핑몰 API에서 해당 키워드의 상품 재고가 부족하면, 12개 미만으로 응답할 수 있다. 상품의 개수가 9개 미만이면, 재고 보충 notify 를 위해 슬랙봇 메시지가 전송된다. 문제 상품 재고가 부족한 키워드로 api 요청이 계속 들어오면 어떻게 될까요? 매번 api 요청마다 슬랙봇이 전송되기 때문에 굉장히 귀찮은 상황이 벌어집니다. 아래처럼요. 머..멈춰.. 때문에 동일한 키워드로 요청이 들어오더라도 최초 한 번만 슬랙봇 메시지를 전송하고, 그 후부…

January 07, 2023
Spring