no image
팩토리 메서드 패턴
Factory Method Pattern팩토리 메서드 패턴은 객체 생성의 책임을 서브클래스로 위임하여, 객체 생성을 캡슐화하는 디자인 패턴입니다. 이 패턴을 사용하면 객체 생성 로직을 별도의 메서드로 분리하여 유지보수를 용이하게 하고, 확장성을 높일 수 있습니다.1. 팩토리 메서드 패턴의 핵심 구조Product (제품): 생성될 객체의 인터페이스ConcreteProduct (구체적인 제품): 인터페이스를 구현하는 실제 클래스Creator (창조자, 팩토리 역할): 팩토리 메서드를 선언하는 추상 클래스 또는 인터페이스ConcreteCreator (구체적인 창조자): 팩토리 메서드를 오버라이딩하여 실제 객체를 생성하는 클래스2. 동작 흐름클라이언트는 Creator 클래스를 사용하여 객체를 요청합니다.Crea..
2025.02.17
no image
MySQL/MariaDB windows
MySQL과 MariaDB 동시 실행 및 서비스 제어 방법 MySQL과 MariaDB는 동일한 포트를 사용하는 경우가 많아 동시에 실행이 불가능합니다.따라서 한쪽을 정지시키고 다른 한쪽을 실행해야 하는 번거로움이 발생할 수 있습니다.이를 해결하기 위해 Windows의 서비스 관리 도구를 사용하는 대신, 명령어를 통해 간단히 서비스를 제어하는 방법을 사용할 수 있습니다. net start 명령어는 Windows에서 서비스(서비스 관리자에 등록된 서비스)를 시작할 때 사용하는 명령어입니다.반대로 서비스를 정지할 때는 net stop 명령어를 사용합니다.MariaDB 서비스를 시작하는 명령어net start MariaDB 이 명령어를 실행하면 Windows 서비스 관리자에 등록된 MariaDB 서비스가 시작됩..
2025.01.27
no image
데코레이터(Decorator) 패턴
Decorator Pattern왜 데코레이터 패턴이 필요할까?소프트웨어를 개발하다 보면, 객체에 새로운 기능을 추가하거나 변경해야 하는 경우가 많습니다.하지만 기존 클래스의 코드를 수정하거나 새로운 서브클래스를 만들어 기능을 확장하면 다음과 같은 문제가 생깁니다:기존 코드 수정 위험 : 기존 클래스 수정은 오류를 유발할 수 있습니다.서브클래스 폭발 문제 : 모든 조합을 처리하려면 서브클래스가 기하급수적으로 늘어납니다.해결책데코레이터 패턴은 객체를 감싸는 방식으로 기능을 동적으로 확장할 수 있습니다.이를 통해 코드 수정 없이도 새로운 기능을 추가하고, 서브클래스 증가를 방지할 수 있습니다.데코레이터 패턴의 구조 : 트리 비유로 이해하기데코레이터 패턴은 기본 객체를 꾸미는 과정을 비유적으로 설명할 수 있습니..
2025.01.26
no image
옵저버 패턴 이해하기
소프트웨어 개발에서 디자인 패턴은 문제를 효과적으로 해결하는 데 도움을 주는 재사용 가능한 솔루션을 제공합니다. 그중 옵저버 패턴은 한 객체의 상태 변화가 다른 객체에 자동으로 전파되어야 할 때 유용합니다.옵저버 패턴이란?옵저버 패턴은 1:N 관계에서 사용됩니다.한 객체(발행자 Subject)의 상태가 바뀌면 이 객체를 관찰하는 다른 객체(옵저버, Observer)에게 자동으로 알림이 전달됩니다. 이를 통해 객체 간의 결합도를 낮추고 시스템을 유연하게 설계할 수 있습니다.헤드헌터와 개발자구성 요소Recruiter (헤드헌터)발행자(Observable) 역할을 하며, 새로운 채용 공고를 구독 중인 개발자들에게 알립니다.새로운 공고가 등록되면 notifyDevelopers() 메서드를 통해 모든 구독자 알림..
2025.01.20
no image
전략 패턴(Strategy Pattern)
전략 패턴이란전략 패턴은 여러 가지 방법(알고리즘)을 미리 만들어 놓고, 필요할 때 그중 하나를 골라 사용하는 것입니다. 이렇게 하면 필요할 때마다 새로운 방법을 쉽게 추가할 수 있습니다.전략 패턴을 사용 시 이점1. 동작의 유연한 변경 : 실행 중에 원하는 전략(행동)을 교체할 수 있습니다.2. 코드 수정 최소화 : 새로운 전략을 추가해도 기존 코드를 수정하지 않아도 됩니다.3. 유지보수성 향상 : 코드가 분리되어 있어 가독성과 유지보수가 쉬워집니다.예시 : 택배 배송 시스템문제 사항우리는 택배를 고객에게 배송해야 합니다.배송 방법은 오토바이, 트럭, 드론 중 하나를 선택할 수 있습니다.고객의 위치, 물건의 크기, 긴급성에 따라 적절한 배송방법을 선택해야 합니다.새로운 배송 방법이 추가될 가능성도 있습..
2025.01.12
no image
Entity LifeCycle
JPA에서 Entity의 생명주기는 엔티티가 생성되고 영속성 컨텍스트에 저장되며, 분리되거나 삭제되기까지의 과정을 말합니다. 엔티티는 비영속(New/Transient), 영속(Managed), 준영속(Detached), 삭제(Removed) 삭제로 구분됩니다.1. 비영속(New/Transient)비영속 상태는 엔티티가 단순히 메모리에 존재하지만 영속성 컨텍스트에 포함되지 않은 상태입니다. 따라서 JPA가 전혀 관리하지 않으며, 데이터베이스와도 연결되지 않습니다.Member member = new Member(); // 비영속 상태여기서 member는 영속성 컨텍스트에 저장되지 않았기에 비영속 상태입니다. 이 상태일 때는 EntityManager의 도움 없이 일반 객체로 사용할 수 있습니다. 2. 영속(M..
2024.10.25
no image
-parameters 플래그 Error
Spring MVC 애플리케이션 개발 시, @RequestParam 애너테이션을 사용할 때 종종 발생할 수 있는 오류가 있습니다. 이 오류는 컴파일 시 -parameters 플래그가 설정되지 않아 발생합니다. 오류 메시지는 다음과 같습니다Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: java.lang.IllegalArgumentException: Name for argument of type [java.lang.String] not specified, and parameter name information not available via re..
2024.08.24
no image
Github Repository 병합
Github Repository 병합Git을 사용하여 여러 레포지토리를 하나로 병합하는 과정을 설명하겠습니다. 이 과정에서는 서브트리(SubTree) 기능을 사용하며 기존 레포지토리들을 하나의 새 레포지토리에 추가하는 방법입니다.1. 새로운 레포지토리 생성 및 클론먼저 GitHub에서 새로운 레포지토리를 생성하고, 해당 레포지토리를 gitbash & 터미널로 로컬에 클론 합니다. 이때, Test 폴더가 생성될 것입니다.git clone https://github.com/Joo-Veloper/Test.gitcd Test2. 각 레포지토리 서브트리로 추가하기 기존의 레포지토리들을 각각 서브트리로 추가합니다. 이때 각 레포지토리를 저장할 폴더 이름을 지정하고,--prefix 옵션을 사용합니다. (예를 들어 `..
2024.08.23
GIT
no image
[Redis] Geospatials, Bitmaps
Geospatial indexes 지리적 정보를 저장하고 검색하는 데이터 구조입니다. 이 데이터 구조는 지리적 좌표를 저장하고, 좌표들 간의 거리를 계산하거나 특정 범위 내의 좌표들을 검색하는 기능을 제공합니다. 지리적 데이터는 위도와 경도로 표시됩니다. Geospatial Indexes는 이러한 위도와 경도를 기반으로 하여 데이터를 구성하며, 공간상의 거리나 위치를 계산할 수 있는 기능을 포함합니다. 이러한 데이터 구조는 지리 정보 시스템이나 위치 기반 서비스에서 많이 사용됩니다.$ GEOADD seoul:station 126.923917 37.556944 hong-dae 127.027583 37.497928 gang-nam특정 키 `seoul:station`이라는 지리적 위치와 해당 위치의 이름을 추..
2024.05.06
DB