목록스터디 (175)
오늘도 공부
1. 리눅스 버전 확인리눅스 배포판과 버전을 확인하려면 아래 명령어 중 하나를 실행하세요.# 배포판 및 버전 확인cat /etc/os-release# 커널 버전 확인uname -r# 자세한 시스템 정보 확인lsb_release -a # 일부 배포판에서만 지원됨# 시스템 전체 정보 확인hostnamectl2. Let's Encrypt 인증서 갱신Let's Encrypt 인증서를 갱신하려면 Certbot을 사용해야 합니다. 아래 단계를 따라 진행하세요.(1) Certbot 버전 확인certbot --version버전이 너무 오래되었으면 먼저 업데이트하는 것이 좋습니다.(2) 인증서 갱신 실행sudo certbot renew위 명령어는 설정된 인증서들을 자동으로 갱신합니다.(3) 특정 도메인 인증서 갱신특정..
Qdrant는 고차원 벡터의 효율적인 저장과 검색을 지원하는 오픈 소스 벡터 데이터베이스이자 벡터 검색 엔진입니다. Rust로 개발되어 높은 성능과 안정성을 제공하며, 특히 AI 애플리케이션에서 임베딩된 벡터의 유사성 검색, 추천 시스템, 고급 검색 기능 구현에 유용합니다. citeturn0search6주요 특징:컬렉션과 포인트: Qdrant는 데이터를 컬렉션(Collection)과 포인트(Point)로 관리합니다. 컬렉션은 동일한 특성을 가진 벡터들의 집합이며, 각 포인트는 개별 벡터 데이터를 나타냅니다. 이를 통해 데이터를 체계적으로 분류하고 효율적으로 검색할 수 있습니다. citeturn0search3유연한 API: RESTful API를 통해 다양한 프로그래밍 언어와 쉽게 통합할 수 있..
NestJS에서 Seeder와 함께 Faker를 사용하면, 무작위 테스트 데이터를 쉽게 생성할 수 있습니다. Faker 라이브러리는 랜덤한 이름, 이메일, 주소 등을 자동으로 생성해주므로, 시드 데이터를 보다 현실적으로 만들 수 있습니다.1. Faker 라이브러리 설치먼저, @faker-js/faker를 설치합니다.npm install @faker-js/faker@faker-js/faker는 최신 버전의 Faker.js이며, 기존 faker 패키지는 유지보수되지 않으므로 사용하지 않는 것이 좋습니다.2. TypeORM Seeder에서 Faker 적용하기🔹 기본 TypeORM Seeder + Fakersrc/database/seeds/seeder.ts 파일을 만들고, Faker를 활용하여 더미 데이터를 ..
NestJS에서 Seeder(시드 데이터) 사용 방법Seeder(시드 데이터)는 데이터베이스를 초기화하거나 테스트 데이터를 삽입할 때 유용합니다. NestJS에서는 TypeORM, Prisma, Mongoose(MongoDB) 등 다양한 데이터베이스 라이브러리를 사용할 수 있으며, 각각의 방법에 따라 Seeder를 작성하는 방식이 조금씩 다릅니다.1. TypeORM을 사용하는 경우🔹 설치하기npm install @nestjs/typeorm typeormnpm install --save-dev ts-nodets-node는 TypeScript 파일을 실행하는 데 필요함.🔹 Seeder 파일 생성src/database/seeds/seeder.ts 파일을 만들고, 데이터를 삽입하는 코드를 작성합니다.impo..
NestJS에서 페이징을 구현하는 방법은 여러 가지가 있지만, 일반적으로 Offset 방식과 Cursor 방식이 많이 사용됩니다. 각각의 방식에 따라 장단점이 있으므로, 사용 목적과 성능 요구 사항에 맞게 선택하는 것이 중요합니다.1. Offset 방식 (기본적인 페이징)🔹 개념OFFSET과 LIMIT을 사용하여 특정 페이지의 데이터를 가져오는 방식page와 limit 값을 요청 파라미터로 받아서 데이터 조회✅ 장점구현이 간단하고 직관적대부분의 관계형 데이터베이스에서 지원❌ 단점페이지가 커질수록 성능이 저하됨 (OFFSET N은 N개의 데이터를 스캔해야 하므로)중간에 데이터가 삽입/삭제되면 페이지 불일치 가능성 존재💡 구현 예제 (TypeORM)@Get()async getItems( @Query('..
Story 생태계 톺아보기 ㅡ ABLO ABLO는 본인의 IP가 담긴 굿즈를 만들고 수익을 창출할 수 있는 플랫폼입니다. 파운더가 인터뷰에서 설명한 영상을 보면 들어가는 폰트 하나까지 AI로 본인이 제작할 수 있다는 게 특징이고,나아가서 로열티를 본인이 설정하고 이를 스토리 백엔드에서 처리할 수 있다는 점, 이를 통해 타 브랜드와의 IP 간 협업도 가능하다는 점을 장점으로 꼽고 있습니다 (실제로 컨텐츠 IP에서 빠질 수 없는 부분이 굿즈이기도 함)이렇게 흔한 티셔츠 하나조차도 스토리에서는 펏지, 두들과 같은 NFT처럼 IP 그 자체로서 핵심 자산이 될 수 있다는 것을 잘 설명해주고 있어서 스토리가 대체 어떤 프로젝트고, 무슨 비전을 가지고 있는지 궁금하신 분들에게 쉽게 다가오는 디앱이지 않을까 싶네요 ?..
📌 MkDocs란?MkDocs는 간단하고 빠르게 정적 웹사이트 형태의 문서를 생성하는 Python 기반의 문서 생성 도구입니다. Markdown을 사용하여 문서를 작성하며, 이를 HTML로 변환하여 정적 사이트로 배포할 수 있습니다. 특히 개발 문서화에 최적화되어 있으며, GitHub Pages 같은 서비스에 쉽게 배포할 수 있습니다.🔹 MkDocs의 주요 특징✅ Markdown 기반 → 사용하기 쉽고 가독성이 높음✅ 정적 사이트 생성 → HTML/CSS로 변환되어 빠른 로딩 속도 제공✅ Material for MkDocs 지원 → 강력한 UI 테마 적용 가능✅ 빠른 빌드 속도 → 문서가 많아도 빠르게 로딩됨✅ GitHub Pages 연동 가능 → 간단한 명령어로 쉽게 배포✅ 자동 검색 기능 지원 →..
NestJS와 MkDocs를 함께 사용하여 문서를 관리하고, Docker Compose로 이를 컨테이너화하는 방법을 단계별로 설명하겠습니다.📌 1. 프로젝트 구조다음과 같은 프로젝트 구조를 가정합니다.nestjs-mkdocs/│── backend/ # NestJS 애플리케이션│ ├── src/│ ├── package.json│ ├── Dockerfile│── docs/ # MkDocs 문서│ ├── index.md│ ├── getting-started.md│ ├── mkdocs.yml│── docker-compose.yml📌 2. NestJS 애플리케이션 설정① NestJS 프로젝트 생성NestJS 애플리케이션을 생성합니다.nestjs new bac..
Node.js와 Express를 사용하여 SaaS 형태의 유저 도메인 설정을 처리하는 시스템을 만드는 방법을 단계별로 설명해줄게. 기본적으로 유저가 자신의 도메인을 추가하면 Express 서버가 해당 도메인을 인식하고, Nginx 또는 Express의 미들웨어를 사용하여 트래픽을 라우팅하는 방식으로 진행할 거야.📌 1. 프로젝트 초기 설정1️⃣ Node.js 프로젝트 생성mkdir saas-dnscd saas-dnsnpm init -y2️⃣ 필요한 패키지 설치npm install express body-parser dotenv corsnpm install --save-dev nodemonexpress: 웹 서버body-parser: JSON 요청 처리dotenv: 환경 변수 관리cors: CORS 처리..
SaaS 형태의 플랫폼에서 유저가 자신의 도메인을 사용할 수 있도록(DNS 설정을 받아서 연결) 하려면, 다음과 같은 주요 개념과 기술을 이해하고 적용해야 합니다.1. 유저 도메인 연결 방식SaaS에서 유저가 자신의 도메인을 연결하는 방식은 크게 두 가지로 나뉩니다.✅ CNAME 방식 (권장)사용자가 자신의 도메인을 CNAME 레코드를 통해 SaaS의 서브도메인(예: user.your-saas.com)에 매핑.일반적인 방법이며, 클라우드 기반 SaaS에서 널리 사용됨.단, 루트 도메인(Apex 도메인, 예: example.com)에는 CNAME을 사용할 수 없다는 제한이 있음.설정 예시blog.example.com CNAME user.your-saas.com이 설정을 하면 blog.example.com으..
NestJS에서 추천하는 아키텍처 패턴은 여러 가지가 있지만, 대표적으로 Layered Architecture (레이어드 아키텍처), Hexagonal Architecture (헥사고날 아키텍처), Microservices Architecture (마이크로서비스 아키텍처), CQRS (Command Query Responsibility Segregation) 등의 패턴이 많이 사용돼. 각각의 패턴을 설명할게.1. Layered Architecture (레이어드 아키텍처)개요가장 기본적인 NestJS 아키텍처Controller, Service, Repository (또는 Model) 계층을 분리작은 프로젝트부터 대규모 프로젝트까지 적용 가능구성 요소Controller : HTTP 요청을 처리하고, 적절한 ..
NestJS 개발을 위해 필수적으로 알아야 할 내용을 핵심 개념 중심으로 정리해 보겠습니다1. NestJS 개요NestJS는 TypeScript 기반의 Node.js 프레임워크로, Angular 스타일의 구조를 가져와 대규모 애플리케이션 개발에 최적화된 백엔드 프레임워크야. Express.js 또는 Fastify를 내부적으로 사용하고, **의존성 주입(DI)**과 데코레이터 기반 프로그래밍을 지원해.2. 주요 개념1) 모듈 (Modules)모듈은 NestJS의 핵심 개념으로, 기능별로 코드를 분리하여 재사용성과 유지보수성을 높여줘.import { Module } from '@nestjs/common';@Module({ imports: [], // 다른 모듈을 가져옴 controllers: ..
Fail2Ban이란?Fail2Ban은 서버의 보안 강화를 위한 **침입 방지 도구(IDS, Intrusion Detection System)**입니다. 주로 **SSH, 웹 서버(Nginx, Apache), API 서버(NestJS 등)**에서 반복적인 로그인 실패나 악의적인 요청을 감지하고, 해당 IP를 차단하는 역할을 합니다.NestJS를 배포할 때 Fail2Ban을 사용하면 보안이 강화되며, 특히 Brute Force Attack(무작위 로그인 시도), DoS 공격 등을 방지하는 데 유용합니다.📌 Fail2Ban의 주요 기능기능 설명로그 감시특정 서비스(Nginx, SSH, API 등)의 로그 파일을 감시반복 로그인 실패 감지일정 횟수 이상 로그인 실패 시 감지IP 차단감지된 IP를 방화벽(ipt..

Cursor IDE에서 Rule 작성하는 방법Cursor IDE는 AI 기반의 코드 편집기이며, 다양한 확장성과 자동화 기능을 제공합니다. Rule을 작성하는 것은 Cursor에서 특정 코드 패턴을 자동 수정하거나 가이드하는 데 활용됩니다.1. Cursor Rule이란?Cursor Rule은 코드 스타일, 코드 변환 또는 특정 패턴을 탐지하여 자동 수정할 수 있는 규칙을 설정하는 기능입니다. 이를 활용하면 팀 내 일관된 코드 스타일을 유지하거나 반복적인 수정 작업을 자동화할 수 있습니다.Rule의 주요 기능특정 코드 패턴을 감지자동 코드 변환경고 또는 추천 메시지 표시특정 코드 스타일 강제 적용2. Cursor Rule 작성 방법Cursor에서 Rule을 작성하려면 .cursor/rules.json 또는..

가입 및 로그인 과정에서 access_token과 refresh_token을 이용하는 방식은 보통 OAuth 2.0 및 JWT(JSON Web Token) 기반 인증 시스템에서 사용됩니다. 이를 단계별로 자세히 설명하겠습니다.1. 회원가입 (Sign Up)회원가입 과정에서는 보통 access_token과 refresh_token이 사용되지 않습니다. 하지만 인증이 필요한 API에서는 사용될 수 있습니다.사용자가 회원가입 요청사용자가 이메일, 비밀번호, 또는 소셜 로그인(Google, Facebook 등)을 사용하여 가입 요청을 보냄.요청 예시 (REST API):POST /api/auth/signup HTTP/1.1Content-Type: application/json{ "email": "user@ex..
NestJS에서 .nvmrc 파일을 사용하여 Node.js 버전을 관리하는 방법을 단계별로 설명하겠습니다.1. .nvmrc 파일 생성 및 설정.nvmrc 파일은 프로젝트에서 사용할 Node.js 버전을 명시하는 파일입니다. 프로젝트 루트 디렉터리에 .nvmrc 파일을 생성하고, 원하는 Node.js 버전을 입력합니다.echo "18.17.0" > .nvmrc위 명령어는 .nvmrc 파일을 생성하고, Node.js 18.17.0 버전을 사용하도록 설정합니다. (버전은 프로젝트에 맞게 변경).nvmrc 파일을 열어 직접 수정할 수도 있습니다.# .nvmrc 파일 내용18.17.02. nvm(Node Version Manager) 설치 및 설정.nvmrc를 사용하려면 nvm이 필요합니다. 먼저 nvm이 설치되..
NestJS를 API로 활용하기 위한 다양한 오픈소스 보일러플레이트가 존재합니다. 아래에 몇 가지 추천할 만한 보일러플레이트를 소개해 드리겠습니다.1. NestJS REST API Boilerplate by Brocoders특징: TypeORM과 PostgreSQL을 사용하며, 인증, 권한 관리, 이메일 확인, 비밀번호 재설정, 파일 업로드, Swagger 문서화, Docker 설정 등을 포함한 종합적인 기능을 제공합니다.GitHub: https://github.com/brocoders/nestjs-boilerplate2. Awesome NestJS Boilerplate특징: TypeORM과 PostgreSQL을 기반으로 하며, JWT 인증, 역할 기반 접근 제어(RBAC), Swagger 문서화, 환경..
HTML의 img, picture, source 태그 속성과 기능 정리1. 태그개요 태그는 HTML 문서에 이미지를 삽입하는 기본적인 태그이다. self-closing 태그이며, 콘텐츠를 포함하지 않는다.기본 문법주요 속성속성 설명src이미지의 URL 또는 경로alt이미지가 표시되지 않을 경우 대체 텍스트width이미지의 너비(픽셀 또는 백분율)height이미지의 높이(픽셀 또는 백분율)title마우스를 올렸을 때 표시될 텍스트loadinglazy(지연 로딩) 또는 eager(즉시 로딩) 지정decodingasync, sync, auto(이미지 디코딩 방식)crossoriginanonymous, use-credentials(CORS 설정)referrerpolicyno-referrer, origin, s..
Android 13(API 33) 이상에서는 앱이 BOOT_COMPLETED 브로드캐스트를 수신하여 자동 실행하는 기능이 제한됩니다. 즉, 기존의 BOOT_COMPLETED를 사용하는 방식이 기본적으로 작동하지 않을 가능성이 높습니다. 하지만 몇 가지 방법을 활용하면 여전히 앱을 재부팅 후 실행할 수 있습니다.✅ Android 13 이상에서 부팅 후 앱 실행하는 방법1️⃣ 기본적인 BOOT_COMPLETED 사용 가능 여부Android 13(API 33) 이상에서도 BOOT_COMPLETED 사용은 가능하지만, 앱이 백그라운드 제한을 받지 않는 경우에만 정상 동작합니다.즉, 앱이 사용자가 직접 설치하고, 최소 1회 실행한 경우, BOOT_COMPLETED 브로드캐스트를 받을 수 있습니다.제한 사항백그라운..

1. pyenv란 무엇인가?pyenv는 다양한 버전의 Python을 손쉽게 설치하고 관리할 수 있는 도구입니다. 보통 시스템에 기본적으로 설치된 Python을 사용하면 여러 프로젝트에서 버전 충돌이 발생할 수 있습니다. 이를 해결하기 위해 pyenv를 사용하면 프로젝트별로 Python 버전을 다르게 설정할 수 있습니다.** Node의 nvm과 같은 기능으로 보면 된다. pyenv의 주요 기능여러 버전의 Python을 동시에 관리 가능프로젝트별로 다른 Python 버전을 적용 가능Python 가상환경을 생성하는 pyenv-virtualenv 플러그인 지원2. pyenv 설치 방법1) macOS에서 설치Homebrew를 사용하여 설치brew updatebrew install pyenv설치 후, pyenv가 ..
MVVM / MVC vs. 디자인 패턴 (팩토리 패턴 등)MVVM(Model-View-ViewModel)과 MVC(Model-View-Controller)는 소프트웨어 아키텍처 패턴(Architectural Pattern) 이고, 팩토리 패턴(Factory Pattern) 같은 것은 디자인 패턴(Design Pattern) 입니다.이 둘의 가장 큰 차이점은 다음과 같습니다.1. 아키텍처 패턴 vs. 디자인 패턴구분 아키텍처 패턴 (MVVM, MVC) 디자인 패턴 (팩토리 패턴 등)목적애플리케이션 전체의 구조를 정의특정 문제를 해결하기 위한 재사용 가능한 코드 설계규모애플리케이션 전반에 적용 (전반적인 소프트웨어 아키텍처를 설계)특정 기능이나 로직을 효과적으로 구현하기 위해 적용예시MVC, MVVM, MV..

안드로이드에서 카메라 라이브러리를 사용할 때 광학 줌(Optical Zoom) 또는 디지털 줌(Digital Zoom) 을 활용하여 더 멀리 보는 기능을 구현할 수 있습니다. 다만, 하드웨어적으로 지원되는 카메라 모듈(예: 망원 렌즈)이 있는지 여부에 따라 방법이 달라집니다.1. 카메라 렌즈 변경 (망원 렌즈 사용)안드로이드 Camera2 API 또는 CameraX를 사용하면 여러 개의 렌즈(예: 초광각, 기본, 망원)를 선택할 수 있습니다. 망원 렌즈를 사용하면 더 먼 거리의 물체를 촬영할 수 있습니다.✅ Camera2 API를 사용하여 망원 렌즈 선택val cameraManager = getSystemService(Context.CAMERA_SERVICE) as CameraManagerfor (cam..
✅ 1. 빌드 시 Lint 오류를 확인하고 맞추는 방법빌드시 오류가 발생하는 주요 원인은 다음과 같습니다:ESLint 규칙 위반: 개발 환경에서는 경고로 표시되지만, 빌드시 오류로 간주될 수 있음.TypeScript 오류: next dev에서는 일부 오류를 무시하지만, next build에서는 엄격하게 적용됨.서버/클라이언트 구성 오류: use client 또는 use server를 잘못 설정한 경우.React Strict Mode 또는 App Router 환경에서 더 엄격한 규칙이 적용됨.🚀 해결 방법✅ 방법 1: next lint를 빌드 전에 실행하기next build를 실행하기 전에 Lint 오류를 먼저 확인하는 것이 중요합니다.다음 명령어를 실행하여 Lint 오류를 확인하세요:bash복사편집ne..
Rust는 안전성과 성능을 중시하는 시스템 프로그래밍 언어로, 이를 기반으로 한 다양한 웹 프레임워크가 개발되고 있습니다. 주요 Rust 웹 프레임워크들의 장단점을 비교해 드리겠습니다.1. Actix-web장점:고성능: 비동기 I/O를 활용하여 높은 성능을 제공합니다.풍부한 기능: 다양한 내장 기능과 확장성을 갖추고 있습니다.활발한 커뮤니티: 꾸준한 업데이트와 지원이 이루어지고 있습니다.단점:복잡한 사용법: 초보자에게는 학습 곡선이 가파를 수 있습니다.안전성 우려: 과거에 일부 안전성 이슈가 제기된 바 있습니다.2. Rocket장점:간결한 문법: 매크로를 활용한 직관적인 라우팅을 제공합니다.동기식 모델: 동기식 요청 처리를 통해 코드의 가독성이 높습니다.안정성: 타입 안전성을 강조하여 컴파일 타임에 오류..

🔹 1. Express.js (가장 널리 사용됨)특징: 경량, 빠름, 최소한의 기능 제공장점:가장 많이 사용되는 프레임워크로 커뮤니티가 활발함미들웨어 기능으로 확장 가능초보자도 쉽게 배울 수 있음사용 사례:REST API 개발간단한 서버 구축빠르게 프로토타입 개발🔹 2. Fastify (Express보다 빠르고 효율적)특징: 높은 성능, 저지연 API 서버 구축에 적합장점:Express보다 성능이 뛰어나고, JSON 처리 속도가 빠름플러그인 시스템을 통해 확장 가능비동기(Async/Await) 방식 지원사용 사례:고성능 API 서버 개발마이크로서비스 아키텍처🔹 3. NestJS (대규모 프로젝트에 적합)특징: 타입스크립트 지원, 구조화된 개발 방식 제공장점:Angular 스타일의 모듈 기반 구조 (..
Ubuntu에서 PHP 8 이상을 설치하는 방법을 설명해드리겠습니다.시스템 업데이트bashsudo apt updatesudo apt upgrade -yPHP 저장소 추가bashsudo apt install software-properties-commonsudo add-apt-repository ppa:ondrej/php -ysudo apt updatePHP 설치기본 PHP 설치bashsudo apt install php8.3 -y주요 확장 모듈 설치bashsudo apt install php8.3-cli php8.3-fpm php8.3-mysql php8.3-xml php8.3-mbstring php8.3-curl php8.3-gd -y설치 확인bashphp -vPHP-FPM 상태 확인bashsudo s..
root 원격 접속 계정 생성MySQL 접속sqlsudo mysql -u root -p계정 생성sqlCREATE USER 'root'@'%' IDENTIFIED BY '비밀번호';권한 부여sqlGRANT ALL PRIVILEGES ON . TO 'root'@'%' WITH GRANT OPTION;FLUSH PRIVILEGES;설정 확인권한 확인sqlSHOW GRANTS FOR 'root'@'%';생성된 계정 확인sqlSELECT host, user FROM mysql.user;

Riverpod는 기존의 provider 를 개선해서 나온 업그레이드 버전이다. 정식 패키지는 https://riverpod.dev/ko/ Riverpod 안전하게 Provider 읽기 Provider를 읽는 중 더 이상 bad state가 되지 않습니다. 만약 Provider를 읽기 위한 필요한 코드를 작성하면, 당신은 유효한 값을 얻을 수 있습니다. Provider는 비동기적으로 로드된 riverpod.dev 자세한 설명은 https://velog.io/@yeahsilver/Flutter-Riverpod-Riverpod%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80-Riverpod%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-%..
Flutter 대표 카카오톡 개발자 톡을 운영중입니다. https://open.kakao.com/o/gsshoXJ Flutter 개발자 모임 #flutter #android #ios #안드로이드 #아이폰 #모바일 #선물요정소환 open.kakao.com 자바스크립트에서 많이 사용되는 Promise.all 을 다트에선 어떻게 구하는지 알아볼 예정입니다. Promise.all 은 여러개의 Promise 를 모아서 한꺼번에 처리해주는 역할을 해준다. https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Promise/all Promise.all() Promise.all() 메서드는 순회 가능한 객체에 주어진 모든 프로미스가 ..

이 내용은 https://www.udemy.com/course/vue-js-course 를 공부해서 정리한 내용입니다. 개발완료 화면은 다음과 같습니다. Input을 넣으면 텍스트에 맞게끔 이미지가 생성됩니다. vue는 선언형 형태로 개발되며 다음 세가지 flow를 가진다고 한다. Data : 데이터 초기화 Compute : 주어진 데이터를 조합해서 리턴해줍니다. Method : 만들어진 데이터를 이용해서 랜더링해서 화면을 다시 보여줍니다. Html My identicon generator Input: Output: Javascript new Vue({ el: '#app', data: { textInput: '' }, computed: { identicon: function() { return jdent..