전체 글 143

Spring - Bean 생명주기 콜백

1. Bean LifeCycle 생명주기 Spring Container는 Bean 객체의 생명주기(Lifecycle)을 관리합니다. 여기서 객체들을 관리한다는 것은 단순히 싱글톤으로 제공하거나 필요한 곳에 주입하는 것뿐 아니라 객체의 생성과 소멸, 즉 생명주기(Lifecycle)를 관리한다는 것을 의미합니다. 데이터베이스 Connection pool이나, 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면, 객체의 초기화와 종료 작업이 필요합니다. 컨테이너를 초기화 할 때 컨테이너는 가장 먼저 빈 객체를 생성하고 의존 주입을 하고, 의존 자동 주입을 통한 의존 설정이 이 시점에 실행되며, 모든 의존 설정이 완료되면 빈 객..

Skills/Spring 2022.09.09

독서 - 짱깨주의의 탄생

9월의 책은 문재인 전 대통령이 추천한 책 중 하나인 '짱깨주의의 탄생' 입니다. 제목이 다소 자극적일 수 있지만 오히려 편견을 깨주는 책이었습니다. ​ 중국은 오늘 날 우리 나라에서 가장 거부감 없이 받아들여지는 혐오 대상 중 하나입니다. 저자는 우리 사회가 가진 중국에 대한 편견과 혐오가 정말 100%의 사실인지에 대해, 독자들에게 끊임없이 물으며, 우리가 몰랐던 중국의 다른 일면을 확인을 시켜줍니다. 예를 들어 중국에서는 성탄절에 크리스마스 트리도 세우지 못하고, 종교 탄압으로 크리스마스를 찾아볼 수 없다는 같은 것 말입니다. 결론부터 말하면 수도인 베이징에서는 크리스마스가 가까워지면 한국과 마찬가지로 트리를 꾸민다는 것이 팩트라는 것이다. 또한 중국을 낮잡아보거나 악의 축으로 바라보는 짱깨주의가 ..

독서 2022.09.08

Spring - ComponentScan(컴포넌트 스캔)

1. ComponentScan Spring Bean을 등록할 때 @Bean 어노테이션을 이용하여 설정 정보에 직접 등록할 스프링 빈을 나열했습니다. 이 때, 등록해야 할 스프링 빈이 많을 경우에는 설정 정보도 커지고 누락하는 문제가 발생하게 되는데 이러한 문제를 해결하기 위해 Spring은 설정 정보가 없어도 자동으로 스프링 빈을 등록해주는 컴포넌트 스캔이라는 기능과 의존 관계를 주입하는 @Autowired 기능을 제공합니다. 컴포넌트 스캔을 하게 되면 AppConfig에서 해주었던 빈 등록을 하지 않아도 된다. 대신 @Component 어노테이션이 붙은 클래스를 스캔하여 Spring Bean으로 등록하게 됩니다. @Configuration @ComponentScan public class AutoApp..

Skills/Spring 2022.09.06

Spring - Singleton(싱글톤)

1. SIngleton Spring은 태생이 기업용 온라인 서비스 기술을 지원하기 위해 탄생했습니다. 대부분 Spring 애플리케이션은 웹 애플리케이션으로 보통의 경우 여러 고객이 동시에 요청을 하게 됩니다. 이 때, 요청이 여러 개 들어올 때마다 객체를 생성하게 되면, 수천 수만의 요청을 받아내는 서버는 감당하지 못하고 성능이 저하될 것입니다. 이러한 점을 해결하기 위해 Singleton Pattern이 등장합니다. 싱글톤 패턴은 애플리케이션이 시작 될 때 static을 통해 인스턴스를 메모리에 딱 하나 할당하고, 뒤의 호출 시 마다 해당 인스턴스를 반환해주는 디자인 패턴입니다.. 생성자를 private으로 설정하기 때문에 외부에서 생성자를 통해 인스턴스를 만들 수 없게 됩니다. 2. 구현 "스프링 ..

Skills/Spring 2022.09.04

Spring - BeanFactory & BeanDefinition

1. BeanFactory 1.1 BeanFactory BeanFactory는 스프링 컨테이너의 최상위 인터페이스로 스프링 빈을 관리하고 조회하는 역할을 담당합니다. getBean()메서드도 BeanFactory에서 제공하는 것입니다. 1.2 ApplicationContext ApplicationContext는 BeanFactory 기능을 모두 상속받아서 제공합니다. 이미 Bean을 조회하고 관리하는 역할을 Factory가 제공한다고 하였는데, 차이가 무엇인지 살펴봐야겠죠. 애플리케이션을 개발할 때는 빈은 관리하고 조회하는 기능은 물론, 수 많은 부가기능이 필요하게 될 것입니다. 메세지소스를 활용한 국제화 기능 : 한국에서 들어오면 한국어로, 영어권에서 들어오면 영어로 출력 환경변수 : 로컬, 개발, ..

