전체 글 4

[회고] CI/CD 파이프라인 구축 및 자동화 배포 후기

1. CI/CD 파이프라인 설계 (Data Flow)Local (Dev Environment)개발자는 로컬에서 docker-compose up -d pace-db pace-redis를 통해 인프라를 띄우고, IntelliJ에서 서버를 실행하여 개발합니다.코드 수정 후 develop 브랜치에 push 하면 파이프라인이 시작됩니다.GitHub Actions (CI)Build: 소스 코드를 체크아웃하고 Dockerfile을 기반으로 이미지를 빌드합니다.Push: 빌드된 이미지를 Docker Hub 레지스트리로 전송합니다. (push)AWS EC2 (CD)Connect: SSH(appleboy/ssh-action)를 통해 서버에 접속합니다.Pull: Docker Hub에서 최신 이미지를 pull 받아옵니다.En..

카테고리 없음 2026.02.06

[회고] Cloudtype 배포 성공기: MariaDB와 환경 변수 트러블슈팅

로컬 환경(Local)에서 개발하던 스프링 부트 프로젝트를 실제 클라우드 환경(Cloudtype)에 배포하며 겪은 시행착오와 해결 과정을 정리합니다. 이번 경험을 통해 인프라 설정과 데이터베이스 연결의 핵심 원리를 깊이 이해하게 되었습니다.1. 개요프로젝트명: Pace배포 환경: Cloudtype (Spring Boot, MariaDB)주요 기술: Java 21, Spring Boot 3.x, Spring Data JPA, MySQL2. 주요 트러블슈팅 (Troubleshooting)2.1 환경 변수 주입 문제 문제: java.lang.RuntimeException: Driver claims to not accept jdbcUrl, ${DATABASE_URL} 원인: 로컬의 .env 파일은 깃에 올리..

카테고리 없음 2026.01.15

[Spring Boot] 페이징 기법에 대한 이해

1. 페이징 기법, 왜 필요할까?페이징(Paging): 많은 양의 데이터를 한 번에 보여주는 대신, 정해진 갯수만큼의 페이지(Page) 단위로 나누어 보여주는 기법"그냥 데이터가 많으면 전부 다 보내주고, 클라이언트(브라우저)에서 알아서 나눠서 보여주면 안되나?" 라고 생각할 수도 있습니다. 하지만 그렇게 하면, 대부분의 서비스에서 다음과 같은 재앙이 발생됩니다.데이터베이스가 비명을 지릅니다.예를 들어 데이터베이스에 'post' 라는 테이블에 1억 건의 레코드가 있다고 해봅시다. "SELECT * FROM post;" 같은 쿼리는 1억 개의 데이터를 모두 디스크에서 읽어와야 합니다. 이 작업 하나만으로도 데이터베이스는 엄청난 부하를 받게 되며, 데이터베이스 서버의 CPU와 메모리 자원을 크게 소진시킵니다..

카테고리 없음 2025.12.21

[Django] 직렬화 / 역직렬화(serialization / deserialization)의 이해

1. 직렬화와 역직렬화, 왜 필요할까?직렬화(Serialization): Django 서버는 파이썬 객체(object)로써 데이터를 이해합니다. 하지만 클라이언트(웹, 모바일 앱 등)는 파이썬 객체를 알지 못합니다. 그래서 클라이언트는 보통 json이나 xml 형태의 데이터를 사용합니다. 여기서 직렬화는 파이썬 객체를 json, xml 같이 클라이언트가 이해할 수 있는 데이터 형태로 변환하는 과정을 뜻합니다. 보통 서버에서 클라이언트로 데이터를 보낼 때 해당 과정을 거칩니다.역직렬화(Deserialization): 직렬화의 반대입니다. 예를 들어서, 클라이언트가 서버에게 "내가 보낸 데이터로 새로운 게시물을 만들어줘!" 라고 요청할 때, json 데이터를 보냅니다. 그럼 Django 서버는 해당 jso..

카테고리 없음 2025.08.09