전체 글 20

GitHub Actions CI/CD 파이프라인 구축 중 발생한 문제와 해결 방법

최근 프로젝트에서 GitHub Actions를 활용하여 CI/CD 파이프라인을 구축하는 과정에서 다양한 문제를 겪었습니다. 이 글에서는 그 과정에서 마주친 문제들과 해결 방법, 관련 개념 및 유사 명령어를 공유합니다.문제 1: 원격 리포지토리와 로컬 저장소의 히스토리 충돌문제 상황로컬 저장소를 GitHub 리포지토리에 푸시할 때 다음과 같은 오류가 발생했습니다:fatal: refusing to merge unrelated histories원인 분석Git은 기본적으로 관련성이 없는 두 저장소의 히스토리를 병합하지 않도록 설계되었습니다. 이는 실수로 다른 프로젝트의 히스토리를 병합하는 것을 방지하기 위함입니다.해결 방법--allow-unrelated-histories 옵션을 사용하여 히스토리를 강제 병합할 ..

FastAPI와 SQL 데이터베이스 연동하기: 가이드

오늘은 FastAPI와 SQL 데이터베이스를 연동하는 방법에 대해 자세히 알아보겠습니다.FastAPI는 현대적이고 빠른 (고성능) 웹 API를 구축하기 위한 Python 프레임워크로, 높은 성능과 자동 문서화 기능을 제공합니다. 이 글에서는 FastAPI 애플리케이션에서 SQL 데이터베이스를 사용하는 방법을 단계별로 설명하겠습니다.목차소개필요한 도구 설치하기파일 구조 만들기데이터베이스 모델 정의하기Pydantic 모델 생성하기데이터베이스 유틸리티 함수 작성하기CRUD 연산 구현하기의존성 주입 설정하기API 엔드포인트 구현하기전체 애플리케이션 실행하기실전 팁과 보안 고려사항에러 트러블슈팅요약 및 추가 학습 자료소개웹 애플리케이션에서 데이터 관리는 필수적입니다. FastAPI는 SQLAlchemy와 같은 강..

FastAPI에서 비동기 프로그래밍의 이해와 활용

FastAPI는 최신 Python의 async/await 구문을 적극 활용하여 고성능 API 서버를 쉽게 구축할 수 있도록 도와줍니다. 이 글에서는 FastAPI 공식문서의 비동기(async) 관련 내용을 정리하고, 비동기 프로그래밍의 개념과 FastAPI에서 이를 어떻게 활용할 수 있는지 알아보겠습니다.1. 비동기 프로그래밍이란?비동기 프로그래밍은 I/O 작업(예: 데이터베이스 호출, 외부 API 요청, 파일 입출력 등)과 같이 완료되는 데 시간이 걸리는 작업을 처리할 때, 다른 작업을 블로킹하지 않고 동시에 실행할 수 있게 하는 방식입니다.동기(synchronous) 코드에서는 작업이 순차적으로 처리되어, 하나의 작업이 끝나야 다음 작업이 시작됩니다.반면, 비동기(asynchronous) 코드는 as..

개발자 성장 일기: Day 5 - 상속, 다형성, 접근 제어

