반응형

전체 글 86

Why: RAG를 사용 해야 할까?

도대체 RAG는 뭘까? 에서 설명 했듯이 RAG의 경우 일반적인 수준의 LLM을 서비스의 의도에 맞게 결과를 생성하게 만드는 생성방식이다. 그러면 이런 RAG를 사용하는 이유가 뭘까? RAG를 사용해야하는 이유는 아래와 같다.현실적인 문제시간: 프로젝트를 진행하는 목적은 다르겠지만 대부분의 프로젝트는 한정적인 시간을 가지고 있다. 반면에 기존의 LLM을 대체 할 수 있는 수준의 Model을 만드는데는 많은 시간이 든다. 규모: 지금 개인적인 현상황에 있어서 LLM을 만드는건 불가능하다. 기존의 성능을 내기 위한 데이터 확보 부터 구현과 테스트까지의 그 규모는 감당이 되지 않는다.신뢰성위의 문제들이 해결 된다해도 새로운 LLM을 처음부터 만드는 것은 신뢰성에 문제를 일으킨다. 현재 나온 LLM의 신뢰성이 ..

AI/Why? 2024.08.15

도대체 RAG는 뭘까?

Retrieval-Augmented Generation의 약자인 RAG는 모델이기보다는 하나의 생성형 AI를 구성하는 방식이라고 생각된다. 크게는 2개의 단계로 이루어져 있으며 해당 단계를 통해 사용자에게 개발자가 의도한대로 답변이 가도록 한다.물론 2개의 단계 안에서 작은 단위의 단계가 존재한다.  그래서 RAG의 흐름을 Retreival과 Generation 두 단계로 나누었을 때 아래와 같다. RetrievalEmbedding사용자가 입력한 Query를 Vector로 전환한다.SearchingVector로 전환된 내용을 바탕을 DB에서 Generation에 사용될 내용을 찾는다.GenerationQuery + Searched ResultsDB에서 반환된 내용을 Query와 함께 참고하여 생성을 한다..

Recursion - Basic, Permutation and Combinations

재귀 함수라고도 하는 Recursion은 함수에서 같은 함수를 다시 호출한다.  대표적인 예시는 아래의 링크에 들어가보면 알 수 있다.아래의 링크 이렇듯 아래의 링크를 무한정 누르게 되면 같은 함수가 수없이 반복이 되기 때문에 재귀 함수의 기본은 base case를 작성하여 더이상의 재귀가 발생하지 않도록 하는 점에 있다. 그래서 기본적인 Recursion의 구조는 아래와 같다. public static void perm(int depth) { if (M == depth) { for (int num : output) sb.append(num).append(" "); sb.append("\n"); return; } ..

알고리즘/이론 2024.08.14

Project: HowAbout - Intro

2023년 10~11월 2개월 동안 데이팅 웹서비스를 기획해서 만들었다. 디자이너 1명 프론트 2명 백엔드 4명으로 단순히 프로필 기반 매칭이 아닌 자신이 하고 싶은 데이팅을 작성하여 데이팅 또한 하나의 매칭 포인트로 사용될 수 있도록 만들었다. 하지만 여기서 문제가있었다. 당시 디자이너를 제외한 전원이 남자였고 6명 중 5명이 싱글이었는데 그래서인지 데이팅 계획 작성을 위한 테스트기간에 사용할 데이팅 예시를 작성하는데 있어 예상 보다 너무 많은 시간이 걸렸고 작성된 예시 데이팅 계획들도 심각한 수준이었다. 당시 그러한 모습들을 보며 생각했다. '데이팅 서비스를 이용하는 사람들은 대부분 싱글일 텐데 이 사람들에게 데이팅 계획을 작성하라는 것은 생각보다 무리한 요구겠구나' 그래서 당시 이런 문제를 어떻게 ..

AI/Projects 2024.08.13

Two Pointers: 백준 배열 합치기-11728

문제 유형: Two Pointer배열합치기정렬되어있는 두 배열 A와 B가 주어진다. 두 배열을 합친 다음 정렬해서 출력하는 프로그램을 작성하시오.작성 코드import java.util.Arrays;import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); StringBuilder stringBuilder = new StringBuilder(); int N = sc.nextInt(); int M = sc.nextInt(); int[] sorted = new int[N + M]; ..

알고리즘/JAVA 2024.08.09

Two Pointers: 백준 회문-17609

