일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 파일 url
- api 비동기처리
- 코멘토 #코멘토실무PT #실무PT후기 #실무강의 #리액트강의 #웹프로그래밍 #react #웹개발실무
- 유효시간 설정 url
- 프리코스
- Deep Dive
- Dev-Matching
- 자바스크립트
- 우아한테크코스
- oauth
- 음악 url 파일 다운로드
- 검색
- this
- 프론트엔드
- 우아한 테크코스
- api 요청 수 제한
- 모던 자바스크립트
- 프로그래머스
- compateto
- redis
- 프론트엔드 과제
- concurrency limit
- 딥다이브
- bucket4j
- AWS
- invalid_grant
- 타입스크립트
- 스프링부트
- NestJS
- TypeORM
- Today
- Total
목록웹/Spring (10)
개발 알다가도 모르겠네요
배경인생네컷에는 QR코드를 통해 촬영 과정을 담은 비디오, 사진 이미지를 다운받을 수 있는 유효시간 72시간의 URL을 제공한다.현재 개발중인 Daytune 앱 내에도 사용자가 자신의 음악을 주위 친구들에게 자랑함으로써 참여도를 높이고, 유입자 수를 증가시키기 위해 공유 URL 기능을 추가하기로 했다. 현재는 사용자가 일기를 작성하면, 그 일기의 감정에 맞는 음악 2개를 생성해주고 사용자는 2개 중 하나를 골라 소유하게 된다. 그 다음 과정으로 72시간동안 접근 가능한 음악공유 URL 을 생성하여 제공하는 방식이다. 그렇다면 유효시간이 설정된 url은 어떻게 만들어야 할까? 답은 AWS S3의 Presigned Url 기능에 있다. Pre-Signed URL 이란?Pre-Signed URL은 AWS S3..
기존에는 일기를 작성하면 내부적으로는 '일기 생성 -> GPT로 일기 감정 추출 -> Suno AI로 음악생성 -> 일기 생성 완료' 의 로직으로 돌아가고 있어 클라이언트가 응답을 받는데까지 7~8초가 소요됐다.따라서 비동기 처리를 활용하면 장기 실행 작업이 메인 스레드를 차단하지 않도록 하여 사용자 응답 시간을 줄이고 시스템 자원을 효율적으로 사용할 수 있도록 구현했다. 비동기 처리를 위한 AsyncConfig 클래스비동기 처리를 위한 설정 클래스를 작성한다. AsyncConfig 클래스는 Spring의 비동기 기능을 활성화하고, ThreadPoolTaskExecutor를 설정하여 비동기 작업을 처리할 때 사용할 스레드 풀을 구성한다.@Configuration@EnableAsyncpublic class..
이번 글에서는 SunoAI와 Spring Boot를 연동해 사용자 감정에 맞는 음악을 생성하는 기능을 구축하는 방법을 설명하겠다.SunoAI는 AI를 활용해 음악을 생성하는 서비스로, 사용자의 감정에 맞춘 음악을 제공하는 데 적합하다. 그러나 SunoAI는 공식 API를 제공하지 않기 때문에 SunoAI의 쿠키값을 이용한 GitHub 오픈소스 API를 사용하였다. (EC2 서버에 따로 AI서버 구축한 상태)이 기능은 일기를 작성한 후 ChatGPT를 이용해 일기의 핵심 단어를 추출하고, 이를 바탕으로 SunoAI가 감정에 맞는 음악을 생성하도록 설계했다. GitHub - gcui-art/suno-api: Use API to call the music generation AI of suno.ai, and ..
애플은 2019년 애플 로그인 기능을 발표한 동시에, App Store에 등록할 때 소셜 로그인이 하나라도 있다면 애플 로그인이 필수로 제공되어야 한다는 심사정책을 내놓았다. 5월에 MVP 출시 예정인 앱에는 소셜로그인 기능이 들어가기 때문에 애플로그인을 필수로 적용시켜야 하는 상황이었다. 문제는 애플로그인이 다른 소셜로그인들과 동작방식이 좀 다르다는 점이다. 애플의 경우에는 아래처럼1. 서버 내부에서 별도로 client_secret라는 값을 생성해준 뒤에2. 애플서버에 여러 설정정보를 함께 전달해줘야 한다.3. 여기서 끝이 아니라 애플서버로부터 전달받은 id_token 값을 파싱해야 비로소 이메일과 같은 사용자 정보를 얻을 수 있었다. 여러 레퍼런스를 살펴보니까, Identity Token값을 활용해서..
최근 프로젝트에서 API 요청 수를 제어하기 위해 Rate Limiter를 적용하는 작업을 수행했다.이 과정에서 겪은 문제점과 해결하기 위해 학습한 내용을 정리해보고자 한다. * 업무 환경은 Laravel 프레임워크를 쓰고 있기 때문에, 지금 설명하려는 Spring에서의 Rate Limiter 구현과는 적용 알고리즘 정도의 차이가 있다.Problem1. 사용자 계정별 글 작성 수 제한 정책 추가사용자마다 시간 당 글 작성 수를 제한해야 하는 기획팀의 요구사항이 있었다. (아래처럼 자동화 공격이나 도배성 뻘글 방지 목적도 있었다.) 2. AI 이미지 생성 API 다중 호출 시 서버 과부하로 인한 타임아웃 이슈현재 운용 중인 단일 AI서버에서 이미지를 하나 생성하는데는 약 5~6초가 걸린다. 다수의 AI 이..
servlet-context.xml Spring설정 중 InternalResourseViewResolver를 이용해 View Page를 지정. InternalResourseViewResolver는 Controller에서 return된 ModelAndView 객체에서 선언된 View Page를 지정해주는 클래스. 이 클래스를 편리하게 사용하도록 Prefix(접두어), Suffix(접미어) 사용. 접두어로 /WEB-INF/views/를 붙이고 접미어로 .jsp를 붙여 해당 위치에 있는 jsp 호출. 결론 Controller에서 /hello를 return하게 되면 /WEB-INF/views/hello.jsp를 호출.
Spring IoC 컨테이너가 관리하는 자바 객체를 빈(Bean)이라고 부릅니다. 일반적인 자바 프로그램에서는 각 객체들이 프로그램의 흐름을 결정하고 각 객체를 직접 생성하고 조작하는 작업 (객체를 직접 생성하여 메소드 호출)을 했습니다. 즉, 모든 작업을 사용자가 제어하는 구조였습니다. 예를 들어 A 객체에서 B 객체에 있는 메소드를 사용하고 싶으면, B 객체를 직접 A 객체 내에서 생성하고 메소드를 호출합니다. 하지만 IOC(제어의 역전) 가 적용된 경우, 객체의 생성을 특별한 관리 위임 주체에게 맡깁니다. 이 경우 사용자는 객체를 직접 생성하지 않고, 객체의 생명주기를 컨트롤하는 주체는 다른 주체가 됩니다. 즉, 사용자의 제어권을 다른 주체에게 넘기는게 되는 것입니다. Class를 생성하고 new를..
클라이언트로부터 요청이 들어오면 Controller가 요청을 받게 된다. service -> DAO 호출 후, 그 결과를 Model에 저장하게 된다. Model을 View에 전달하게 되고 View는 Model를 렌더링해 동적인 페이지로 클라이언트의 요청에 응답하게 된다. –Model •애플리케이션 데이터를 캡슐화하며 일반적으로 POJO로 구성됩니다. – View •모델 데이터 렌더링을 담당하고 일반적으로 HTML 출력을 생성합니다. –Controller •사용자 요청을 처리하고 적절한 모델을 구축하고 렌더링을 위해 뷰에 전달합니다. •Dispatcher servlet –프론트 컨트롤러 역할 – 애플리케이션에 들어오는 모든 요청을 가로채서 핸들러(즉, 컨트롤러)에 요청을 전달합니다. – 요청을 처리하기 위..
프레임워크란? 프레임워크는 '구조 품질' 을 보장합니다. SW 구조 그리고 기반되는 클래스를 제공합니다. 라이브러리 vs 프레임워크 제어의 역전 (Inversion of Control) 라이브러리 클래스의 집합으로, 코드의 재사용성을 지원(ex.math) 제어의 주체는 개발자: 코드에서 라이브러리 함수를 호출. 프레임워크 제어의 주체는 프레임워크: 프레임워크에서 우리의 코드를 호출(제어의 역전) 프레임워크에서 기본적인 골격을 잡아놓았기 때문에 우리는 제어의 흐름에 맞게 코드를 작성해 두면 프레임워크에서 호출. 따라서 프레임워크는 애플리케이션 구조 및 코드의 상당 부분을 제공. 개발자는 애플리케이션의 핵심 로직에 집중 가능. 스프링이란? 자바 애플리케이션을 개발하는데 필요한 하부구조(infrastructu..
웹의 동작 원리 웹은 기본적으로 클라이언트/서버 방식으로 동작합니다. 요청과 응답으로 이루어지며 요청은 클라이언트에서 서버로 정보를 요구하기 위해 보내는 메시지입니다. 이 요청방식에는 GET방식과 POST 방식이 있습니다. 응답은 HTTP에서 요구된 메시지에 대한 응답, HTML, 이미지 등이 내용이 됩니다. 대표적인 웹 서버로는 아파치(Apache), IIS(Internet Information Server) 등이 있습니다. Static Pages vs Dynamic Pages 정적 웹 페이지 컴퓨터에서 저장된 텍스트 파일을 그대로 보는 것 HTML(HyperText Markup Language), image, video 등의 정적인 콘텐츠 동적 웹 페이지 저장된 내용을 다른 변수로 가공 처리하여 보는..