본문 바로가기

Spring7

Singleton(싱글톤) 패턴이란? 싱글톤패턴이란? - 클래스의 인스턴스(객체)가 딱 1개만 생성되는 것을 보장하는 디자인 패턴 입니다. - 객체 인스턴스를 2개 이상 생성하지 못하도록 막아야 합니다. - private 생성자를 사용해서 외부에서 임의로 new 키워드를 사용하지 못하도록 막아야 합니다. 예시코드 코드를 살펴보자면 다음과 같습니다. 1. static 영역에 객체를 미리 하나 생성해서 올려둡니다. 2. 이 객체 인스턴스가 필요하면 오직 getInstance() 메서드를 통해서만 조회할 수 있다. 이 메서드를 호출하면 항상 같은 인스턴스를 반환합니다. 3. 딱 1개의 객체 인스턴스만 존재해야 하므로, 생성자를 private로 막아서 혹시라도 외부에서 new 키워드로 객체 인스턴스가 생성되는 것을 막습니다. 위의 코드가 정상적으로.. 2021. 12. 20.
Spring의 DI는 왜 생성자 주입으로? 들어가기에 앞서 Spring에서의 DI는 대표적으로 3가지 방법이 있다는 것은 많은 사람들이 아는 보편적인 지식입니다. 그리고 3가지 방법중 생성자 주입을 가장 지향하는것 또한 3가지 방법을 안다면 다 아는 사실일것입니다. 나는 한 기업에서 기술면접을 치뤘을때 DI에 관한 질문이 나왔을때 '아는거다' 라는 생각을 하며 굉장히 안도했고 자신감이 있었습니다. 자신있게 답변을 하고, 안도하고 있을때 "그럼 왜 생성자 주입을 지향하나요? 다른 방법들과 무슨 차이가 있나요? 큰 차이가 있나요?" 라는 질문이 들어왔고, 저는 당황하며 정확한 대답을 할 수 없었습니다. 그래서 다시 한번 확실히 정리하고자 합니다. DI 생성자 주입 먼저 3가지 방법을 모두 살펴보도록 하겠습니다. 1. 필드주입 위의 코드처럼 - 코드가.. 2021. 12. 14.
[SpringBoot With Aws] Spring 웹 계층 Spring의 3layer 계층 간단하게 각 영역을 소개하자면 다음과 같습니다. Web Layer 흔히 사용하는 @Controller와 JSP/Freemarker 등의 뷰 템플릿 영역입니다. 이외에도 @Filete, 인터셉터, @ControllerAdvice 등 외부 요청과 응답에 대한 전반적인 영역을 이야기합니다. Service Layer @Service에 사용되는 서비스 영역입니다. 일반적으로 Controller와 Dao의 중간 영역에서 사용됩니다. @Transactional이 사용되어야 하는 영역이기도 합니다. Repository Layer Database와 같이 데이터 저장소에 접근하는 영역입니다. Dtos Dto는 계층간에 데이터 교환을 위한 객체를 이야기하며 Dtos는 이들의 영역을 이야기합니.. 2021. 7. 23.
[SpringBoot With Aws] JUnit 단위 테스트 1. JUnit 단위테스트? 먼저, TDD와 단위 테스트는 다른 이야기입니다. 단위 테스트는 TDD의 첫번째 단계인 기능 단위의 테스트 코드를 작성하는 것을 이야기합니다. 순수하게 테스트 코드를 작성하는 것을 이야기합니다. 테스트 코드는 왜 작성해야 할까요? 위키피디아에서는 다음을 이야기 합니다. 단위 테스트는 개발단계 초기에 문제를 발견하게 도와줍니다. 단위 테스트는 개발자가 나중에 코드를 리팩토링하거나 라이브러리 업그레이드 등에서 기존 기능이 올바르게 작동하는지 확인할 수 있습니다. 단위 테스트는 기능에 대한 불확실성을 감소시킬 수 있습니다. 단위 테스트는 시스템에 대한 실제 문서를 제공합니다. 즉, 단위 테스트 자체가 문서로 사용할 수 있습니다. 또한, 이 책의 저자이신 이동욱님은 본인의 경험을 토.. 2021. 7. 22.
@Controller 와 @RestController의 차이 1. @Controller [Controller - View] 전통적인 Spring MVC의 컨트롤러인 @Controller는 주로 View를 반환하기 위해 사용합니다. 아래와 같은 과정을 통해 Spring MVC Container는 Client의 요청으로부터 View를 반환합니다. Client는 URI 형식으로 웹 서비스에 요청을 보낸다. Mapping되는 Handler와 그 Type을 찾는 DispatcherServlet이 요청을 인터셉트한다. Controller가 요청을 처리한 후에 응답을 DispatcherServlet 으로 반환하고, DispatcherServlet은 View를 사용자에게 반환한다. @Controller가 View를 반환하기 위해서는 ViewResolver가 사용되며, ViewR.. 2021. 7. 13.
IoC (Inversion of Control) 스프링의 가장 중요한 역할인 부품조립(의존성 주입)을 위해 필요한 부품을 적어놓는 주문서가 필요하다. 말 그대로 메소드나 객체의 호출작업을 개발자가 결정하는 것이 아니라, 외부에서 결정되는 것을 의미한다. 가장 기본이 되는 주문서는 XML파일과 Annotation이다. IoC Container 주문서에 입력되어있는 내용대로 객체를 생성해서 담는 그릇 부품 컨테이너라고 할 수 있다. IoC라고 하는 이유? → 여러가지 부품들을 담을 수 있고, 조립한 상태로 담을 수 있다. (위)일체형 , (아래)결합형 순서 일체형에서는 A→B→C→D순으로 생성되어진다. 하지만 결합형에서는 D→C→B→A 의 역순으로 만들어진다. 이 역순을 Inversion of Control이라고 한다. IoC Container는 역순으로.. 2021. 7. 3.