728x90

개발 308

결합도 공부

1. 개념 결합도(Coupling)는 소프트웨어 설계에서 모듈 간의 의존성 정도를 나타내는 개념이다. 쉽게 말해, 한 모듈(또는 클래스, 함수)이 다른 모듈에 얼마나 많이 의존하고 있는지를 나타내며, 이는 시스템의 유지보수성, 확장성, 재사용성에 직접적인 영향을 준다. 2. 종류결합도는 일반적으로 다음과 같은 7가지 수준으로 분류된다.(낮은 결합도 → 높은 결합도 순)결합도 종류설명자료 결합(Data Coupling)한 모듈이 다른 모듈에게 단순한 데이터를 전달. 가장 바람직함.스탬프 결합(Stamp Coupling)구조체나 객체처럼 데이터 묶음을 전달, 하지만 전체가 아닌 일부만 사용.제어 결합(Control Coupling)한 모듈이 다른 모듈에 어떻게 동작할지 지시 (ex. 플래그).외부..

개발/ETC 2025.05.08

[Java] Null Object Pattern 공부

1. 개념 널 오브젝트 패턴은 null을 반환하거나 사용하지 않고, 그 대신에 행동은 하지만 아무 효과가 없는 객체를 반환하거나 사용하는 방식이다. 이 객체는 실제 구현체와 동일한 인터페이스를 구현하지만, 내부 로직은 아무것도 하지 않는다. 2. 구성요소 - 인터페이스 or 추상 클래스 > 공통된 메서드 정의 - 실제 구현 클래스(Real Object) > 기능을 실제로 수행 - 널 오브젝트 클래스(Null Object) > 아무것도 하지 않는 구현체 (혹은 디폴트 동작만 수행) 예제)public interface Log { void info(String message);}// 실제 로깅 구현public class ConsoleLog implements Log { publi..

이진 트리 공부

이진트리에 대해서 공부해보자 1. 개념 이진 트리는 각 노드가 최대 두 개의 자식 노드를 가지는 트리(Tree) 자료구조를 말한다. 여기서 두 개의 자식 노드는 각각 왼쪽 자식(left child), 오른쪽 자식(right child) 이라고 부른다. 트리는 그래프 이론의 한 형태인데, 방향성이 있고 순환(cycle)이 없는 연결 구조를 가지며, 이 중 이진 트리는 특별히 자식이 둘 이하라는 제약 조건이 붙은 것이다. 2. 이진 트리의 기본 용어 루트(root): 트리의 가장 꼭대기 노드. 부모가 없다. 리프(leaf): 자식이 없는 노드. (즉, 말단 노드) 내부 노드(internal node): 자식이 하나 이상 있는 노드. 서브트리(subtree): 어떤 노드를 루트로 하는 작은 트..

개발/ETC 2025.04.30

페이지 교체 알고리즘 공부

개념페이지 교체 알고리즘(page replacement algorithm)은 가상 메모리 시스템에서 사용되는 핵심 기술로, 메모리에 올라와 있는 페이지 중 어떤 것을 제거하고 새로운 페이지를 불러올지 결정하는 방법. 운영체제가 사용하는 메모리 관리 방식에서 물리 메모리는 한정적이기 때문에, 필요한 페이지가 없을 경우 디스크에서 가져와야 하고, 이때 기존 페이지 중 하나를 제거해야 한다. 이때 어떤 페이지를 제거할지를 정하는 기준이 바로 페이지 교체 알고리즘이다. 페이지 교체가 필요한 상황: 페이지 부재(Page Fault)1. 프로세스가 어떤 페이지에 접근하려고 한다. 2. 그 페이지가 현재 물리 메모리에 없으면 페이지 폴트(page fault) 발생. 3. 새 페이지를 디스크에서 불러와야 함. ..

개발/ETC 2025.04.28

[jQuery] jQuery 파헤치기

jQuery에 대해서 이어서 알아보자 1. 선택자(Selector)선택자는 HTML 요소를 찾아서 조작할 수 있게 해주는 중요한 부분이다. jQuery에서는 CSS 선택자와 비슷한 방식으로 요소를 선택할 수 있다. 예시 ID 선택자: $("#id") 해당 ID를 가진 요소를 선택.$("#myDiv") // ... 선택 클래스 선택자: $(".class") 해당 클래스를 가진 모든 요소를 선택.$(".myClass") // ... 선택 태그 선택자: $("tag") 해당 태그를 가진 모든 요소를 선택.$("p") // 모든 태그 선택 자식 선택자: $("parent child") 부모 요소 아래에 있는 특정 자식 요소를 선택.$("ul li") // 모든 내부의 요..

[jQuery] jQuery에 대해서 알아보자.

