개발

    sqlc 사용기: Go + PostgreSQL, SQL 기능을 하는 함수 생성

    sqlc 사용기: Go + PostgreSQL, SQL 기능을 하는 함수 생성    1. Introsqlc라 최고라는 말을 듣고 적용해보았다!.. 이 도구는 SQL 스키마와 쿼리를 기반으로 타입 안전한 Go 코드를 생성해주어, 안정성과 개발 생산성을 높여준다고 합니다. 이번 글에서는 sqlc를 사용하여 PostgreSQL 데이터베이스와 상호작용하는 방법에 대해 살펴보겠습니다.2. sqlc 설정sqlc를 사용하기 위해서는 먼저 sqlc.yaml 설정 파일을 생성해야 합니다. 이 파일에는 데이터베이스 엔진, 쿼리 파일, 스키마 파일, 그리고 생성된 Go 코드의 출력 위치 등을 지정합니다.version: "2"cloud: project: "xxxxxxxxxxx"sql: - engine: "postgresq..

    ssh config, shell script로 배포 시간 1/10으로 단축하기

    ssh config, shell script로 배포 시간 1/10으로 단축하기  0. Intro생성형 AI로 일적으로나 생활적으로 도움을 많이 받고 있는 요즘, 업무 차원에서 개발 속도를 어떻게 하면 더욱 향상시킬까 하는 고민이 많은데요.하지만 때로는 우리가 선택한 개발 및 배포 환경이 개발 속도를 방해하곤 합니다. 저 역시 최근에 그런 경험을 했습니다.1. 기존 배포 방식의 단점이전에 저는 docker + GitHub Actions + ECS + ECR 조합으로 배포 파이프라인을 구축했습니다. 이 방식은 코드를 푸시하는 순간 자동으로 배포가 이루어지고 github에서 종합적으로 관리할 수 있다는 장점이 있었죠. 하지만 실제로 develop 브랜치에 푸시되고 github action으로 docker 이미..

    배포 자동화: Go + Docker + ECS + Fargate + ECR + Github Action

    배포 자동화: Go + Docker + ECS + Fargate + ECR + Github Action  1. Intro인프라에 대해 공부해보다가 Go + Docker + ECS + Fargate + ECR + Github Action으로 CI/CD를 구성했다는 블로그 글을 보고, 따라해 보았다. 2. Dockerfile 만들기Dockerfile은 Docker 이미지를 생성하기 위한 설정 파일입니다. Go + gin backend를 위한 Dockerfile을 만들어 보겠습니다.FROM golang:alpine AS builderENV GO111MODULE=on \ CGO_ENABLED=0 \ GOOS=linux \ GOARCH=amd64WORKDIR /buildCOPY go.mod go...

    Golang으로 대량 API 요청 처리: Excel 파일에서 데이터 읽기부터 병렬 처리까지

    Golang으로 대량 API 요청 처리: Excel 파일에서 데이터 읽기부터 병렬 처리까지 안녕하세요, 오늘은 Go 언어를 사용하여 Excel 파일에서 데이터를 읽어와 대량의 API 요청을 처리하는 방법에 대해 알아보겠습니다. 이 프로그램은 입력할 Excel 파일에서 데이터를 읽어와 body에 넣어서 API에 요청을 보내고, 응답을 파일에 저장하는 과정을 수행합니다. 1. 과정Excel 파일에서 데이터 추출하기 (API request body에 넣을 값들)API 요청 (병렬 처리를 위한 고루틴 사용 - WaitGroup)응답 데이터 정렬 by index결과를 파일로 저장 (csv)로깅 (응답 데이터, 응답 시간 로그 파일 생성)2. Excel 파일에서 원하는 데이터 추출하기먼저, Excel 파일에서 데이..

    Golang으로 백엔드 개발 도전기

    Golang으로 백엔드 개발 도전기 1. Intro 간단한 백엔드를 만들일이 있어서 고민을 하다가, 유튜브 알고리즘에 뜬 아래 두 동영상을 보고 Golang Backend를 공부해야겠다고 다짐했습니다. 약 4년전, 공군 개발병 복무 시절, Golang + go gin 으로 간단한 REST API를 사지방에서 만들어보고 초당 몇번의 요청이 가능한지 테스트해보고 빨라서 놀랐던 기억이 있었는데, 그 시절이 떠오르네요. [Golang 도입, 그리고 4년 간의 기록 / Golang과 함께 서버 레이턴시를 500배 개선한 후기] https://www.youtube.com/watch?v=75X_eBW0moghttps://www.youtube.com/watch?v=NVqVS64qClk2. 왜 Golang인가?간단한 백..

    2024년 인기있는 60가지 AI 도구들: AI 마법사가 되어보자!

    2024년 인기있는 60가지 AI 도구들: AI 마법사가 되어보자!  참고https://x.com/eyishazyer/status/1807732216484536399안녕하세요, 여러분! 👋 오늘은 제가 트위터를 구경하다 우연히 발견한 신기하고 유용한 정보를 여러분과 공유하려고 해요. 2024년에 인기있는 60가지 AI 도구들이에요! 🚀💼 저도 지금 하나씩 사용해보고 있는 중인데, 몰랐던 도구들이 진짜 많기도하고 신기해서 여러분께 꼭 알려드리고 싶었어요! (제가 사용해본 것 형광펜 표시해볼게요)1. 아이디어 발상 도구들 💡Claude, ChatGPT, Gemini, Bing Chat, Perplexity 같은 AI 챗봇들이 아이디어 뱅크 역할을 해줘요! 상상력의 한계를 넓혀보세요!2. 웹사이트 제작..

    [Cursor IDE + Claude 3.5 Sonnet]: VS Code + GitHub Copilot에서 갈아탄 후기

    [Cursor IDE + Claude 3.5 Sonnet]: VS Code IDE + GitHub Copilot에서 갈아탄 후기 1. Intro안녕하세요, 여러분! 오늘은 제가 Cursor IDE + Claude 3.5 Sonnet으로 개발 도구를 변경한 후기에 대해 이야기해볼까 해요. 🚀저는 그동안 Visual Studio Code와 GitHub Copilot을 사용해왔어요. 꽤 만족하면서 쓰고 있었죠. 그런데 오늘 일하다가 개발자로 일하는 친척에게서 연락이 왔어요! 😮  2. Cursor IDE 사용해보기https://www.cursor.com/https://claude.ai/new코딩 입문 때부터 계속 쓰던 VS Code에서 벗어나기가 두려웠지만, 한 번 사용해보자는 실험 정신도 있었고 열정적인..

    Github: Repository에 있는 특정 파일의 커밋 기록을 모두 삭제하기

    아래 명령어에 파일명(./docker.sh)을 넣고 실행하면, 원격 레포지토리에 push 하면 해당 파일에 대한 기록이 모두 사라진다..! 실수로 중요한 정보를 원격 레포지토리에 올린 경우 유용하게 사용할 수 있을 것 같다. 그리고 .gitignore을 통해 원격 레포지토리에 올라가지 않도록 잘관리하자!$git filter-branch -f --index-filter "git rm --cached --ignore-unmatch [파일명]" --prune-empty -- --allgit push --force --all // push 해주면 원격 저장소에 잘 반영됩니다.https://cobi-98.tistory.com/48  [Git] GitHub 저장소의 특정 파일, 디렉토리 커밋기록을 모두 제거하기G..

    iOS Flutter 프로젝트에서 flutter_downloader 1.11.4 통합하기

    iOS Flutter 프로젝트에서 flutter_downloader 1.11.4 통합하기 https://pub.dev/packages/flutter_downloader#_development-note_ 커뮤니티 & 프롬프트 기반 이미지 생성 AI 앱을 AppStore에 배포하려고 했으나, 흰 화면이 뜨고 앱이 crash 나는 문제가 발생했습니다. 원인을 찾지 못해 방황하던 중에 은인을 만나서 원인을 파악하고 해결을 시도해보았습니다 flutter_downloader 플러그인, 특히 버전 1.11.4를 iOS Flutter 프로젝트에 통합하는 과정에서 ios 관련 설정이 누락되어 발생한 오류였습니다. flutter_downloader란 무엇인가? flutter_downloader 플러그인은 Flutter 애..

    카카오 로그인 통합하기: Android Key Hash와 iOS Bundle ID 문제 해결 가이드

    서론 카카오 로그인 통합의 중요성 및 일반적인 문제 소개 이 글에서 해결할 주요 에러: "invalid android_key_hash or ios_bundle_id or web_site_url" Java 버전 확인 및 JDK 설치 필요성: 카카오 로그인 통합을 위한 첫걸음으로, 올바른 Java 개발 환경 설정이 필수 Java 버전 확인 방법 명령어: java --version JDK 설치 방법 Homebrew를 이용한 OpenJDK 11 설치 명령어: brew install openjdk@11 JDK 경로 설정 .zshrc 파일을 통한 경로 설정 명령어: echo 'export PATH="/opt/homebrew/opt/openjdk@11/bin:$PATH"' >> ~/.zshrc 설정 적용: sourc..

    AWS EC2, RDS 연결하기 :: VPC와 함께하는 NestJS 백엔드 배포, Prisma Migrate 문제 해결

    AWS EC2, RDS 연결하기 :: VPC와 함께하는 NestJS 백엔드 배포, Prisma Migrate 문제 해결 안녕하세요 여러분! 오늘은 제가 NestJS 백엔드 배포 중 겪었던 문제와 그 해결 과정에 대해 이야기하려 합니다. 아마 여러분 중에서도 Prisma Migrate를 사용하면서 문제에 부딪히신 분들이 계실 것 같아, 제 경험을 공유하고자 합니다. 1. 배경 및 문제점 NestJS 프로젝트를 개발 중, Prisma를 사용하여 데이터베이스 관리를 하고 있었습니다. 개발을 마무리하고 AWS에 배포하는 과정에서 Prisma Migrate를 실행했으나 예상치 못한 오류가 발생했습니다. npx prisma migrate dev --name init --schema=./prisma/schema.pr..

    AWS EC2 인스턴스 지역 변경하기 (AMI 이미지 사용하기), Amazon Machine Image

    AWS EC2 인스턴스 지역 변경하기 (AMI 이미지 사용하기), Amazon Machine Image AWS에서 EC2 인스턴스를 사용하다보면 서버의 지역을 변경하고 싶은 경우가 있습니다. 저는 ap-southeast-2 (시드니) region에서 서버를 운영하다가 이를 ap-northeast-2 (서울) region으로 옮기고 싶었습니다. 문제 상황 github action에서 CI/CD 환경을 구성하던 도중에 아래와 같이 코드를 실행했을 때 다음과 같은 오류가 발생했습니다: - name: Deploy to AWS CodeDeploy run: aws deploy create-deployment --application-name output-codedeploy --deployment-group-name..

    EC2와 Docker 환경에서 SWAP Memory를 활용한 NestJS 어플리케이션의 'JavaScript heap out of memory' 문제 해결

    EC2와 Docker 환경에서 NestJS 어플리케이션의 'JavaScript heap out of memory' 문제 해결 안녕하세요 여러분, 오늘은 RAM이 2GB로 설정된 t2.small AWS EC2에 Docker로 배포한 NestJS 어플리케이션에서 JavaScript heap out of memory 오류를 마주했을 때의 경험과 해결 방안에 대해 이야기하려 합니다. 1. 오류 코드 docker로 이미지화된 NestJS 애플리케이션을 실행시켰을 떄 다음과 같은 오류 메시지가 발생했습니다 [19:0x65441a0] 53911 ms: Mark-sweep (reduce) 977.0 (1000.1) -> 975.4 (995.6) MB, 1180.0 / 0.0 ms (+ 292.9 ms in 55 ste..

    AWS EC2, Route 53과 가비아를 활용한 NestJS 서비스 SSL 인증서 적용 방법

    AWS EC2, Route 53과 가비아를 활용한 NestJS 서비스 SSL 인증서 적용 방법 안녕하세요, NestJS를 사용하는 개발자 여러분! 오늘은 AWS EC2에서 구동중인 NestJS 웹 서비스에 가비아에서 구매한 도메인을 연결하고, SSL 인증서를 적용하는 과정을 단계별로 설명해 보려고 합니다. https://sslhosting.gabia.com/service 가비아: 대한민국 No.1 SSL 보안서버 인증서 개인정보를 암호화하여 데이터를 안전하게 보호하고, 웹사이트의 신뢰도를 높입니다 sslhosting.gabia.com 1. 가비아에서 도메인 구매 먼저, 필요한 도메인을 가비아에서 구매해줍니다. 원하는 도메인 이름을 검색 후 사용 가능하면 구매를 진행합니다. 2. AWS EC2에서 Nest..

    Prisma + NestJS :: 쇼핑몰 데이터베이스 모델링 및 관계 분석, 일대일관계, 일대다관계, 다대다관계

    Prisma + NestJS :: 쇼핑몰 데이터베이스 모델링 및 관계 분석 안녕하세요! 이번 포스트에서는 ShoppingMall 서비스의 Prisma 데이터베이스 스키마를 다루며, 각 테이블 간의 관계와 그에 따른 중요한 제약조건을 살펴볼 예정입니다. 데이터베이스의 설계는 서비스의 핵심적인 기능과 성능에 큰 영향을 미치므로, 잘 이해하고 설계하는 것이 중요합니다. 1. 주요 테이블 및 관계 1.1. User User 테이블은 서비스의 사용자에 관한 정보를 담당합니다. 각 사용자는 여러 주문을 가질 수 있으며, 일부 사용자는 가게(Store) 정보와 일대일 관계를 형성합니다. model User { id Int @id @default(autoincrement()) storeId Int? @unique ....

    Docker 실시간 로깅: docker logs -f 명령의 효율성에 대하여

    Docker 실시간 로깅: docker logs -f 명령의 효율성에 대하여 안녕하세요, 여러분! 오늘은 Docker 환경에서의 NestJS 개발 경험을 공유하고자 합니다. 특히, 컨테이너 로깅과 관련된 docker logs -f 명령의 중요성 및 효율성에 중점을 둘 것입니다. 1. docker logs 명령의 기본 먼저, docker logs 명령은 Docker 컨테이너의 로그를 출력하는 데 사용됩니다. NestJS 애플리케이션 같은 백엔드 서비스를 개발할 때, 이 명령은 매우 유용합니다. 애플리케이션에서 발생하는 모든 로그를 실시간으로 확인할 수 있기 때문입니다. 2. -f 플래그의 마법 -f 플래그 (또는 --follow)는 docker logs 명령에 실시간 스트리밍 기능을 추가합니다. 즉, 새로..

    Docker 내에서의 'exec format error' 오류 해결하기

    Docker를 사용하여 애플리케이션을 컨테이너화하면서 exec format error라는 오류에 직면한 적이 있나요? 이 오류는 스크립트나 바이너리 파일의 형식이 컨테이너 내에서 실행되기에 적합하지 않을 때 발생합니다. 여기에서는 이 문제의 원인과 해결 방법에 대해 간략하게 알아보겠습니다. 문제 상황 Dockerfile 내에서 다음과 같은 명령어를 사용하여 AWS 자격 증명을 설정하는 스크립트를 실행하려고 했습니다: COPY .env .env COPY set_aws_credentials.sh set_aws_credentials.sh RUN chmod +x set_aws_credentials.sh && ./set_aws_credentials.sh 제가 현재 운영중인 EC2(Amazon linux2)에서 이..

    NestJs에서 AWS S3 연동 시 발생하는 'CredentialsProviderError' 오류 해결하기

    NestJs에서 AWS S3 연동 시 발생하는 'CredentialsProviderError' 오류 해결하기 안녕하세요, NestJs 개발자 여러분! 오늘은 AWS SDK와 연동하면서 마주칠 수 있는 CredentialsProviderError 오류와 이를 해결하는 방법에 대해 자세히 알아보겠습니다. 문제 상황 NestJs를 사용하여 AWS S3와의 연동을 진행하던 중 아래와 같은 오류 메시지가 출력되었습니다. { "code": "CredentialsProviderError", "message": "Could not load credentials from any providers", ... } 원인 파악 이 오류는 AWS SDK가 필요한 자격 증명을 찾을 수 없을 때 발생합니다. 자격 증명은 주로 ~/...

    AWS S3에서 'AccessControlListNotSupported' 오류 해결하기

    AWS S3에서 'AccessControlListNotSupported' 오류 해결하기 안녕하세요, 개발자 여러분! 오늘은 AWS S3와 연동할 때 마주칠 수 있는 AccessControlListNotSupported 오류와 이를 해결하는 방법에 대해 자세히 알아보겠습니다. 문제 상황 AWS S3에 파일을 업로드하거나 버킷과 관련된 작업을 수행할 때 다음과 같은 오류 메시지를 받았다면, 여러분도 이 문제에 부딪혔을 가능성이 높습니다. { "code": "AccessControlListNotSupported", "message": "The bucket does not allow ACLs", "data": null, "exception": { "name": "AccessControlListNotSupport..

    NestJS + Prisma :: 예외를 두려워 마라! NestJS AllExceptionFilter의 활용 전략, 공통 응답 구조, Exception 생성해서 사용하기

    NestJS + Prisma :: 예외를 두려워 마라! NestJS AllExceptionFilter의 활용 전략, 공통 응답 구조, Exception 생성해서 사용하기 서론 현대 응용 프로그램에서는 사용자에게 관련성 있는 명확한 에러 메시지를 전달하기 위해 구조화된 에러 처리가 중요한 역할을 합니다. NestJS와 Prisma 같은 프레임워크를 사용하면 이를 원활하게 효율적으로 구현할 수 있습니다. 사용자 정의 예외, 응답 DTO, 그리고 NestJS와 Prisma의 강력한 기능을 어떻게 활용하는지 자세히 알아봅시다. 1. ExceptionCode 구조 사용자 정의 예외에 들어가기 전에 우리의 에러 코드에 대한 구조화된 형식을 만드는 것이 중요합니다. 코드에서 제공하는 내용은 다음과 같습니다: type..

    Flutter :: GoRouter

    1. 화면 등록 import 'dart:convert'; import 'package:culture_app/detail_screen.dart'; import 'package:culture_app/home_screen.dart'; import 'package:culture_app/model/festival_model.dart'; import 'package:culture_app/onboarding_screen.dart'; import 'package:go_router/go_router.dart' show GoRoute, GoRouter; final router = GoRouter( routes: [ GoRoute( path: '/', builder: (context, state) => const Onboa..

    Flutter :: Riverpod 개념, ProviderScrope, Model, State, StateNotifierProvider, Notifier, ConsumerStatefulWidget, ConsumerState, ret.watch()

    1. Riverpod의 장점 특징 1.1. 안전한 컴파일 Provider를 사용할 때 처럼 더 이상 ProviderNotFoundException 예외가 발생하지 않고, 로딩 상태를 처리하는 것을 걱정하지 않아도 됩니다. Riverpod를 사용하면 코드가 컴파일되어 작동합니다. 1.2. 제한없는 Provider Riverpod는 Provider에서 영감을 얻었지만 동일한 유형의 여러 Provider를 지원하는 것과 같은 주요 문제 중 일부를 해결합니다. 비동기 Provider를 기다리고 있습니다. 어디에서나 Provider를 추가할 수 있습니다. 1.3. Flutter에 의존하지 않습니다. Flutter에 의존하지 않고 Provider를 생성/공유/테스트합니다. 여기에는 BuildContext 없이 Pr..

    Flutter :: Riverpod / GoRouter / state, provider, notifier 선언 / 페이징 / http

    0. pubspec.yaml 에 기초 프로젝트 설정하기 name: culture_app description: A new Flutter project. publish_to: 'none' version: 1.0.0+1 environment: sdk: '>=3.0.0

    Flutter :: Color 저장해서 변수로 재사용하기

    아래와 같이 자주 쓰는 색을 변수로 저장하여, 재사용성이 높아져 코드의 유지보수성이 증가한다. import 'package:flutter/material.dart'; // Basic Color const Color kWhiteColor = Color(0xFFFFFFFF); const Color kBlackColor = Color(0xFF000000); // System Color const Color kSystemErrorColor = Color(0xFFFC444F); const Color kSystemSuccessColor = Color(0xFF30E181); const Color kSystemWarningColor = Color(0xFFFFD362); // Color Pallette const Col..