본문 바로가기

분류 전체보기103

[Java]헥사고날 아키텍처 이번 프로젝트에서 헥사고날 아키텍처를 적용한다고 해서 블로그에 정리했습니다.1. 헥사고날 아키텍처 개요 헥사고날 아키텍처(또는 포트와 어댑터 아키텍처)는 소프트웨어 시스템을 외부 시스템과 격리하여 비즈니스 로직을 중심으로 개발하도록 돕는 아키텍처 패턴입니다.이 아키텍처는 외부 의존성을 관리하고 시스템을 더 쉽게 확장하고 테스트할 수 있도록 합니다.핵심 아이디어는 애플리케이션의 내부와 외부 시스템 간의 상호작용을 포트(Ports) 와 어댑터(Adapters) 라는 추상화로 나누어 설계하는 것입니다. 외부 시스템은 어댑터를 통해 시스템과 상호작용하며, 포트는 애플리케이션 내부의 핵심 도메인 로직과 외부 시스템 간의 인터페이스 역할을 합니다.2. 헥사고날 아키텍처의 구성 요소핵심 도메인(Core Domain).. 2025. 2. 5.
[알고리즘] java 버블 정렬 버블 정렬(bubble sort) 알고리즘의 특징  장점 - 구현이 매우 간단하다. 단점- 순서에 맞지 않은 요소를 인접한 요소와 교환한다.- 하나의 요소가 가장 왼쪽에서 가장 오른쪽으로 이동하기 위해서는 배열에서 모든 다른 요소들과 교환되어야 한다.- 특히 특정 요소가 최종 정렬 위치에 이미 있는 경우라도 교환되는 일이 일어난다.- 일반적으로 자료의 교환 작업(SWAP)이 자료의 이동 작업(MOVE)보다 더 복잡하기 때문에 버블 정렬은 단순성에도 불구하고 거의 쓰이지 않는다.버블 정렬(bubble sort)의 시간복잡도시간복잡도를 계산한다면비교 횟수최상, 평균, 최악 모두 일정n-1, n-2, … , 2, 1 번 = n(n-1)/2교환 횟수입력 자료가 역순으로 정렬되어 있는 최악의 경우, 한 번 교환하.. 2025. 2. 5.
[Spring]싱글톤 빈이 동시 요청을 처리하는 방법 Spring에서 여러 스레드에서 동일한 빈 인스턴스를 사용할 수 있는 이유Spring이 여러 스레드에서 동일한 빈 인스턴스를 사용할 수 있는 이유는 각 스레드에 대해 Java가 개인 스택 메모리를 생성하기 때문입니다. 즉, 멤버 변수를 사용하지 않고 지역 변수만 사용하면, 각 요청은 독립적인 데이터 공간을 가지므로 동시성 문제가 발생하지 않습니다. 각 스레드에 대해 Java가 개인 스택 메모리를 생성하기 때문입니다.스택 메모리는 스레드 실행 중 메서드 내부에서 사용되는 로컬 변수의 상태를 저장하는 역할을 합니다.이런 방식으로 Java는 병렬로 실행되는 스레드가 서로의 변수를 덮어쓰지 않도록 합니다.Spring의 싱글턴 빈은 힙 메모리에 생성되지만, 동기화나 개별 스레드 제한 없이 공유되므로 여러 스레드가.. 2025. 2. 2.
에라토스테네스_체 고대 그리스의 수학자 에라토스테네스가 만들어 낸 소수를 찾는 방법. 이 방법은 마치 체로 치듯이 수를 걸러낸다고 하여 '에라토스테네스의 체'라고 부른다. 따지고 보면 f(x)=x1P(x)f(x)=1P​(x)x​[1]의 수열을 표로 시각화한 것이라고 볼 수 있다. 1. solution(int n) - 에라토스테네스의 체public int solution(int n) { int answer = 0; int[] ch = new int[n+1]; for(int i=2; i 최종 복잡도O(nlog⁡log⁡n)에라토스테네스의 체의 특성상 매우 효율적임.2. solution2(int n) - 단순 소수 판별 구현시간 복잡도 분석외부 for 루프: O(n)2부터 n까지 모든 수를 순회내부 for 루프: O.. 2025. 2. 1.