카테고리 보관물: 미분류

바이브 코딩 – Vibe coding

바이브 코딩(Vibe Coding)은 직관적인 감각을 중심으로 코드를 작성하는 개발 방법입니다.

최근에는 LLM의 에이전트 기능에 도움을 받는 코딩 접근 방식을 말합니다. 프로그래머가 코드를 처음부터 직접 작성하는 대신 자연어를 통해 코드를 생성하는 방식을 사용하기 시작했습니다.

실리콘밸리를 중심으로 바이브 코딩이라는 용어가 확산되고 있으며, 바이브는 ‘느낌’이라는 뜻으로 뉘앙스로는 “내키는 대로”라로 해석하는 것이 맞는 것 같습니다.

특징

  • 엄격한 사전 설계 없이 시작합니다
  • 직관적 판단으로 구조를 결정합니다
  • 빠른 프로토타이핑과 반복 개선을 합니다
  • 창의적이고 유연한 문제 해결을 추구합니다

사용하는 도구들

바이브 코딩은 도구의 도움없이 하려면 매우 힘듭니다. 에이전트 모드를 지원하는 챗봇 서비스 또는 개발 도구를 사용해야 편합니다.

  • ChatGPT Codex: 자연어로 코드 생성 요청
  • GitHub Copilot: IDE 내에서 실시간 코드 자동완성
  • Claude Code: 대화형 코드 작성 지원
  • Cursor: AI 기반 코드 에디터
  • Replit: 웹 기반 AI 코딩 환경
  • CodeWhisperer: Amazon의 AI 코딩 도구

현재 가장 인기 있는 것은 Claude Code, Cursor, ChatGPT Codex입니다.

기술부채 문제

바이브 코딩은 심각한 기술부채를 발생시킬 수 있습니다. 개발자가 면밀한 설계없이 변경에 대한 예측이나 계산 없이 구조를 만들고, 코딩 규칙을 지키지 않고 자신만의 방식으로 프로그램을 개발합니다.

당장 수행은 되지만 이런 경우에는 운영 단계에서 더 많은 노력이 필요하고 문제가 발생되었을 좋은 대처를 하기 어렵습니다.

AI가 생성한 코드를 충분히 검토하지 않고 사용하면, 코드 품질 저하, 보안 취약점, 유지보수 어려움 등의 문제가 누적됩니다. 이런 기술부채는 나중에 리팩토링이나 버그 수정 시 몇 배의 비용으로 되돌아옵니다.

소규모 프로젝트나 프로토타입 개발에서는 효과적이지만, 장기적인 유지보수가 중요한 시스템에서는 신중하게 사용해야 합니다.

마무리

AI는 미래의 변화를 예측해서 유연한 구조를 설계하거나 구조를 망치지 않고 정밀하게 부분을 변경하는 것을 잘 하지 못합니다.

작은 과제를 즉흥적으로 하거나 프로토타입을 만드는 것에 바이브 코딩을 해도 되지만 규모가 크거나 계속 운영할 서비스의 구조를 바이브 코딩에 의존하는 것은 매우 위험합니다.

Supabase 사용자 추가 에러 – Failed to create user: API error happened while trying to communicate with the server.

Supabase는 실시간 처리를 지원하는 데이터 저장 솔루션인데 backend api 기능과 데이터베이스를 묶어놓은 솔루션입니다.

서비스를 서비스로 제공하는 Saas를 구독해서 쓰거나 자체 설치해서 쓸 수 있습니다. 설치형은 docker를 이용해서 설치하게 됩니다.

그런데 설치할 꼼꼼하게 하지 않으면 문제가 생기는 것을 알았습니다.

문제

Supabase를 docker로 Ubuntu에 설치한 후에 대시보드에 접속해서 사용자를 새로 추가하려고 하니 다음과 같은 에러가 발생했습니다.

Failed to create user: API error happened while trying to communicate with the server.

에러 메세지기 매우 불친절해서 오류를 찾는데 시간이 꽤 오래 걸렸는데요 API와 관련된 부분이 잘못 설치된 것인지 확인하고 재설치까지 여러 번 해봤지만 해결되지 않았습니다.

원인 발견

여러가지를 해보다가 발견한 원인은 supabase를 설치할 때 .env를 잘못 세팅한 것이었습니다.

바로 아래의 화면에서 사용자를 추가할 때 추가되지 않는 것인데 사실 사용자 추가 뿐만 아니라 기능 몇가지가 모두 작동하지 않고 있었습니다. 아래 화면은 사용자 추가가 성공한 모습입니다.

supabase의 레파지토리에 docker를 이용해서 설치할 때 사용하도록 .env.local이라는 파일을 제공하고 있고 실제 사용할 때는 .env로 파일 이름을 바꾸고 내용을 수정해서 사용해야 합니다.

파일내용입니다.

############
# Secrets
# YOU MUST CHANGE THESE BEFORE GOING INTO PRODUCTION
############

