본문 바로가기

전체 글163

Dependency Injection - 스프링 공식문서가 말하는 의존성 주입 의존성 주입(Dependency Injection, DI)은 펙토리 메서드를 통해 객체가 생성되거나 반환된 후 객체 인스턴스에 설정된 속성으로, 또는 생성자 인수나 펙토리 메서드에 대한 인수를 통해서만 객체가 가진 의존성을 정의하는 프로세스이다. 컨테이너는 정의된 의존성을 바탕으로 빈이 생성될 때 필요한 의존성을 주입해준다. 의존성 주입은 빈이 자신에게 필요한 의존성을 직접 제어하는 방식을 "역전" 시킨 것으로, 이를 IoC(Inversion of Control, 제어의 역전)이라 한다. 의존성 주입을 사용하면 더 깔끔한 코드를 짤 수 있고, 객체한 결합을 분리하기가 더 용이해진다. 객체는 자신에게 필요한 의존성(다른 객체들)이 어디에 있는지 알 필요도 없고, 직접 찾을 필요도 없어진다. 그 결과로 테스.. 2024. 1. 23.
Bean Overview - 스프링 공식문서가 말하는 빈 스프링 IoC 컨테이너는 하나 이상의 빈을 관리합니다. 빈은 컨테이너에 전달된 Configuration Metadata를 기반으로 생성됩니다. 컨테이너 내부에서 Bean의 정의는 BeanDefinition 객체를 통해 표시되고 다음과 같은 metadata를 가지고 있습니다. 클래스 이름(A Package-qualified class name) : 빈으로 정의하고자 하는 클래스 Bean 동작 구성 요소. : 컨테이너에서 빈이 어떻게 동작할것인지를 나타낸다. ( Bean Scope, LifeCycle callback등) 빈이 작업을 수행하기 위해 필요한 다른 빈들로의 참조. 이러한 참조를 의존성(Dependencies)라 한다. 새로 생성된 객체에 설정한 기타 구성 정보. Connection Pool을 관리.. 2024. 1. 22.
Container Overview - 스프링 공식문서가 말하는 컨테이너 org.springframework.context.ApplicationContext 인터페이스는 스프링 IoC 컨테이너를 대표하며 빈의 인스턴스화, 설정 그리고 조합을 담당합니다. 컨테이너는 Configuration metadata를 통해 어떤 오브젝트를 인스턴스화 하고, 설정하고, 조합할지의 정보를 받아옵니다. Configuration Metadata는 XML, 자바 애노테이션 혹은 자바 코드를 통해 설정할 수 있습니다. ApplicationContext 인터페이스의 구현체중 몇개는 스프링에서 기본적으로 제공이 됩니다. 독립형 애플리케이션에서는 ClassPathXmlApplication Context나 FileSystemXmlApplicationContext를 많이 사용합니다. XML을 기반으로 Con.. 2024. 1. 22.
Introduction to the Spring IoC Container and Beans - 스프링 IoC 컨테이너와 Beans 소개 Dependency Injection, 의존성 주입 Dependenct Injection, 의존성 주입은 IoC(Inversion of Control, 제어의 역전)의 특화된 형태입니다. DI를 사용한다면 오브젝트들은 자신들의 의존성(함께 작업을 처리하는 다른 오브젝트들)을 오직 생성자 인수, 팩터리 메서드에 대한 인수, 혹은 객체가 생성되거나 팩토리 메서드에서 반환된 후에 객체 인스턴스에 설정된 속성을 통해서만 의존성을 정의합니다. IoC 컨테이너는 빈을 생성하며 해당 빈에 정의된 의존성을 바탕으로 필요한 의존성을 주입해줍니다. BeanFactory, ApplicationContext org.springframework.beans 패키지와 org.springframework.context 패키지는 스프.. 2024. 1. 21.
Spring Security - @PreAuthorize, @PostAuthorize Method Security 동작방식 Method Security동작 방식 스프링 시큐리티에서 제공하는 Method Security는 다음과 같은 상황에서 유용할 수 있습니다. 세분화된 Authorization 로직 추출 : 예를 들자면, 메서드 파라미터나 반환 값이 Authorization에 영향을 미치는 경우 서비스 레이어에서 보안을 강제하고자 하는 경우 HttpSecurity기반 설정대신 애노테이션 기반으로 처리하고자 하는 경우 Method Security는 스프링 AOP를 사용해 만들어졌기 때문에 필요한 경우 스프링 시큐리티 기본값을 재정의(Override) 하여 사용할 수 있습니다. 💡 `@EnableMethodSecurity`는 Deprecated된 `@EnableGloablMethodSecu.. 2024. 1. 16.
[프로그래머스] 가장 긴 팰린드롬 DP 사용 class Solution { boolean[][] dp; public int solution(String s) { int answer = 0; dp = new boolean[s.length()][s.length()]; for(int i=0;i 2023. 12. 8.
[LeetCode] 501. Find Mode in Binary Search Tree class Solution { public int[] findMode(TreeNode root) { List values = new ArrayList(); dfs(root, values); int maxStreak = 0; int currStreak = 0; int currNum = 0; List ans = new ArrayList(); for (int num : values) { if (num == currNum) { currStreak++; } else { currStreak = 1; currNum = num; } if (currStreak > maxStreak) { ans.clear(); maxStreak = currStreak; } if (currStreak == maxStreak) { ans.a.. 2023. 12. 6.
[LeetCode] 145. Binary Tree Postorder Traversal class Solution { public List postorderTraversal(TreeNode root) { LinkedList ans = new LinkedList(); Stack stack = new Stack(); if (root == null) { return ans; } stack.push(root); while (!stack.isEmpty()) { TreeNode cur = stack.pop(); ans.addFirst(cur.val); if (cur.left != null) { stack.push(cur.left); } if (cur.right != null) { stack.push(cur.right); } } return ans; } } Postorder Traversal은 Left.. 2023. 12. 6.
[LeetCode] 144. Binary Tree Preorder Traversal public class Solution { public List preorderTraversal(TreeNode root) { List result = new ArrayList(); if (root == null) { return result; } Stack stack = new Stack(); stack.push(root); while (!stack.isEmpty()){ TreeNode node = stack.pop(); result.add(node.val); if (node.right != null){ stack.push(node.right); } if (node.left != null){ stack.push(node.left); } } return result; } } Preorder Travers.. 2023. 12. 5.
728x90