안녕하세요.
|
개발자 임성후입니다.

thumbnail
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