문제 유형: Two Pointers회문회문(回文) 또는 팰린드롬(palindrome)은 앞 뒤 방향으로 볼 때 같은 순서의 문자로 구성된 문자열을 말한다. 예를 들어 ‘abba’ ‘kayak’, ‘reviver’, ‘madam’은 모두 회문이다. 만일 그 자체는 회문이 아니지만 한 문자를 삭제하여 회문으로 만들 수 있는 문자열이라면 우리는 이런 문자열을 “유사회문”(pseudo palindrome)이라고 부른다. 예를 들어 ‘summuus’는 5번째나 혹은 6번째 문자 ‘u’를 제거하여 ‘summus’인 회문이 되므로 유사회문이다.여러분은 제시된 문자열을 분석하여 그것이 그 자체로 회문인지, 또는 한 문자를 삭제하면 회문이 되는 “유사회문”인지, 아니면 회문이나 유사회문도 아닌 일반 문자열인지를 판단해야..

알고리즘/JAVA 2024.08.09

Two Pointers: 백준 수 고르기-2230

문제 유형: Two Pointers수 고르기N개의 정수로 이루어진 수열 A[1], A[2], …, A[N]이 있다. 이 수열에서 두 수를 골랐을 때(같은 수일 수도 있다), 그 차이가 M 이상이면서 제일 작은 경우를 구하는 프로그램을 작성하시오.예를 들어 수열이 {1, 2, 3, 4, 5}라고 하자. 만약 M = 3일 경우, 1 4, 1 5, 2 5를 골랐을 때 그 차이가 M 이상이 된다. 이 중에서 차이가 가장 작은 경우는 1 4나 2 5를 골랐을 때의 3이 된다. 작성 코드import java.util.Arrays;import java.util.Scanner;public class Main { public static int N, M; public static int[] givenNums;..

알고리즘/JAVA 2024.08.09

Two Pointers: 백준 부분합-1806

문제 유형: Two Pointers + Sliding Windows부분합10,000 이하의 자연수로 이루어진 길이 N짜리 수열이 주어진다. 이 수열에서 연속된 수들의 부분합 중에 그 합이 S 이상이 되는 것 중, 가장 짧은 것의 길이를 구하는 프로그램을 작성하시오.작성 코드import javax.sound.midi.Sequence;import java.util.Scanner;public class Main { static Scanner sc = new Scanner(System.in); static int N, S; static int[] sequence; static void input() { N = sc.nextInt(); S = sc.nextInt();..

알고리즘/JAVA 2024.08.09

Two Pointers

투포인터는 한가지의 포인터로 배열안의 모든 요소를 비교 하는게 비효율적이거나 배열 안에서 페어단위로 조사를 할 필요성이 있을 때 대표적으로 사용되는 알고리즘이다.  투포인터 알고리즘이 사용 되기 좋은 상황의 경우 아래와 같다.1. 두 배열의 Intersection을 찾을 때2. 두 배열의 용소를 합칠 때3. 두 배열의 차이를 찾을 때즉, 두개의 배열을 사용하는 경우 유용하다. 이런 투포인터의 핵심은 포인터와 포인터가 움직이는 조건에 대한 파악이다.그리고 두개의 포인터이니 조건을 판단하고 어떤 포인터를 움직여야 하는지에 대해 파악이 필요하다. 예를들어 주어진 값과 배열 안에서 주어진 값을 만들 수 있는 하나의 페어를 찾아야 하는경우 배열 가장 앞과 뒤에 두개의 포인터를 두고 합이 값보다 클경우 가장 뒤에있..

알고리즘/이론 2024.08.06

도대체 CI/CD는 뭘까?

백엔드개발뿐만 아니라 많은 개발에 있어 CI/CD라는 표현을 자주 들어 봤을 것이다. 그런데 CI/CD는 정확히 어떤 걸까? 기본적으로 CI/CD Software Engineering에서 주로 사용되는 표현이다. 개발과정과 운영방식에 대한 방법론적인 표현으로 CI/CD자체는 어떤 개발툴이나 개발언어를 지칭하는 것이 아니다. 즉, 안 지킨다 해서 개발을 못하고 그런 건 아니다. 하지만, 우리가 개발한 Application의 유지 관리와 개발 그리고 개선하는 입장에서 필요한 상식이다. CI/CD는 Continuous Integration/ Continuous Deployment의 약자로 지속적인 통합 지속적인 배포를 뜻한다. 즉, Application을 만들고 해당하는 기능들을 지속적으로 통합하고 통합한 내..

도대체 Docker는 뭘까요?

Docker는 귀여운 고래 로고가 있는 platform이다. 이 플랫폼에서는 우리가 만든 Application을 실행할 수 있는데 이 부분이 크게 와닿지 않을 수 있다. 하지만 이렇게 생각해 보면 된다. 우리가 개발한 프로젝트의 개발 환경은 배포될 환경과 차이가 있을 수밖에 없다. 예를 들어 지금 내가 사용하고 있는 개발환경은 MacOS이지만 배포된 환경은 Linux Ubuntu이다. 물론 Ubuntu환경에 자신이 만든 프로젝트가 실행될 수 있게 환경을 일치시킬 수 있다. 하지만 환경을 구성하는 요소가 하나라도 바뀌거나 배포 환경의 변화가 있을 시 우리는 다시 환경설정을 해줘야 하는 불편함이 있고 이는 안정적인 서버운영을 저해하는 요소이기도 하다. 물론 이와 관련해서 VM이라는 좋은 방법이 있지만 VM과..

WHY: Nginx 용량 재한, 왜 사진이 1MB 이상이면 업로드가 되지 않을까?

프로젝트를 진행하던 도중 클라이언트를 개발하는 프런트개발 쪽에서 아래와 같은 질문이 들어왔다. 문괜님 1MB 이상 사진이 안 올라가지는데요? 그 당시 이런 질문에 답하고 해결하기 위해 아래와 같은 생각을 했다. 이미지는 지금 현재 MultipartFile인데 Spring에서 이와 관련한 용량 재한이 있는 걸까? 모든 요청이 Nginx의 Web Server를 통해서 들어오고 있는데 그와 관련한 재한이 있는 걸까? 그럼 클라이언트에서 사진을 압축해서 보내면 되는 거 아닌가? 첫 번째는 간단하게 application.properties에 들어가 확인이 가능했고 아래와 같이 금방 확인이 가능했다. 여기서 위에 보이는 max-file-size는 Multipart와 관련해서 최대 사이즈를 설정하는 부분이다. 그리고..

Backend Dev./Why? 2023.12.15

Spring Boot 개발노트: 프로젝트 HTTPS 적용 2편

Spring Boot 개발 노트 : 프로젝트 HTTPS 적용 1 Spring Boot 개발 노트 : 프로젝트 HTTPS 적용 1 Spring Boot의 경우 8080번 Port를 사용하고 React 같은 경우 3000번 Port를 사용한다. HTTP의 경우 80번 Port를 사용하고 SSH의 경우 22번 포트를 사용한다. 그러면 HTTPS의 경우 몇 번 Port를 사용할까? 그리고 여 youcanbeable.tistory.com 도대체 Nginx는 뭘까요? 도대체 Nginx는 뭘까요? HTTPS를 적용하기 위해서 그리고 웬만한 Backend 개발에 있어 Nginx는 한 번쯤은 무조건 들어봤을 것이다. 추가적으로 WAS, Web Server와 HTTPS관련해서 무조건 들어봤을 것이다. 그러면 도대체 WAS..

Spring Boot 개발 노트: S3를 이용해 프로젝트에 이미지관련 CRUD 구현 2편 - Spring Boot 설정

S3를 이용해 프로젝트에 이미지 관련 CRUD 추가하기 - S3 & IAM 설정 Spring Boot 개발 노트: S3를 이용해 프로젝트에 이미지관련 CRUD 추가하기 - S3 & IAM 설정 많은 프로젝트에서 이미지가 필요하다. 그런 이미지를 저장하고, 읽어오고, 수정하고 마지막으로 삭제하기 위해서는 어떻게 해야 할까? 생각해봐야 하는 것들 먼저 이미지가 어떻게 저장되는지 youcanbeable.tistory.com 저번 편을 통해서 현재 프로젝트가 이미지를 처리하기 위해 아래와 같이 준비 됐다. 이미지가 실제로 담길 저장소 이미지가 담긴 저장소를 쓸 권한 프로젝트와 저장소 연결 프로젝트 내의 이미지 관련 요청 처리 구현 그럼 여기서부터 프로젝트의 이미지 처리를 위한 프로젝트 설정과 요청처리를 구현해 ..

반응형