Spring Framework - Spring Bean 조회
2023. 5. 8. 23:29
Spring & JPA/Spring
들어가며 이전 포스트 에서 스프링에서 자체적으로 만들고 관리하는 스프링 DI 컨테이너에 대해 알아보았다. 스프링 DI 컨테이너에서 @Bean으로 등록한 모든 객체들을 관리하는 동시에 DI가 필요할 시 DI도 프레임워크에서 자체적으로 수행해주며 이렇게 개발자가 아닌 프레임워크에서 프로그램을 컨트롤하는 것을 IoC라고 하였다. 이번 포스트에서는 스프링 DI 컨테이너에서 어떻게 빈을 조회하는지와 빈을 조회하는데 있어서 있을 수 있는 문제점들과 해결책을 알아보도록 한다. 모든 Bean 조회 스프링 DI 컨테이너에 존재하는 모든 Bean을 조회하기 위해서는 다음과 같은 코드를 사용한다. public class BeanTest{ static AnnotationConfigApplicationContext ac = n..
Spring Framework - Spring DI 컨테이너
2023. 5. 6. 18:40
Spring & JPA/Spring
들어가며 이전 글에서 IoC의 개념과 IoC 컨테이너(또는 DI 컨테이너)에 대해서 알아보았다. 스프링 프레임워크는 자체적인 DI 컨테이너를 가지고 있으며 런타임 시점에서 스프링 빈(Bean)으로 등록된 모든 객체들을 가지고 시작한다. 이번 포스트에서는 스프링 컨테이너가 생성되는 과정과 이를 코드로 어떻게 표현하는지에 대해 알아본다. 스프링 컨테이너의 생성 방법 이전에 보았던 AppConfig를 생각해보자. public class AppConfig{ public MemberService memberService(){ return new MemberServiceImpl(memberRepository()); } public OrderService orderService(){ return new OrderSe..
Spring Framework - IoC의 개념
2023. 5. 6. 00:03
Spring & JPA/Spring
들어가며 해당 포스트는 DI의 개념 에 대해서 먼저 읽고 와야 이해가 되는 부분들이 있을 수 있습니다. DI의 개념 - 2. 다형성의 한계 돌아보기 1에서는 SOLID 원칙과 다형성에 대해서 잠시 언급했었다. 문제는 다형성을 사용하는것 만으로는 SOLID를 모두 지키면서 구현이 매우 힘들다는 점이다. 이번 포스트에서는 다형성의 한계 sehun5515.tistory.com 이전까지 DI에 대한 개념을 익혔다. 클라이언트 클래스에서 의존하는 인터페이스의 구현체를 직접 지정하지 않고, 외부에서 지정하고, 인스턴스화 하여 그 인스턴스를 주입한다는 개념이 DI였다. 이번에는 스프링 프레임워크에서 지원하는 핵심적인 개념인 IoC에 대해 알아보고, 스프링에서 어떻게 해당 개념을 지원하는지에 대해 서술한다. IoC(I..
Spring Framework - DI의 개념 - 2. 다형성의 한계
2023. 5. 5. 23:38
Spring & JPA/Spring
돌아보기 1에서는 SOLID 원칙과 다형성에 대해서 잠시 언급했었다. 문제는 다형성을 사용하는것 만으로는 SOLID를 모두 지키면서 구현이 매우 힘들다는 점이다. 이번 포스트에서는 다형성의 한계점과 이를 어떻게 해결해볼 수 있는지에 대해 알아본다. 다형성의 한계점 주문 서비스(Service)와 할인 정책(Policy)를 생각해보자. 어떠한 상품을 주문할 때, 그 주문에 대한 할인 정책은 여러가지가 존재할 수 있을 것이다. 다음과 같은 상황을 생각해보자. discountPolicy는 인터페이스로 할인 정책의 "역할"을 가지고 있다. OrderServiceImpl은 주문 서비스의 역할을 담당하는 객체이다. 이 객체는 상품을 주문할 때 할인율에 대해서 알고 있어야 하므로 discountPolicy에 의존적이다..
Spring Framework - DI의 개념 - 1. 다형성과 SOLID 원칙
2023. 5. 2. 20:44
Spring & JPA/Spring
들어가며 Spring 프레임워크는 매우 거대한 생태계이지만 핵심적인 원리 원칙 개념은 달라지지 않았다. Spring의 핵심적인 개념은 크게 3가지로 아래와 같다. DI(Dependency Injection) 의존관계 주입 IoC(Inversion of Controll) 제어의 역전 AOP(Aspect Oriented Programming) 관점 지향 프로그래밍 이번 파트에서는 의존관계 주입으로 일컬어지는 DI에 대해 이 개념이 무었이고, 왜 이 개념이 사용되어야 하는가에 대한 포스트들 중 첫 번째이다. 다형성 다형성은 부모 타입을 사용하여 자식 타입의 객체를 다룰 수 있게 하는 것으로 이를 적절히 사용하면 프로그래밍을 매우 유연하게 할 수 있다. 하지만 개념이 조금 난해한데. 이를 역할이란 개념과, 구현..
MVC 패턴에서 각 파트의 역할
2023. 4. 30. 12:18
Spring & JPA/Spring
들어가며 이전에는 Servlet에서부터 시작된 웹 개발이 JSP가 생겨나면서 Model 1방식이 생겨났고 이것이 어떻게 발전되었는지에 대해 간략하게 설명했다. 이번에는 Model 2방식에서 조금 더 진보한 MVC패턴에 대해 이것이 무엇이고, 각 요소별로 어떤 역할이 있는지에 대해 배운 것을 적어보려고 한다. MVC(Model - View - Controller) MVC는 Model, View, Controller로 나누어져 개발하는 일종의 디자인패턴(Design pattern)으로 정의된다. 즉 웹 프로젝트들은 기본적으로 Model 파트와 View파트, Controller 파트로 나누어져 각각의 역할에 맞게 구현되고, 분리되어 저장된다. 최종적으로 이렇게 구현된 각 객체들이 조립되어 사용자의 요청을 처리..
Servlet 방식과 Spring 에서의 웹 개발
2023. 4. 28. 13:34
Spring & JPA/Spring
서블릿(Servlet) 서블릿을 통한 웹 페이지 구현 서블릿은 동적 웹 페이지를 만들 때 사용되는 자바 기반의 웹 어플리케이션 프로그래밍 기술이다. 동적으로 웹 페이지를 생성하기 위해서 서블릿은 요청(request)을 받으면 해당 요청에 맞는 서블릿을 찾은 뒤, 로직을 처리하고 이를 html 페이지로 생성하여 보여주는 동작을 수행한다. 이때 html 페이지를 생성하기 위해서는 직접 자바 코드로 html코드를 입력해주어야 했기 떄문에, context check나 가독성 면에서 매우 좋지 않았다고 한다. JSP의 출현 html코드를 자바 프로그래밍을 통해 하는 것은 매우 고된 일이었기 때문에 방법을 찾다가 JSP(Java Server Page)라는 것이 출현하였다. 해당 방식은 html 문서 내부에 자바 프..
[Disjoint Set] BOJ 25579 터트려라 풍선
2023. 4. 23. 13:09
Algorithm/MST
문제 https://www.acmicpc.net/problem/25579 25579번: 터트려라 풍선 방구석 독거 코더가 된 병우를 안타까워한 친구들이 병우에게 여자친구를 소개해 주었고, 둘은 놀이공원에 놀러 가게 되었다. 놀이공원 벤치에서 꽁냥꽁냥을 하던 병우는 맞은편에 풍선 다트 www.acmicpc.net 접근 방법 일반적으로 생각했을 때 떠오르는 방법인 각 풍선을 하나씩 터트린다는 방법으로 점수계산을 수행하면 구현이 매우 빡세진다. 구간이 계속해서 변동되고, 합과 결과도 계속 관리해주어야 하기 때문이다. 따라서 이를 역으로 생각해보자. 모두 터져있는 상태에서 터트린 순서의 역순으로 풍선이 생성된다고 가정하는 것이다. 풍선을 생성시킬 때 마다. 생성시킨 풍선의 양 옆에 다른 풍선이 생성되어 있는가를..
최소 신장 트리(Minimum Spanning Tree) - 5
2023. 4. 9. 17:23
Algorithm/MST
Kruskal 알고리즘의 정리 Kruskal 알고리즘은 다음과 같은 방식을 따른다. 가중치에 대해서 간선들을 정렬한다. 각 정점에 대한 Union-Find 자료구조를 초기화시킨다. 정렬된 간선들을 하나씩 택하면서 find를 통해 동일 집합에 포함되는지를 판단한다. 이때, 동일 집합이 아니라면, 가중치의 합에 해당 간선의 가중치를 더하고, 두 정점을 합친다(Union) Union-Find를 어떻게 구현하는지는 앞서 설명한 글이 있으니 그것을 참고한다. Kruskal 알고리즘의 구현 // 알고리즘 - 최소 신장 트리 // 크루스칼 알고리즘 import java.util.Arrays; public class Main { // O(E logE) static int[] parents; static int[] si..
최소 신장 트리(Minimum Spanning Tree) - 4
2023. 4. 9. 15:59
Algorithm/MST
Kruskal 알고리즘의 개요 이전에 알아보았던 Kruskal 알고리즘은 다음과 같은 방식을 통해 동작한다고 했다. $A = \emptyset$인 집합을 선언한다. 모든 간선들을 가중치 $w(u, v)$에 대해 오름차순으로 정렬시킨다. 이후 정렬된 간선들을 하나씩 선택하여 사이클이 형성되는지 확인하고, 사이클이 형성되지 않는다면 $A$에 포함시킨다. 3번의 수행을 $|A| = N - 1$이 될 때 까지 수행한다.($N$은 정점의 개수) 이때 사이클이 형성되는지를 어떻게 알 수 있는지를 아직 확인하지 않았다. 이번 글에서는 사이클을 어떻게 판별할 수 있는지에 대해 알아볼 것이다. 접근 다음과 같은 상황을 가정해보자 간선들의 오름차순 정보와 $A$를 무시하고 그래프만 놓고 보았을 때. 다음과 같이 생각할 수..