본문 바로가기

💻 개발/Back-end10

12/16 - TIL : - 쓰레드 무한정 개수 늘린다면? 쓰레드를 많이 쓸수록 항상 애플리케이션의 성능이 좋아질까?  멀티스레딩의 성능은 애플리케이션의 특성에 따라 달라진다.전제 1: 애플리케이션이 더 작은 작업들로 나눠져 동시에 실행 가능한 경우.전제 2: 애플리케이션이 순차적으로 실행되어야 하거나 동시에 실행하기 어려운 성격이라면, 스레드 수를 늘려도 효과가 제한적이다. | 스레드와 컨텍스트 스위칭  컨텍스트 스위칭 CPU 코어에서 실행되던 스레드가 다른 스레드로 바뀌는 작업스위칭 작업은 애플리케이션 동작과 직접적인 관련은 없지만, 멀티스레딩을 위해 필요한 오버헤드(간접 비용)이다.스레드 수와 컨텍스트 스위칭스레드 수 증가 → CPU 코어당 경합 증가경합이 많아질수록 컨텍스트 스위칭 비용이 커지며 성능 저하 발생.결과적으로, 스레드 수를 무한정 늘려도 어느.. 2024. 12. 16.
12/13 - TIL : Checked Exception, Unchecked Exception | Checked ExceptionRuntimeException의 하위 클래스가 아니면서 Exception 클래스의 하위 클래스들이다. 체크 예외의 특징은 반드시 에러 처리를 해야하는 특징(try/catch or throw)을 가지고 있다. 컴파일 타임에 체크됩니다. 따라서 컴파일러는 예외 처리 여부를 확인하며, 처리하지 않을 경우 컴파일 오류가 발생한다.  예시  IOException: 파일 입출력 처리 중 발생SQLException: 데이터베이스 접근 중 발생ClassNotFoundException: 클래스 로드 실패 시 발생   | Unchecked ExceptionRuntimeException의 하위 클래스들을 의미합니다. 이것은 체크 예외와는 달리 에러 처리를 강제하지 않는다. (개발자가 필요에.. 2024. 12. 13.
12/12 - TIL : 로깅 레벨 로깅 레벨(logging level)은 애플리케이션의 로그 메시지를 분류하는 기준으로, 로그 메시지의 중요도와 긴급성을 나타낸다.로깅 레벨을 통해 특정 상황에서 어떤 로그 메시지를 기록하거나 출력할지를 결정할 수 있으며, 로그 메시지를 중요도에 따라 분류하여 특정 상황에서 어떤 로그를 기록할지 결정하는 기준이기도 하다.  | Trace 가장 상세한 로그 레벨로, 디버깅보다 더 많은 정보를 포함하며, 프로그램의 모든 동작을 추적하는 데 사용한다. 주로 개발 중 복잡한 문제를 디버깅하거나 코드 실행 흐름을 자세히 추적할 때 사용된다.  | Debug 디버깅 정보를 기록하는 레벨로, 개발 중 코드의 문제를 찾기 위해 사용한다. 특정 모듈이나 기능이 제대로 작동하는지 확인할 때 적합하다.  | Info 애플리케.. 2024. 12. 12.
12/9 - TIL : DDD 란? DDD는 Domain-Driven Design이다.  | DomainDomain이 무엇일까?  DDD의 Domain은 비즈니스 Domain이다. 비즈니스 Domain은 유사한 작업 그룹이다. ex. 주문 도메인 : 주문 생성, 주문 취소, 주문 상태 확인, ... 등 애플리케이션은 비즈니스 Domain 별로 나누어 개발될 수 있다. Domain은 애플리케이션이 해결하려고 하는 문제 영역을 의미하기 때문이다.  | DDD 따라서, DDD는 비즈니스 Domain 별로 나누어 설계하는 방식이다.  DDD의 핵심은 결합도를 낮추고, 응집도를 높이는 것이다. (객체 지향의 핵심 목표와 일치하는 것을 알 수 있다.) DDD의 핵심 설계 원칙은 다음과 같다. 도메인을 중심으로 설계 : 도메인 문제 해결에 초점이 있다.. 2024. 12. 9.
12/2 - TIL : Fallback Resilience은 시스템이 예기치 않은 장애, 오류, 네트워크 문제 등의 상황에서 안정적으로 작동하거나 복구할 수 있는 능력이다.  Resilience design pattern 중 하나로 Fallback이 있다.  Fallback은 시스템에서 오류 상황이나 예외적인 상태를 처리하기 위해 준비된 대체 동작이다. 시스템의 안정성과 신뢰성을 보장하기 위해 자주 사용되며, 특히 마이크로 서비스 아키텍처나 분산 시스템에서 중요한 역할을 한다. 시스템 안정성 확보: 다른 서비스나 시스템으로 장애가 전파되지 않도록 방지한다. 사용자 경험 개선: 오류를 숨기고 사용자에게 유용한 대안을 제공한다.  Fallback은 다양한 시나리오에서 활용될 수 있다:외부 API 호출 실패: 외부 시스템이 응답하지 않을 경우, 캐.. 2024. 12. 2.
12/1 - TIL : 모듈이란? 공부를 하던 도중 모듈이라는 용어가 나와 궁금했다.  모듈에 대해 알아보자.  | 모듈(Module)모듈은 프로그래밍에서 코드의 재사용성과 관리 효율성을 높이기 위해 논리적으로 관련된 코드들을 하나의 단위로 묶은 것을 말한다. 프로그램을 구성하는 시스템을 기능 단위로 독립적인 부분으로 분리한 것이기 때문에 하나 이상의 논리적인 기능을 수행하기 위한 명령어의 집합이다. 모듈은 독립적인 프로그램 그 자체일 수 있고, 함수나 메서드일 수도 있다.  모듈의 특징은 다음과 같다. 독립적인 기능 : 모듈은 다른 것들과 구분되는 명확하고 독립적인 역할이나 기능을 가져야 한다. 고유한 이름 : 모듈은 고유한 이름을 가져야 하며, 다른 모듈과 충돌하지 않도록 네이밍이 중요하다. 호출 가능성 : 모듈은 다른 프로그램이나 .. 2024. 12. 1.
11/28 - TIL : 이벤트 소싱과 CQRS 이벤트 소싱과 CQRS에 대해 알아보자. 이벤트 소싱과 CQRS를 사용하면, 데이터 저장과 조회를 분리하여 시스템의 성능과 확장성을 향상시키는 데 도움을 준다고 한다.  | 이벤트 소싱이벤트 소싱은 데이터 상태를 변경할 때, 변경된 최종 상태만 저장하는 것이 아니라, 변경 과정을 기록한 이벤트(Event)를 저장하는 방식이다. 데이터 상태 변화를 이벤트로 기록하고, 해당 이벤트들을 순차적으로 재생하여 현재 상태를 파악하는 방법이다. 이벤트 소싱에서는 데이터 변경 자체가 아닌 변경 이벤트(상태 변화)를 저장한다. 주문 생성: 사용자가 주문을 생성했다는 기록.결제 완료: 사용자가 결제를 완료했다는 상태 변화.주문 취소: 사용자가 주문을 취소했다는 기록. 이벤트 소싱에서 사용되는 개념들은 다음과 같다. 이벤트.. 2024. 11. 28.
11/26 - TIL : 분산 트랜잭션과 CQRS 데이터의 일관성을 유지하는 방법에는 여러가지가 있다. 그 중 분산 트랜잭션과 CQRS에 대해 알아보자. 분산 트랜잭션여러 독립적인 시스템등에서 데이터를 일관성 있게 처리하기 위해 하나의 트랜잭션처럼 동작하도록 설계된 트랜잭션이다.단일 트랜잭션이 여러 시스템에 걸쳐 발생할 때, 모든 시스템이 해당 트랜잭션을 성공적으로 완료하거나, 모든 시스템이 트랜잭션을 실패로 처리하도록 보장한다.  +) 트랜잭션더보기트랜잭션은 데이터베이스의 상태를 변환하는 작업 단위, ACID를 만족해야 한다.  원자성(Atomicity) : 트랜잭션은 전부 성공하거나 전부 실패하여, 부분적인 작업 수행이 없는 것을 보장한다. 일관성(Consistency) : 트랜잭션이 완료된 후에도 데이터베이스는 모든 무결성 제약 조건을 유지한다. .. 2024. 11. 26.
11/17 - TIL : Builder 패턴 개발을 하다가 생성자를 오버로딩하는 방식으로 생성을 하게 되는 경우가 많았다. 하지만, 이런 경우 생성자를 여러 개 생성하게 되면 매번 생성자의 파라미터들을 확인해야 하는 번거로움이 있어 다른 생성은 어떤지 알아보고자 한다.   객체를 생성하는 방법에는 여러가지가 있다. 그리고 그 중 하나가 빌더 패턴이다.  빌더 패턴이 뭘까? 빌더 패턴에 대해서 알아보자.  Builder 패턴 복잡한 객체의 생성 과정과 표현 방법을 분리하여 다양한 구성의 인스턴스를 만드는 생성 패턴이다. 생성자에 들어갈 매개 변수를 메서드로 하나하나 받아들이고 마지막에 통합 빌드해서 객체를 생성하는 방식 유연하게 다양한 타입의 인스턴스를 생성할 수 있다. (선택적 매개변수가 많은 상황에서 사용) 위처럼 유연하게 다양한 타입의 인스턴스.. 2024. 11. 17.
Framework와 Library의 차이 Framework와 Library는 개발을 하게 될 때 개발자가 코드를 더 효율적으로 작성하고 기능을 구현할 수 있게 돕는 도구이다.  최근 백엔드 개발을 하면서, Framework와 Library의 차이점이 궁금해져서 이에 대해 알아보고자 한다.  FrameworkFramework는 애플리케이션의 구조 또는 틀을 제공하며, 개발을 위한 기본적인 형태와 필수 요소를 포함하고 있다. 따라서, 개발자는 Framework가 제공하는 구조와 규칙을 따라야 한다. 이는 제어의 역전(IoC : Inversion of Control)이라고 한다.  LibraryLibrary는 특정 기능을 수행하는 코드의 모음으로, 개발자가 필요할 때 호출해서 사용할 수 있다. 따라서, 호출하는 주체가 개발자이기 때문에, 애플리케이션.. 2024. 11. 9.