자료구조 - 시간 복잡도 / 스택, 큐, 이중 연결 리스트
·
CS
시간 복잡도시간 복잡도란 입력 크기에 대해 어떠한 알고리즘이 실행되는 데 걸리는 시간입니다.로직의 반복 횟수를 중점으로 측정되고, 보통 빅오 표기법으로 나타냅니다.for (int i = 0; i 가령 위 코드와 같이 로직이 짜여져 있다고 가정해 보겠습니다.시간 복잡도는 10회 반복로직 안에 n회 반복 로직이 총 두개 즉 10 * n * n 으로 계산할 수 있습니다.그리고 두번째 로직에서는 n회 반복이므로 총 두개를 합치면 10n^2 + n으로 계산할 수 있습니다. 빅오 표기법빅오 표기법이란 입력 범위 n을 기준으로 해서 로직이 몇 번 반복되는지 나타내는 것입니다.위에서 말한 코드의 시간 복잡도를 빅오 표기법으로 나타낸다면 O(n^2)이 됩니다. 그럼 여기서 의문점이 생길 수 있다고 생각합니다."왜 O(n..
Istio Proxy - 프로메테우스, 그라파나 모니터링
·
Monitoring
이번에 프로젝트를 진행하면서 스프링 배치를 활용하면서 전과 후의 메트릭 변화를 수집해야 되는 일이 있었습니다. 이전에 포스팅으로도 소개해 드렸던 방식은 node_exporter 혹은 mysql_exporter로 메트릭을 수집하는 방식이었습니다.https://hyunily.tistory.com/18 프로메테우스, 그라파나를 활용한 모니터링프로메테우스(Prometheus)모니터링 및 경고 시스템으로, 대규모 분산 시스템에서의 성능 및 상태 모니터링에 특화되어 있습니다.독립 실행형 서버로 동작하며, 클러스터링을 필요로 하지 않습니다hyunily.tistory.com 하지만 프로젝트에서는 쿠버네티스에서 파드별로 메트릭을 수집해야 했습니다. 그래서 이번에는 파드별로 메트릭을 수집할 수 있는 방법 중 하나인 Ist..
무중단 배포란?
·
Daily
프로젝트를 배포하는 여러 방법이 있습니다.하지만 보통 사용자들이 사용하는 서비스들은 무중단 배포를 하는 곳이 많다는 것도 사실입니다. 오늘은 무중단 배포에 대해서 알아보겠습니다.무중단 배포무중단 배포는 애플리케이션을 업데이트하거나 새로운 버전을 배포할 때, 서비스 중단 없이 연속적으로 시스템을 운영하는 배포 방식을 말합니다. 1. 블루-그린 배포 - 블루-그린 배포는 두 개의 환경(블루, 그린)을 설정하여 배포하는 방식입니다.1) 블루 : 현재 애플리케이션이 실행되고 있는 기존의 환경2) 그린 : 새로운 버전의 애플리케이션을 배포하는 환경 - 새로운 버전이 그린 환경에 배포되고, 테스트를 완료하면, 로드 밸런서를 통해 트래픽을 블루에서 그린 환경으로 전환합니다.- 문제가 발생할 경우, 다시 블루 환경으로..
[Spring Boot] 동시성 제어
·
Daily
프로젝트를 진행함에 있어 동시성 문제는 항상 해결해야 되는 부분이라고 생각합니다.이번에 동시성 제어에 대해서 알아보려고 합니다. 동시성 제어에 들어가기 앞서 일단 스레드와 멀티스레드 개념부터 잡고 들어가 보겠습니다.스레드 & 멀티스레드 스레드란?- 프로세스의 실행 가능한 가장 작은 단위입니다. 멀티 스레드란?- 한 프로세스 내에서 여러 스레드를 동시에 실행하는 것입니다. 멀티스레딩은 결국 멀티 스레드 환경을 구현하고, 관리하는 기법 또는 개념으로서 프로세스 내 작업을 여러 개의 스레드, 멀티 스레드로 처리하는 기법입니다. 트랜잭션트랜잭션은 DBMS에서 데이터를 다루는 논리적인 작업의 단위를 의미합니다. 쉽게 말해, 여러 개의 데이터베이스 작업을 하나의 단일 작업처럼 처리하는 것을 말합니다. 여기서 중요한..
mysql 외부접속 connection locked (Unblock with 'mysqladmin flush-hosts')
·
Database
프로젝트를 진행하다 보면 데이터베이스를 외부에서 접속할 수 있게 설정해 놓고 사용할 때가 많습니다.하지만 여러 사람이 한 데이터베이스를 사용하다 보면 다음과 같은 에러 메세지를 받으며, 접속이 안될 때가 있습니다.ERROR 1129(00000): Host '***.***.***.***' is blocked because of many connection errors.Unblock with 'mysqladmin flush-hosts' 에러 발생 원인1. 연결 오류의 누적- 특정 IP에서 발생하는 연결 시도가 일정 횟수를 초과하면 해당 IP를 차단할 수 있습니다.- 주로 잘못된 계정 정보나 네트워크 문제로 인한 연결 실패가 그 원인에 해당됩니다. 2. max_connect_errors 설정- max_conn..
Spring Boot - 이메일(SMTP)비동기 전송
·
Daily
프로젝트를 진행하다 보면 이메일 인증 기능을 자주 사용하곤 합니다.그 과정에서 항상 들었던 의문점 중 하나는, 왜 이메일이 생각보다 늦게 올까?라는 생각이었습니다. 저는 이메일을 일괄 전송하는 기능을 구현해야 하다보니, 속도 부분을 개선해야 하는 점은 해결해야 하는 과제 중 하나였습니다. 이전에 다뤘던 SMTP를 더해서, 이번에는 이메일을 비동기로 전송해보는 부분에 대해서 다뤄보려고 합니다. SMTP 구축에 대해서 궁금하신 분들은 아래 포스팅을 참고하시기 바랍니다.https://hyunily.tistory.com/22 Spring Boot 회원가입 - 이메일(SMTP) 인증 구현하기많은 서비스에서 회원가입 과정에 이제는 당연하다고 여겨지는 이메일 인증 기능을 구현해보려고 합니다. 구현에 앞서 프로젝트에 ..
Spring Batch
·
Spring
지난 포스팅에서 스케줄러에 대해서 다뤄봤습니다. 오늘은 배치 코드에 대해서 다뤄보려고 합니다. build.gradle 설정 implementation 'org.springframework.boot:spring-boot-starter-batch' application.ymlspring: batch: jdbc: initialize-schema: always 기존에는 이 방식으로 메타데이터를 관리하는 스키마를 생성할 수 있었으나, Spring 3.X.X 버전으로 전환 후에 위 설정을 했음에도 불구하고 메타 테이블이 생성되지 않는 문제가 있었습니다. 그래서 3버전대를 사용하시는 분들은 아래와 같은 방법으로 테이블을 생성하시는걸 추천드립니다. 1. External Libraries -> Gr..
Spring Batch - Scheduler
·
Spring
저번에 스프링 배치에 대해서 이론을 공부했었는데 그 과정에서 새롭게 알게 된 점은배치와 스케줄러는 각각 다른 역할을 하지만, 결국 스프링 배치를 사용하는 이유는 일정 주기, 시간마다 대량의 데이터를 일괄처리하기 위함이므로, 자동으로 처리하려면 스케줄러는 무조건 사용돼야 된다는 점입니다. 기초적인 이론은 아래 링크에서 확인 가능합니다!https://hyunily.tistory.com/28 Spring Batch란?Spring Batch 알아보기다양한 도메인 내의 많은 애플리케이션은 보통 비즈니스 운영을 수행하기 위해 대량의 데이터 처리가 필요합니다. 그래서 가볍고 포괄적이며 Spring Framework의 특성(생산성, POJhyunily.tistory.com 그럼 스프링 배치를 본격적으로 다뤄보기 전에,..