본문 바로가기
728x90
반응형

전체 글416

[Spring] 스프링을 이용한 MVC패턴 구현(2) - 프로젝트 초기 설정 방법 개요 ◎ 들어가기에 앞서 ◎ Dispatcher Servlet 실행 흐름 ◎ Handler Mapping ◎ Handler Adapter ◎ View Resolver ◎ View ◎ 프로젝트 초기 설정 ◎ Dispatcher Servlet 설정 코드 안녕하세요. J4J입니다. 이번 포스팅은 스프링을 이용한 MVC패턴 구현 중 두 번째인 프로젝트 초기 설정 방법에 대해 적어보는 시간을 가져보려고 합니다. 들어가기에 앞서 이번 포스팅에서는 위의 MVC구조에서 빨간 박스에 포함된 내용에 대해 적어보고자 합니다. 또한 카트에 물건 담기라는 주제를 가지고 스프링으로 구현해보고자 합니다. 프로젝트 설정부터 시작하여 step by step으로 포스팅하겠습니다. Dispatcher Servlet 실행 흐름 앞서 포스팅.. 2021. 2. 11.
[Spring] 스프링을 이용한 MVC패턴 구현(1) - Spring MVC 개요 ◎ MVC패턴이란? ◎ 모델(Model) ◎ 뷰(View) ◎ 컨트롤러(Controller) ◎ MVC패턴 사용 이유 및 한계 ◎ 스프링 MVC 안녕하세요. J4J입니다. 이번 포스팅은 스프링을 이용한 MVC패턴 구현 중 첫 번째인 Spring MVC에 대해 적어보는 시간을 가져보려고 합니다. MVC패턴이란? 소프트웨어 디자인 패턴 중 하나로 Model(모델), View(뷰), Controller(컨트롤러)와 같이 3가지의 구성요소로 나누어 비즈니스 처리 로직과 사용자 인터페이스를 구분하며 개발하기 위해 사용됩니다. 디자인 패턴 중 가장 처음으로 듣게 될 만큼 웹/앱 분야에서 널리 사용되는 패턴이며 스프링 또한 MVC패턴을 기반으로 만들어진 프레임워크이기도 합니다. 각각의 구성요소에 대해 알아보도록.. 2021. 2. 9.
[Spring] 제어의 역전(IoC), 의존성 주입(DI) 개요 ◎ IoC란? ◎ DI란? ◎ 의존성 주입 방법 ◎ 기본적인 예시 ◎ 추상화 예시 ◎ DI 예시 - 생성자 이용 ◎ DI 예시 - Setter 이용 안녕하세요. J4J입니다. 이번 포스팅은 IoC와 DI에 대해 적어보는 시간을 가져보려고 합니다. IoC란? IoC란 Inversion of Controller의 약자로 제어의 역전이라는 의미를 가집니다. 그럼 제어의 역전이란 말은 무엇일까요? 제어의 역전이란 객체의 생명주기(생성 - 설정 - 초기화 - 소멸)를 개발자가 아닌 스프링 프레임워크가 주체가 되어 담당하는 것을 말합니다. 정확하게는 스프링 내부에 존재하는 IoC 컨테이너에서 담당합니다. 제어가 역전되었을 때 나오는 상황들은 무엇이 있을까요? 예를 들어 단순 자바를 사용하다가 스프링을 사용하게.. 2021. 2. 7.
[Spring] 단위 테스트(JUnit Test) 개요 ◎ 단위 테스트란? ◎ 사용 목적 ◎ 특징 ◎ 사용 방법 - 기본적인 테스트 ◎ assert메서드 ◎ 사용 방법 - @Autowired ◎ 사용 방법 - log출력 ◎ 로그 레벨 ◎ 트랜잭션 처리 롤백 ◎ 참조 사이트 안녕하세요. J4J입니다. 이번 포스팅은 단위 테스트에 대해 적어보는 시간을 가져보려고 합니다. 단위 테스트란? 단위 테스트는 개발자가 개발한 모듈들이 정상적으로 동작하고 원하는 결과를 만들어내는지 확인하는 테스트를 말합니다. 대표적으로 스프링에는 JUnit Test가 존재하고 클래스를 생성하는 것처럼 JUnit Test Case를 생성하여 단위 테스트를 수행할 수 있습니다. 사용 목적 단위 테스트를 사용하는 목적은 내가 작성한 코드가 내가 의도한 대로 동작하는가? 에 대한 답변을 확.. 2021. 2. 4.
[Algorithm] 최단 경로 탐색(Shortest Path) - 플로이드 워셜 알고리즘(Floyd-Warshall Algorithm) 개요 ◎ 플로이드 워셜 알고리즘이란? ◎ 그림 예시 ◎ 구현 코드 (Java) ◎ 시간 복잡도 ◎ 다익스트라 알고리즘과 비교 안녕하세요. J4J입니다. 이번 포스팅은 플로이드 워셜 알고리즘에 대해 적어보는 시간을 가져보려고 합니다. 플로이드 워셜 알고리즘이란? 플로이드 워셜 알고리즘은 정점들 간의 최단 경로를 탐색하기 위한 알고리즘 기법으로 시작 정점과 도착 정점 외에도 중간 정점을 선택하여 최소 거리를 탐색하는 방법을 사용합니다. 예를 들어 A, B, C, D, E 정점이 있다고 가정하면 다음과 같이 탐색을 합니다. 1-1. 중간 정점을 A로 선택합니다. 1-2. 모든 정점들 간의 거리를 중간 지점인 A를 거쳐서 가는 거리와 비교하여 최솟값들을 저장합니다. 2-1. 중간 정점을 B로 선택합니다. 2-2.. 2021. 2. 1.
[Algorithm] 최단 경로 탐색(Shortest Path) - 다익스트라 알고리즘(Dijkstra Algorithm) 개요 ◎ 다익스트라 알고리즘이란? ◎ 그림 예시 ◎ 구현 코드 - 인접 행렬 (Java) ◎ 시간 복잡도 - 인접 행렬 ◎ 구현 코드 - 힙 (Java) ◎ 시간 복잡도 - 힙 안녕하세요. J4J입니다. 이번 포스팅은 다익스트라 알고리즘에 대해 적어보는 시간을 가져보려고 합니다. 다익스트라 알고리즘이란? 다익스트라 알고리즘은 그래프에서 정점 간의 최단 경로를 탐색하기 위해 사용되는 알고리즘 기법으로 시작 정점에서부터 다른 정점들까지 도달하기 위해 필요한 최소 거리를 찾기 위해 사용됩니다. 다익스트라를 이용해 최단 경로를 구하는 식은 D[i][j] = min(D[i][j], D[i][k] + D[k][j])이고 이를 이용해 최단 경로를 구하는 방법은 다음과 같습니다. 예를 들어 A, B, C, D, E 정.. 2021. 1. 31.
[Algorithm] MST - 크루스칼 알고리즘(Kruskal Algorithm) 개요 ◎ 크루스칼 알고리즘이란? ◎ 그림 예시 ◎ 구현 코드 (Java) ◎ 시간 복잡도 ◎ 특징 안녕하세요. J4J입니다. 이번 포스팅은 크루스칼 알고리즘에 대해 적어보는 시간을 가져보려고 합니다. 크루스칼 알고리즘이란? 크루스칼 알고리즘은 대표적인 MST 구현 알고리즘 중 하나로 정점들 간의 연결된 길(간선)의 가중치를 작은 순서대로 선택하며 MST를 만드는 기법입니다. 예를 들어 A, B, C, D, E 정점이 있다고 가정해보겠습니다. A ↔ C 가중치: 3 A ↔ D 가중치: 5 B ↔ C 가중치: 4 B ↔ D 가중치: 4 C ↔ E 가중치: 2 D ↔ E 가중치: 1 일때 다음과 같은 순서로 가중치를 선택합니다. 1-1. 가중치가 1로 가장 작은 D ↔ E 간선을 임의로 선택합니다. 1-2. .. 2021. 1. 30.
[Algorithm] MST - 프림 알고리즘(Prim Algorithm) 개요 ◎ 프림 알고리즘이란? ◎ 그림 예시 ◎ 구현 코드 - 인접 행렬 (Java) ◎ 시간 복잡도 - 인접 행렬 ◎ 구현 코드 - 힙 (Java) ◎ 시간 복잡도 - 힙 ◎ 특징 안녕하세요. J4J입니다. 이번 포스팅은 프림 알고리즘에 대해 적어보는 시간을 가져보려고 합니다. 프림 알고리즘이란? 프림 알고리즘은 대표적인 MST 구현 알고리즘 중 하나로 정점을 기준으로 갈 수 있는 가중치가 가장 작은 길(간선)을 선택한 뒤 다음 정점을 방문하며 MST를 만드는 기법입니다. 예를 들어 A, B, C, D, E 정점이 있다고 가정해보겠습니다. A ↔ C 가중치: 3 A ↔ D 가중치: 5 B ↔ C 가중치: 4 B ↔ D 가중치: 4 C ↔ E 가중치: 2 D ↔ E 가중치: 1 이고 A 정점에서 출발한다면.. 2021. 1. 27.
[Algorithm] 최소 신장 트리(MST, Minimum Spanning Tree) 개요 ◎ 최소 신장 트리란? ◎ 신장 트리란? ◎ 그림 예시 ◎ 신장 트리 특징 ◎ 최소 신장 트리 구현 알고리즘 안녕하세요. J4J입니다. 이번 포스팅은 최소 신장 트리에 대해 적어보는 시간을 가져보려고 합니다. 최소 신장 트리란? 최소 신장 트리는 신장 트리들 중 가중치의 합이 가장 작은 신장 트리를 의미합니다. 여기서 가중치라고 하는 것은 그래프에서 길(간선)을 지나기 위해 지불되는 값이라고 생각하면 됩니다. 예를 들어 A에서 출발하여 C에 도착한다고 가정해 보겠습니다. A→B 가중치: 5 B→C 가중치: 8 이면 A→C로 이동하기 위한 가중치의 합은 13이 되는 것입니다. 신장 트리란? 신장 트리란 최소한의 길(간선)을 이용하여 모든 정점들을 이동 가능하도록 만들어진 트리입니다. 따라서 하나의 그.. 2021. 1. 24.
[Algorithm] 너비 우선 탐색(BFS, Breadth First Search) 개요 ◎ 너비 우선 탐색이란? ◎ 사용 목적 ◎ 그림 예시 ◎ 구현 코드 - 인접 행렬 (Java) ◎ 구현 코드 - 인접 리스트 (Java) ◎ 시간 복잡도 안녕하세요. J4J입니다. 이번 포스팅은 너비 우선 탐색(BFS)에 대해 적어보는 시간을 가져보려고 합니다. 너비 우선 탐색이란? 너비 우선 탐색이란 그래프 탐색 기법 중 하나로 한 번 탐색을 시작한 정점에 연결된 모든 정점을(깊이가 같은 정점) 탐색한 뒤 다른 깊이에 있는 정점을 탐색하는 기법입니다. 추가적으로 그래프 탐색에 대해서도 설명드리면 한 정점을 시작으로 다른 존재하는 모든 정점을 한 번씩 방문하는 탐색을 그래프 탐색이라고 합니다. 사용 목적 너비 우선 탐색의 사용 목적은 시작 정점부터 다른 정점까지의 최단 거리를 구하기 위해 사용됩니다.. 2021. 1. 21.
[Algorithm] 깊이 우선 탐색(DFS, Depth First Search) 개요 ◎ 깊이 우선 탐색이란? ◎ 사용 목적 ◎ 그림 예시 ◎ 구현 코드 - 인접 행렬 (Java) ◎ 구현 코드 - 인접 리스트 (Java) ◎ 시간 복잡도 안녕하세요. J4J입니다. 이번 포스팅은 깊이 우선 탐색(DFS)에 대해 적어보는 시간을 가져보려고 합니다. 깊이 우선 탐색이란? 깊이 우선 탐색이란 그래프 탐색 기법 중 하나로 한 번 탐색을 시작한 정점의 최대 깊이까지 탐색을 한 뒤 같은 높이에 있는 다른 정점을 탐색하는 기법입니다. 그래프 탐색에 대해서도 설명을 드리자면 한 정점을 시작으로 다른 존재하는 모든 정점을 한 번씩 방문하는 탐색을 그래프 탐색이라고 합니다. 사용 목적 깊이 우선 탐색을 사용하는 목적은 모든 정점을 탐색하여 원하는 값이 존재하는지 찾기 위해 사용합니다. 대표적인 예는 .. 2021. 1. 18.
[Algorithm] 이분탐색(Binary Search) 개요 ◎ 이분 탐색이란? ◎ 구현 코드 (Java) ◎ 그림 예시 ◎ 사용 목적 ◎ 시간 복잡도 ◎ 조건 ◎ 자바에서 제공하는 메서드 안녕하세요. J4J입니다. 이번 포스팅은 이분 탐색에 대해 적어보는 시간을 가져보려고 합니다. 이분 탐색이란? 이분 탐색이란 여러 탐색 기법들 중 하나로 탐색하는 구간을 두 부분으로 나누어 탐색하는 기법입니다. 탐색을 위해 탐색하는 구간을 두 부분으로 나누지만 실질적으로 탐색은 한 구간만 선택하여 탐색하고 이 행동을 반복하여 찾고자 하는 값을 도출해 내는 방식입니다. 구현 코드 (Java) package search; public class BinarySearch { public static void main(String[] args) { int[] intArray = n.. 2021. 1. 17.
[Algorithm] 부분집합(Subset) 개요 ◎ 부분집합이란? ◎ 구현코드 (Java) ◎ 시간 복잡도 안녕하세요. J4J입니다. 이번 포스팅은 부분집합에 대해 적어보는 시간을 가져보려고 합니다. 부분집합이란? 부분집합은 고등학교 수학 시간 때 배웠던 것으로 집합 A와 집합 B가 있을 때 집합 A에 존재하는 모든 원소들이 집합 B에 존재하면 집합 A는 집합 B의 부분집합(A ⊆ B)이라고 합니다. 단순하게 생각하면 집합 B가 집합 A를 포함하고 있다라고도 말할 수 있습니다. 예를 들어 한 집합 안에 {A, B, C}라는 값이 들어있다면 이 집합의 부분집합은 다음과 같습니다. 1. ∅ (공집합) 2. {A} 3. {B} 4. {C} 5. {A, B} 6. {A, C} 7. {B, C} 8. {A, B, C} 집합의 개수가 n개가 있다고 할 때 .. 2021. 1. 14.
[Algorithm] 조합(Combination) 개요 ◎ 조합이란? ◎ 구현코드 (Java) ◎ 시간 복잡도 안녕하세요. J4J입니다. 이번 포스팅은 조합에 대해 적어보는 시간을 가져보려고 합니다. 조합이란? 조합은 고등학교 수학 시간에 배웠던 것으로 개념을 정의해보면 서로 다른 n개 중에서 순서를 생각하지 않고 r개를 택하는 경우의 수를 의미합니다. 대표적으로 4명의 학생 중 2명의 회장을 뽑는 회장 뽑기 문제가 있습니다. (1명은 회장, 1명은 부회장이면 순열) ※ 순열에 대해 궁금하시면? [Algorithm] 순열(Permutation) 4명의 학생을 각각 A, B, C, D라고 가정할 때 2명의 회장이 뽑히는 경우를 구해보면 다음과 같습니다. 1. A, B 2. A, C 3. A, D 4. B, C 5. B, D 6. C, D 순열을 구하는 공.. 2021. 1. 13.
[Algorithm] 순열(Permutation) 개요 ◎ 순열이란? ◎ 구현코드 (Java) ◎ 시간 복잡도 ◎ 번외 안녕하세요. J4J입니다. 이번 포스팅은 순열에 대해 적어보는 시간을 가져보려고 합니다. 순열이란? 순열은 고등학교 수학 시간에 배웠던 것으로 개념을 정의해보자면 서로 다른 n개 중에서 순서를 생각하며 r개를 택하는 경우의 수를 의미합니다. 대표적으로 n명의 사람들이 r명을 택하여 일렬로 줄을 서는 경우의 수를 구하라고 하는 것이 있습니다. 예를 들어 3명(A, B, C) 중 2명을 택하여 일렬로 줄을 세운다고 하면 경우는 다음과 같습니다. 1. A B 2. A C 3. B A 4. B C 5. C A 6. C B 순열을 구하는 공식도 다음과 같이 있습니다. 위의 예시를 공식에 대입해보면 P(3) = 3! / (3-2)!으로 6이라는 .. 2021. 1. 11.
[Algorithm] 정렬 - 퀵 정렬(Quick Sort) 안녕하세요. J4J입니다. 이번 포스팅은 정렬 알고리즘 중 퀵 정렬에 대해 적어보는 시간을 가져보려고 합니다. 퀵 정렬이란? 퀵 정렬은 분할 정복법(Divide and Conquer)이 사용되는 정렬 방법으로 pivot이라는 리스트 안의 한 원소를 기준으로 좌측에는 pivot보다 작은 원소, 우측에는 pivot보다 큰 원소로 분할시켜 정렬하는 방식을 사용합니다. 예를 들어 길이가 5인 배열에 원소 값이 {3, 1, 15, 11, 7}이 저장되어 있다면 정렬되는 방식은 다음과 같습니다. 1-1. 정복 단계를 거치며 pivot 값을 구합니다. 1-2. pivot값은 7이 되며 pivot을 기준으로 작은 원소인 {3, 1}, 큰 원소인 {11, 15}로 분할시킵니다. 2-1. {3, 1} 배열에 정복 단계를 .. 2021. 1. 10.
[Algorithm] 정렬 - 합병 정렬(Merge sort) 안녕하세요. J4J입니다. 이번 포스팅은 정렬 알고리즘 중 합병 정렬에 대해 적어보는 시간을 가져보려고 합니다. 합병 정렬이란? 합병 정렬은 분할 정복법(Divide and Conquer)이 사용되는 정렬 방법으로 저장되어 있는 값들을 모두 분할시킨 뒤 정복을 통해 결합할 때 값들을 정렬해주는 방식을 사용합니다. 예를 들어 길이가 5인 배열이 있다고 가정하면 정렬되는 방식은 다음과 같습니다. (길이가 같은 값은 `를 추가시켜 구분합니다.) 1-1. 길이가 5인 배열을 반으로 나누어 길이가 3, 2인 배열로 분할 시킵니다. 2-1. 길이가 3이 된 배열을 반으로 나누어 길이가 2`, 1인 배열로 분할시킵니다. 2-2. 길이가 2가 된 배열을 반으로 나누어 길이가 1`, 1``인 배열로 분할시킵니다. 3-1.. 2021. 1. 9.
[Algorithm] 정렬 - 삽입 정렬(Insertion Sort) 안녕하세요. J4J입니다. 이번 포스팅은 정렬 알고리즘 중 삽입 정렬에 대해 적어보는 시간을 가져보려고 합니다. 삽입 정렬이란? 삽입 정렬은 매 회전마다 현재 인덱스의 값이 왼쪽에 존재하는 인덱스의 값보다 작을 경우 위치를 바꾸며 정렬해주는 방식입니다. 하지만 작지 않을 경우에는 현재 턴을 종료하여 다음 턴으로 넘어갑니다. 왜냐하면 이미 지나온 인덱스들은 정렬이 되어있어 특정 인덱스에서 값이 작지 않다면 왼쪽에 존재하는 나머지 값들과 비교했을 때도 작지 않기 때문입니다. 예를 들어 길이가 5인 배열이 있다고 가정하면 정렬되는 방식은 다음과 같습니다. 1-1. 1번 인덱스의 값이 0번 인덱스의 값보다 작을 시 위치를 변경합니다. 2-1. 2번 인덱스의 값이 1번 인덱스의 값보다 작을 시 위치를 변경합니다... 2021. 1. 9.
728x90
반응형