728x90

BackEnd 61

QueryDSL 1:N처리[수정예정]

공부 하다가 만들거여서 테이블에 관한 설명과 QueryDSL에서 적용이 안될수도 있습니다.이런 방식이라고 어느정도 파악용도로 작성합니다.코드 테스트후 수정 예정입니다.-- 임의의 테이블 생성-- 사용자 계정CREATE TABLE UserAccount ( account_id SERIAL PRIMARY KEY, account_code VARCHAR(50), account_type VARCHAR(50), account_status VARCHAR(50));-- 사용자 정보CREATE TABLE UserProfile ( profile_id SERIAL PRIMARY KEY, profile_code VARCHAR(50), user_name VARCHAR(100));-- 사용자 ..

BackEnd/Spring Boot 2025.01.30

함수 호출 오버헤드가 발생 이란?

reduce에서 "함수 호출 오버헤드가 발생한다"는 말은 reduce 메서드가 전달받은 콜백 함수를 요소마다 실행하기 때문에, 반복적으로 함수 호출이 이루어지는 과정에서 성능 비용이 발생한다는 뜻입니다.1. 함수 호출의 동작자바스크립트나 자바 같은 언어에서 함수가 호출될 때, 다음 작업이 이루어집니다:스택에 함수 호출 기록을 추가 (Call Stack에 Push).함수의 매개변수와 내부 변수들을 메모리에 저장.함수가 실행되고 결과를 반환.호출 기록을 스택에서 제거 (Call Stack에서 Pop).이러한 과정은 반복적으로 발생하면 성능에 영향을 미칠 수 있습니다. reduce는 각 요소에 대해 콜백 함수(Accumulator Function)를 호출하므로, 요소 수가 많을수록 함수 호출 횟수가 많아집니다..

BackEnd 2025.01.19

명령형과 선언형 차이[이론]

1. 명령형 스타일에서 함수를 사용하는 경우명령형 스타일은 **"어떻게 수행할지(how)"**를 세부적으로 명시합니다. 함수로 분리하여 코드를 더 읽기 쉽게 만들 수도 있지만, 여전히 실행 순서와 상태 관리를 명확히 드러냅니다.예제// 명령형: 함수로 분리function calculateSum(numbers) { let sum = 0; // 상태를 명시적으로 관리 for (let i = 0; i 특징명령형 스타일은 반복문, 변수 업데이트와 같은 상태 변경을 직접 명시합니다.함수로 분리했더라도 내부적으로 루프와 상태 변화가 명시적으로 나타나며, 이를 통해 결과를 계산합니다.코드의 논리 흐름이 "각 단계별로 명확하게 보이는" 방식입니다.명령형의 본질: "어떻게 동작할지"를 세부적으로 기술합니다.2. 선언..

BackEnd 2025.01.19

함수형 프로그래밍의 장단점

