ThreadLocal 정리ThreadLocal 은 각 쓰레드마다 독립된 변수 값을 저장하게 해주는 클래스다.즉 쓰레드마다 다른 값을 가지게 해준다. private static final ThreadLocal threadLocal = new ThreadLocal();threadLocal.set("A"); // 현재 쓰레드에 값 저장threadLocal.get(); // 현재 쓰레드의 값 가져오기threadLocal.remove(); // 반드시 정리 필요 주의 사항1. 비동기 코드 / 쓰레드 변경 구간에 주의해야한다.ThreadLocal 은 쓰레드 단위로 값이 저장이 된다. 그래서 다른 쓰레드로 넘어가면 값이 공유되지 않는다.ThreadLocal local = new ThreadLocal();loca..
분류 전체보기
Git SubmoduleGit Submodule 은 Git 레포지토리 내에 다른 레포지토리를 두는 것으로, 모듈화에 필요한 것들을 넣어두면 편하게 사용할 수 있다.일단 파이파이, 메이븐 등에 안올려도 되고, Git 이여서 익숙하고 편하다. 그래서 선택했다. 개요Submodule 에 엔티티 등 서브모듈들을 정의했는데, 변동사항이 많아서 인터페이스로 최소한으로 남겨두고 구현체에서 변동사항만 구현하고 나머지는 정의하고 싶었다. // 서브모듈@MappedSuperclass@Getter@NoArgsConstructor(access = AccessLevel.PROTECTED)public abstract BaseUser { @Id @GeneratedValue(strategy = GenerationType...
의문다른 프레임워크를 하며 의문점이 생겼다. 다른 프레임워크들은 직접 쿼리문을 쓰거나 ORM 등을 이용하여 쿼리를 작성하여 객체의 필드값을 하나하나 빼서 저장을 하는 경우가 있는데, Spring 에서 아니, JPA/Hibernate 에서는 @Getter 등이 없어도 repository.save(entity) 만 하면 값이 저장이 된다. 어떻게 이게 가능한 걸까? @Getter 없이 어떻게 값을 읽고 전부 저장할까?Hibernate 는 기본적으로 엔티티의 상태를 읽고 쓸 때 Java 의 리플렉션 기능을 이용한다. 예를 들어 Entity 클래스 필드에 @Id 같은 어노테이션이 붙어 있으면, Hibernate 는 해당 필드에 직접 접근 하여 값을 읽고 쓴다.이러한 방법이 있기에 Getter, Setter 등이..
저는 Spring 을 쓸 때 손이 엄청 바빠져요엔티티,, 컨트롤러,, DTO,,, 서비스,,, 하나하나 만드느라 엄청 귀찮거덩요아 이거 누가 대신좀 해줬으면 좋겠다... 했는데...나 개발자지?? 내가 만들 수 있지?? 그래서 만들었습니다.Spring CRUD 생성기Python 기반으로 되어 있으며 pip 로 깔아서 사용할 수 있어요3Layer, Hexa 일단 이 두개 대중적인거 위주로 해놨습니다. https://github.com/wonowonow/spring-boot-crud-generator GitHub - wonowonow/spring-boot-crud-generator: ✍️ Spring Boot 단순 crud 작업 귀찮아서 만들었습니다.✍️ Spring Boot 단순 crud 작업 귀찮아서 만..
WebRTC 란실시간 오디오나 비디오 데이터 통신을 가능하게 해주는 오픈 소스 프로젝트다 핵심 기능실시간으로 오디오랑 비디오를 전송 할 수 있다.P2P 통신을 통해서 브라우저끼리 직접 데이터를 주고 받을 수 있다. 이거 쓰려면 시그널링 서버가 필요하다 이게 뭐냐서로 연결해서 정보 주고 받기 위한 webSocket 등이다. 와 그럼 이거 어디서 쓰냐google Meet, discord 등에서 쓴다.아 이해했다. 그럼 어떻게 동작하냐일단 기본적으로 세개다. getUserMedia카메라, 마이크 가져오는 거얼굴이나 목소리 받아올 때 쓴다.RTCPeerConnection이게 핵심브라우저끼리 직접 연결해서 주고받게 해준다오디오, 비디오 다 여기서 처리된다.RTCDataChannel그냥 데이터 주고 받는 통로채팅이..
ToolCalling 이란?도구 부르기다. LangChain 과 LangGraph 에서 통용되는 개념이다LLM 이 어떤 도구를 쓸지 알아서 정해서 그 도구를 사용한다는 것이다.알아보자Tool도구다.무슨 도구냐 이 도구는 뭐든지 될 수 있다.API 호출, 요즘 유행인 MDC, 심지어 LangChain 과 LangGraph 또한 도구가 될 수 있으며, 날짜 계산, 라이브러리 등등 모든 것이 도구가 될 수 있다.하지만 지켜야 될 것이 있다 단일 책임의 원칙 이건 지켜야된다. 그래야 도구로써 사용하기에 적합하게 된다. 도구는 세가지 정보를 가진다.이름: 도구의 이름을 정한다. (ex. 날씨 도구)설명: LLM 이 이 설명을 보고 도구를 고를 수 있게 설명을 적어야한다. (ex. 사용자가 날짜를 입력하면 해당 날..
LangGraph 위주로 작성하겠습니다.둘은 철학 자체가 다르다⛓️💥 - 체인은 서로 순서대로 연결이 되어있다.즉 선형적으로 이루어져있다. 그렇다. 랭Chain 은 선형적인 구조를 이룬다.파이프라인을 만든다는 것이다. Graph - 그래프는 각자 연결이 되어있다.알고리즘 풀면서 그래프 문제 많이 풀었을텐데 그 그래프 맞다.즉 그래프 문제 풀면서 사이클 조정이나, 우선 순위를 조정했듯이 랭Graph 도 상황에 따라 세밀한 조정이 가능하다!!이게 무슨 소리냐? 파이프 라인이 아닌 각 노드에 따라서 자동으로 왔다갔다 한다는 것이다!!이해가 됐으려나? LangGraph 단어 설명Langgraph 는 다중 에이전트 프레임워크 입니다.사이클 지원과 세밀한 제어가 가능하며 내장 지속성 기능으로 상태 및 흐름을 정..
6버전 기준으로 작성되었습니다.Clerk 란?인증과 사용자 관리를 제공하는 SaaS 서비스이다.구글, 깃허브, 페이스북, X, 노션 등..OAuth, 이메일/비밀번호, Magic Link, Web3 Wallet 등 다양한 로그인 방식을 지원한다.Next.js, Remix, React Native 등과 쉽게 통합을 할 수 있어서 스타트업, 1인 개발자 등 프로토타입 개발 환경에서 개발 시간을 단축시키는 데 도움을 줄 수 있다.물론, 각 Provider 마다 어느정도 설정은 해줘야한다. 이건 Clerk 에서 못한다. Clerk 설정 이 설정을 기본으로 하고 시작 Personal Information 의 Name 은 하는 순간 귀찮아지니 생략저게 뭐냐면 Google 로그인 시 구글의 First Name, La..
RAG란RAG(Retreival-Augumented Generation)는 검색 기반 증강 생성으로, LLM 모델에서 출력을 최적화하여 응답을 생성하기 전, 학습 데이터 외부의 지식 베이스를 참조하도록 하는 프로세스다.단순히 외부 데이터를 참조하는 것이 아닌, 벡터 DB 등의 검색 시스템을 이용하여 LLM의 프롬프트에 추가하는 방식이다. RAG 가 왜 나왔을까?우리는 ChatGPT 의 초기 버전을 기억한다.이때 생겨난 문제점은 LLM 이 그렇게 완벽하지 않다는 것이다.LLM 의 대표적인 문제점은 다음과 같다. 답변이 없을 때 허위 정보를 제공한다.사용자가 구체적이고 최신의 응답을 기대할 때, 오래거나 일반적인 정보를 제공한다.신뢰할 수 없는 출처로부터 응답을 생성한다.용어 혼동으로 인해 응답이 정확하지 ..