전체 글

Software Engineering

[디자인 패턴] 빌더(Builder) 패턴

1. 빌더 패턴이란? 빌더 (Builder) 패턴은 복잡한 구성의 객체를 효과적으로 생성하는 패턴 빌더 패턴의 종류는 2가지 - 생성시 지정해야 할 인자가 많을 때 사용하는 패턴 - 객체 생성 시 여러 단계를 순차적으로 거칠 때, 이 단계의 순서를 결정해 두고 각 단계를 다양하게 구현할 수 있도록 하는 패턴 대부분 빌더 패턴은 첫번째 종류로만 이해하는 경우가 대부분 빌더 패턴외에 객체 생성 패턴은 대표적으로 점층적 생성자 패턴, 자바 빈즈 패턴이 존재 점층적 생성자 패턴 - 생성자를 매개변수에 갯수만큼 구성하는 패턴 자바 빈즈 패턴 - 별도의 생성자를 구성하지 않고 객체를 생성한 후, Setter를 이용하여 객체를 구성하는 형태를 의미 2. 생성시 지정해야 할 인자가 많을 때 사용하는 패턴 public ..

Database

[Database] 트랜잭션(Transaction)과 ACID 개념

1. 트랜잭션(Transaction) 이란? - 논리적인 여러 작업을 하나로 묶는 단위 - 하나의 일련된 작업 예시 - 손님이 카페에서 음료를 주문 했을 경우, 손님의 주문 그리고 음료가 제조 및 준비되어 손님에게 전달되기까지의 모든 과정을 하나의 트랜잭션으로 볼 수 있다. 트랜잭션의 특징은 모두 성공하거나, 하나라도 실패하면 전체가 실패한다는 특징을 가지고 있다. 만약 손님의 음료가 완성되어 전달되는 과정에서 음료가 엎어지게 되면, 손님의 주문은 전체가 실패하게 되는 것과 동일하다. 2. 트랜잭션의 ACID란? 트랜잭션에는 4가지의 핵심 속성이 있으며, 해당 속성이 하나라도 충족되지 않으면 해당 트랜잭션은 보장되지 않는다. 즉 ACID는 트랜잭션이 안정적으로 수행되기 위해 보장되어야할 4가지 핵심 속..

Software Engineering

[디자인패턴] 어댑터(Adapter) 패턴