POSTGRES_PASSWORD=your-super-secret-and-long-postgres-password
JWT_SECRET=your-super-secret-jwt-token-with-at-least-32-characters-long
ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJhbm9uIiwKICAgICJpc3MiOiAic3VwYWJhc2UtZGVtbyIsCiAgICAiaWF0IjogMTY0MTc2OTIwMCwKICAgICJleHAiOiAxNzk5NTM1NjAwCn0.dc_X5iR_VP_qT0zsiyj_I_OZ2T9FtRU2BBNWN8Bu4GE
SERVICE_ROLE_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJzZXJ2aWNlX3JvbGUiLAogICAgImlzcyI6ICJzdXBhYmFzZS1kZW1vIiwKICAgICJpYXQiOiAxNjQxNzY5MjAwLAogICAgImV4cCI6IDE3OTk1MzU2MDAKfQ.DaYlNEoUrrEn2Ig7tqibS-PHK5vgusbcbo7X36XVt4Q
DASHBOARD_USERNAME=supabase
DASHBOARD_PASSWORD=this_password_is_insecure_and_should_be_updated
SECRET_KEY_BASE=UpNVntn3cDxHJpq99YMc1T1AQgQpc8kfYTuRgBiYa15BLrx8etQoXz3gZv1/u2oq
VAULT_ENC_KEY=your-encryption-key-32-chars-min


############
# Database - You can change these to any PostgreSQL database that has logical replication enabled.
############

이때 위의 내용을 아무렇게나 입력해서 고치면 안되고 JWT_SECRET, ANON_KEY, SERVICE_ROLE은 생성규칙이 있어 그에 맞게 생성된 것을 사용해야 합니다.

여기서 문제가 되는 것이 key를 생성하는 도구가 따로 있다는 것입니다.

생성하는 방법은 아래의 설치 가이드 페이지에 보면 생성하는 도구가 페이지 안에 붙어 있습니다. 페이지에서 버튼을 몇 번 눌러 사용할 값을 바꾼 후에 바뀌는 것들 중 한 세트를 골라서 .env에 넣으면 됩니다.

https://supabase.com/docs/guides/self-hosting/docker

위와 같은 화면입니다.

.env를 위의 페이지에서 생성한 값으로 바꾸고 나서 다음과 docker를 다운시킵니다.

docker compose down

그리고나서 컨테이너를 다시 실행하면 됩니다.

docker compose up -d

WSL2를 항상 켜두는 방법: 백그라운드 유지 문제 해결하기

문제 상황

WSL2(Windows Subsystem for Linux 2)를 PC나 Mini PC에서 리눅스 서버처럼 계속 실행해두고 싶었습니다. 하지만 시간이 지나면 자동으로 종료되어 서버로 사용할 수 없는 문제가 발생했습니다.

여러가지를 해봤지만 모두 실패했는데 성공한 방법을 공유합니다.

시도했던 해결책들

1. 백그라운드 프로세스 실행

WSL2는 기본적으로 백그라운드에서 실행 중인 프로세스가 없으면 자동으로 종료될 수 있습니다. 백그라운드 프로세스를 실행해 놓았지만 효과가 없었습니다.

2. 시스템 절전 모드 비활성화

Windows 시스템이 절전 모드나 하이버네이트로 전환되면 WSL2가 중단될 수 있습니다. 절전 모드를 사용하지 않도록 설정해 보았지만 역시 해결되지 않았습니다.

3. WSL 설정 문제 확인

특정 서비스(예: Redis) 실행 시 WSL이 중단되는 경우가 있다고 하여 확인했지만, 이런 문제는 없었습니다.

4. 리소스 과부하 체크

WSL2가 과도한 메모리나 CPU를 사용할 경우, Windows가 이를 강제로 종료할 수 있습니다. 예를 들어, vmmem 프로세스가 높은 리소스를 소모하는 경우가 있는데, 이런 경우 자동 종료될 수 있습니다. 하지만 이 문제도 아니었습니다.

5. 기본 쉘 설정 확인

기본 쉘 설정이 잘못되어 실행되지 않거나 종료되는 경우도 있습니다. 예를 들어, 삭제된 쉘(zsh 등)을 기본으로 설정한 경우 문제가 발생할 수 있지만, 이 문제도 아니었습니다.

해결 방법

여러 방법을 시도한 끝에 다음 명령어를 실행하면 WSL2가 백그라운드에서 계속 실행되는 것을 확인했습니다:

wsl --exec dbus-launch true

이 명령어는 WSL 프로세스를 활성 상태로 유지해줍니다. D-Bus 세션을 시작하고 이를 통해 WSL의 백그라운드 프로세스가 계속 실행되도록 합니다. 이렇게 해도 2주 정도 지나면 종료될 수 있습니다.

추가로 아래의 페이지에 가서 systemd 스크립트를 실행해 둡니다.

https://github.com/DamionGans/ubuntu-wsl2-systemd-script

그리고 인도우의 홈 디레토려에 .wslconfig 파일을 생성하고 아래의 내용을 넣습니다. 메모리 크기 같은 것은 적절히 원하는 값으로 변경하세요.

