안녕하세요.ChatGPT, Gemini 등 AI와 대화를 이어가다 보면 AI가 나와 나눈 대화를 기억하고 있는 것처럼 느껴집니다.그런데 모델 쪽에는 지난 대화가 남지 않습니다. 대화가 이어지는 것처럼 보이는 이유는 지난 대화 전체를 매번 다시 보내기 때문입니다. 이 글에서는 Ollama로 턴을 늘려 가며 입력 토큰이 얼마나 불어나는지 직접 재고, 그 구조가 비용과 컨텍스트 한계에 어떻게 이어지는지 확인해 보겠습니다.이 글은 Ollama가 설치되어 있고 모델을 하나 받아 둔 상태를 전제로 합니다.확인에 사용한 환경은 Windows 11, Ollama 0.33.2, llama3.2:1b, jq 1.8.2입니다.먼저 결론입니다모델은 지난 대화를 기억하지 않습니다. ChatGPT나 Gemini와 같은 AI들이 ..
안녕하세요.같은 프롬프트를 한국어로 보낼 때와 영어로 보낼 때 LLM이 세는 토큰 수가 다르다는 말이 있습니다. 토큰 수는 곧 요금이고 컨텍스트 한계이므로, 차이가 얼마나 되는지 알면 프롬프트를 어느 언어로 쓸지 판단할 근거가 생깁니다. 이 글에서는 Ollama의 prompt_eval_count(모델이 입력에서 읽은 조각의 개수)로 실제로 쓸 법한 프롬프트 세 쌍의 토큰 수를 재고, 그 차이를 요금과 컨텍스트로 환산해 비교해보겠습니다.이 글은 Ollama가 설치되어 있고 모델을 하나 받아 둔 상태를 전제로 합니다.확인에 사용한 환경은 Windows 11, Ollama 0.33.2, llama3.2:1b, jq 1.8.2입니다.제대로 측정하려면 막아야 할 것이 둘 있습니다토큰 수를 재는 일은 요청 한 번이..
안녕하세요.LLM에서 토큰 수는 곧 요금이고 컨텍스트 한계인데, 정작 무엇이 한 토큰인지는 우리가 정하지 않습니다. 모델이 이미 가지고 있는 어휘 목록이 정합니다. 이 글에서는 그 목록이 어떻게 만들어지는지 살펴보고, Ollama로 실제 모델의 어휘를 꺼내서 토큰 번호를 문자로 되돌려 보겠습니다.이 글은 Ollama가 설치되어 있고 모델을 하나 받아 둔 상태를 전제로 합니다.확인에 사용한 환경은 Windows 11, Ollama 0.33.1, llama3.2:1b, Git Bash, jq 1.8.2입니다.토크나이저는 AI 용어가 아닙니다토큰화는 LLM에서만 사용하는 개념은 아닙니다. 문자열을 의미 있는 최소 단위로 나누는 작업이며, 컴파일러가 소스 코드를 읽을 때부터 하던 일입니다. 자바 언어 명세 3장..
안녕하세요.이번 포스팅에서는 LLM의 동작 원리를 알아보겠습니다.아는 것처럼 보이는 이유모델을 쓰다 보면 지성을 가진 상대와 대화하는 것처럼 느껴집니다. 질문의 의도를 파악하고, 맥락을 이어 가고, 모르는 것을 물으면 모른다고도 답하기 때문입니다. 그래서 모델이 답을 알고 있는 상태에서 그것을 말해 준다고 생각하기 쉽습니다.절차만 보면 그렇지 않습니다. 모델이 하는 일은 매 순간 이 하나입니다.지금까지 주어진 텍스트 뒤에 올 가능성이 가장 높은 토큰은 무엇인가여기서 판단 기준이 가능성입니다. 사실인지가 아닙니다. 어휘 목록에 있는 모든 토큰에 각각 확률을 매기고, 그 확률에 따라 하나를 뽑아 뒤에 붙입니다. 그리고 같은 일을 반복합니다.이 차이가 실제로 문제가 되는 지점이 있습니다. 이 절차에는 빈칸을 ..
안녕하세요로컬 LLM 중 하나인 Ollama에 대해 알아보고 설치 및 API 호출하는 방법까지 정리해보도록 하겠습니다.Ollama가 무엇인가Ollama는 로컬 컴퓨터에서 LLM을 내려받아 실행하게 해 주는 도구입니다. 오픈소스로 공개되어 있습니다. 모델 파일을 직접 관리하거나 추론 서버를 따로 띄우지 않아도, 명령 한 줄로 모델을 받고 바로 대화할 수 있습니다.그리고 Ollama는 REST API 서버를 함께 띄웁니다. 설치하면 로컬에 API 엔드포인트가 열리고, 상용 API를 호출하듯 요청을 보낼 수 있습니다. 그래서 터미널에서 대화만 해 보는 용도를 넘어 코드에 붙여 쓰는 것까지 가능합니다.이름에 라마가 들어가서 로고가 라마 이미지인데 상당히 귀엽습니다.왜 로컬에서 돌리는가ChatGPT, Claude..
* 해당 포스팅은 김영한님의 '자바 ORM 표준 JPA 프로그래밍' 교재를 학습한 후 내용을 정리한 글입니다.📁 프록시 기초엔티티를 조회할 때 연관된 엔티티들이 항상 사용되는 것은 아니다.예를들어:회원과 팀 함께 출력:public void printUserAndTeam(String memberId) { Member member = em.find(Member.class, memberId); Team team = member.getTeam(); System.out.println("회원 이름: " + member.getUsername()); System.out.println("팀 이름: " + team.getName()); // 팀도 사용!}→ Member와 Team을 모두 사용하므로 ..
* 해당 포스팅은 김영한님의 '자바 ORM 표준 JPA 프로그래밍' 교재를 학습한 후 내용을 정리한 글입니다.📁 상속 관계 매핑관계형 데이터베이스에는 객체지향 언어에서 다루는 '상속'이라는 개념이 없다.대신 슈퍼타입 서브타입 관계( Super-Type Sub-Type Relationship) 라는 모델링 기법이 존재하고이 기법이 객체의 상속 개념과 가장 유사하다. 슈퍼타입 서브타입 논리 모델을 실제 물리 모델인 테이블로 구현할 때는 3가지 방법이 있다.조인 전략단일 테이블 전략구현 클래스마다 테이블 전략📁 조인 전략 (Joined Strategy)엔티티 각각을 모두 테이블로 변환하는 전략.자식 테이블이 부모 테이블의 기본 키를 받아서 기본 키 + 외래 키로 사용한다.* 주의사항객체는 타입으로 구분이 ..
* 해당 포스팅은 김영한님의 '자바 ORM 표준 JPA 프로그래밍' 교재를 학습한 후 내용을 정리한 글입니다.📁 고려사항엔티티의 연관관계를 매핑할 때는 다음 3가지를 고려해야 한다.1. 다중성다대일(N:1): @ManyToOne일대다(1:N): @OneToMany일대일(1:1): @OneToOne다대다(N:M): @ManyToMany2. 단방향, 양방향테이블: 외래 키 하나로 양쪽 조인 가능 (방향 개념 없음)객체: 참조용 필드가 있는 쪽으로만 참조 가능한쪽만 참조: 단방향양쪽이 서로 참조: 양방향3. 연관관계의 주인양방향 관계에서 연관관계의 주인을 정해야 함외래 키를 관리하는 참조주인이 아닌 쪽은 읽기만 가능주인이 아닌 쪽에 mappedBy 속성으로 주인 지정📁 다대일 (N:1)데이터베이스 테이블의..
* 해당 포스팅은 김영한님의 '자바 ORM 표준 JPA 프로그래밍' 교재를 학습한 후 내용을 정리한 글입니다. 📁 연관관계가 필요한 이유연관관계가 없는 경우 객체를 테이블에 맞추어 모델링 해야한다.그렇게 되는 경우 아래와 같은 문제점이 발생한다.테이블은 외래키로 조인을 사용해서 연관된 테이블을 찾고,객체는 참조를 사용해서 연관된 객체를 찾는다.테이블과 객체 사이에는 이런 큰 간격이 존재하기 때문에객체를 테이블에 맞추어 데이터 중심으로 모델링하면 협력 관계를 만들 수 없다.📁 단방향 연관관계@Entitypublic class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; @Colum..
📁 @Column객체 필드를 테이블 컬럼에 매핑한다.@Column(name = "name", nullable = false, length = 10)private String username;속성속성기능기본값name필드와 매핑할 테이블의 컬럼 이름객체의 필드 이름 nullable(DDL) null 값의 허용 여부 설정false 설정 시 DDL 생성 시 not null 제약조건true unique(DDL) 한 컬럼에 유니크 제약조건 columnDefinition(DDL) 데이터베이스 컬럼 정보를 직접 지정필드 타입과 방언 정보로 자동 생성 length(DDL) 문자 길이 제약조건, String 타입에만 사용255 precision, scale(DDL) BigDecimal 타입에서 사용precision: ..