소프트웨어-이야기/프로그래밍 언어와 프레임워크 썸네일형 리스트형 개발자를 위한 최소한의 DNS 지식 (1): 기초편 DNS resolver이란? Dns의 원리를 사용해 IP를 찾아내는 역할을 하는 클라이언트로 볼 수 있다. hosts.conf 파일이란? 특정 도메인에 대한 IP를 찾을 때, 주소 값을 어디에서 찾을지 결정하는 파일이다. resolve.conf 파일이란? OS에서 DNS resolver를 구성할 때 사용하는 파일이다. 사용하고자 하는 네임서버를 기록해둔다. resolv 파일이 다음과 같이 구성되어있다고 상상해보자. $cat /etc/resolv.conf search americano.com cafelatte.com cappuccino.com 여기서 search는 순차적으로 조회해볼 name server를 말한다. name server는 도메인에 맞는 ip 주소를 찾을 때 사용하는 서버를 말한다. reso.. 개발자를 위한 최소한의 JVM 메모리 트러블 슈팅 사전 지식 한 눈에 JVM 메모리 구조 살펴보기 인텔리제이로 메모리 디버깅하기 (1) 로컬 서버 애플리케이션 상태를 실시간으로 확인하기 Intellij > Profiler > Cpu and Memory Live Charts 로컬에서 현상을 재현했을 때, 메모리 사용량이 증가하고 있는지 확인할 수 있다. 특정 조건에서 가비지 컬렉션이 어떻게 실행되었는지 확인하고 싶을 때에는, GC를 직접 실행할 수 도 있다. 2. Heapdump 파일 분석하기 Shallow Size: 객체를 저장하는 데에 사용된 메모리 Retianed Size: 이 객체를 유지하는 데에 사용된 메모리 크기이다. 객체를 저장하는 데에 사용된 메모리 + 객체가 사용하고 있는 다른 객체를 저장하는 데에 사용된 메모리의 합으로 보면 된다. 이 크기는, G.. [ChatGPT] Function calling Function Calling이란? Chatgpt Chat Completions API를 사용하면, 질문을 하고 답변을 얻을 수 있다. Function Calling을 사용하면, 질문에 적합한 애플리케이션 함수와 매개변수를 추천받을 수 있다. 즉, 애플리케이션에서 어떤 함수를 호출하는게 좋을지 gpt에게 물어볼 수 있는 기능이라고 볼 수 있다. 예제코드 open ai에서 가져온 파이썬 예제 코드이다. 한줄한줄 읽어보면, 어떤 방식으로 사용하는 건지 쉽게 감이 온다. import openai import json # 항상 같은 날씨를 리턴하는 예시용 더미 함수이다. # 실제 개발환경에서는 상황에 맞는 코드를 구현해야한다. def get_current_weather(location, unit="fahrenh.. 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.. 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) 이번주에도 이 에러를 보게 되었다. 낯설지 않아서, 에러 노트.. 이전 1 2 3 4 ··· 8 다음