캡스톤 디자인 프로젝트 1. 기획

박상혁·2023년 3월 11일
0

Project

목록 보기
3/14

개요

딥페이크 기술을 활용한 이미지 제작 웹 홈페이지 제작
클라이언트와 AI 서버 간의 파일 중계자

딥페이크란?

딥페이크(deepfake)란 인공지능을 기반으로 활용한 인간 이미지 합성 기술이다. 기존에 있던 인물의 얼굴이나, 특정한 부위를 영화의 CG처리처럼 합성한 영상편집물을 총칭한다.
딥페이크 - 나무위키

사이트 제작 방향성

인스타그램에서 스토리로 많이 공유되는 특정 사이트들이 있습니다.
간단한 질문들로 MBTI 유추, 오늘의 운세 등 재미로 한번씩 테스트 해보며 서로 나온 결과물들을 SNS에 공유합니다.
저희는 이러한 트렌드를 이용하여 딥페이크 기술과 접목시켜 사용자들에게 호기심과 재미를 유발하는 것이 목적입니다.

저작권 및 초상권에 관하여

기존 이미지에 디즈니 캐릭터 같은 저작권에 구애받지 않는 이미지를 선별하여 합성에 이용할 예정입니다.
또한 따로 이미지를 서버 내에서 저장하여 다른 용도로 활용되지 않으니 초상권 침해에 문제되지 않습니다.

디자인 및 기능

피그마를 이용하여 사이트의 전체적인 디자인을 대략적으로 그려보았습니다.

  • 이미지 업로드
  • 변환된 이미지 화면 출력

프로젝트 설계 목표

해당 프로젝트는 사실 API도 간단하며, 데이터베이스도 거의 사용하지 않기 때문에 백엔드 서버를 두는 이유, 존재 의의를 명확히 설정할 필요가 있었습니다.

백엔드 서버의 존재 의의

저는 이번 프로젝트를 설계하기 위해 다음과 같은 목표를 설정했습니다.

  1. 클라이언트 단의 자원 소모를 줄이기 위함입니다.

클라이언트가 하는 일이 많아지면 그만큼 부담이 증가하여 영향을 끼칠 수 있습니다. 담당하는 부분을 나누어 좀 더 효율적으로 자원 소모를 줄일 수 있습니다.
또한, 기능 추상화가 이루어져 개발자 입장에서도 전체 로직을 고려할 필요 없이 프론트는 UI만을, 백엔드는 DB접근 및 관리만을 신경쓰면 됩니다.

  1. 많은 양의 트래픽을 감당하기 위함입니다.

트래픽을 감당하기 위해서는 데이터를 처리해주는 서버가 감당하는 정도가 많아야 합니다.

  1. 대용량 데이터 처리

고화질 이미지를 다루기 때문에 이를 효율적이고 안전하게 관리할 수 있어야 합니다.
이를 효율적으로 처리할 수 있는 프레임워크를 사용해야 합니다.

  1. 빠르게 전달해야 합니다.

데이터를 최대한 빠르고 막힘없이 보내야 합니다.
이를 효율적으로 처리할 수 있는 프레임워크를 사용해야 합니다.

  1. 보안

개인 초상권이 있는 사진을 업로드하다보니 보안을 철저히 하여 유출이 되지 않도록 해야합니다.

  1. 데이터베이스 성능 튜닝
    퀴리, 인덱싱 등의 방법을 통해 데이터베이스의 반응을 최대로 끌어올려야 합니다.

위의 기능들을 지원하는 프레임워크는 Spring 말고도 언어별로 많습니다.

프레임워크는 언어 선정에 있어서 팀의 문화와 기호에 따라 달라질 수 있기 때문에 저는 그 중에서 Spring 프레임워크 환경을 선정한 것도 있습니다..!

전략 선정

이를 위해서 다음과 같은 방법을 사용하려 합니다.

  1. Client 모듈로써 Spring Webflux 사용

기존 RestTemplete 모듈 대신 비동기 Non-Blocking Event-Driven 방식(reactive)을 사용하는 Spring Webflux를 사용함으로써 비동기의 이점을 살리려 합니다.
-> 서버와 통신할 때 이용. AI서버를 만든다고 가정했을 때

  1. 이미지 압축 및 가공

용량을 줄일 수 있지만, AI 모델 특성 상 화질을 최대한 높게 유지하기 위해 고려 대상에서 제외

  1. 웹 서버 튜닝을 통한 성능 높이기

대표적인 웹 서버인 Apache와 Ngnix 이들 중 어느것을 사용해야 성능이 향상되는지,
또한 이들 내부의 튜닝 작업을 통해 성능 개선을 할 예정.
tomcat의 내부 쓰레드 갯수를 증가시키는 방법도 있습니다.

  1. cache 서버 운영

이미지 캐시 서버를 두어 이미 변환한 이미지는 뒤의 백엔드 로직을 거칠 필요 없이 바로 캐시 서버에서 반환할 수 있도록 함으로써 반응속도를 크게 향상시킵니다.

Team - 준식

파트

  • Data set - 허찬영
  • AI - 김준식
  • frontend - 박민지
  • Backend - 박상혁

주차별 계획서

주차계획
4주차프론트, AI서버 간 구체적인 API 및 flow chart 설계
5주차Spring Boot 프로젝트 초기 설정 및 S3, DB 연동 / DB 스키마 설계
6주차AWS S3 설정 및 SpringBoot와 연동
7주차Front 단과 이미지 업로드 및 다운로드 테스트
8주차Flask서버 생성 및 초기 설정
9주차Flask, SpringBoot, S3 통신 테스트
10주차
11주차AWS RDS 연동 / AWS EC2 Spring 서버 배포
12주차
13주차통합 테스트 진행 및 오류 수정
14주차
15주차최종 발표

시간이 남을 경우

  • CI/CD 환경 구축
  • 웹서버, WAS 설정
  • 부분부분 코드 리팩토링

등이 추가 될 예정입니다.

참고

인프라 관련
u-nij - Spring Boot + Nginx 연동해서 배포하기
앞서도 말씀드렸지만 제 프로젝트는 현재 프론트엔드를 완전히 분리해서 AWS S3 버킷을 호스팅용으로 사용하고 있습니다.

S3는 단순 저장소이며 별도의 서버 프로그램 없이 이를 웹 호스팅 용도로 사용이 가능하도록 AWS에서 지원합니다.

다만 그 자체로는 만들어진 웹페이지의 SSL을 지원하지 않기 때문에 Certificate Manager에서 인증서를 발급받고, CloudFront 서비스를 같이 사용해야 합니다.

(+도메인 등록... 저는 외부에서 사용하던 개인 주소가 있어서 그걸 썼지만 AWS에도 Route53이라는 서비스가 있습니다)

https://ksk-developer.tistory.com/23
https://develop-writing.tistory.com/128
https://earth-95.tistory.com/129

profile
개발 노트

0개의 댓글