장점1. 병렬 처리 및 동시성에 유리함수형 프로그래밍에서는 불변성과 순수 함수 덕분에 병렬 처리가 안전하며 동시성 문제를 줄일 수 있습니다.Java 예제import java.util.Arrays;import java.util.List;public class FunctionalExample { public static void main(String[] args) { List numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8); // Stream API를 사용하여 병렬 처리 int sum = numbers.parallelStream() .map(x -> x * 2) // 각 요소를 2배로 ..

BackEnd 2025.01.19

함수형 프로그래밍이란?

함수형 프로그래밍(Functional Programming)은 프로그래밍 패러다임 중 하나로, 프로그램을 수학적 함수의 조합으로 표현하고 **상태 변화와 부수 효과(Side Effect)**를 최소화하는 것을 목표로 합니다. 이 패러다임은 순수 함수를 기반으로 하며, 데이터를 변형하거나 상태를 변경하지 않고 결과를 도출하는 데 초점을 둡니다.핵심 개념순수 함수(Pure Function)동일한 입력에 대해 항상 동일한 출력을 반환하는 함수입니다.외부 상태를 변경하지 않고 부수 효과(Side Effect)가 없습니다.예:// 순수 함수의 예const add = (a, b) => a + b;console.log(add(2, 3)); // 항상 5 반환불변성(Immutability)데이터는 변경되지 않고, 변경..

BackEnd 2025.01.19

헥사고날 아키텍처(Hexagonal Architecture)_ 추가 수정 필요

1. 헥사고날 아키텍처 란? 헥사고날 아키텍처(Hexagonal Architecture)는 소프트웨어 설계 패턴 중 하나로, 시스템을 다양한 모듈로 나누어 유지보수성과 확장성을 높이기 위해 고안된 구조입니다. 2005년 Alistair Cockburn에 의해 제안되었으며,포트와 어댑터 아키텍처(Ports and Adapters Architecture)라고도 불립니다.2. 주요 개념헥사고날 아키텍처의 주요 개념은 애플리케이션 코어를 외부 시스템과의 의존성에서 분리하는 것입니다. 이를 통해 시스템 내부 로직과 외부 인터페이스가 느슨하게 결합되어 변경에 유연하게 대응할 수 있습니다. 이 구조는 애플리케이션의 핵심 비즈니스 로직이 외부의 세부 사항에 의존하지 않고, 포트와 어댑터를 통해 외부와 통신합니다. 3...

BackEnd 2024.08.27

멀티 스레드 환경에 대한 이해

멀티 스레드 환경 대부분 하나의 웹 서버는 여러개의 요청을 동시에 수행할수 있다. 즉. 작성한 코드 한 줄은 동시에 수행 될 수 있다. 그래서 하나의 자원(DB Row, 서버 글로벌 변수 등..)을 두고 여러 개의 연산들이 경합한다.(데이터 정합성을 깨뜨릴 수 있다.) 예) 100원을 출금 하는 요청이 동시에 발생한다면? 이름 잔액 홍길동 1000 트랜잭션1 READ(홍길동 잔고) > 1000 트랜잭션2 READ(홍길동 잔고) > 1000 트랜잭션1 UPDATE(홍길동 잔고 - 100) > 900 트랜잭션2 UPDATE(홍길동 잔고 - 100) > 900 결과. -200이 되어 800원이 되어야 하지만 트랜잭션2 에서는 1000원으로 읽었기 때문에 900원으로 UPDATE 된다. 그래서 없는돈 100원이..

BackEnd 2024.02.05

트랜잭션 설정 및 아주아주 간단한 팁

트랜잭션 설정 방법 @Transactional import org.springframework.transaction.support.TransactionTemplate; 위에 꺼를 사용해야 좀더 다양한 설정을 할수있다. 주의해야 할점 Proxy방식으로 동작 하기 때문에 Class를 상속 받는 특정 개체가 만들어진다. 그래서 inner 함수를 호출하게 될경우 트랜잭션이 제대로 실행되지 않는다. // Transactional이 제대로 동작하지 않는 경우 // Proxy 패턴이므로 제대로 동작하지 않는다. public Member create(Member member) { return getMember(member); } @Transactional private Member getMember(Member mem..

BackEnd/Spring Boot 2024.02.03

Timline 읽어오는법 ( pull/push Model )

TimeLine Follow 같은 구조일 경우 Follow 된 User의 Post 까지 가져오는 2가지 방식을 설명 1. Pull Model(Fan Out On Read) 시간 복잡도 log(Follow 전체 레코드) + 해당회원의 Following * log(Post 전체 레코드) 단점 사용자가 매번 홈에 접속할때마다 부하가 발생한다.(사용자 Follow를 매번 OR 조건으로 검색해야 한다.) 사용 하는 업체 : FaceBook 기술적 한계 로 인한 정책 Facebook에서 최대 5000명의 친구를 보유할수 있습니다. 5000명 이상의 사람들과 연결해야 하는 경우 개인 계정을 Facebook 페이지로 변경하세요. 다른 친구 요청을 보내려면 먼저 누군가와 친구 관계를 끊어야 합니다. 2. Push Mod..

BackEnd 2024.02.03

커버링 인덱스

커버링 인덱스 검색 조건이 인덱스에 부합하다면, 테이블에 바로 접근 하는 것 보다 인덱스를 통해 접근하는 것이 매우 빠르다.(절대적이진 않다.) 그렇다면 테이블에 접근하지 않고 인덱스로만 데이터 응답을 내려줄 순 없을까? -> 커버링 인덱스 (인덱스로만 커버 하겠다) 예 Index Table 나이 id 19 3 27 2 32 1 45 4 회원 Table id 이름 성별 나이 직업 1 홍길동 남 32 경찰 2 김천사 여 27 목사 3 이순신 남 19 어부 4 김철수 남 45 개발자 1. 아래 쿼리를 실행하게 된다면..? SELECT 나이 FROM 회원 WHERE 나이 < 30 Index Table에서 나이가 19, 27을 찾게 된다. 이후 회원 Table 에서 나머지 정보를 찾게 된다.하지만 원하는 정보는..

BackEnd 2024.01.25
728x90