전체 글

😼 Github : https://github.com/Mingyum-Kim
DEV book/토비의 스프링 3.1

[토비의 스프링 3.1] 1장 오브젝트와 의존관계 (1) - 전략 패턴을 이용한 DAO 클래스 리팩토링

스프링이란 ? Spring Container(스프링 컨테이너 = Application Context)를 기본 틀로 한다. 스프링은 표준 자바 엔터프라이즈 플랫폼에 기반을 두고 있다. 스프링 프레임워크에서 제공하는 프로그래밍 모델은 IoC/DI, 서비스 추상화, AOP가 있다. 왜 스프링을 사용하는가 ? 단순함 POJO(Plain Old Java Object) 프로그래밍으로 객체지향적인 개발 모델을 구현한다. POJO 프로그래밍이란, 컨벤션이나 프레임워크에 종속되지 않는 단순한 Java 오브젝트를 사용한 프로그래밍을 의미한다. 유연함 많은 Third Party의 지원으로 라이브러리가 많고, 유연성과 확장성이 뛰어나다. 예를 들어서 버전 호환성 문제를 겪거나 아키텍쳐를 대거 수정해야하는 등의 불필요한 트러블..

Server/Architecture

Github Actions + Code Deploy + S3 + NginX 로 Spring Boot 블루/그린 무중단 배포 구현하기 (3)

2023.08.27 - [Server/Architecture] - Github Actions + Code Deploy + S3 + NginX 로 Spring Boot 블루/그린 무중단 배포 구현하기 (1) Github Actions + Code Deploy + S3 + NginX 로 Spring Boot 블루/그린 무중단 배포 구현하기 (1) 시스템 아키텍쳐 해당 프로젝트에서 사용한 시스템 아키텍쳐는 다음과 같다. 1. 개발자가 코드를 수정하고, 배포를 원하는 브랜치로 Github에 Push한다. 2. Github Actions에서 정해진 워크플로우에 따 mingyum119.tistory.com 2023.08.27 - [Server/Architecture] - Github Actions + Code De..

Server/Architecture

Github Actions + Code Deploy + S3 + NginX로 Spring Boot 블루/그린 무중단 배포 구현하기 (2)

2023.08.27 - [Server/Architecture] - Github Actions + Code Deploy + S3 + NginX 로 Spring Boot 블루/그린 무중단 배포 구현하기 (1) Github Actions + Code Deploy + S3 + NginX 로 Spring Boot 블루/그린 무중단 배포 구현하기 (1) 시스템 아키텍쳐 해당 프로젝트에서 사용한 시스템 아키텍쳐는 다음과 같다. 1. 개발자가 코드를 수정하고, 배포를 원하는 브랜치로 Github에 Push한다. 2. Github Actions에서 정해진 워크플로우에 따 mingyum119.tistory.com 위 포스팅에 이어서, Github Actions 워크플로우를 실행하고 CodeDeploy, S3를 이용해 EC..

Server/Architecture

Github Actions + Code Deploy + S3 + NginX 로 Spring Boot 블루/그린 무중단 배포 구현하기 (1)

시스템 아키텍쳐 해당 프로젝트에서 사용한 시스템 아키텍쳐는 다음과 같다. 1. 개발자가 코드를 수정하고, 배포를 원하는 브랜치로 Github에 Push한다. 2. Github Actions에서 정해진 워크플로우에 따라 두 가지 작업을 수행한다. (1) CodeDeploy에 배포 요청을 보낸다. (2) Gradle 빌드를 수행한 후 생성된 jar 파일을 S3 버킷에 저장한다. 3. 배포 요청을 받게 되면, CodeDeploy Agent (배포 작업을 수행하는 프로그램) 가 EC2 서버 내에서 개발자가 직접 작성한 appspec.yml를 스캔 후 빌드 스크립트를 실행하게 된다. 4. 빌드 스크립트 내에서 두 개의 포트를 번갈아가며 스위칭하여, 블루/그린 배포를 수행한다. 이 결과 8081 포트가 작동 중일 ..

Langauge/C++

[BOJ/C++] 백준 12869 - 뮤탈리스크

https://www.acmicpc.net/problem/12869 12869번: 뮤탈리스크 1, 3, 2 순서대로 공격을 하면, 남은 체력은 (12-9, 10-1, 4-3) = (3, 9, 1)이다. 2, 1, 3 순서대로 공격을 하면, 남은 체력은 (0, 0, 0)이다. www.acmicpc.net 풀이 과정 scv는 최대 3개가 있을 수 있고, scv의 체력은 최대 60이다. 따라서 각 scv의 체력의 조합은 61의 3승이다. 약 20만의 경우의 수가 있으므로, 전부 탐색해도 큰 문제가 없이 풀 수 있다. D[a][b][c] = 체력의 조합이 (a, b, c) 일 때 모두 파괴하는 최소 공격 횟수 총 세 가지 SCV에 대해서 체력을 감소시킬 때는 3!의 경우의 수가 있으므로, 아래와 같이 점화식을 ..

