목록전체 글 (1730)
오늘도 공부
Nginx에서 sites-available에 설정 파일을 추가하고 sites-enabled에 심볼릭 링크를 거는 방법을 단계별로 설명할게.1️⃣ 설정 파일 생성하기먼저, /etc/nginx/sites-available/에 새로운 설정 파일을 만든다.sudo nano /etc/nginx/sites-available/myapp아래 내용을 추가하고 저장 (CTRL + X → Y → Enter):server { listen 80; server_name yourdomain.com; location / { proxy_pass http://localhost:3000; proxy_set_header Host $host; proxy_set_header X-Real-I..
Flutter에서 MVVM 아키텍처를 기반으로 Riverpod과 Freezed를 활용하는 폴더 구조를 추천해 드리겠습니다.📂 Flutter MVVM + Riverpod + Freezed 아키텍처 폴더 구조lib/│── main.dart # 앱 진입점│── app.dart # 앱 전체 구성 (MaterialApp)│├── core/ # 공통 유틸 및 설정│ ├── config/ # 앱 환경설정 (API, 라우트, 상수 등)│ │ ├── environment.dart # 개발/운영 환경 구분│ │ ├── app_routes.dart..
Node.js로 인앱 결제 구독 검증하는 방법Google Play 및 App Store의 구독 결제를 검증하려면 서버에서 영수증을 확인하는 API를 호출해야 해.이를 Node.js 기반으로 구현하는 방법을 단계별로 설명할게.---1. 검증이 필요한 이유보안 강화: 클라이언트에서 결제 정보를 조작할 가능성을 방지자동 갱신 확인: 구독이 유지되는지 검증하여 액세스 관리환불 및 취소 확인: 유저가 환불받았는지 체크 가능---2. Google Play 구독 검증Google의 Google Play Developer API를 사용하여 구독 상태를 검증해야 해.(1) Google API 활성화1. Google Cloud Console에서 프로젝트 생성2. Google Play Android Developer API ..
Flutter 인앱 결제 구독 복원(restore) 기능 구현앱을 삭제하고 다시 설치했을 때 구독 상태를 복원하는 방법을 자세히 설명할게.---1. 구독 복원 원리iOS: 사용자는 이미 구독한 상품을 다시 구매할 수 없고, restorePurchases()를 호출하면 기존 구독 정보를 가져올 수 있음.Android: 자동으로 복원되지 않으므로, queryPastPurchases()를 호출하여 과거 구매 내역을 가져와야 함.---2. 구독 복원 코드 구현(1) 과거 구매 내역 조회 (구독 복원)Flutter에서 구독 상태를 확인하려면 queryPastPurchases()를 사용해야 해.Future restorePurchases() async { final QueryPurchaseDetailsRespons..
Flutter에서 인앱 결제 구독(IAP, In-App Purchase)을 구현하는 방법을 단계별로 설명해 줄게.---1. 패키지 설치Flutter에서 인앱 결제를 구현하려면 in_app_purchase 패키지를 사용해야 해.dependencies: flutter: sdk: flutter in_app_purchase: ^3.1.10설치 후 패키지 가져오기import 'package:in_app_purchase/in_app_purchase.dart';import 'package:in_app_purchase/store_kit_wrappers.dart';---2. Google Play 및 App Store 설정구독을 구현하려면 Google Play Console 및 App Store Connect에서..
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('..