[wsl2]

# Limits VM memory to use no more than 4 GB, this can be set as whole numbers using GB or MB
memory=8GB
vmIdleTimeout=-1
#networkingMode=mirrored

# Sets the VM to use two virtual processors
processors=4

결론

WSL2를 리눅스 서버처럼 지속적으로 사용하려면 여러 설정이나 최적화가 필요할 수 있습니다. 그중에서도 wsl --exec dbus-launch true 명령어가 가장 효과적인 해결책이었습니다. 이 방법으로 WSL2를 지속적으로 실행하여 서버 용도로 안정적으로 사용할 수 있게 되었습니다.

데이터 엔지니어와 데이터 사이언티스트의 차이

데이터 엔지니어(Data Engineer)와 데이터 사이언티스트(Data scientist, 데이터 과학자)에 대한 차이에 대한 포스트입니다.

GPT나 Claude에게 물어보면 잘 대답해 주겠지만 그냥 설명하기 쉽게 표로 만들어 봤습니다.

질문 항목데이터 엔지니어데이터 사이언티스트 (데이터 과학자)
무슨 일을 하는가?데이터 처리에 대한 일을 한다.데이터 분석과 활용에 대한 일을 한다.
한마디로 하는 일을 쉽게 설명하면?데이터 저정, 흐름, 이용에 대한 것을 관리한다.데이터의 분석, 재활용을 통해 부가가치 창출과 서비스 고도화를 한다.
일과 시간에 하는 일은?대부분의 시간을 데이터 플랫폼을 다루는데 쓴다.
S3, BigQuery, Hadoop/Hive/Spark
대부분의 시간을 데이터를 분석하고 모델을 만드는데 쓴다.
통계분석, ML/AI 모델링, 모델 성능 분석
주로 사용하는 도구는?개발툴 보다는 터미널, 관리툴 등을 주로 사용한다.개발툴 보다는 주피터노트북이나 모델링을 위한 스크립트 파일을 작성할 수 있는 편집기를 주로 쓴다.
데이터와 관련된 어떤 일을 하는 것인가?ETL과 같은 업무에 깊이 관여하며 데이터가 잘 전송되고 정합성 문제가 없는지 확인하는 것에 중점을 둔다.ETL 보다는 Feature Engineering이나 aggregation 더 깊이 관여하며 정합성 보다는 좋은 통계적 인사이트를 찾거나 모델을 만드는데 더 중점을 둔다.
포지션(일자리) 수요데이터 관련 인프라 유지가 필요한 회사에서만 포지션이 있다.데이터 분석, 데이터 과학을 서비스에 적용할 일이 있는 회사에만 필요
경력이 많아짐에 따라 발전 하는 것어느 정도 경력이 쌓이면 더 발전할 것은 없고 사용하는 솔루션의 종류가 운영 경험이 쌓인다.데이터로 부터 얻을 수 있는 인사이트에 통찰이 생기며 다양한 모델링의 종류와 경험이 쌓인다.
급여 수준일반적으로 개발자 보다 조금 높다일반적으로 개발자 보다 많이 높다

Nginx로 userid (쿠키 세션 ID) 자동 생성하기

세션ID, 쿠키ID

쿠키에서 넣어놓는 세션ID(사용자ID)를 속칭 쿠키ID라고 합니다.

웹사이트나 포털사이트에 비로그인 접속자들을 추적하기 위해서 사용합니다.

구글, 네이버, 온라인광고, 이커머스 등의 사이트에서 사용자의 행적을 추적할 때 가장 많이 사용합니다.

이 비식별 키를 기준으로 사람들의 행동을 쌓아놓은 로그데이터인 행적데이터(로그 데이터)가 빅데이터에서 말하는 대량 데이터의 핵심 중 하나입니다. 이 로그를 분석하면 인사이트가 나옵니다.

로그인하지 않는 경우에는 추천시스템도 이 데이터를 기본으로 만들며 세그멘테이션, 데이터 교환 같은 것도 다 이것을 기준으로 합니다.

생성 방법

예전에는 백엔드서버에서 생성을 해서 쿠키로 생성해주는 방식을 많이 썼지만 NginX에 userid라는 모듈이 있어서 이 일을 대신해주니 편리합니다. NginX 없이 바로 웹서비스를 하는 경우에는 구현이 필요합니다.

보통 랜덤값을 생성해서 16바이트 또는 32바이트 16진수값을 문자열로 바꿔서 넣습니다.

사용자의 IP나 특별한 정보를 넣기도합니다만 쓸모가 없어서 요즘은 잘 하지 않습니다.

userid on;
userid_name uid;
userid_domain example.com;
userid_path /;
userid_expires 365d;
userid_p3p 'policyref="/w3c/p3p.xml", CP="CUR ADM OUR NOR STA NID"';

만료기간은 기본 1년으로 되어 있지만 넉넉하게 5년쯤으로 넣어 놓으면 됩니다.