essay 2023 일이든 공부든 하루에 열몇 시간씩 몰두할 수 있던 시절은 끝났다. 이제는 돌봄과 배움을 병행하며 분 단위로 시간을 관리해야 하는 사람이 되었다. 짧게 분절된 시간을 그러모아 남들 하는 만큼 해내려면 남들보다 몇 배는 더 집중해야 했다. 그런 점에서 올해의 배움은 분투의 연속이었다.
Javascript 우아한테크코스 6기 프리코스 과정에서 배운 세 가지 디자인 패턴 같은 문제를 더 나은 방법으로 풀어내기 위해 노력하는 과정에서 배우는 것들이 있다. 디자인 패턴도 그 중 하나다. 이번 글에서는 우아한테크코스 6기의 프론트엔드 부문 프리코스를 수강하면서 익히게 된 싱글톤 패턴, 책임연쇄 패턴, 템플릿 메서드 패턴을 자바스크립트 코드와 함께 소개한다.
AI GPT 언어 모델에서 생성 데이터를 JSON 형태로 주고 받게 해주는 Function Calling 살펴보기 그동안 ChatGPT 등 GPT 기반 서비스에서 JSON 처럼 규격화 된 응답을 얻어내려면 많은 수고를 감수해야 했다. 최근에 OpenAI가 공개한 Function Calling은 이러한 불편 없이 API 호출 만으로 JSON 데이터를 얻어낸 뒤, 백엔드에서 원하는 함수를 실행하게 해준다. 그 방법을 예시와 함께 알아보도록 하자.
AI OpenAI API를 애플리케이션의 백엔드 데이터 에이전트로 활용한 KinoQuizAI 개발 후기 ChatGPT를 계기로 생성AI(Generative AI)는 대화형 에이전트나 컨텐츠 생성 모델로서 유용성이 입증된 상태다. 하지만 이것에 포함되어 있는 방대한 학습 정보 자체를 일종의 데이터 소스로 활용하는 방안은 없을까? 이 의문을 해소하기 위해 만든 KinoQuizAI 프로젝트의 개발 과정과 문제 해결 경험, 그리고 후기를 정리했다.
AI ChatGPT에서 채팅 만으로 웹 애플리케이션을 만드는 프롬프트 활용 사례와 시사점 ChatGPT로 앱을 만든다? 가능한 일일까? 그래서 실험해 보았다. 오직 프롬프트 입력 만으로 ChatGPT에서 웹 애플리케이션 구현에 필요한 모든 코드를 생성하고 이를 실제로 동작시켜 보았다. 그 실험의 과정과 결과, 그리고 이를 통해 얻게 된 시사점을 자세히 소개한다.
AI ChatGPT를 비롯한 대화형 AI 서비스에서 더 좋은 결과물을 얻게 해주는 프롬프트 엔지니어링 (Prompt Engineering) 대화형 인공지능이 생성하는 결과물의 품질을 높이는 프롬프트 엔지니어링(Prompt Engineering)을 소개한다. 프롬프트(Prompt)란 무엇인가, 왜 이것의 올바른 엔지니어링이 필요한가를 알아보고, ChatGPT를 통해 직접 시험해 본 엔지니어링 사례를 소개한다. 아울러 그 과정에서 얻은 프롬프트의 작성 요령도 함께 안내할 것이다.
docker Docker Swarm에서 시크릿(Secret)을 환경변수로 주입할 때 꼭 필요한 쉘 스크립트(Shell Script) 소개 도커 스웜(Docker Swarm)의 시크릿(Secret)은 오직 파일 마운트 방식으로만 환경변수를 주입할 수 있다. 따라서 이 방식을 지원하지 않는 도커 이미지에는 시크릿(Secret)을 환경변수에 사용하기 어렵다. 하지만 쉘 스크립트(Shell Script)와 도커파일(Dockerfile)을 조합하면, 안 되는 것을 되게 만들 수 있다. 그 방법을 소개한다.
docker Docker Swarm에서 시크릿(Secret)으로 패스워드 등 보안 정보 다루기 도커 스웜(Docker Swarm)에서 환경변수나 컨픽(Config)은 평문 상태로 저장되고 오가기 때문에 보안이 필요한 데이터를 다루기에는 적합하지 않다. 암호화되지 않은 채로 전송되거나 보관되어서는 안 되는 패스워드, 인증서, 키파일, 기타 텍스트 및 바이너리 파일을 다룰 때엔 시크릿(Secret)을 이용해보자.
docker Docker Swarm에서 컨픽(Config)으로 컨테이너에 설정값 삽입하고 관리하기 이번 글에서는 도커 스웜(Docker Swarm)에서 컨테이너 기반 서비스를 운영할 때 필요한 설정값이나 파일을 간편하게 삽입할 수 있는 컨픽(Config) 기능을 살펴본다. 보안에 민감하지 않은 클러스터 단위의 공통 설정 정보가 있다면 이 기능을 한 번 활용해보자.
docker Docker Swarm에서 서비스(Service) 생성하고 다루기 도커 스웜(Docker Swarm)에서 서비스(Service)는 배포의 기본 단위이자 단일 이미지 기반의 애플리케이션 운영 단위에 해당한다. 이 글에서는 서비스(Service)와 태스크(Task)의 기본 개념을 소개한 뒤, 클러스터에서 서비스(Service)를 생성하고 다루는 방법을 안내한다.
system 분산 시스템의 내결함성을 높이는 뗏목 합의 알고리즘(Raft Consensus Algorithm)과 정족수(Quorum) 개념 알아보기 뗏목 합의 알고리즘(Raft Consensus Algorithm)은 다수 노드로 이루어진 분산 시스템에서 전체 노드의 최신화 및 동기화, 그리고 내결함성(False Tolerance)을 동시에 구현하기 위해 만들어진 합의 알고리즘의 일종이다. 이번 글에서는 이 알고리즘의 동작 원리와 정족수(Quorum) 개념을 간략히 살펴볼 것이다.
docker Docker Swarm의 주요 용어, 활성화 방법 및 노드(Node) 관리법 살펴보기 이번 글에서는 도커 스웜(Docker Swarm)의 주요 용어와 시작 방법을 입문자의 관점에서 간략히 소개한다. 여러 대의 호스트를 이용하여 다중 노드 클러스터를 구축하고, 여기에 포함된 노드들을 관리하는 데에 필요한 방법도 함께 안내한다.
docker Docker Compose에서 각 서비스 컨테이너에 쓰이는 환경변수를 다루는 방법 도커 컴포즈(Docker Compose)를 사용할 때 각 서비스 컨테이너에 필요한 환경변수들을 어떻게 하면 효율적으로 다룰 수 있을까? 이번 글에서는 도커 컴포즈(Docker Compose)에서 환경변수를 다루는 방법들을 알아보고, 각 방법이 실제 배포 상황에서 어떤 우선순위를 갖는지, 그리고 주의해야 할 점은 무엇인지를 살펴보자.
docker Docker Compose에서 Ghost 4 기반 블로그를 Ghost 5로 간편하게 업그레이드하기 최근에 업데이트된 Ghost 5는 오직 MySQL 8 만을 공식 지원하게 되었다. SQLite3이나 MariaDB를 이용하던 사용자라면 운영 환경에 대한 큰 변화가 불가피해졌다. 그러나 도커를 이용하면 이런 변화에 유연하게 대응할 수 있다. 이번 글에서는 도커 컴포즈(Docker Compose)로 배포한 Ghost 4 기반 블로그를 Ghost 5로 간편하게 업그레이드 하는 방법을 다룬다.
Github 깃허브(GitHub)에서의 오픈 소스 프로젝트 기여를 위한 초보자 가이드 이번 글에서는 깃허브(Github)에서 오픈 소스 프로젝트에 기여하는 방법을 안내한다. 작지만 개인적으로 뜻깊었던 첫 기여 경험담을 예시로 삼았다. 거창한 작업이 아니라도 괜찮다. 사소한 용기가 많은 사람들에게 유익한 결과를 안겨줄 수 있다.
Google Apps Script Google Apps Script로 네이버 뉴스를 채팅방으로 전송하는 서버리스 뉴스봇 만들기 최근에 네이버 뉴스 RSS를 대신할 실시간 뉴스 모니터링 도구를 만들었다. 이번 글에서는 Google Apps Script로 서버리스 뉴스봇인 "Naver News Fetching Bot"을 개발하게 된 계기와 구체적인 구현 방법, 그리고 개발 과정에서 겪은 이슈들과 해결 방법을 상세히 소개한다.
kubernetes 쿠버네티스에서 JSON 데이터 처리를 위한 JSONPath 사용법 수십, 수백 개의 노드와 리소스가 돌아가는 상용 환경에서 내게 필요한 정보만 골라내어 확인할 수 있는 방법이 있다. 바로 JSONPath를 이용하는 것이다. 이번 글에서는 JSONPath의 기본 문법과 사용법을 알아보고, 이를 쿠버네티스 환경에서 활용하는 방법을 소개한다.
kubernetes Certified Kubernetes Administrator(CKA) 자격증 합격 후기 및 유용한 팁 (2022.02, v1.23) CKA는 쿠버네티스 클러스터 관리 능력을 검증하는 대표적인 국제 자격증 중 하나다. 엔지니어 경험이 없는 초심자로서 이 CKA 자격증 시험에 도전하여 합격한 과정과 후기를 공유한다. 같은 시험을 준비하시는 분들께 도움이 될 만한 최신 내용과 팁도 함께 소개한다. (최근 수정일 : 2023년 2월 2일)
kubernetes 쿠버네티스에서 명령형 접근법과 선언형 접근법의 차이 이해하기 kubectl create와 apply의 차이는 무엇일까? 이걸 이해하려면 명령형 접근법과 선언형 접근법의 개념을 이해해야 한다. 이번 글에서는 쿠버네티스에서 쓰이는 두 가지 접근법의 차이를 알아보고, 특히 선언형 접근법을 채택한 관리 환경에서 주의해야 할 점을 함께 들여다보기로 한다.
kubernetes 쿠버네티스에서 반드시 알아야 할 서비스(Service) 유형 파드는 특성상 생성될 때마다 내부 IP 주소가 계속 변화하게 된다. 쿠버네티스의 서비스(Service)는 이러한 파드에 탑재된 애플리케이션이 외부와 상호 통신이 가능하도록 만들어준다. 이번 글에서는 쿠버네티스 클러스터 운영에 반드시 필요한 서비스 유형을 살펴본다.
kubernetes 쿠버네티스의 워크로드 리소스 살펴보기 이번에는 쿠버네티스의 대표적인 워크로드 리소스인 레플리카셋(ReplicaSet), 디플로이먼트(Deployment), 스테이트풀셋(StatefulSet), 데몬셋(DaemonSet)을 살펴본다. 아울러 이들의 실행 구역을 논리적으로 분할하는 네임스페이스(Namespace)의 역할도 함께 들여다 본다.
kubernetes 멀티 컨테이너 파드의 대표적인 디자인 패턴들 쿠버네티스에서 때로는 하나의 파드 안에 여러 컨테이너를 함께 운영해야 할 수 있다. 메인 컨테이너의 기능 향상이나 안정성 확보, 또는 의존성 이슈를 체크할 때 유용할 수 있는 멀티 컨테이너 파드(Multi-Container Pod)의 대표적인 디자인 패턴들을 알아본다.
kubernetes 파드(Pod)의 개념과 생명 주기, 그리고 상태 진단을 위한 프로브(Probe) 활용 쿠버네티스 클러스터에서 이용되는 최소 단위의 객체인 파드(Pod)에 대해 자세히 알아본다. 파드의 개념과 종류, 생명 주기, 그리고 프로브(Probe)를 이용한 상태 진단법을 살펴보기로 하자.
kubernetes 쿠버네티스의 클러스터 개념과 구성 컴포넌트 알아보기 이번 글에서는 쿠버네티스의 핵심 제어 단위인 클러스터(Cluster)와 구성 컴포넌트를 알아본다. 클러스터의 개념과 내부 구조를 먼저 살펴보고, 컨트롤 플레인(Control Plane)과 노드(Node)를 구성하는 주요 요소들을 자세히 들여다 보자.
kubernetes 쿠버네티스와 컨테이너 오케스트레이션, 그리고 핵심 설계 사상 쿠버네티스를 이해하려면 우선 이것이 어떤 문제를 해결하고자 하는지를 알아야 한다. 이 글에서는 컨테이너 오케스트레이션(Container Orchestration)의 개념과, 이것의 구현체로서 쿠버네티스가 가진 핵심적인 설계 사상들을 살펴본다.