본문 바로가기

전체 글

Spring의 제어 역전 컨테이너(Inversion of Control Container) 스프링 프레임워크의 핵심적인 개념에는 IoC Container, Dependency Injection 등이 있다. Dependency Injection(의존성 주입)은 지난 포스트에서도 몇 번 다뤄봤으니 이번에는 IoC Container, 즉 제어 역전(inversion of control) 컨테이너에 대해 조금 더 조사해보았다. 제어 역전(Inversion of Control, IOC) 제어 역전이라는 것은 의존성 주입과는 다르다. 의존성 주입이 결합도를 낮춰서 프로그램을 좀 더 유연하게 구축하고자 하기 위한 거라면 제어 역전은 소스 코드의 제어를 컨테이너나 프레임워크에 이전하는 소프트웨어 공학 기법이다. 이게 무슨 말이냐면 스프링 프레임워크에서 의존 자동 주입(@Autowired 등)을 할 때 이 의.. 더보기
Spring의 컴포넌트 스캔(Component Scan) 이전까지는 스프링 설정 클래스(ApplicationContext 등)에서 Bean 객체를 생성, 컨테이너에 직접 등록하여 사용했다. 그러나 컴포넌트 스캔 기능을 사용하면 설정 클래스에서 일일이 등록하지 않아도 여러 클래스의 Bean 객체를 컨테이너에 자동으로 등록할 수 있다. @Component @Component public class MemberRegisterService { ... 이 방법은 Bean 객체를 컴포넌트 클래스에 구현하면 애플리케이션 실행 시 스프링이 컴포넌트 클래스들을 탐색, Bean 객체들을 컨테이너에 등록하는 방법이다. 이를 컴포넌트 스캔(Component Scan)이라 한다. 컴포넌트 클래스는 위처럼 @Component 어노테이션이 붙은 클래스며 이 클래스의 객체가 스프링 컨테이.. 더보기
Spring에서 illegal reflective access 경고문 해결 github.com/spring-projects/spring-framework/issues/22674 on JDK 11 - WARNING: Illegal reflective access by org.springframework.cglib.core.ReflectUtils$1 (file:/C:/Users/.../spring-core/ Error for Spring Boot 1.5.x (1.5.19.RELEASE, using the latest spring-core-4.3.22.RELEASE.jar) I have not seen this error before within previous boot 1.5.17.RELEASE. And frankly upgrade to the lates... github.com .. 더보기
Spring의 의존 자동 주입(@Autowired) 이전 포스트에서는 Spring 프레임워크에서 어떤 식으로 DI가 이루어지는지 간략하게 살펴보았다. 의존성을 주입하려면 직접 Bean 객체를 생성하는 메서드를 호출하여 생성자에 전달하거나 Setter 메서드를 사용할 수도 있겠지만 스프링 프레임워크 자체에서 이 의존성을 주입해줄 수도 있다. 이를 의존 자동 주입이라 하며 @Autowired나 @Resource 어노테이션을 사용한다. ... public class ChangePasswordService { @Autowired private MemberDAO memberDAO; ... 간단한 사용은 위와 같다. 그냥 의존 주입이 필요한 대상에게 @Autowired 어노테이션을 붙여주면 된다. 원래는 이 ChangePasswordService 클래스에서 Memb.. 더보기
블랙커피 레벨1 스터디 6기 참가 후기 지난 몇 주간 NEXTSTEP에서 진행하는 웹 프론트엔드 스터디인 블랙커피 레벨1에 참여했다. 블랙커피 스터디 레벨1 edu.nextstep.camp 이 스터디를 시작했을 때는 이제 막 보안에서 개발로 전향하고 이것저것 공부할 분야를 알아보던 중이라 웹 프론트엔드, 백엔드를 가리지 않고 공부하고 있었는데 그중에서도 공통적으로 사용할 수 있는 자바스크립트(프론트엔드에서는 다양한 라이브러리, 백엔드에서는 node.js)를 공부하다가 친구의 권유로 참가하게 되었다. 스터디는 레벨1이라는 이름만큼 웹 프론트엔드의 기초적인 부분을 다루고 있다. 약 3~4주 정도의 기간 동안 매주 HTML, CSS 소스 코드를 기반으로 특정 기능을 구현하는 자바스크립트를 작성하는 과제를 하면서 서로 코드 리뷰도 하고 기능도 보완하.. 더보기
Trapping Rain Water (Two Pointers) LeetCode의 Trapping Rain Water 문제다. Trapping Rain Water - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 처음으로 건드려보는 Hard 난이도의 문제다. 사실 Medium 문제도 혼자 힘으로 풀기 버거워서 Hard 난이도는 손대지 않고 있었는데 책에서 풀이를 알려주기 때문에 이를 공부하는 셈 치고 풀어보았다. 사실 직접 푼 것도 아니고 해설을 읽고 분석하는 정도지만 나중에 비슷한 문제가 나왔을 때 활용할 수 있을 것이다... 더보기
Two Sum (Dictionary) LeetCode의 첫 번째 문제인 Two Sum이다. Two Sum - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 문제 자체는 간단하다. 정수 배열과 목푯값이 주어지고 해당 배열에서 두 수를 꺼내서 목푯값을 만들 수 있을 때 배열에서 두 수의 인덱스를 리스트로 반환하는 것이다. 예를 들어 [1, 2, 3, 4, 5]가 있고 6을 만들어야 할 때 [0, 4]를 반환하면 되는 것이다. 문제에서는 배열 내에 목푯값을 만들 수 있는 최소한 한 쌍의 정수가 존재한다고.. 더보기
Longest Palindromic Substring LeetCode의 Longest Palindromic Substring 문제다. Longest Palindromic Substring - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 제목 그대로 가장 긴 회문 문자열을 찾는 문제인데 이전에 풀어봤던 Valid Palindrome 문제에서 언급했듯이 Palindrome이란 회문으로 거꾸로 뒤집어도 동일한 문자열을 의미한다. 굳이 더 설명하진 않고 그러면 문자열에서 어떻게 회문을 탐색할 수 있는지 알아보자. 책에서.. 더보기