본문 바로가기

분류 전체보기

(784)
[모던 리액트 Deep Dive] 상태 관리 라이브러리 Recoil, Jotai, Zustand 살펴보기 - 지금까지 직접 만든 상태 관리 라이브러리에 대해 알아봤으니 이번에는 리액트 생태계에서 많은 개발자들이 사용하고 있는 상태 관리 라이브러리에 대해 알아보고자 한다. 여기서는 비교적 나온지 오래됐고, 널리 사용되고 있으며, 관련 문서와 유스케이스도 다양한 리덕스와 MobX에 대해서는 다루지 않는다. 그 대신 비교적 최근에 나왔고 앞선 두 라이브러리의 대안으로 각광받고 있는 Recoil, Jotai, Zustand에 대해 살펴보고자 한다. - Recoil과 Jotai는 Context와 Provider, 그리고 훅을 기반으로 가능한 작은 상태를 효율적으로 관리하는 데 초점을 맞추고 있다. 그리고 Zustand는 리덕스와 비슷하게 하나의 큰 스토어를 기반으로 상태를 관리하는 라이브러리다. Rec..
[모던 리액트 Deep Dive] 리액트 훅으로 시작하는 상태 관리 - 비교적 오랜 기간 리액트 생태계에서는 리액트 애플리케이션의 상태 관리를 위해 리덕스에 의존했다. 과거 리액트 코드를 보면 리액트와 리덕스가 함께 설치돼 있는 것을 흔히 볼 수 있었고, 일부 개발자들은 리액트와 리덕스를 마치 하나의 프레임워크 내지는 업계 표준(de factor)으로 여기기도 했다. - 그러나 현재는 새로운 Context API, useReducer, useState의 등장으로 컴포넌트에 걸쳐서 재사용하거나 혹은 컴포넌트 내부에 걸쳐서 상태를 관리할 수 있는 방법들이 점차 등장하기 시작했고, 덕분에 리덕스 외의 다른 상태 관리 라이브러리를 선택하는 경우도 많아지고 있다. 리액트 16.8에서 등장한 훅과 함수 컴포넌트의 패러다임에서 애플리케이션 내부 상태 관리는 어떻게 할 수 ..
[실용주의 프로그래머] 소통하라! - 어쩌면 우리는 웨스트로부터 교훈을 배울 수 있을 것이다. 뭘 가졌느냐 만이 아니라 그걸 어떻게 포장하느냐도 중요하다. 최고의 아이디어, 최상의 코드 혹은 가장 실용주의적인 사고 등이 있다고 해도 다른 사람들과 소통할 수 없다면 그것들은 궁극적으로 아무 효용이 없다. 효과적인 소통 없이는 어떤 훌륭한 아이디어도 고아에 지나지 않는다. - 개발자로서 우리는 여러 층과 소통해야 한다. 회의를 하고, 듣고 말하며 여러 시간을 보낸다. 최종 사용자의 요구를 이해하려고 노력하며 그들과 함께 일한다. 코드를 작성해서 우리의 의도를 기계에게 전달하고, 사고를 문서화해서 다음 세대의 개발자들에게 전달한다. - 제안서와 메모를 작성해서 자원을 요청하고 정당화하며, 상태를 보고하고, 새로운 접근법을 ..
[존재의 심리학] 결핍동기 대 성장동기 -지금까지 언급한 기본적 욕구들의 수준은 매우 다양해서 배고픔, 갈증과 같이 완전히 본능적인 것에서부터 사랑과 자기 존중감 등 인간에게만 더욱 뚜렷하게 나타나는 욕구에 이르기까지 광범위하다- 그러나 이러한 모든 욕구는 매우 중요한 하나의 특성을 가지고 있다. 그들은 모두 무엇인가를 추구하며, 결핍에 의해서 활성화되는 역동적 체계이다. 이러한 모든 결핍동기들은 공통적으로 우리가 현실을 제대로 인식하지 못하게 한다. -이러한 동기들은 또한 우리가 "먹여줘! 사랑해줘! 존중해줘!" 등의 요구를 하도록 해서 현실을 왜곡해서 다루게 한다. 음식, 안전, 애정, 자기 존중감에 대한 우리의 욕구가 커질수록, 우리는 우리 자신과 타인을 포함해 현실을 구성하는 각 존재들을 이러한 욕구 충족에 도움이 되는지 아니면 방..
[프로페셔널의 조건] 공헌할 목표에 초점을 맞추어라 - 성과를 올리는 사람들은 공헌에 초점을 맞춘다. 그들은 지금 자신이 하고 있는 일보다 더 높은 곳에 있는 것을 지향하고, 또한 목표를 향해 외부 세계로 눈을 돌린다.- 그는 "내가 속해 있는 조직의 성과와 결과에 큰 영향을 미치는 것으로서 내가 공헌할 수 있는것은 무엇인가?"라는 질문을 스스로에게 던져야 한다. 그는 자신의 책임에 중점을 두고 일하지 않으면 안된다.- 공헌에 초점을 맞추는 것은 목표 달성을 위한 가장 중요한 열쇠이다. 자신이 하고 있는 업무의 내용, 수준, 기준, 영향력의 측면에서 그리고 상사, 동료, 부하직원과의 관계에서도 공헌에 초점을 맞추는 것이 목표 달성의 관건이다. 또한 회의나 보고 같은 일상의 업무에서도 마찬가지다.- 대다수의 사람들이 자신의 능력에 비해 낮은 수준에 초점..
[모던 자바스크립트 Deep Dive] 비동기 프로그래밍 1) 동기 처리와 비동기 처리- 23장 "실행 컨텍스트"에서 살펴본 바와 같이 함수를 호출하면 함수 코드가 평가되어 함수 실행 컨텍스트가 생성된다. 이 때, 생성된 함수 실행 컨텍스트는 실행 컨텍스트 스택(콜 스택)에 푸시되고, 함수 코드가 실행된다. 함수 코드의 실행이 종료하면 함수 실행 컨텍스트는 실행 컨텍스트 스택에서 팝되어 제거 된다. - 다음 예제의 foo 함수와 bar 함수는 호출된 순서대로 스택 자료구조인 실행 컨텍스트 스택에 푸시되어 실행된다. const foo = () => {};const bar = () => {};foo();bar(); - 함수가 실행되려면 "함수 코드 평가 과정"에서 생성된 함수 실행 컨텍스트가 실행 컨텍스트 스택에 푸시되어야 한다. 다시 말해, 실행 컨텍스..
[LLM을 활용한 실전 AI 애플리케이션 개발] 쿼리, 키, 값 이해하기(2) - 앞서 살펴본 두 가지 방식은 모두 쿼리와 키의 관련도를 계산하지 않고, 모두 동등하게 반영한다거나 거리에 따라 차등을 둔다는 적당한 가정을 세워 맥락을 반영했다. 그 결과 원하던 형태의 결과를 얻지 못했고, 이렇게 규칙에 기반한 방법은 입력 데이터가 "나는 최근 파리 여행을 다녀왔다"가 아니라, "나는 최근 파리 박물관을 다녀왔다"로 바뀌더라도 동일한 계산을 하기 때문에 유연성이 떨어진다. 입력 데이터에 따라 다른 결과를 얻기 위해서는 관련도를 규칙이 아니라 데이터 자체에서 계산할 수 있어야 한다. - 그렇다면 이제 '파리'와 ['나는', '최근', '파리', '여행을', '다녀왔다']라는 키 집합의 관계를 계산해보자. 한 가지 문제는 문자열은 그 자체로 계산할 수 없다는 점이다. 하..
[LLM을 활용한 실전 AI 애플리케이션 개발] 쿼리, 키, 값 이해하기 - 앞서 우리는 사람이 글을 이해하는 것처럼 딥러닝 모델이 작동하도록 하려면 단어 사이의 관계를 계산해 관련이 있는지 찾고, 관련이 있는 단어의 맥락을 포함시켜 단어를 재해석해야 한다고 정리했다. - 트랜스포머 아키텍처를 개발한 연구진은 이 과정을 처리하기 위해 쿼리,키,값이라는 개념을 도입했다. 쿼리, 키, 값은 정보 검색 분야에서 가져온 용어다. 흔히 검색창에서 검색을 할 때, 우리가 입력하는 검색어를 쿼리(query)라고 한다. 쿼리를 입력하고 엔터 키를 치면, 검색 엔진은 수많은 자료 중에 쿼리와 관련이 있는 문서를 찾는다. - 이 때, 쿼리와 관련이 있는지 계산하기 위해 문서가 가진 특징을 키(key)라고 한다. 키로는 문서의 제목, 문서의 본문, 저자 이름 등이 사용될 수 있다. ..
[LLM을 활용한 실전 어플리케이션 개발] 어텐션 이해하기 - 트랜스포머 아키텍처의 핵심은 논문의 제목 'Attention is All you need'에서도 알 수 있듯이 '어텐션'이다. 어텐션의 사전적 의미는 '주의'라고 번역할 수 있는데, 텍스트를 처리하는 관점에서는 입력한 텍스트에서 어떤 단어가 서로 관련되는지 '주의를 기울여'파악한다는 의미로 이해할 수 있다 - 어떻게 하면 딥러닝 모델이 관련 있는 단어를 찾도록 만들 수 있을까? 이번 절에서는 사람이 글을 읽는 방법을 들여다보며 어텐션을 직관적으로 이해할 수 있는 방법을 알아보고 어텐션의 핵심 개념인 쿼리(query), 키(key), 값(value)에 대해 살펴본 후, 코드 레벨에서 어텐션을 구현해 본다. 1) 사람이 글을 읽는 방법과 어텐션- 사람이 글을 읽을 때를 생각해 보면, 쉬운 글을 ..
[랭체인 완벽 입문] AIMessage를 사용해 언어 모델의 응답을 표현할 수 있다 1) AIMessage를 사용해 언어 모델의 응답을 표현할 수 있다 - 랭체인에서는 대화 형식의 상호작용을 표현하기 위해 AIMessage도 준비돼 있다. 예를 들어, 먼저 '계란찜 만드는 법을 알려줘'라고 문의하면 언어 모델에서 레시피를 반환한다. 이 레시피를 영어로 번역하고 싶을 때는 '영어로 번역해줘'라고 지시하면 영어로 번역된 레시피를 받을 수 있다. 이러한 대화의 흐름을 AIMessage를 통해 어떻게 표현하는지 살펴보자. - Language models 모듈의 Chat models 모듈에서는 HumanMessage, AIMessage를 사용해 언어 모델과의 대화 형식의 상호작용을 표현할 수 있다. - Lanuage models만으로는 이렇게 과거의 응답을 바탕으로 답변하게 하려면 매번..