전체 글

AWS, CI&CD

EC2 RDS 연결

데이터베이스는 서버에서 접근 가능해야 하기 때문에 보안 그룹 설정이 추가로 필요! 여기서 서버란 EC2 인스턴스의 탄력적 IP로, 이 글에서는 탄력적 IP 를 직접 넣는 대신 손쉽게 설정할 수 있는 방법을 설명할 것이다. ● EC2와 RDS를 연결하기 위한 RDS 보안 그룹 설정 EC2의 보안 그룹 ID를 확인해, RDS 인바운드 규칙에 EC2의 보안 그룹 ID를 추가해준다. MariaDB를 사용하고 있는데 MySQL로 3306 포트를 사용하여 헷갈리지 않기 위해 포트를 3307로 설정했다! (만약 MariaDB와 MySQL을 같이 사용한다면 둘의 기본 포트는 3306이므로 충돌이 날 수 있다.) 설정 후 EC2에서 RDS의 엔드 포인트로 다음과 같이 접속을 시도했지만 접속할 수 없었다. mysql -u..

CS/알고리즘

합병 정렬, 퀵 정렬

분할통치법 (divide-and-conquer) 일반적인 알고리즘 설계 기법의 일종 분할 (divide): 입력 데이터 L을 둘 이상의 분리된 부분집합 L1, L2, ... 으로 나눔 재귀 (recur): L1, L2, ... 각각에 대한 부문제를 재귀적으로 해결 통치 (conquer): 부문제들에 대한 해결을 합쳐 L의 해결을 구함 재귀의 베이스 케이스: 상수 크기의 부문제들 점화식 (recurrence equations)을 사용하여 분석 ex) 합병 정렬 (merge-sort), 퀵 정렬 (quick-sort) 합병 정렬 합병 정렬 (merge-sort): 분할통치법에 기초한 정렬 알고리즘 힙 정렬(heap-sort)처럼 비교에 기초한 정렬 O(nlogn) 시간에 수행 힙 정렬(heap-sort)과는..

CS/알고리즘

힙과 힙 정렬

힙 내부 노드에 키를 저장하며 다음 두 가지 속성을 만족하는 이진트리 힙순서 (heap-order): 루트를 제외한 모든 내부노드 v에 대해 key(v) ≥ key(parent(v)) 완전이진트리 (complete binary tree): 힙의 높이를 h라 하면 i = 0, 1, ..., h-1에 대해, 깊이 i인 노드가 2^i개 존재 깊이 h-1에서 내부 노드들은 외부 노드들의 왼쪽에 존재 힙의 마지막 노드 (last node): 깊이 h-1의 가장 오른쪽 내부 노드 힙의 높이 정리: n개의 키를 저장한 힙의 높이는 O(log n) 증명: 완전 이진 트리의 성질을 이용 힙과 우선순위 큐 힙을 사용하여 우선순위 큐(priority queue) 구현 가능 전제: 적정 이진 트리로 구현 마지막 노드의 위치를..

CS/알고리즘

우선순위 큐

우선순위 큐 ADT 항목(키, 원소)들을 저장 우선순위 큐 ADT 메서드 주요 메서드 insertItem(k, e): 키 k인 원소 e를 큐에 삽입 element removeMin(): 큐로부터 최소 키를 가진 원소를 삭제하여 반환 일반 메서드 integer size(): 큐의 항목 수를 반환 boolean isEmpty(): 큐가 비어 있는지 여부를 반환 접근 메서드 element minElement(): 큐에서 최소 키를 가진 원소를 반환 element minkey(): 큐에서 최소 키를 반환 예외 emptyQueueException(): 비어 있는 큐에 대해 삭제나 원소 접근을 시도할 경우 발령 fullQueueException(): 만원 큐에 대해 삽입을 시도할 경우 발령 우선순위 큐를 이용한 정..

Spring Boot

JUnit과 Mockito 기반의 Spring 단위 테스트 코드 작성 방법

Modckito 개발자가 동작을 직접 제어할 수 있는 가짜(Mock) 객체를 지원하는 테스트 프레임워크 의존성은 단위 테스트를 작성하는 것을 어렵게 하는데, 이를 해결하기 위해 가짜 객체를 주입시켜줌 Mockito를 활용함으로써 가짜 객체에 원하는 결과를 Stub하여 단위 테스트를 진행 가능 Mock 객체 의존성 주입 @Mock: Mock 객체를 만들어 반환해주는 어노테이션 @Spy: Stub하지 않은 메서드들은 원본 메서드 그대로 사용하는 어노테이션 @InjectMocks: @Mock 또는 @Spy로 생성된 가짜 객체를 자동으로 주입시켜주는 어노테이션 UserController에 대한 단위 테스트를 작성하고자 할때, UserService를 주입받고 있다면 @Mock 어노테이션을 통해 가짜 UserSer..

