전체 글 51

CircuitBreaker 로 예방하는 장애 전파(2)

이번 포스팅에서는 지난 포스팅에 이어 CircuitBreaker를 실제로 구현하는 것에 대해 알아보도록 하겠습니다. 📌CircuitBreaker를 지원하는 라이브러리의 종류 1. Netflix Hystrix Netflix 에서 개발한 라이브러리로 MSA 환경에서 서비스 간 통신이 원활하지 않을 경우 각 서비스가 장애 내성과 지연 내성을 갖게 하는 라이브러리이지만 현재는 deprecated 된 상태로 더 이상의 업데이트가 없으며 공식 문서에서도 Resilience4j 의 사용을 권장하고 있습니다. 2. Resilience4j Netflix Hystrix로부터 영감을 받아 개발된 Fault Tolerance 라이브러리 Java 전용으로 개발된 라이브러리 입니다. 📌CircuitBreaker의 코어 모듈 Re..

BackEnd/SpringBoot 2023.12.12

CircuitBreaker 로 예방하는 장애 전파(1)

📌 들어가며 소프트웨어는 모두 실패한다 - 버너 보겔스(아마존 부사장) 아무리 열심히 설계하여 개발하고 QA를 진행한다 하더라도 대고객 시스템의 경우 혹은 대고객이 아니더라도 예상치 못한 장애를 마주하는 경우가 발생합니다. 여러 개의 작은 독립적인 마이크로서비스로 분할하는 아키텍처 패턴이 많아지는 요즘, 단일 서브 도메인의 장애가 전체 시스템에 영향을 줄 수 있어 예상치 못한 장애 상황이 발생할 수 있습니다. 이렇게만 보면 MSA 아키텍처로 설계하는 것 자체가 잘못된 것은 아닐까 하는 생각이 들 수 있습니다. 하지만 이는 '완벽한 시스템을 만들기보다, 실패에 유연하고 빠르게 대응 가능한 시스템을 설계해야 한다.' 라는 의미로 해석할 수도 있습니다. 따라서 MSA 환경에서는 단일 서브 도메인(마이크로서비스..

BackEnd/SpringBoot 2023.12.10

[Java] 정적 멤버와 Static

📌 Static 의 정의 정적(Static)은 '고정된'을 의미합니다. 정적 멤버는 클래스에 고정된 멤버로서 객체를 생성하지 않고 사용할 수 있는 필드 와 메서드를 말합니다. 📌 Static 의 특징 이러한 static은 다음과 같은 특징이 있습니다. 메모리에 고정적으로 할당됩니다. 객체마다 가지고 있을 필요가 없는 공용 데이터라면 정적 필드로 선언하는 것이 좋습니다. 객체 생성없이 사용이 가능합니다. 클래스 로더가 클래스(바이트코드)를 로딩해서 메소드 메모리 영역에 적재할 때 클래스별로 관리됩니다. 클래스의 로딩이 끝나면 바로 사용할 수 있습니다. static 메서드 내에서는 인스턴스 변수를 사용할 수 없습니다. 객체 자신의 참조인 this 키워드 사용이 불가합니다. 프로그램이 종료될 때 해제됩니다. ..

Java 2023.11.09

[Lv2] 호텔 대실

📌 문제 https://school.programmers.co.kr/learn/courses/30/lessons/155651 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 📌 풀이 주어진 문제의 배열을 오름차순으로 정렬한다. 시간의 비교를 숫자로 바꿔서 숫자 비교로 바꾸거나 아니면 LocalTime을 사용해서 Time의 비교를 진행해도 된다. 방의 할당은 PriorityQueue를 사용해서 할당한다. PriorityQueue는 기본형을 사용시 우선순위가 항상 낮은 숫자가 먼저 나오게 된다. 📌 코드 import java.util.*; class Solut..

[Lv2] 뒤에 있는 큰 수 찾기

📌 문제 뒤에 있는 큰 수 찾기 (스택) https://school.programmers.co.kr/learn/courses/30/lessons/154539 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 📌 풀이 이 문제는 우선 주어진 제한사항에 따라 이중 for 문이 아닌 다른 방법을 사용해서 정답을 탐색해야 함을 인지해야 합니다 각 자리 수 크기를 비교하기 위해 스택을 사용해야 시간 초과를 방지할 수 있습니다. 자세한 풀이는 코드의 주석으로 대체합니다. 📌 코드 import java.util.*; class Solution { public int[] ..

MVC 패턴 알아보기

📌 MVC 패턴이란? 소프트웨어 설계 시 사용하는 소프트웨어 패턴의 한 종류입니다. Model-View-Controller 패턴의 약자입니다. 이 패턴을 사용함으로써, 사용자 인터페이스(Interface)로부터 비즈니스 로직(Logic)을 분리하고, 애플리케이션의 시각적 요소와 그 이면에서 실행되는 비즈니스 로직 간에 영향을 최소한으로 줄여, 프로그램의 유지 보수성을 높이고, 성능을 향상 시킬 수 있습니다. 즉, 사용자 인터페이스로부터 비즈니스 로직을 분리하여 애플리케이션의 시각적 요소나 비즈니스 로직을 서로 영향 없이 쉽게 고칠 수 있는 애플리케이션을 만들기 위한 소프트웨어 디자인 패턴이라고 할 수 있습니다. 📌 MVC 패턴의 구성요소와 원칙 Model 데이터와 비즈니스 로직을 관리한다. ⇒ 데이터와 ..

Architecture 2023.11.03

Layered Architecture 알아보기

📌 들어가며 시스템을 설계할 때 필수적으로 고려하게 되는 부분이 아키텍처인 것 같습니다. 이때 많은 사람들이 자신이 설계하는 시스템을 표현할때 Layered Architecture를 사용합니다. 이번 포스팅에서는 해당 아키텍처에 대해 알아보는 시간을 갖도록 하겠습니다. 📌 Software Architecture 먼저 '소프트웨어 아키텍처'란 무엇인지 정리해 보도록 하겠습니다. 소프트웨어 아키텍처는 모든 소프트웨어 시스템의 기본 구조를 말하며 소프트웨어 시스템의 구성방법에 대한 중대한 결정사항을 모아 놓은 것이라고 볼 수 있습니다. 시스템 구성 및 동작 원리 구성 요소 간의 관계 및 시스템 외부 환경과의 관계를 묘사 시스템 구성 요소에 대한 설계 및 구현을 지원하는 수준을 시술 요구 사양 및 시스템 수명 ..

Architecture 2023.11.02

[DB] 트랜잭션(transaction) 과 격리성 수준

📌 트랜잭션이란 - 트랜잭션이란 한 번 질의가 실행되면 질의가 모두 수행되거나 모두 수행되지 않는 작업수행의 논리적 단위입니다. - 질의(query)를 하나의 묶음 처리해서 만약 중간에 실행이 중단됐을 경우, 처음부터 다시 실행하는 Rollback을 수행하고, 오류없이 실행을 마치면 commit을 하는 실행 단위를 의미합니다. - 트랜잭션은 작업수행의 논리적 단위이므로 DBMS의 성능을 초당 트랜잭션 실행 수(TPS : Transaction per second)로 측정합니다. - 데이터베이스 트랜잭션은 ACID 라는 특성을 가지고 있습니다. 📌 ACID 데이터베이스 내에서 일어나는 하나의 트랜잭션의 안정성을 보장하기 위해 필요한 성질입니다. Atomicity (원자성) 한 트랜잭션 내에서 실행한 작업들은..

[12891번] DNA 비밀번호

📌 문제 https://www.acmicpc.net/problem/12891 12891번: DNA 비밀번호 평소에 문자열을 가지고 노는 것을 좋아하는 민호는 DNA 문자열을 알게 되었다. DNA 문자열은 모든 문자열에 등장하는 문자가 {‘A’, ‘C’, ‘G’, ‘T’} 인 문자열을 말한다. 예를 들어 “ACKA” www.acmicpc.net 📌 풀이 해당 문제는 슬라이딩 윈도우를 사용하여 풀이할 수 있습니다. 슬라이딩 알고리즘의 핵심은 마치 창문을 밀듯이 배열을 탐색하면서 이때 추가되는 배열 부분만을 검사하고 탐색범위가 밀리면서 앞 부분 배열값은 삭제하는 것입니다. 이를 통해 시간복잡도를 개선할 수 있습니다. 📌 코드 import java.io.*; import java.util.*; class Ma..

Algorithms/백준 2023.09.21

[1940번] 주몽의 명령

📌 문제 https://www.acmicpc.net/problem/1940 1940번: 주몽 첫째 줄에는 재료의 개수 N(1 ≤ N ≤ 15,000)이 주어진다. 그리고 두 번째 줄에는 갑옷을 만드는데 필요한 수 M(1 ≤ M ≤ 10,000,000) 주어진다. 그리고 마지막으로 셋째 줄에는 N개의 재료들이 가진 고 www.acmicpc.net 📌 풀이 해당 문제는 이중 포인터를 사용하면 해결할 수 있습니다. 문제의 가장 첫 풀이 시작은 주어진 N 개의 숫자 개수가 15,000 개 이므로 정렬 후 문제를 풀 수 있다 입니다. 정렬이 가능하기에 이중 포인터로 M(두 숫자를 합해서 만들어야 하는 숫자)을 구할 수 있습니다. 📌 코드 import java.io.*; import java.util.*; clas..

Algorithms/백준 2023.09.21