본문 바로가기

전체 글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.
파일 시스템과 DBMS 정리 1. 파일 시스템(File System)의 개념파일 시스템은 운영체제에서 데이터를 저장하고 관리하는 가장 기본적인 방법입니다. 하드디스크, SSD와 같은 저장장치에 데이터를 파일 형태로 저장하며, 파일을 읽고 쓰기 위한 규칙과 구조를 제공합니다. 특징데이터를 파일 단위로 저장.디렉토리 구조로 파일을 분류 및 관리.운영체제에 내장된 기본적인 데이터 관리 도구.텍스트, 이미지, 비디오 등 다양한 형태의 파일 저장 가능.장점단순한 구조로 빠르게 접근 가능.별도의 소프트웨어 설치 없이 운영체제만으로 사용 가능.단점데이터 중복 및 무결성 보장 어려움.파일 단위로 관리되어 대규모 데이터 관리 비효율적.복잡한 검색, 관계형 데이터 처리 기능 부족. 2. DBMS(Database Management System)의 개.. 2025. 1. 19.
[JAP] Querydsl 및 설정 테스트 코드 Querydsl란?스프링부트 + JPA + 스프링 DATA JPA 합쳐서 사용하지만 복잡한 쿼리, 동적 쿼리를 구현할때 문제가 됨이를 해결하는게 Querydsl입니다. 또 다른 장점으로는 Java 코드로 Query를 작성하기 때문에 문법 오류를 컴파일 시점에 딱 잡아줍니다.또한 Querydsl은 파라미터 바인딩 자동 처리를 해줍니다. Querydsl 테스트 코드package study.querydsl;import com.querydsl.jpa.impl.JPAQueryFactory;import jakarta.persistence.EntityManager;import org.assertj.core.api.Assertions;import org.junit.jupiter.api.Test;import org.sp.. 2024. 11. 16.