분류 전체보기

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) 애자일 고객, 시장의 반응을 보며 서비스를 점진적으로 보완하는 방식의 프로젝트 관리론이다. 디자인 씽킹, 그로스 해킹, 린 스타트업, 스프린트, 스크럼 등과 연관이 있다. 즉, 불확실한 제품을 내면서 피드백을 통해 좋은 점은 발전시키고, 나쁜 점은 버리는 결과 중심적인 방법이다. 또한, 사용자에게 피드백을 받으면서 서비스를 개선한다는 점에서 고객 중심적이라는 특징이 있다. 이런 사이클을 빠르게 여러 번 돌림으로써 출..

Framework/Spring

[SpringSecurity] JWT 정보를 이용해 Controller에서 현재 로그인한 사용자의 정보 추출하기

JWT로 로그인한 경우에 사용자의 정보를 가져와 Controller에서 사용해야하는 상황이 있다. JWT 토큰을 생성하는 코드에서 Claims 에 넣은 정보를 현재 토큰에서 추출하는 방법으로 구현할 수 있는데, 이를 코드로 정리해보려 한다. 내가 만든 서비스에서는 사용자가 이메일과 패스워드를 입력하여 로그인하는 방식으로 구현되어있다. 사용자의 이메일을 JWT 에서 추출해 현재 로그인된 사용자 객체 Member을 가져오는 예제를 보여주도록 하겠다. JwtUtil createToken 메소드 public static String createToken(String mail, String key, long expireTimeMs) { Claims claims = Jwts.claims(); claims.put("..

Framework/Spring

[SpringSecurity] JWT (Json Web Token) 기반의 인증 인가 구현하기

JWT란 ? Json web token의 줄임말로, JSON 포맷으로 인증 정보를 저장하는 Claims 기반의 Web Token이다. 구조는 Header, Payload, Signature로 이루어져있으며 각각의 특징은 아래와 같다. (1) Header : 타입을 저장하는 typ, HS256과 같이 문자열을 해싱하는 알고리즘을 저장하는 alg로 이루어져 있다. (2) Payload : 정보의 단위인 Claim이 저장되며, 토큰의 발급자, 제목, 만료 시간 등의 정보가 Claim 단위로 저장된다. (3) Signature : 토큰 암호화 코드가 저장된다. Token 기반의 인증은 Session 인증과 달리 서버에 로그인 요청 시 헤더에 토큰을 포함하여 함께 보내고, 서버가 아닌 클라이언트에 저장되어 URL..

MINGYUM
'분류 전체보기' 카테고리의 글 목록 (13 Page)