전체 글 131

[👀 Owing] FLUX.1 AI로 이미지 생성하기

FLUX.1 AI란?FLUX.1 AI는 FalAI에서 개발한 차세대 AI 이미지 생성 엔진으로, 텍스트를 기반으로 한 고품질 이미지 생성에 특화된 모델이다. https://docs.fal.ai/ DocumentationComprehensive documentation, examples, and guides for using fal.ai's AI infrastructure and client libraries.docs.fal.ai FLUX.1 AI 모델 특징1) FLUX.1 ProFLUX.1 Pro는 FLUX의 최상위 모델로, 최첨단 성능의 이미지 생성과 뛰어난 프롬프트 처리를 제공한다. 시각적 품질이 우수하며, 이미지 세부 사항과 출력의 다양성 면에서도 탁월한 성능을 제공한다. FLUX.1 Pro 모델은..

카테고리 없음 2024.11.08

[👀 Owing] OpenAI 이미지 생성 후 S3에 안전하게 저장하기 (feat. AWS S3에 Base64 이미지 저장)

response format을 url로 설정 후 이미지 생성 시 OpenAI의 url이 나온는데, 이는 우리의 리소스가 아니기 때문에 해당 url을 저장해도 될까? 라는 고민이 있었다. 결론적으로, 외부에서 관리되는 OpenAI의 URL을 그대로 사용하면 리소스 관리 측면에서 여러 제약이 생긴다는 것이다.OpenAI 서버가 만약 URL을 변경하거나 만료 정책을 적용하면, 서비스 안정성에 영향을 줄 수 있다. 따라서 이미지 자체를 우리의 S3에 업로드한 뒤, 생성되는 객체 자체의 url을 데이터베이스에 저장하기로 했다.  이미지를 Base64 문자열로 인코딩순서는 다음과 같다.1. AI 요청에 대한 응답으로 Base64로 인코딩 된 문자열을 받는다. (response options 변경)2. Base64 ..

[👀 Owing] Spring AI 도입기 🤖

프로젝트에서 AI 이미지 생성 기능을 구현하게 되면서  AI를 프로젝트에 넣고자 했고, 다음과 같은 이유로 Spring AI를 선택하게 되었다.기술의 파편화가 생각보다 많은 비용을 초래한다. AI를 프로젝트에 넣어야 하는데 파이선이라는 다른 기술을 기술 풀에 포함시키는 것은 단순히 다른 언어 하나가 들어온 것 이상의 많은 끔찍한 비용을 초래할 수 있기 때문에, 같은 기술 풀 내에서 요구사항의 구현이 가능하다면 그렇게 하려고 한다. SpringAI를 도입하게 되면서 공부한 내용과 소감을 기록하려 한다.❤️‍🔥 Spring AI 란?Spring AI는 GPT와 같은 여러 AI 모델을 Spring 애플리케이션에 통합하기 위한 추상화와 구현을 제공하는 솔루션이다. 이를 이용해 Spring 기반 프로젝트에서 A..

[👀 Owing] PostgreSQL 도입기 (feat. MySQL과의 차이)