Skills/Spring 2022.09.01

Spring - DI & Spring Container

1. DI & DI Container DI는 Dependency Injection으로 의존관계 주입이라고합니다. 이는 애플리케이션 런타임에 외부에서 실제 구현 객체를 생성하고 Client에 전달해서 Client와 Server의 실제 의존관계가 연결되는 것을 의미합니다. 이 DI를 이용하면 Client 코드를 변경하지않고 Client가 호출하는 대상의 인스턴스를 변경할 수 있습니다. 1.1 DI 컨테이너 이 의존관계 주입을 이용하여 외부에서 객체를 생성하고 관리하면서 의존관계를 연결해주는것을 DI 컨테이너라고 합니다. 이 DI 컨테이너를 IoC(Inversino of Control) 컨테이너라고도 하는데 프로그램의 제어 흐름을 개발자기 직접 제어하는 것이 아니라, 외부에서 관리하기 입니다. Java의 경우..

Skills/Spring 2022.08.31

Java - static import

Static import는 JDK5에 추가된 기능으로 일반 import와 달리 메서드나 변수를 패키지와 클래스명없이 접근가능하게 해줍니다. 이는 코드를 훨씬 간결하게 하고, 사용하기 편하다는 장점을 가져옵니다. 오라클 공식문서를 보면 상수의 로컬 복사본을 선언하거나 상속을 abuse(남용?)할 때 static import를 사용하라고 나와있습니다. 1. 사용 기본적으로 import문 뒤에 static을 붙이고, {package.class.*} or {package.class.member}를 적으면 됩니다. import static java.lang.Math.*; int i = abs(-20); double d = acos(PI) * E; 이 때, 와일드 카드를 사용한 전체 멤버 import는 권장되지 ..

Skills/Java 2022.08.29

독서 - 컬쳐 쇼크를 읽고

8월의 책은 '총, 균, 쇠'로 유명한 저자 제레드 다이아몬드와 여러 석학들이 모여쓴 쓴 '컬처 쇼크'입니다. 제목 그대로 쇼킹한(?) 문화에 대해서 이야기하는데, '사회의 붕괴'를 테마로 '모아이 석상'으로 유명한 '이스터 섬'을 예시로 들기 시작합니다. 이스터 섬 사람들(폴리네시아 인)은 원래 숲으로 뒤덮여 있던 섬에 정착했고 섬의 숲에는 큰 야자나무들이 있었습니다. 사람들은 숲에서 나무를 베어내 카누를 만들고 땔감으로 사용하고, 석상을 운반하고 세우는 데도 사용했는데, 결국 숲 전체를 베어내 모든 수종을 절멸시키는 지경에 이르렀습니다. 이로 인해 식인 풍습이 전염병처럼 번져 주민의 90%가 죽음을 맞았고, 결국 이스터 섬의 사회는 붕괴하고 말았습니다. 저자가 이 사례에서 주목했던 건 "어떻게 한 사..

독서 2022.08.26

Java - 추상 클래스와 인터페이스

추상 클래스와 인터페이스는 비슷한 개념이지만 차이점이 있는데 자세한 차이점을 알아보겠습니다. 1. 추상 클래스 먼저 추상 클래스는 일반 클래스와 별 차이가 없지만, 추상 메서드를 선언하여 상속을 통해 자손 클래스에서 완성하도록 유도하는 클래스라고 정의할 수 있겠습니다. 클래스를 설계도라고 하면 추상 클래스는 미완성 설계도로 표현할 수 있으며, 이는 상속을 위한 클래스로 따로 객체를 생성할 수 없다는 특징을 가집니다. abstract class ClassName { ... public abstract void Methodname(); } class 앞에 abstract 키워드를 붙여 상속을 통해 구현해야 한다는 것을 알려주고, 선언부만 작성하는 추상메서드를 선언할 수 있습니다. 2. 인터페이스 인터페이..

Skills/Java 2022.08.23

Java - ConcurrentHashMap

ConcurrentHashmap 설명에 앞서 HashMap이 무엇인지 리마인드를 한번 하고 넘어가겠습니다. 1. HashMap과 HashTable HashMap은 Java Collections Framework에 속한 구현체 클래스입니다. Collections Framework는 98년에 발표한 Java 2에서 정식으로 선보였으며, Java 5에서 Generic이 적용된 후 변화가 없지만 구현체 성능을 향상시키기 위해 변화해왔습니다. JDK 1.0부터 있던 API인 HashTable도 Map 인터페이스를 구현하고 있기 때문에 HashMap과 제공하는 기능은 같지만, HashMap은 보조 해시함수를 사용하기 때문에 HashTable에 비해 *해시 충돌(Hash Collision)이 덜 발생하여 성능 상의 ..

Skills/Java 2022.08.21