본문 바로가기

Spring7

[Spring] 여러가지 의존관계 주입 방식 생성자 주입 방식 4가지 생성자 주입 수정자 주입(setter 주입) 필드 주입 일반 메서드 주입 의존관계 주입 방식은 위와 같이 4가지가 있다. 각각의 방식을 알아보고 생성자 주입 방식을 왜 써야하는지 알아본다. 생성자 주입 생성자를 통해서 의존관계를 주입받는 방식이다. 가장 대중적으로 쓰이고 선호되는 방식이다. 생성자 주입 방식은 생성자를 호출하는 시점에 딱 1번만 호출되는 것이 보장된다. 처음 주입이 이뤄지고 난 후에는 변경사항이 없다는 것이다. 생성자 주입 방식은 또한 필수적인 의존관계에 사용되는 방식이다. 다음 OrderServiceImpl 클래스 코드를 보자. @Component public class OrderServiceImpl implements OrderService { private .. 2023. 11. 3.
[Spring] 싱글톤을 관리하는 스프링 컨테이너 싱글톤 컨테이너 역할을 하는 스프링 컨테이너 스프링 컨테이너는 기존 싱글톤 패턴의 문제점을 해결하고 객체 인스턴스를 한 개만 생성하여 관리한다. 잘 알고 있는 스프링 빈이 스프링 컨테이너에 의해 싱글톤으로 관리된다. 스프링 컨테이너 싱글톤 객체를 관리하므로 여러 장점이 있는데, 먼저 싱글톤 패턴을 위해서 코드를 작성하지 않아도 된다는 점이다. 그리고 앞서 싱글톤 패턴의 문제점으로 말했던 DIP, OCP, 테스트, private 생성자로부터 제한없이 싱글톤을 사용할 수 있다. @Test void springContainer() { ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); MemberService memb.. 2023. 11. 2.
[Spring] 싱글톤 패턴(Singleton Pattern) 요청 시 객체를 생성하는 구조 웹 어플리케이션이 있다. 고객들이 요청할 때마다 AppConfig(스프링 없는 순수한 DI 컨테이너)는 객체를 새로 생성할 것이다. 100개의 요청이 들어오면 100개의 객체가 생성이 되고 소멸 될 것이다. 이 서비스가 인기가 더 많아지면 초당 10,000개 이상의 객체를 생성하고 소멸될 수도 있다. 다음은 스프링이 없는 순순한 DI 컨테이너를 나타낸 코드이다. public class SingletonTest { @Test void pureContainer() { AppConfig appConfig = new AppConfig(); MemberService memberService1 = appConfig.memberService(); MemberService memberSe.. 2023. 11. 1.
[DailyLog] Postman Status: 401 Unauthorized 상황 간단한 프로젝트를 위한 Spring MVC 계층을 만들고 분명 포스트맨으로 요청과 응답을 잘 주고 받는 것을 확인하였다. Spring Security 의존성만 더 추가된 팀원의 프로젝트를 나의 로컬로 pull 하였다. 그런데 갑자기 포스트맨이 응답이 없어지고 포스트맨에 'Status: 401 Unauthorized' 에러가 떴다. Unauthorized를 보니 Spring Security 의존성과 관련된 문제인 것 같다. 해결 기존의 작업을 이어나가기 위해 두 가지 방법을 알아냈다. 첫 번째 방법은 위 의존성을 주석처리하고 작업을 진행하는 것이다. 두 번째 방법은 @SpringBootApplication 옆에 (exclude = {SecurityAutoConfiguration.class})을 추가하.. 2022. 10. 27.
[Spring] Spring Security 커피를 주문할 수 있는 커피 주문 어플리케이션을 만들었다. 보안을 전혀 고려하지 않은 상태로 오픈을 하였다고 가정하면 어떤 문제가 발생할 수 있을까? 로그인(인증, Authentication) 기능이 없다. 로그인 기능이 없다면 자신을 증명할 방법이 없기 때문에 다른 사람이 회원으로 등록한 내 정보 또는 내가 주문한 정보 등에 대해서 애플리케이션의 API 호출해서 얼마든지 조회가 가능하게 된다. 이 상태로는 다른 사람의 개인정보를 탈취하는 것은 식은 죽 먹기가 될 것이다. API에 대한 권한 부여(인가, Authorization) 기능이 없다. 커피를 주문하는 손님은 메뉴판에 카페의 커피 정보를 마음대로 등록할 수 없어야 한다. 하지만 API에 대한 접근 권한이 부여되지 않는다면 손님이 마음대로 카페 메.. 2022. 9. 27.
[Spring] DTO(Data Transfer Object) DTO (Data Transfer Object) DTO는 Data Transfer Object의 약자로 마틴 파울러(Martin Fowler)가 ‘Patterns of Enterprise Application Architecture’ 라는 책에서 처음 소개한 엔터프라이즈 애플리케이션 아키텍처 패턴의 하나이다. Transfer 라는 단어에서 알 수 있듯이 데이터를 전송하기 위한 용도의 객체 정도로 생각할 수 있다. 바로 클라이언트에서 서버 쪽으로 전송하는 요청 데이터, 서버에서 클라이언트 쪽으로 전송하는 응답 데이터의 형식으로 클라이언트와 서버 간에 데이터 전송이 이루어지는데 이 구간에서 DTO를 사용할 수 있다. DTO가 필요한 이유 1. DTO 클래스를 이용한 코드의 간결성 @RestController.. 2022. 9. 24.
[Spring] Spring Framework 특징(POJO, IoC/DI, AOP, PSA) Spring 삼각형 위 그림은 Spring 핵심개념들을 표현하는 Spring 삼각형이다. POJO라는 것을 IoC/DI, AOP, PSA를 통해서 달성할 수 있다는 것을 의미한다. POJO (Plain Old Java Object) Plain은 플레인 요거트를 떠올리면 이해하기 쉽다. 플레인 요거트는 과일이나 시리얼이 들어가지 않은 순수한 요거트를 의미한다. 즉 POJO란 Java로 생성하는 순수한 객체를 말한다. POJO를 이용해서 프로그래밍 코드를 작성하는 것을 POJO 프로그래밍이라고 하는데 이 POJO 프로그래밍에도 규칙이 있다. Java나 Java의 스펙에 정의된 것 이외에는 다른 기술이나 규약에 얽매이지 않아야 하며 특정 환경에 종속적이지 않아야 한다. POJO 프로그래밍이 필요한 이유 1. .. 2022. 9. 21.