IoC와 DI에 대해서
·
SW 공학 & 프로그래밍 언어/SW 방법론
IoC(Inversion of Control, 제어의 역전)와 DI(Dependency Injection, 의존성 주입)는 객체 지향 설계에서 객체 간의 결합도를 낮추고 유연한 구조를 만들기 위한 핵심 개념. Spring Framework 등 OOP 진영의 현대 프레임워크 기반 철학이기도 합니다.IoC (Inversion of Control) - 제어의 역전전통적 방식에서는 개발자가 필요한 객체를 생성하거나 조작했습니다. IoC 방식에서는 객체의 생성과 생명주기 관리 권한을 외부(컨테이너)에 위임합니다.즉, “객체 제어권”이 개발자에서 프레임워크로 “역전”되는 것입니다.IoC 예시// 전통 방식 (제어권 있음, 개발자)Service service = new Service();Controller contr..
알고리즘 초보 탈출: DP(동적계획법)을 명확하게 이해하는 방법
·
CS/알고리즘 & 자료구조
알고리즘을 처음 공부할 때, 많은 사람들이 어려워하는 개념이 바로 "동적계획법(DP)"입니다. 이 글에서는 DP를 어떻게 접근하고, 어떤 기준으로 적용할지 명확히 이해할 수 있도록 안내하겠습니다. 📌 동적계획법(DP)이 어려운 이유DP는 문제를 작은 문제로 나누고, 그 결과를 활용하여 큰 문제를 해결하는 방식입니다. 하지만 처음부터 DP가 적용된다는 것을 떠올리기 쉽지 않죠. 문제를 보면 막막하게 느껴지기 때문입니다.📌 DP를 명확히 적용하는 3가지 기준다음의 기준을 보고 DP 적용 여부를 쉽게 판단해보세요.반복되는 부분 문제가 있는가?배수, 비율 등 간단한 규칙으로 최적이 가능한가? (그리디로 해결 가능)작은 문제의 해답을 큰 문제에서 활용할 수 있는가? (점화식 판단)이 기준을 충족하면 DP로 접..
[스프링부트] JPA에 관해서
·
SW 공학 & 프로그래밍 언어/스프링부트
JPA는 객체와 관계형 데이터베이스 간의 매핑을 자동화해주는 ORM 기술로, Spring Boot 환경에서는 Hibenate를 기본 구현체로 많이 사용합니다.JPA의 핵심 개념은 Entity, Persistence Context, 영속성 전이(Cascade), 지연 로딩(Lazy), 즉시 로딩(Eager), JPQL, 그리고 변경 감지(Dirty Checking) 등이 있고, 실무에서는 트랜잭션 범위 내에서 1차 캐시, Flush 시점, 연관관계 설정 방식 등를 이해하고 있어야 제대로 활용할 수 있습니다.SQL 작성이 필요한 경우에는 JPQL이나 QueryDSL, 또는 Native Query를 병행해 사용하고, 페이징 처리 시 Pageable 인터페이스를 통해 Page 타입으로 결과를 효율적으로 반환해야..
[수학적 처리] 증명된 수식을 로직으로
·
CS/알고리즘 & 자료구조
알고리즘을 성능 최적화하기 위해서는 수학적으로 증명된 기능을 사용하는 것이다.아래는 증명된 수식을 어떻게 로직을 구현하는지 정리한 내용이다.계속 추가될 예정이다.소수점 올림(ceil)ceil(X/Y) -> (X + Y - 1) / Yex)ceil(60/30) -> (60 + 30 -1) / 30 = 89 / 30 = 2소수점 내림(floor)나누기 자체가 내림 수foor(X/Y) -> X / Yex)floor(69/30) -> 69 / 30 = 2소수점 반올림(round)나누려고 하는 값의 절반을 올려줌으로 0.5 이상이면 반올림 효과 발생round(X/Y) -> (X + Y/2) / Yex)round(7/2) -> (7 + 2/2) / 2 = 8 / 2 = 4round(7/3) -> (7 + 3/2)..
트랜잭션 충돌 방지 전략: Pessimistic Lock과 Optimistic Lock 차이와 적용법
·
CS/데이터베이스
DBMS나 트랜잭션 시스템이 아닌 동시성 제어의 개념적인 패러다임에서 출발한 이론 다중 사용자/프로세스가 동일자원(DB row 등)을 동시에 읽고 쓰는 상황에서의 충돌을 방지하기 위해 등장해당 문제는 1970 ~ 1980년대 DBMS/OS 이론에서 활발히 논의됨비관적 락고전적인 RDBMS의 트랜잭션 동시성 제어 이론에서 등장했고 대표 기술로 2-Phase Locking(2PL)으로 트랜잭션이 자원을 모두 락으로 확보한 후 커밋합니다. 이 방식은 직렬화를 보장합니다.기본 아이디어는 “다른 놈이 반드시 충돌할 거야” → 그래서 미리 락을 걸고 진입을 통제합니다.적용방식으로 공유 자원(예: DB row)에 접근 전에 락을 선점합니다. 다른 트랜잭션은 대기하거나 실패합니다.주의 사항 & 병목 및 데드락 유..