전체 글
-
[더 나은 ChatGPT 사용법] 초식LLM/ChatGPT 2024. 2. 6. 01:07
더 효과적으로 ChatGPT를 사용하는 방법 본 블로그는 Oreily의 ChatGPT shortcut을 의역했습니다. Task에 앞서 구체적인 context와 role, background를 알려주자 AI가 focus하고 기대치를 설정하는데 도움을 준다. Template 예를 들어 아래의 template을 활용하면 context와 role, background를 제공 했다 할 수 있다. 부분을 내 상황에 맞게 치환한다. You will act as a with an expert background in . You are helping a who has the required expertise and a strong dedication to . Your task is to . Begin by . 문제해결에..
-
[java] CompletableFuture 문법JAVA 2024. 1. 31. 22:14
비동기 프로그래밍 업무중에 @Async 애노테이션이 붙은 메서드 안에 있는 Exception이 동작하지 않은 일이 있었다. 정상화하기 위해 구글링을 하는데, 기본 개념이 부족해서 자료 읽기에 애를 먹었다. 기본 문법을 정리해본다. (문법은 백기선 님의 JAVA 8 강의 내용을 요약했습니다.) 우선 결론부터 JAVA는 스레드를 관리하는 Executor라는 것을 제공. Executor를 이용해 스레드 생성, 작업, 끼어들기, 기다리기, 종료 같은 작업 가능. Future는 스레드 작업을 결과로 return한 값, Future api로 스레드에서 아직 작업중인지 확인, 작업이 끝나서 나온 결과 호출, 멀티스레드 결과 관리 가능 CompleteableFuture는 자바 8에 등장한 Future 확장 기능 Cal..
-
배포 방식 정리 - Rolling, Blue-Green, Canary개발공부/CS지식 2024. 1. 24. 14:34
1. Basic Deployment (기도 메타) 모든 노드를 한꺼번에 배포하는 방식이다. EC2 배포 배포 시 서비스가 죽을 수 있다. 배포 중에 중단이 발생할 수 있고 롤백 프로세스가 느릴 수 있다. 장점 가격이 가장 저렴하고 배포 방식이 단순하다. 특정 시간에만 사용하는 서비스 비즈니스나 수익과 관련 없는 단순한 서비스 단점 가장 위험한 배포 방식 → 서비스가 죽을 수 있다. 2. The Multi-Service Deployment 다수의 노드가 다중의 서비스로 동시에 배포되는 방식이다. 버전 관리가 필요한 어플리케이션, 사용하지 않는 시간에만 배포 장점 basic 보다는 덜 위험, 저렴하고 배포 방식이 단순하다. 단점 중단 방지 기능이 없고, 롤백도 느리다. 3. Rolling Deployment..
-
[springboot] Datasource Proxy로 SQL query logging 하기Spring Boot/환경설정 2024. 1. 11. 21:17
1. Hibernate 기본 쿼리 로그 기본적으로 JPA를 사용하면 쿼리가 어떻게 찍히는지 확인이 필요하다. application.yml에 hibernate 옵션을 넣어주면 가독성 좋은 query를 찍어보며 개발할 수 있다. 아래는 쿼리찍히는 예시 2. Datasource Proxy 운영 환경에서 유용한 확장 기능을 제공하는 Datasource proxy(https://github.com/jdbc-observations/datasource-proxy)를 사용하면 더 풍부한 SQL query를 찍을 수 있다. [대표적으로 쓸만한 기능] slow query가 발생하면 INFO대신 WARN이나 ERROR로 로그를 찍수 있다. 쿼리 호출 앞뒤로 어떤 작업 하도록 설정 할 수 있다. hibernate에서는 ?표로..
-
artillery로 부하테스트 하기Spring Boot/환경설정 2023. 10. 29. 01:49
1. 설치 // 설치 npm install -g artillery@latest // 설치 확인 artillery version 2. 사용법 : https://www.artillery.io/docs/reference/cli/run // 터미널에서 바로 실행하기 artillery quick --count 100 -n 50 http://localhost:8080/health // script로 실행하기 artillery run test.yaml // json 파일로도 실행할 수 있다. artillery run test.json // 테스트 결과 report로 만들기 artillery run --output test-run-report.json test.json // 테스트 결과 report html로 보기 a..
-
[docker] docker compose로 데이터베이스 한번에 N개 띄우기Spring Boot/환경설정 2023. 10. 23. 15:53
하나의 프로젝트에서 N개의 DB 연결이 필요한 상황 Local 실행환경 구축을 위해서 아래와 같이 구성했다. 1. Docker 이미지를 띄울때 SQL문으로 DB를 생성한다. 2. MYSQL_TCP_PORT 값 설정으로 컨테이너 내부 port 설정을 변경 해준다. version: '3' services: mysql: platform: linux/amd64 image: "public.ecr.aws/docker/library/mysql:5.7.38" environment: - MYSQL_ALLOW_EMPTY_PASSWORD=yes - MYSQL_TCP_PORT=33060 - autoReconnect=true - characterEncoding=UTF-8 - sslMode=DISABLED - TZ=Asia/Se..
-
Java Exception Handling (e.printStackTrace())JAVA/자바공부 2023. 10. 20. 01:20
업무 중 코파일럿에 의해 Exception catch문과 e.printStackTrace()가 자동으로 생성되는 일이 있었다.팀장님의 이거 쓰면 안되요! 라는 리뷰가 달렸는데, 왜 안될까?Exception이란 무엇일까? e.printStackTrace의 정체는 무얼까? Exception 정의프로그램 실행중 정상적인 흐름을 방해하는 이벤트일반적으로 Exception이 발생하면 현재 코드 블럭이나 메서드의 동작이 멈춘다.Exception의 역사약 40년 전 최초 프로그래밍 언어에는 Exception이라는 개념이 없었다.C 언어에서는 비정상적인 종료를 알리고자 -1 또는 null을 반환하는 방식으로 동작했다.함수를 호출하고 실수로 -1, null 값 확인을 놓치는 실수들이 속출1985년, C++ 언어가 등장해..
-
[JPA] 간단하게 OneToMany 데이터 API 구현하기 - @Embeddable, @Embedded, @ElementCollection 활용하기Spring Boot/JPA 2023. 10. 15. 23:14
요구사항 레시피를 저장하고 조회, 삭제할 수 있는 API를 구성한다. JPA 연관관계 설정 없이 OneToMany 데이터 모델링 방법을 정리한다. API Spec 레시피 저장 api POST localhost:8881/api/recipe/new # requestBody { "name": "Fresh Mint Tea", "description": "Light, aromatic and refreshing beverage, ...", "ingredients": ["1 inch ginger root, minced", "1/2 lemon, juiced", "1/2 teaspoon manuka honey"], "directions": ["Place all ingredients in a mug and fill wit..