분류 전체보기

· Developer
예전에 인증과 인가에 관련된 포스팅을 작성한 적이 있었다. 그 과정에서 세션 방식과 토큰 방식이 쓰인다고 하였고, 토큰 방식에서는 JWT(JSON Web Token)을 일반적으로 사용한다고 이야기를 했었다. 그 이후로 스프링 시큐리티로 직접 인증과 인가를 구현해야 할 일이 생긴 적이 있었다. Access Token과 Refresh Token을 통해서 구현한 적이 있었는데, 처음에 이를 도대체 어떻게 구현해야 할지 상당한 난제였다. 로직 자체를 구현하는 것 자체는 크게 어렵지 않으나, 스프링 시큐리티와 맞물려서 구현하는 과정에서 상당히 오랜 시간이 걸렸다. 여담으로, username과 password로 로그인하는 스프링 시큐리티의 userDetails의 구현체를 변경하여, 전화번호를 통해서 로그인이 되게끔..
· ML engineer
앞서 embedding과 VDB에 대해서 살펴보았다. 이번에는 이러한 embedding과 VDB를 조합하여 검색 엔진을 만들어보는 방법에 대해서 다루려고 한다. 앞서 다루었던 VDB의 개념에 Flask를 통한 간단한 API 서버를 만들고, embedding model을 조합하여 벡터값으로 나타내주기만 하면 모든 과정이 끝이다. 제목에 검색 엔진과 추천 시스템이라는 키워드를 같이 썼는데, 실제로 나도 관련된 연구를 진행하면서 초반에 둘을 많이 헷갈리기도 했다. 사실 정확히 말하면 우리가 오늘 만들 것은 검색 엔진이다. 하지만 추천 시스템과도 어느 정도 관련이 있다. 검색 엔진은 명시적인 사용자 쿼리를 처리하는 것이다. 사용자가 특정 쿼리값을 보내면, 이를 가공하여 필요한 정보를 제공해주는 것이다. pul..
· ML engineer
슬슬 논문 작성이 막바지에 들어섰다. 나는 현재 학부 연구생 소속으로서 벡터 데이터베이스와 테이블 데이터를 .csv 파일로 뽑아서 embedding 하는 부분을 연구하고 있다. 다른 연구원 한 분과 같이 작업하고 있는데, 간단하게 소개하면 연구 내용은 테이블 데이터(.csv) 파일로 검색하는 RAG를 만드는 내용이다. 좀 더 설명하면 .csv 파일을 통해 검색하는 검색 시스템을 만드는 것이다. 중요한 점은 단순한 검색이 아니라 쿼리용으로 쓰인 테이블 데이터로 검색을 하였을 때, 융합하기 좋은 테이블을 찾는 것이다. 그렇기 때문에 RAG를 구현하는 느낌에다가 이것저것 부가적인 방법을 섞어서 꾸준히 실험을 계속하고 있다. 각설하고, 이러한 과정에서 필요한 것이 Vector Database였다. 수 많은 .c..
spring을 공부해 본 적이 있다면 위와 같은 페이지를 본 적이 있을 것이다. start.spring.io 사이트에 들어가면 위와 같이 다양한 spring의 config 들을 볼 수 있다. 그 외에도 의존성 같은 설정을 손쉽게 추가할 수 있는 것을 알 것이다. 자바를 공부하는 단계라면 단순히 위와 같은 간단한 설정을 통해서 프로젝트를 세팅하고, 스프링 Data JPA나 스프링 시큐리티 등 다양한 의존성을 추가해서 스프링 프로젝트를 .zip 형태로 받아볼 수 있다. 스프링부트를 통해서 다양한 API 서버를 개발하거나, 다른 사람들이 만든 스프링부트 서버를 배포하는 역할을 하게 되면서, dockerfile을 작성하는 과정이나 github actions에서 빌드 툴로써 gradle을 쓰는 데, 특정 레퍼런스..
매일 시간 날 때마다 geeknews를 보는 편이다. 이런저런 글들 중에서 가장 관심 있는 글을 발견하였는데 그것은 바로 도커의 멀티 스테이지 빌드에 대해서 쓰인 글이었다.[geeknews] Docker multi-stage build로 컨테이너 이미지 크기 줄이기 : https://news.hada.io/topic?id=17794 Docker Multi-Stage Build로 컨테이너 이미지 크기 줄이기 | GeekNewsDocker 컨테이너 이미지를 빌드할 때, Dockerfile이 Multi-Stage 구조가 아니라면 불필요한 파일이 포함될 가능성이 큼이는 이미지 크기 증가 및 보안 취약성 증가로 이어짐컨테이너 이미지에서 발생할news.hada.io 해당 게시글을 보고 바로 링크된 원문을 확인하여 ..
최근 대학교 동문 개발자들끼리 네트워킹을 한 적이 있었다. 다양한 포지션의 개발자분들이 모여서 이런저런 이야기를 나누었는 데, 가장 흥미로웠던 주제는 아이폰에서의 safari 및 chrome이 프론트엔드 개발자의 골칫덩어리라는 것이다. 결론부터 말하면 아이폰에서는 우리가 흔하게 아는 chromium이라는 웹 브라우저 엔진이 아니라 WebKit이라는 엔진을 통해서 웹사이트를 렌더링 하기 때문에 자질구레한 에러들이 많이 발생하게 된다. 웹 서핑을 하는 도중 문득 위 이야기가 생각이 났다. 대체 웹 브라우저에 어떠한 역사가 있었기에 그러한 일이 일어나는 것일까? 간단하게 나마 한 번 살펴보자고 하였는데, 생각보다 방대한 양에 조금 놀랐다. 관련해서 흥미로운 것들을 많이 확인할 수 있었는데, 내가 정리했던 내용..
클라우드 기반이 아무래도 편하다 보니까 AWS를 통해서 다양한 서비스들을 직접 띄우면서 작업하는 도중이었으나, 최근에 일과 개인적인 공모전 관련해서 AWS를 쓰기 힘든 상황이다 보니까 온프레미즈를 통해서 배포하기 시작했다. 아무래도 AWS를 쓰는 편이 편하기는 하지만, 비용적인 측면을 고려할 수밖에 없었고, 학교에서 일하게 되면서 서버 리소스들이 꽤나 많기 때문에 대부분 Jenkins를 기반으로 서빙하기 시작했다. 빌드의 꽃은 역시 매개 변수를 넣어주는 것이라고 생각한다. 도커 이미지를 만드는 과정에서도 다른 사람들의 스크립트를 보면서 저마다 도커 이미지를 빌드하는 방법이 다 다르다고 생각하였는데, 각각 다양한 이후의 확장성을 고려한 도커 파일을 작성하는 것이었다. 그렇기 때문에 이러한 젠킨스 빌드에서도..
먼저, 이전에 개인 프로젝트를 통한 AWS Serverless 배포 파이프라인을 구축하였다. 많은 요소들을 신경 써서 여러모로 구축하였고, 서버 비용도 예상할 수 있는 수준 이내로 끊으려고 했었다. 그런데 한 가지 문제가 발생하는데... 그것은 바로 배포가 무려 30분이나 걸린다는 사실이었다. 그 이유는 다음과 같았다. cpu 2 core, memory 4GB씩 물려 있던 ECS의 리소스를 비용 문제로 각각 절반식 줄여버린 것이다. 사실 생각해 보면 이미 예견된 문제였었다. AWS freetier에서 지원하는 ec2 t2.micro에서 스프링을 빌드해 본 적이 있다면 알 수 있을 것이다. 1 core와 1GB memory를 지원하는 t2.micro에서 gradlew build를 실행하면, 빌드 도중에 메..
marsboy
'분류 전체보기' 카테고리의 글 목록 (3 Page)