Langauge/C++

[BOJ/C++] 백준 1495 - 기타리스트

https://www.acmicpc.net/problem/1495 1495번: 기타리스트 첫째 줄에 N, S, M이 주어진다. (1 ≤ N ≤ 50, 1 ≤ M ≤ 1,000, 0 ≤ S ≤ M) 둘째 줄에는 각 곡이 시작하기 전에 줄 수 있는 볼륨의 차이가 주어진다. 이 값은 1보다 크거나 같고, M보다 작거나 같다. www.acmicpc.net 마지막곡을 연주할 때 k인 볼륨을 설정하는 것이 가능한지 ? 를 기준으로 문제를 풀 수 있게 다이나믹 프로그래밍 알고리즘을 적용해보았다. dp(n, k) = max(sol(n-1, k - v[n]),sol(n-1, k+v[n])) 코드는 위와 같다. 둘 중에 하나라도 가능하면 dp[n][k], 즉 k 크기의 볼륨으로 n번째 곡을 연주할 수 있으므로 첫 번째 곡..

Algorithm/Baekjoon

[BOJ/C++] 백준 13504 - XOR 합

두 수 XOR 합과 유사한 문제이다. 숫자를 이진수로 변경하여 트라이에 넣어주고, 숫자 중 i번째까지 XOR한 값을 prefix에 저장해서 답을 구한다. 같은 수를 XOR 연산하면 항상 0이 된다. 따라서 S[i] = A[1] ~ A[i]를 XOR 연산한 결과라고 한다면, A[i] ~ A[j]까지 XOR 연산한 결과를 S[j] - S[i - 1] 이라고 할 수 있다. 따라서 수를 트라이에 넣으면서 연산을 누적해나가며 S[i]와 S[j]를 XOR한 값이 가장 큰 것으로 찾는 것으로 변형할 수 있다. #include #include using namespace std; struct Node { int children[2]; bool valid; Node() { children[0] = children[1] ..

Framework/Spring

[SCG] Spring Cloud Gateway는 왜 Netty 기반으로 만들어졌을까? 그리고 WebFlux란?

Blocking I/O를 보완한 Spring Cloud Gateway 자바 진영에서도 Non-blocking 기술이 등장하기 시작하였다. Blocking 기술의 경우 하나의 요청 당 하나의 스레드를 보장한다. 이러한 경우 여러 개의 스레드를 두더라도 딱 그 갯수만큼만의 요청을 처리할 수 있고, 다른 요청들은 모두 Ready queue에서 기다리게 되는 것이다. 대용량 트래픽을 처리하기 위해서는 하나의 스레드 당 여러 요청을 수행할 수 있어야 한다. Spring Cloud Gateway가 비동기 처리를 수행하는 Netty 기반 Reactive Web application으로 구동되는 이유도 동일하다. 전통적인 방식으로 Blocking 방식을 사용하는 Tomcat과 같은 WAS를 사용하게 되면 많은 요청을 ..

Other/기록

[세미나] 프로젝트 관리 방법론 및 포스트 모템

해당 게시글은 DND의 "프로젝트 관리 방법론과 포스트모템" 세미나를 듣고 발표 자료를 일부 캡쳐하여 정리한 게시글입니다. 프로젝트란 ? 제한 시간에 한정된 자원으로 목표하는 일을 완수해야 하는 작업이다. 이러한 목표한 일을 확실히 정의한 문서를 기획서라고 한다. 프로젝트 관리 방법론 (1) 애자일 고객, 시장의 반응을 보며 서비스를 점진적으로 보완하는 방식의 프로젝트 관리론이다. 디자인 씽킹, 그로스 해킹, 린 스타트업, 스프린트, 스크럼 등과 연관이 있다. 즉, 불확실한 제품을 내면서 피드백을 통해 좋은 점은 발전시키고, 나쁜 점은 버리는 결과 중심적인 방법이다. 또한, 사용자에게 피드백을 받으면서 서비스를 개선한다는 점에서 고객 중심적이라는 특징이 있다. 이런 사이클을 빠르게 여러 번 돌림으로써 출..

MINGYUM
코딩하는 겸