본문 바로가기

소프트웨어-이야기

Low-code LLM: Visual Programming over LLMs LLM이란? LLM은 Large Language Model의 약어로, 대용량 언어모델을 말한다. LLM은 대규모 데이터셋에서 학습된 인공지능 모델로, 자연어 처리 분야에서 많이 사용된다. LLM은 단어, 문장, 문단, 문서 등의 자연어 데이터를 이해하고 생성할 수 있다. 이는 대용량 데이터셋을 이용해 학습된 모델이기 때문에, 다양한 자연어 처리 작업에서 높은 성능을 보이며, 최근에는 GPT-3 등의 모델이 대표적으로 알려져있다. Low Code이란? Low code이란, 최소한의 코딩 지식으로 애플리케이션을 만들 수 있도록 하는 프로그래밍 방법이다. Low code를 사용하면, 빌딩 블록 방식으로 빠르게 프로그램을 만들 수 있다. 스크래치 같은 UI 기반의 프로그래밍 툴을 떠올려보자. 기존 LLM의 한계..
ChatGPT으로 개발 디자인 문서 작성 속도 높이기: 빠르게 다이어그램 그리기 나는 ADR을 작성할 때, 다이어그램을 첨부하는 편이다. 그래야 재택근무를 하며 구두로 논의한 것들을 한눈에 파악하기 수월하다. 그런데 draw.io 같은 도구를 사용하면 반응이 느려 생산성이 떨어지기 때문에, 문서를 빠르게 작성하기 어렵다. 본 글에서는 간단한 개발 디자인 문서에 다이어그램을 빠르게 작성하는 방법을 설명하고자 한다. 1. 플레인 텍스트 언어로 다이어그램 그리기 mermaid 혹은 plantUml 같은 플레인 텍스트 언어를 사용하면, 마치 마크다운 문법으로 다이어그램을 그리는 듯한 경험을 할 수 있다. (1) mermaid 맛보기 mermaid를 사용하면, 다음과 같은 문법으로 다이어그램을 쉽게 그릴 수 있다. mermaid는 많은 에디터에서 지원하는 문법이고, 지원하는 다이어그램 유형이..
ChatGPT에게 IfNecessary, IfNeeded 함수명의 차이를 물어보다. 함수명의 접미사로 xxxIfNecessary, xxxIfNeeded를 사용하는 경우가 있다. 이는 특수한 조건에 해당하는 경우에만 함수를 실행하게 하는 경우 사용한다. 그러나 두 함수의 차이점이 무엇인지 궁금해져 chatgpt에게 물어보았다. 둘다 필요한 경우에 작업을 수행하도록 할 때 사용된다. 그러나 둘은 미묘한 차이가 있다. xxxIfNecessary 작업이 항상 실행되지는 않는다. 특정한 조건에 해당하는 경우에만 실행한다. // 필요한 경우에만 파일에 값을 쓰는 함수 writeToFileIfNecessary() // 필요한 경우에만 이메일을 발송하는 함수 sendEmailIfNecessary() xxxIfNeeded 작업이 항상 실행되는 경우에 사용한다. 항상 작업을 해야하지만, 프로그램 연산 비..
디자인패턴 - Strategy Design Pattern Strategy Design Pattern 대부분의 기능은 동일하지만, 타입에 따라 일부 동작만 다르게 처리해야하는 경우, 유용한 디자인 패턴이다. 본 글에서는 결제 방법 (토스 혹은 포인트 결제)에 따라 장바구니 기능이 다르게 동작하는 예제를 설명할 것이다. Diagram Example public interface PaymentStrategy { public void pay(int amount); } public class PointStrategy implements PointStrategy { private String userId; public PointStrategy(String userId){ this.userId=userId; } @Override public void pay(int amou..
Kafka 컨슈밍와 재시도 카프카 이벤트를 컨슈밍할 때, 오류가 발생하는 경우 이를 재시도하는 방안에 대해서 정리해보고자 한다. 컨슈밍에 실패한 경우, 재시도 방법을 크게 Blocking과 Non-Blocking 으로 나눠볼 수 있다. 여기서 Blocking은 현재 실행중이 프로세스에서 처리를 재시도하는 것을 말한다. Non-Blocking은 큐 시스템을 활용하여, 비동기로 다시 재시도 처리하는 것을 말한다. (1) Blocking 대안 a. spring-retry를 사용하여, 원하는 횟수만큼 처리를 재시도하기 @Service public interface PaymentService { @Retryable(value = TimeoutException.class, maxAttempts = 2, backoff = @Backoff(de..
Enum 활용하기 Enum의 장점 public enum PizzaStatus { ORDERED, READY, DELIVERED; } Enum의 장점은 다음과 같다. 코드의 가독성을 높여준다. 허용하는 값의 목록을 문서화한다. 잘못된 값이 전달되는 문제를 줄일 수 있다. 실수를 줄여준다. Enum 비교하기 Enum은 ==, equals 함수로 비교할 수 있다. Enum은 JVM 에 한 개의 인스턴스만 생성되기 때문에 모든 Enum 객체는 동일한 주소값을 갖는다. testPz.getStatus().equals(Pizza.PizzaStatus.DELIVERED); testPz.getStatus() == Pizza.PizzaStatus.DELIVERED; Enum 활용하기 (1) Enum에 함수 추가하기 public enum P..
Zalando 사례를 통해 REST API 가이드 살펴보기 zalando는 패션, 신발, 뷰티 부문을 판매하는 독일의 온라인 커머스 기업이다. zalando에서 작성한 Restful API 가이드의 몇가지 사례를 통해 좋은 API를 설계하는 방법을 정리해보고자 한다. https://opensource.zalando.com/restful-api-guidelines 설계 원칙 API가 첫번째이다. 기능을 구현하기 전에 API를 미리 설계해야한다. 클라이언트와 동료들에게 사전에 API 리뷰를 받아야한다. 추가로 API를 설계할 때 고려해야하는 점은 다음과 같다. 도메인과 기능의 목적을 제대로 이해해야한다. 일반화된 리소스를 제공해야한다. 특수한 사례별로 API를 제공하는 것은 피해야한다. API는 무엇을 제공하는지만 표현해야한다. 어떻게 기능을 제공하는지는 API에 ..
Lombok 기본 생성자와 Getter/Builder 어노테이션 @Getter @Builder public class AddItemToCartCommand { private final Long userId; private final Long productId; private final Integer quantity; } Request DTO에 Getter, Builder 어노테이션만 추가하면, 다음과 같은 에러를 보게 되는 경우가 있다. Cannot construct instance of (no Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or property-based Creator) 이번주에도 이 에러를 보게 되었다. 낯설지 않아서, 에러 노트..