Spring Boot

단위 테스트(Unit Test)와 통합 테스트

단위 테스트 하나의 모듈(기능 또는 메소드)을 기준으로 독립적으로 진행되는 가장 작은 단위의 테스트 어떤 기능이 실행되면 어떤 결과가 나오는지 테스트 진행 통합 테스트 모듈을 통합하는 과정에서 모듈 간의 호환성을 확인하기 위해 수행되는 테스트 애플리케이션은 여러 개의 모듈들로 구성이 되고, 모듈들끼리 메세지를 주고 받으면서(함수 호출) 기능을 수행 통합된 모듈들이 올바르게 연계되어 동작하는지 검증 단위 테스트(Unit Test) 작성의 필요성 통합 테스트 실제 여러 컴포넌트들 간의 상호작용을 테스트하기 때문에 모든 컴포넌트들이 구동된 상태에서 테스트 통합 테스트를 위해서는 캐시나 데이터베이스 등 다른 컴포넌트들과 실제 연결을 해야 함 시스템을 구성하는 컴포넌트들이 많아질수록 테스트를 위한 비용(시간)이 ..

Docker

[Docker] Spring Boot + Nginx 연동해서 배포하기

이전 글에 이어서, Nginx로 온 요청을 스프링부트 서버로 리다이렉트 시키는 과정을 다룹니다! 이전글 ↓↓ [Docker] Nginx + HTTPS 적용 도메인 DNS 설정 이후, Docker을 이용한 Nginx + HTTPS 적용하는 내용입니다! HTTP(포트번호 80)로 들어오는 요청을 HTTPS(포트번호 443)로 redirect 해주기 1. HTTPS 적용 1. Docker로 nginx의 이미지를 불러오기 docke koeyhk.tistory.com 1. Nginx 컨테이너 안에서 domain-name.conf 파일에 접근 cd /etc/nginx/conf.d vi domain-name.conf 2. 파일 수정 server 172.17.0.1:8080 → Spring 서버:포트번호 설정 serv..

Docker

[Docker] Nginx + HTTPS 적용

도메인 DNS 설정 이후, Docker을 이용한 Nginx + HTTPS 적용하는 내용입니다! HTTP(포트번호 80)로 들어오는 요청을 HTTPS(포트번호 443)로 redirect 해주기 1. HTTPS 적용 1. Docker로 nginx의 이미지를 불러오기 docker pull nginx 2. 80:80, 443:443 포트를 열어주어 컨테이너를 띄우기 sudo docker run --name nginx -d -p 80:80 -p 443:443 nginx 3. HTTPS 설정을 하기 위해 컨테이너의 내부로 들어가기 sudo docker exec -it nginx /bin/bash 4. Let’s Encrypt 클라이언트 다운로드 ubuntu 18.04 버전 이상에서는 다음 명령어를 이용해 Let’s..

Trouble Shooting

CI/CD 트러블 슈팅

AWS + Docker + Github Actions를 이용한 CI/CD 개발 환경 Docker AWS EC2 Ubuntu Github Actions Spring boot Java 17 Gradle 인텔리제이에서 코드를 작성 후, Github로 Push. Github에서 조건을 만족할 경우, Github Actions 실행. (develop branch에 코드가 Push, Pull Request될 경 koeyhk.tistory.com 이전 글의 과정에서 AWS + Docker + Github Actions를 이용한 CI/CD를 구축하는 데 있어 생긴 오류들을 모아봤다! 1. make application-dev.yml # application-dev.yml 생성 - name: make applicatio..

AWS, CI&CD

AWS + Docker + Github Actions를 이용한 CI/CD

개발 환경 Docker AWS EC2 Ubuntu Github Actions Spring boot Java 17 Gradle 인텔리제이에서 코드를 작성 후, Github로 Push. Github에서 조건을 만족할 경우, Github Actions 실행. (develop branch에 코드가 Push, Pull Request될 경우로 설정함) Github Actions는 미리 작성해 둔 .yml 파일의 내용대로 프로세스가 진행 빌드 도커 repository에 이미지 push ssh로 서버에서 도커 이미지 pull 받아 실행 1. Docker file 작성 FROM openjdk:17-jdk// jdk 설정 ARG JAR_FILE=build/libs/*.jar COPY ${JAR_FILE} /app.jar ..