개발
-
__init__.py 를 이용한 모듈 관리개발 2024. 5. 8. 10:17
파이썬 3.3 이전에는 __init__.py 는 디렉토리가 파이썬 패키지임을 명시할 때 필요했었다면 이제는 __init__.py 가 없어도 없어도 자동으로 디렉토리를 패키지로 인식한다. 대신에 __init__.py 를 사용하면 패키지 내부에 있는 클래스 선언을 하나로 모아줄 수 있는 장점이 있다. 이런 프로젝트 구조를 가지고 있고├── main.py└── phone ├── galaxy.py └── iphone.py galaxy.py 와 iphone.py 에서 각각 클래스를 선언했다면# galaxy.pyclass Galaxy: def __init__(self) -> None: pass# iphone.pyclass Iphone: def __init__(self) -> No..
-
파이썬 - 리스트 컴프리헨션개발 2024. 5. 3. 13:12
개인적으로 파이썬은 가독성이 좋은 언어라고 생각하는데 가독성을 돕는 대표적인 기능이 리스트 컴프리헨션이다 리스트 요소들에 제곱 값을 새로운 리스트로 만들기 위해선 아래 코드처럼 map 이라는 함수를 사용해서 구현하는데numbers = [1, 2, 3, 4, 5]square_numbers = map(lambda num: num**2, numbers) 리스트 컴프리헨션을 사용하면 함수없이 구현할 수 있다. square_numbers = [num**2 for num in numbers] 처음 사용할 때는 문법이 익숙하지 않을수도 있다. 연산이 먼저 나오고 뒤에 for 문이 나오는 문법이 대부분 프로그래머한테 익숙한 형태는 아니다. 그런데 자주 사용하다보면 따로 함수를 만들지 않아도 되기 때문에 편하게 쓸 수..
-
OLAP vs OLTP 데이터베이스개발/기술 2024. 4. 16. 11:36
데이터베이스는 어떤 기능에 초점을 두느냐에 따라 OLAP, OLTP 데이터베이스로 나뉜다. 좀 거칠게 단순화하면 쓰기 성능은 떨어지더라도 읽기 성능을 극대화 할때는 OLAP (Online Analytic Processing), 읽기 성능이 떨어지더라도 안정적인 트랜잭션을 제공하는데 초점을 둔다면 OLTP (Online Transaction Processing) 데이터베이스로 구분할 수 있다. 사용 케이스에 따라 구분할 수 있는데 은행, 온라인 쇼핑, 항공기 예약처럼 사용자의 쓰기 데이터가 빠르게 처리돼야 하는 경우 OLTP 데이터베이스를 사용하고 데이터 분석 툴처럼 복잡한 쿼리 검색이 빠르게 처리돼야 하는 경우 OLAP 데이터베이스를 사용한다. MySQL, PostgreSQL, Maria DB 처럼 우리..
-
Clickhouse 가 빠른 이유개발/기술 2024. 4. 11. 11:48
Clickhouse 는 Online Analytic Processing(OLAP) 에 최적화된 데이터베이스로 다른 데이터베이스에 비해 월등한 검색 속도를 자랑한다. 이번 포스트에서는 어떤 요소들 때문에 Clickhouse 가 속도가 빠른지 정리했다 Column oriented DBMS Clickhouse 는 칼럼형 데이터베이스를 사용하고 있다. 칼럼형 구조가 생소할 수 있는데 먼저 이것과 반대되는 개념인 로우형(Row-oriented) 데이터베이스에 대해서 먼저 알아보자 Row-oriented DBMS 같은 행에 있는 데이터 단위로 저장되는 형태다. MySQL 과 PostgreSQL 이 대표적인 Row 형 데이터베이스다 만약 (시간, 주소, 전화번호) 정보를 저장하는 데이터베이스라면 세가지 데이터를 같은..
-
VIP, HA개발/기술 2023. 11. 27. 22:16
VIP VIP 는 가상의 주소를 의미한다. 하나의 컴퓨터에 물리 ip 주소와는 별개로 새로운 가상 IP 주소를 설정할 수 있다. VIP 를 설정하면 같은 네트워크 내에서 설정한 vip 주소에 대한 요청을 받을 수 있게 된다. 하지만 아무 주소나 정할 수 있는건 아니고 몇가지 규칙이 있다. 네트워크 범위 네트워크의 서브넷 설정에 맞는 주소를 골라야한다. inet 192.168.1.4/24 로 설정된 경우 서브넷에 따라서 192.168.1.x 범위의 주소를 가상의 주소로 설정할 수 있다. 주소충돌방지 너무 당연하지만 기존에 있던 주소와 겹치면 안된다 HA(High Availability) VIP 는 고가용성 서비스를 구성할 때 주로 사용된다. 실제 사례를 알아보기 위해 먼저 데이터베이스의 프라이머리, 스탠드..
-
chat gpt function, langchain개발/인공지능 2023. 11. 27. 20:14
Browsing Chat GPT(4.0) 한테 서울 날씨에 대해서 물어보자. Chat GPT는 특정 시점의 데이터를 기준으로 학습했기 때문에 현재 서울 날씨에 대한 데이터는 알 수 없다. 그래서 Chat GPT 는 Browsing 기술을 활용해 외부 사이트에서 날씨를 읽어와서 대신 답을 해준다. 사진의 예제에선 네이트 날씨를 참조해서 답변했다. 로직을 다이어그램으로 그려보면 위와 같다. APP 에서 받은 질문으로 외부에 날씨 API 를 조회하고 답변하는 식이다. 오픈되지 않은 데이터에 대한 요청 그런데 요청이 오픈된 데이터가 아니라면 어떨까? 위의 그림처럼 APP 에서 GameDB 에 유저가 몇명 있냐고 물어보자. 그러면 Chat GPT는 GameDB 가 뭔지 모르기 때문에 답변할 수 없다. 함수 정보 ..
-
가상 스레드(Virtual Thread) 그리고 스프링개발/기술 2023. 11. 24. 20:19
1. 가상스레드란? 가상 스레드를 이해하려면 물리 스레드와 가상스레드의 차이점을 이해해야 한다. 1.1 물리스레드 학교 수업시간에 배웠던 스레드 개념이다. 하드웨어 기반 cpu 코어에서 실행되는 스레드다. 각 코어는 한번에 하나의 스레드를 실행할 수 있으며 멀티코어는 동시에 여러 스레드를 실행할 수 있다 시스템 리소스 시스템 리소스를 직접 사용한다. cpu 하나를 독차지 하고 있는 스레드라고 보면 된다. 가상스레드에 대한 개념이 없는 상태에선 이게 무슨 당연한 소리냐 싶을 수 있는데 일단 이렇게만 알고 있자. 계산집약적 작업에 효율적 직접 하드웨어 리소스를 사용하기 때문에 높은 CPU 사용량을 뽑아낼 수 있으므로 계산 집약적 작업에 적합하다 운영체제에서 관리 운영체제에서 관리되므로 컨텍스트 스위칭 비용이..
-
Embedding, LangChain개발/인공지능 2023. 11. 13. 20:36
ChatGPT 에게 학습 데이터 전달하기 일반적으로 우리가 ChatGPT 에게 질문을 하는 것은 이미 정보를 학습한 LLM 모델에게 질문을 하는 것이다. 그런데 어떤 LLM 이든 모든 정보를 미리 학습하고 있을수는 없다 없다. 이럴 때는 LLM에서 응용할 수 있도록 정보를 미리 알려줘야 예상했던 답변을 얻을 수 있다. 예를 들어 올해 개봉한 영화 오펜하이머에 대해서 알려달라고 하면 Chat GPT 3.5 는 2004년도에 개봉된 “Eternal Sunshine of the Spotless Mind” 라는 영화에 대해서 알려준다. 원래 필요한 내용과 완전히 다른 내용을 말하고 있다. 하지만 프롬프트를 적절하게 사용해서 오펜하이머에 대한 내용을 전달하면 만족할만한 답변을 받을 수 있다. Embedding 오..