이번 프로젝트를 진행하며 처음으로 PostgreSQL을 사용했습니다.  PostgreSQL이 무엇이고 MySQL과 어떻게 다른지 공부한 내용과,이번 프로젝트에서 왜 PostgreSQL을 선택하게 되었는지 기록해두려 합니다. ❤️‍🔥 PostgreSQL이란?PostgreSQL은 1997년부터 사용된 오픈소스 ORDBMS(객체-관계형 데이터베이스 시스템)이다.오라클 개발자들이 대거나와 PostgreSQL 개발에 합류하여 Oracle과 유사하다. [객체-관계형 데이터베이스 시스템, Object-Relational Database Management System]객체 지향 데이터베이스 모델을 가진 관계형 데이터베이스 관리 시스템이다. (데이터가 객체로 저장된 것처럼 작동한다.)기본적으로는 관계형 데이터베이스(..

[👀 Owing] Java Record 도입기 ☕️

말로만 들었던 record를 드디어 이번 프로젝트에 도입하게 되었고, 관련해서 공부한 내용을 기록해두려 합니다. ❤️‍🔥 record 란?Java 14부터 도입된 record 클래스는 불변 데이터를 객체 간에 전달하는 작업을 간단하게 만들어준다.Record 클래스를 사용하면 보일러 플레이트를 줄일 수 있고, 적은 코드로도 명확한 의도를 표현할 수 있다.  ❤️‍🔥 record의 특징- 접근 제어자를 명시하지 않아도, 멤버 변수는 `private final`로 선언된다.- 필드별 `getter`가 자동으로 생성된다.- 모든 멤버 변수를 인자로 하는 `public 생성자`를 자동으로 생성한다.  - `@AllArgsConstructor`와 유사하지만, record는 불변 데이터를 다루므로 생성자가 실행될..

[👀 Owing] 멀티모듈 - 모듈 간 순환참조 이슈 해결 과정 💥

진행하고 있는 프로젝트에서 멀티모듈을 적용하며 모듈 간 순환참조 이슈가 발생했고,그 해결 과정을 기록해두려 한다. 현재 상황 - `Owing-Domain`: 애플리케이션의 핵심 도메인 로직을 담당하는 모듈이다. 주요 엔티티, 비즈니스 규칙, 도메인 서비스 등을 포함한다. Owing-Domain은 애플리케이션의 핵심 비즈니스 규칙과 모델을 정의하고, 가능한 한 외부 시스템(API, 데이터베이스, UI 등)에 종속되지 않아야 한다.- `Owing-Api`: 애플리케이션의 외부 진입점 역할을 하며, HTTP 요청을 처리하고 응답을 반환하는 등 애플리케이션의 외부와 상호작용하는 부분을 담당하는 모듈이다. 컨트롤러, DTO, 요청/응답 매핑 로직 등을 포함한다. 즉, 아래처럼 Owing-Api 모듈이 Owing-..

[👀 Owing] Presigned URL을 이용하여 S3로 파일 업로드

프로젝트를 하며 파일 업로드 기능 구현을 맡게 되었다. 기존에는 프론트 단에서 파일을 건내주면, 서버에서 잠깐 받았다가 S3로 업로드를 하는 식으로 구현했는데.. 이 작업이 서버에 지나친 부하를 줄 것 같다고 생각했다. 따라서 이번에는 Presigned URL을 사용하기로 했다. Presigned URL이란?Presigned URL이란 말 그대로 미리 서명한 URL을 의미한다. 모든 S3 객체는 기본적으로 비공개이며, 객체 소유자만 접근할 수 있다. 하지만 S3 객체 소유자가 특정 권한(ex. 업로드, 다운로드 등)을 미리 설정하여 서명된 URL을 클라이언트에게 제공할 수 있다. 이렇게 제공 된 Presigned URL을 통해 클라이언트는 일정 기간동안 서버를 거치지 않고 저장소에 파일을 직접 업로드하거..

[👀 Owing] S3에 파일을 업로드하는 세 가지 방법 (MultipartFile, Stream, PresignedURL)

프로젝트에서 파일 업로드 기능을 구현하며 공부한 내용을 정리하려 한다. Stream 업로드Stream 업로드는 HttpServletRequest의 InputStream을 이용하여 AWS S3에 다이렉트로 파일을 전송하는 방식이다. 즉, 서버를 bypass하는 형태로 S3에 업로드하는 것이다. 이 방식의 가장 큰 특징은 업로드할 파일의 바이너리 전체를 Spring Boot 애플리케이션을 실행하고 있는 서버의 디스크나 힙 메모리에 저장하지 않는다는 점이다.(물론 업로드를 위해 파일의 청크를 메모리에 로드하기 때문에 약간의 메모리를 사용하게 된다.) 그리고 애플리케이션 로직을 통해 모든 바이너리를 메모리에 로드하지 않는 이상 전처리(이미지 리사이징)가 불가능한 특징을 가지고 있다. 동작 흐름1. 클라이언트가 ..

[싸피에서 뭐했니?] #2학기_특화프로젝트_회고

안녕하세요~!! 11기 최민주 기자입니다 👋 특화 프로젝트란?4차 산업 혁명 분야 중 본인이 흥미 있는 특화 기술을 익히 신기술 프로젝트를 진행하는 과정. 도메인으로는 크게 AI, 빅데이터, 블록체인, 핀테크, 메타버스 등이 있으며, 해당 도메인 안에서도 세분화되어 나누어집니다. 어떤 프로젝트를 진행했나요?저희 팀은 AI 도메인을 선택하여 'AI를 활용한 작품 관리 플랫폼'을 개발했으며, 주요 기능은 다음과 같습니다.시나리오 관리 - 설정 오류 체크, 코르크보드, 글자수 체크, 맞춤법 검사, AI를 통한 표지 이미지 생성인물관계도 - 인물관계설정, 등장회차추출세계관 - AI를 통한 세계관 이미지 생성작가 관리 - 활동 글자수 계산 및 시각화  얻은 것처음으로 프론트엔드 개발을 담당하며 얻은 것은 아..

#9. DDD 전략적 설계에 대해 알아보자

안녕하세요~!! 11기 최민주 기자입니다 👋 현재 11기는 싸피에서의 마지막 프로젝트인 자율 프로젝트를 진행 중인데요,저희 팀은 특화 프로젝트 때 모놀리식 아키텍처로 구현한 프로젝트를 자율 프로젝트에서 MSA로 전환하고, 이를 고도화할 계획입니다. 따라서 오늘은 저희 팀이 DDD를 도입하게 된 이유와 DDD 전략적 설계에 대해 간단히 말씀드리겠습니다! 1. DDD(Domain Driven Design)이란?각각의 기능적인 문제의 영역들을 정의하는 '도메인'과, 그 도메인을 사용하는 '비즈니스 로직'을 중심으로 설계하는 방법론을 말합니다.DDD는 다음과 같은 특징을 갖습니다. 1. 도메인의 모델과 로직에 집중2. 보편적 언어(Ubiqutous Language) 사용3. Software Entity와 Do..