전체 글 216

Cloudflare를 사용하여 EC2 웹서버에 HTTPS 적용하기

Cloudflare를 사용하여 EC2 웹서버에 HTTPS를 적용시켜봤다. 이전 실습에서는 AWS의 ELB(Elastic Load Balancer)로 HTTPS 설정을 해줬다. 이 방법은 AWS의 여러 서비스와의 연동에서 강점을 보이지만, ELB셋팅 과정과 인증서 발급과정이 복잡하여 시간이 매우 오래 걸렸다. 하지만, Cloudflare를 사용하여 HTTPS 적용을 하면 비교적 저렴한 비용과, 간단한 설정들을 통해 쉽고 간편하게 구현 가능하다. 적용 과정 우선 cloudflare에 내 도메인을 등록 해줘야 한다.Cloudflare에 내 도메인을 등록하게 되면 Cloudflare 네임서버 값을 제공해주는데 이 값을 도메인을 구매한 곳에 등록을 해줘야 한다. 필자는 가비아에서 도메인을 구매해서 가비아에 Cl..

가비아 도메인 설정 EC2에 적용, Nginx Reverse Proxy 적용

가비아에서 도메인을 구입하여 EC2에 적용을 해봤다. 기존에는 Route53에서 도메인을 구입하였지만 가비아에서 더 저렴한 가격으로 구입할 수 있다고 해서 해봤다. 도메인 적용 1. 도메인 구입 나는 yangwoohyeon.shop을 500원에 구입했다. 2. AWS Route53에서 DNS 관리 접속, 호스팅 영역 생성 3.가비아에서 구입한 도메인 이름 등록호스팅 영역을 생성해주면 아래 사진과 같은 화면이 보인다. 여기서 NS 유형의 "값/트래픽 라우팅 대상"은 가비아에 나중에 등록해줘야 한다. 4.레코드 생성 값에는 EC2 인스턴스의 퍼블릭 IP 주소를 넣어준다. 5. 가비아에서 도메인 관리 페이지로 이동방금 전 레코드에서 확인했던 NS 유형의 "값/트래픽 라우팅 대상"을 모두 등록해준다.(..

Deployment/AWS 2025.05.31

WebSocket + STOMP로 채팅 구현하기

STOMP란?Simple Text Oriented Messaging Protocol의 약자로 메시지를 전송하기 위한 프로토콜이다.메시지 브로커와 publisher - subscriber 방식을 사용하고, 메시지 브로커는 발행자가 전송하는 메시지를 구독자들에게 전송한다. 왜 STOMP를 사용 했는가?Spring WebSocket은 단순히 양방향 연결 채널일 뿐, 메시지를 어디로, 누가, 무엇을 보내는지 구조적으로 정의되어있지 않다. 하지만 STOMP를 WebSocket위에서 동작시키면 채널 구독, 메시지 목적지(채팅방) 구분, 구독 관리 등 실시간 채팅에 맞는 다양한 기능을 사용 가능하다. 따라서 이번에 구현한 채팅은 WebSocket 위에서 STOMP를 사용하여 채팅방 생성, 채팅방 구독, 전송, 읽..

BackEnd/spring 2025.05.30

GitHub Actions + Docker로 CI/CD 구축

GitHub Actions + Docker를 이용해 CI/CD 구축을 해봤다. GitHub Actions는 다음과 같은 장점을 가진다. 다른 CI/CD툴에 비해 사용하기 쉽다.YAML 파일을 통해 원하는 워크플로우를 손쉽게 정의하고 커스터마이징 가능공개 리포지토리의 경우 무료로 이용, 제한된 범위 내에서 사설 리포지토리도 무료로 사용 가능CI/CD를 위한 별도의 서버가 필요 없다. 구현 목표1. deploy.yml를 통해 GitHub Actions가 워크플로우 수행 2. Dockerfile을 이용해서 Docker Image 빌드3. DockerHub에 이미지를 업로드4. EC2에서 최신 이미지를 pull 받아서 실행 개발 과정은 다음과 같다. 1. DockerHub에 리포지토리 생성 리포지토리 ..

Spring Webocket을 이용한 실시간 채팅 구현(+ JWT 인증)

GitHub - yangwoohyeon/OAuth2_9oormthonUNIVContribute to yangwoohyeon/OAuth2_9oormthonUNIV development by creating an account on GitHub.github.com WebSocket이란?서버와 클라이언트 간에 Socket Connection을 유지해서 언제든 양방향 통신 또는 데이터 전송이 가능하도록 하는 기술로써, sns, 화상 채팅, 증권 거래 등에서 널리 사용되고 있다. 왜 WebSocket을 사용하는가? HTTP를 사용하여 실시간 양방향 통신을 구현하기 위해서는 다음과 같은 방법을 사용할 수 있다. 백엔드에서 변경 사항이 생길 때마다 프론트엔드에게 응답을 보내주는 방식 : Server-Sent-Eve..

BackEnd/spring 2025.05.14

Jenkins + Docker를 활용한 기본 CI/CD 파이프라인 구축

Jenkins와 Docker를 활용하여 CI/CD 파이프라인을 구축하는 과정을 공부했다. 사용되는 것1) 두개의 EC2서버JenkinsSpring 서버2) github webhook 3) jenkins-pipline 4) jenkinsFile 5) docker-compose CI/CD 흐름 1. GitHub에서 코드 푸시 GitHub Webhook → Jenkins로 알림 2. Jenkins Pipeline 실행 (CI 단계) Docker Image 빌드빌드된 이미지를 Docker Hub 저장소에 업로드DooD방식 사용3. Spring EC2 서버로 배포 (CD 단계)EC2에 SSH 접속하여 최신 이미지로 컨테이너 재배포 구현 방법 1. jenkinsfile 생성pipeline { agent any..

Spring Boot + Kafka + Docker로 비동기 메시징 구현하기

카프카(Kafka)란?카프카(Kafka)는 파이프라인, 스트리밍 분석, 데이터 통합 및 미션 크리티컬 애플리케이션을 위해 설계된 고성능 분산 이벤트 스트리밍 플랫폼이다. Kafka 구성요소 Producer : Kafka에 이벤트를 Publish(게시)하는 클라이언트, topic에 데이터를 생성하고 전송하는 역할Consumer : 이벤트를 Subscribe(읽고 처리)하는 클라이언트, topic내부 파티션에 저장된 데이터를 가져오는 역할 Kafka에서는 Producer와 Consumer가 완전히 분리되어 있다.이는 Kafka의 높은 확장성을 위한 핵심 요소이다. Topic : 데이터가 들어갈 수 있는 공간을 이야기하며, 여러 개의 토픽이 생성될 수 있다.topic은 한개 이상의 파티션으로 구성되어 ..

Spring Boot 프로젝트를 AWS EC2에 Docker로 배포하기

1. 스프링 부트 프로젝트에 Dockerfile 생성 FROM openjdk:21-jdk-slim# JAR 파일 이름을 인자로 받음ARG JAR_FILE=build/libs/OAuth2_9oormthonUNIV-0.0.1-SNAPSHOT.jar# 컨테이너 내부에 app.jar로 복사COPY ${JAR_FILE} app.jar# 8080 포트 개방EXPOSE 8080# Spring Boot 실행ENTRYPOINT ["java", "-jar", "app.jar"] Dockerfile을 통해 Spring Boot 애플리케이션을 실행할 수 있는 Docker 이미지를 생성한다.🎯 이미지는 컨테이너를 실행하기 위한 실행 환경과 애플리케이션 코드, 필요한 설정, 의존성, 라이브러리 등을 모두 포함한 "설계도" 라고..

S3를 이용한 이미지 관리[SpringBoot]

프로젝트 구현 목표1. 제목, 내용, 이미지를 첨부하여 게시글 작성(Create) API 구현2. DB에는 제목, 내용, 이미지 URL 저장 3. 이미지는 S3에 저장 S3 버킷 생성 방법 관련 글 AWS S3 활용한 파일 및 이미지 업로드S3란 무엇인가?S3는 AWS에서 제공하는 '클라우드 스토리지 서비스'이다. 쉽게 말하면 AWS에서 제공하는 파일 저장 서비스이다. S3의 사용 용도이미지나 동영상 저장 및 제공정적 웹사이트 호스팅CDdeveloperwoohyeon.tistory.com Post 엔티티 생성@Entity@Data@Builder@AllArgsConstructor@NoArgsConstructorpublic class Post { @Id @GeneratedValue(str..

Docker Volume(도커 볼륨)

Docker Volume이란 무엇일까? 컨테이너는 기본적으로 임시적인 환경이라서 컨테이너가 종료되거나 삭제되면 그 안의 데이터도 함께 사라진다.도커 볼륨은 이러한 문제를 해결해주는 영구적인 데이터 저장 공간을 말한다. 볼륨(Volume)은 컨테이너 자체의 저장 공간을 사용하지 않고, 호스트 자체의 저장 공간을 공유해서 사용하는 형태이다. 도커 볼륨 사용 명령어docker run -v [호스트의 디렉토리 절대경로]:[컨테이너의 디렉토리 절대경로] [이미지명]:[태그명] 그럼 이제 도커 볼륨을 통해 MySQL을 사용해보자.  1. MySQL 컨테이너 띄우기 $ cd /Users/jaeseong/Documents/Develop$ mkdir docker-mysql # MySQL 데이터를 저장하고 싶은 폴더 만들..

Deployment/Docker 2025.03.23