1. jQuery란?jQuery는 자바스크립트(JavaScript) 라이브러리 중 하나다. 2006년에 John Resig가 만들었고, "더 적은 코드로 더 많은 것을 하자"는 슬로건 아래, 자바스크립트를 쉽고 간결하게 쓸 수 있게 도와주는 도구다. 2. 핵심 기능들1. DOM 조작 HTML 요소를 선택하고, 변경하거나 추가/삭제하는 작업을 간편하게 할 수 있다. 예:$("#title").text("Hello jQuery!"); 2. 이벤트 처리 클릭, 키보드 입력 같은 이벤트를 쉽게 다룰 수 있다. 예:$("#btn").click(function() { alert("버튼 클릭됨!");}); 3. AJAX 요청 비동기 통신도 간단하게 할 수 있다. 예:$.get("/data", f..

단일 프로세스 시스템 알아보기!

단일 프로세스 시스템에 대해서 알아보자 ! 단일 프로세스 시스템은 한 번에 하나의 프로그램만 실행한다. 또 다른 프로그램을 실행하려면, 먼저 실행 중이던 프로그램을 종료시키고 그 다음 프로그램을 실행해야 한다. 단일 프로세스 시스템의 단점❌ 1. 병렬 처리 불가 한 번에 하나의 작업만 처리 가능해서 여러 작업을 동시에 수행할 수 없어. 예: 사용자가 작업 중에 파일 다운로드나 음악 재생을 동시에 할 수 없음. ❌ 2. 응답성 저하 하나의 작업이 오래 걸리면 전체 시스템이 멈춘 것처럼 느껴질 수 있어. 예: 무한 루프나 I/O 대기 중이면 시스템 전체가 반응이 없음. ❌ 3. 확장성 한계 다중 CPU나 멀티코어 환경을 활용할 수 없음. 현대 시스템에서는 CPU 코어가 많아도 하나만 ..

개발/ETC 2025.04.16

[JPA] JPA에서 양방향 @OneToOne 관계와 Lazy Loading의 한계

JPA에서 @OneToOne 양방향 관계를 사용할 때, 연관 관계의 주인이 아닌 엔티티를 조회하는 경우 Lazy Loading이 제대로 동작하지 않는 이유와 그 해결책에 대해 살펴보자.   1. Lazy Loading의 동작 원리 Lazy Loading은 엔티티를 실제로 사용할 때 데이터베이스에서 해당 연관된 데이터를 조회하는 전략이다. 이때 JPA는 연관된 엔티티가 실제로 필요할 때만 쿼리를 실행하여 데이터를 가져오는데, 이를 통해 성능을 최적화할 수 있다.@Entitypublic class User { @OneToOne(fetch = FetchType.LAZY) private Profile profile;}@Entitypublic class Profile { @OneToOne(mapp..

[Spring] 의존성 주입 간단히 알아보자

1. 개념A 객체가 어떤 작업을 수행하기 위해 B 객체를 필요로 하는 경우에 두 객체 사이에 의존성이 존재한다고 표현한다. 이때, A 객체가 아닌 외부의 C 객체가 B를 생성한 뒤에 이를 전달해서 의존성을 해결하는 방법을 의존성 주입(Dependency Injection) 이라고 한다. 유연하고 재사용할 수 있는 설계를 만들기 위해서는 코드의 변경 없이 다양한 실행 구조를 만들 수 있어야 한다. 의존성 주입은 이를 돕는다. 예를 들어, A 객체 내부에서 B를 직접 생성하는 경우에는 B에 대한 결합도가 높아진다. 반면, B에 대한 생성 책임을 C에게 위임하고, C가 A에게 다시 전달해 주는 방식(의존성 주입)을 통해서 A는 B에 대한 결합도를 낮추고 유연한 설계를 만들 수 있다.       2. 의존성 주..

[Spring] 스프링 트랜잭션 전파 속성

1. 트랜잭션 전파란?스프링에서 트랜잭션 전파(Transaction Propagation) 는 트랜잭션의 경계에서 이미 진행 중인 트랜잭션이 있을 때 또는 없을 때 어떻게 동작할 것인가를 결정하는 기능.@Transactional 어노테이션이 존재하는 메서드를 호출했을 때, 기존에 트랜잭션이 존재하면 재사용할지, 예외를 던질지 등 행동을 결정할 수 있다. 트랜잭션 전파 속성에는 REQUIRED, REQUIRED_NEW, MANDATORY, SUPPORTS, NOT_SUPPORTED, NESTED, NEVER가 존재하며, @Transactional 어노테이션의 propagation 속성에 값을 설정할 수 있다.   2. 설명REQUIRED: 트랜잭션이 존재하는 경우 해당 트랜잭션 사용하고, 트랜잭션이 없는 ..

728x90