1. Adapter란? '사전적 의미 - 기계, 기구 등을 다목적으로 사용하기 위한 부가 기구' 어댑터는 우리 주변에서도 많이 볼수 있다, 대표적으로 110V 가전제품에 220V 어댑터를 끼워 사용하는걸 예로 들 수 있다. 다시 말해 서로 호환되지 않는 기능을 어댑터를 통해 호환시켜 작동하다록 하는 역할을 한다. 위 내용을 객체지향 프로그래밍에 적용시켜 보면 어댑터 패턴은 아래와 같은 내용으로 설명할 수 있다. '어댑터 패턴은 호환되지 않는 인터페이스를 가진 객체들이 협업할 수 있도록 하는 구조적 디자인 패턴' 2. Adapter 패턴의 구현 요구사항 두 수에 대한 다음 연산을 수행하는 객체 구현 수의 두 배의 수를 반환 twiceOf(float):float 수의 반(1/2)의 수를 반환 halfOf(f..

Software Engineering

[디자인패턴] 전략(Strategy) 패턴

1. 인터페이스란? - 키보드나 디스플레이 따위처럼 사람과 컴퓨터를 연결하는 장치 - 기능에 대한 선언과 구현을 분리해주는 기능 역할 - 기능을 사용하는데 있어서 통로 역할 2. 델리게이트(Delegate)란? - 사전적 의미에서는 어떤 사람이나 그룹을 대신하는 사람, 즉 대리인 혹은 대표로 해석 - 특정 기능의 동작을 다른 객체에게 위임하여 동작하도록 함 public class AService { //has a 관계 BRepository bRepository; public void save() { // save 동작을 bRepository에게 위임하여 처리 bRepository.save(); } } 3. 전략(Strategy) 패턴 - 여러 알고리즘을 하나의 추상적인 접근점(인터페이스)을 만들어 접근점..

Algorithm

[자료구조] 그래프(Graph)

그래프란? 그래프는 정점(Node, Vertex)와 간선(Edge)로 이루어진 자료구조이며, 방향성이 있는 방향 그래프(Directed Graph)와 방향성이 없는 무방향 그래프(Undirected Graph)로 나뉜다. 더불어 정점과 정점을 잇는 간선에는 가중치(Weight)가 존재할 수 있다. 트리(Tree)또한 그래프의 일종이지만, 그래프는 트리와 달리 정점마다 간선이 존재하지 않을 수 있으며, 루트, 부모, 자식 노드의 개념이 존재하지 않는다. 그래프 자료구조는 컴퓨터 네트워크, 교통 시스템, 소셜 미디어와 같은 다양한 현실 세계의 문제를 모델링하는데 사용된다. 그래프 관련 용어 정점(Node, Vertext) - 데이터를 나타냄 간선(Edge) - 두 정점의 관계를 나타냄 차수(Degree) -..

Algorithm

[알고리즘] DFS / BFS

DFS / BFS는 그래프 탐색 알고리즘중 하나 탐색이란 수 많은 데이터는 원하는 데이터를 찾는 과정 깊이 우선 탐색(DFS, Depth - First Search) - DFS는 그래프와 트리의 깊은 부분을 우선적으로 탐색하는 알고리즘 - 현재 정점(노드)에서 연결된 정점(노드) 하나를 골라 깊이 끝까지 탐색을 진행하며, 끝까지 진행한 경우 백트래킹을 하여 다음 노드로 탐색을 진행한다. - Stack 혹은 재귀 함수를 이용하여 구현한다. - 모든 정점을 방문할 때 유리하게 사용하며, 경우의수, 순열, 조합 문제에서 많이 사용한다. - 모든 정점을 방문할 필요가 없거나 최단 거리를 구하는 경우에는 너비 우선 탐색(BFS)가 유리하다. 장점 - 현 경로상의 노드들만 기억하므로, 저장공간 수요가 비교적 적다...

Spring

IntelliJ에서 Spring MVC 세팅하기

인텔리제이의 Add Framewrok Support를 이용해서 Spring MVC 설정하는 방법이 대부분이지만, Add Framework Support 기능이 정상 동작하지 않는 다수의 케이스를 위해 작성 Spring MVC 설정및 동작을 위한 최소한의 설정만 작성1. 프로젝트 생성 Maven Archetype 으로 새로운 프로젝트를 생성Archetype -> maven-archetypoe-webapp 설정 2. pom.xml 설정Maven Archetype으로 프로젝트를 생성하면, Spring 세팅이 되어 있지 않은 깡통 프로젝트이기 때문에 Spring MVC Dependency를 추가해줘야 한다. pom.xml에 Spring Web MVC Dependency 추가- Maven Repository 에서..

Spring

[Spring] Spring Boot 3 마이그레이션 시작하기

1. 이슈 사항2023년 11월 24일부로 Spring Boot 2.7.x 버전대의 지원이 종료를 끝으로 Spring Boot 2의 모든 지원 종료OSS 지원 종료에 따른 여러 불이익 발생으로 한샘 내에서도 기존 사용중인 Spring Boot 2의 버전업이 필요2. Spring Boot 2 지원 종료에 따른 영향start.spring.io 이용한 2.x 프로젝트 생성 불가패치/보안 업데이트 부족으로 인한 리스크 발생신규 라이브러리 추가시 호환성 문제 발생 가능성3. Spring Boot 3 변경 사항최소 JDK 버전 요구사항 - JDK 17 이상최소 Gradle 버전 요구 사항 - Gradle 7.5 이상최소 Maven 버전 요구 사항 - Maven 3.6.3 이상최소 Hibernate 버전 요구 사항 ..

turtleDev
거북한 개발자의 기록