프로젝트 기록

    [프로젝트 기록] fetch-join을 이용해 쿼리 최적화하기

    [프로젝트 기록] fetch-join을 이용해 쿼리 최적화하기

    프로젝트를 진행하면서 쿼리 최적화한 과정을 기록하려고 한다. SpringBoot3.x , JPA를 사용한 프로젝트이다. 🔍 연관관계 기본적으로 JPA를 사용하여 프로젝트를 진행하면 Delete, Update, 맵핑관계가 설정되어 있는 조회 로직에서 쿼리를 확인하고 최적화를 진행하고 있다. 이번에는 일대다 관계를 가진 엔티티를 조회할 때의 쿼리 최적화를 진행하였다. @AllOpen @Entity class Product( @ManyToOne @JoinColumn var category: ProductCategory, ) { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) val id: Long? = null } @Entity class ProductCat..

    [프로젝트 기록] Redis 메인/레프리카 서버 만들기

    [프로젝트 기록] Redis 메인/레프리카 서버 만들기

    [ Redis 레프리카 서버 만들기 ] 이용하고 있던 Redis EC2의 이미지를 복제하여 새로운 인스턴스를 생성해주었다. 복제한 레디스의 정보를 확인해보자. redis-cli info Role설정이 master로 되어있는 것을 확인할 수 있다. 이를 replica로 설정해주자. replicaof (사설 IP) (포트번호) Ex ) replicaof 172.1.1.1 6379 다시 info를 입력하여 확인해보면 slave로 바뀐 것을 확인할 수 있다. 하지만 master_link_status: down임을 확인할 수 있다. /var/log/redis/redis-server.log의 기록을 살펴보면 다음과 같이 Connection refused가 발생하고 있음을 알 수 있다. 3291:S 11 Nov 20..

    [프로젝트 기록] Redis와 직렬화/역직렬화

    [프로젝트 기록] Redis와 직렬화/역직렬화

    [ Redis 캐시 서버의 도입 ] Redis 캐시를 도입하면서 겪은 디버깅 과정을 글로 적어볼까 한다. Voca-World 프로젝트에 최근 사용자 정보를 캐싱하는 기능을 도입했다. 캐싱을 한 이유는 다음과 같다. 토큰을 기반으로 사용자 정보를 찾는 일은 매 요청시마다 발생한다. 사용자 정보는 자주 사용되지만 자주 바뀌지 않는다. 사용자가 로그인할 때 Redis를 통해 캐싱하였다. [ 문제 발생 ] 사용자 정보를 캐싱하고 나서 단어장이 보이지 않는 문제가 발생하였다. [ 문제의 원인 ] Redis에서 사용자 정보를 가져올 때 Vocabularies와 관련된 정보가 없는 것을 발견하였다. [ 문제 해결 과정 ] 코드를 확인해보니 vocabularies 필드에 @JsonIgnore 어노테이션이 붙어있었다. ..

    인공지능 기반 웹 서비스 만들기

    인공지능 기반 웹 서비스 만들기

    낙서하듯이 그린 그림을 멋진 그림으로 바꿔주는 인공지능 기반 웹 서비스를 개발하고 있다. 이번 포스팅에서는 프로젝트를 진행하면서 고민했던 부분에 대해서 적어볼려고 한다. 프로젝트 구조 GPU 가상 서버는 비싸기에 로컬 컴퓨터를 이용하여 프로젝트를 진행했다. Ubuntu기반의 가상 머신을 Nginx로 사용하였으며 URL기준으로 프론트, 백엔드 포트로 포워딩해준다. 백엔드 서버는 요청으로 들어온 사진을 인공지능 서버에 가공 요청한다. 인공지능 서버의 작업이 완료되면 결과를 메일로 전송한다. Ubuntu 가상 머신을 사용한 이유 로컬PC를 이용해 다른 작업도 하다 보니 제한된 메모리와 자원을 할당하고 관리하고 싶었다. 가상환경에서, 특히 VirtualBox에서 GPU사용이 생각보다 까다로웠다. 프로젝트 기능 ..

    로컬 PC 서버 만들기

    로컬 PC 서버 만들기

    로컬PC를 서버로 만드는 작업을 하고 있습니다. 이번에는 호스트PC에서 VM머신으로 통신하는 방법에 대해 알아보겠습니다. 목표 사용자가 윈도우10 로컬PC의 아이피 주소로 요청을 하면 VM Main에 설치되어 있는 프로젝트 서버가 응답하는 것을 목표로 합니다. 사용자 요청 (외부) -> 호스트PC -> VM Main 순으로 데이터가 요청됩니다. 호스트PC : Windows 10 VM Main : Ubuntu 22.04.3 프로젝트 준비 VM 머신을 설치합니다. (VM 머신을 설치하는 방법은 다른 블로그 참조) Nginx, Apache 등의 프로그램을 쉽게 관리하고 구동하기 위해 Docker를 이용하겠습니다. Ubuntu에서 도커를 설치하는 방법은 다음과 같습니다. # 도커 APT 저장소 추가 # Add ..