소개오늘은 Java의 객체지향 프로그래밍(OOP)의 핵심 개념 중 상속, 다형성, 접근 제어자에 대해 학습했습니다. 각각의 개념과 관련된 주요 질문과 답변을 정리하여 블로그 글로 작성합니다.질문과 답변 정리1. 상속(Inheritance)질문: 상속은 무엇이며, 어떤 장점이 있나요?답변:상속은 부모 클래스의 속성과 메서드를 자식 클래스가 물려받는 것으로, 코드의 재사용성과 확장성을 높이는 데 유용합니다.장점:코드 재사용: 공통 코드를 부모 클래스에 정의하고, 자식 클래스에서 사용.유지보수 용이: 부모 클래스의 수정만으로 자식 클래스에도 동일한 변경 적용.다형성 지원: 부모 클래스 타입으로 다양한 자식 객체를 다룰 수 있음.예제:class Animal { void sound() { Sys..

개발자 성장 일기: Day 4 - Java 클래스와 객체 지향 개념

소개오늘은 Java의 클래스와 객체 지향 프로그래밍(OOP) 개념에 대해 학습한 내용을 정리합니다. 특히, 클래스의 구성 요소인 인스턴스 변수와 지역 변수, 생성자, 그리고 this 키워드의 다양한 용도에 대해 배우며, 객체 지향 프로그래밍에 대해 배웠습니다.질문과 답변 정리1. 인스턴스 변수와 지역 변수의 차이특징 인스턴스 변수 지역 변수선언 위치클래스 내부, 메서드 외부메서드, 생성자, 또는 블록 내부생존 기간객체가 존재하는 동안 유지해당 블록 실행 시 생성되고, 종료 시 소멸초기화 여부자동 초기화 (기본값)자동 초기화되지 않음. 사용 전 명시적 초기화 필요사용 범위클래스 내 모든 메서드선언된 블록 내부코드 예제class Car { // 인스턴스 변수 String model; int ..

FastAPI + Alembic에서 “테이블이 없다”, “권한이 없다” 등 문제를 해결해나간 여정

배경FastAPI + 비동기 SQLAlchemy를 사용해 프로젝트를 진행 중이었다.Alembic을 통해 DB 마이그레이션(스키마 관리)을 하려 했는데, 계속 “테이블이 없다 (UndefinedTableError)”, “스키마 권한이 없다 (InsufficientPrivilegeError)” 등 문제가 발생했다.Windows 환경에서 PostgreSQL 설치 후, 개발 계정 fastapi_user를 만들어 쓰고 있었음.그래서 여러 차례에 걸쳐 ChatGPT와 Q&A를 진행하면서 문제를 해결해 나갔다. 이 포스팅은 그 과정을 요약해 정리한 것이다.문제 상황 요약Alembic 마이그레이션을 실행해도 DB에 matches 테이블이 생기지 않는다.FastAPI 애플리케이션이 Match 모델로 쿼리하면 “‘matc..

개발자 성장 일기: Day 3 - Java 배열과 문자열 학습

소개오늘은 Java에서 배열과 문자열을 다루는 방법을 학습하고, 실습을 통해 이를 활용하는 방법을 익혔습니다. 특히, Arrays 클래스의 주요 메서드와 문자열의 주요 메서드에 대해 집중적으로 공부했습니다. 배열 (Array)1. 배열 생성배열은 Java에서 참조형 데이터 타입으로, 크기가 고정된 데이터 구조입니다.명시적으로 new를 사용하는 경우:int[] arr = new int[5]; // 크기 5인 배열 생성값을 직접 초기화하는 경우 new 생략 가능:int[] arr = {1, 2, 3, 4, 5}; // 값 지정과 동시에 배열 생성2. 배열 다루기 (Arrays 클래스)Java의 Arrays 클래스는 배열을 효율적으로 처리할 수 있는 다양한 메서드를 제공합니다.(1) equals두 배열의 내용..

개발자 성장 일기: Day 2 - Java 제어문과 반복문 학습

소개오늘은 Java의 제어문과 반복문을 학습한 날입니다. 프로그램의 흐름을 제어하고, 반복적인 작업을 효율적으로 처리할 수 있는 방법을 익혔습니다. 간단한 예제를 통해 이해도를 높이며 실습을 진행했습니다.핵심 학습 내용1. 조건문if 문: 조건에 따라 코드 실행 여부를 결정.if-else 문: 조건이 참일 때와 거짓일 때 다른 코드 실행.if-else if 문: 여러 조건을 순차적으로 검사.switch 문: 특정 값에 따라 여러 코드 블록 중 하나를 실행.예제: 짝수/홀수 판별import java.util.Scanner;public class EvenOdd { public static void main(String[] args) { Scanner scanner = new Scanner(..

PostgreSQL 서버 켜기부터 기초 동작까지 (CMD 기준)

PostgreSQL은 강력한 오픈 소스 데이터베이스 관리 시스템(DBMS)입니다.이번 포스팅에서는 Windows CMD를 활용하여 PostgreSQL 서버를 실행하고, 기본적인 데이터베이스 작업을 수행하는 방법을 단계별로 설명하겠습니다.1. PostgreSQL 설치 확인PostgreSQL이 설치되어 있는지 확인하려면 CMD에서 다음 명령어를 실행하세요.psql --versionPostgreSQL 버전이 출력되면 설치가 완료된 상태입니다.출력 예:psql (PostgreSQL) 15.32. PostgreSQL 서버 시작Windows에서 PostgreSQL 서버를 수동으로 시작하려면 다음 단계를 따릅니다.PostgreSQL이 설치된 경로로 이동PostgreSQL의 기본 설치 경로는 일반적으로 C:\Progr..

개발자 성장 일기: Day 1 - Java 기초 복습

소개오늘은 Java를 다시 배우고 코딩 테스트 준비를 시작하는 첫날입니다. 하루 1시간씩 투자하여 기초를 다지고 알고리즘 문제 해결 능력을 키우는 것을 목표로 하고 있습니다. 오늘 배운 내용과 실습을 정리해 보았습니다.핵심 학습 내용1. 환경 설정IntelliJ IDEA를 개발 환경으로 설정하고 사용 준비를 완료.JDK 설치를 확인하여 Java 개발 환경이 제대로 동작하는지 점검.JavaBasicsDay1 프로젝트를 생성하고 "Hello, World!" 프로그램을 성공적으로 실행.2. Java의 기본 요소 이해데이터 타입: 다음과 같은 주요 데이터 타입을 학습.int, double, char, boolean, String.변수: 변수 선언 및 초기화를 학습.상수: final 키워드를 사용하여 상수를 정의..