스터딩/Spring

컴포넌트 스캔

컴포넌트 스캔과 의존관계 자동 주입 시작하기 지금까지 스프링 빈을 등록할 때는 자바 코드의 @Bean이나 XML의 등을 통해서 설정 정보에 직접 등록할 스프링 빈을 나열했다. ➜ 예제에서는 몇 개가 안 됐지만, 스프링 빈이 늘어나면 늘어날수록 등록하기도 귀찮고, 설정 정보도 커지고, 누락하는 문제도 발생한다. (개발자는 반복을 싫어함. 귀찮음.) 그래서 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능을 제공한다. AutoAppConfig.java (기존 AppConfig.java를 유지하기 위해 이 방법을 선택) import org.springframework.context.annotation.ComponentScan; import org.springframework...

스터딩/Spring

싱글톤 컨테이너 (2)

싱글톤 방식의 주의점 싱글톤 패턴이든, 스프링 같은 싱글톤 컨테이너를 사용하든, 객체 인스턴스를 하나만 생성해서 공유하는 싱글톤 방식은 여러 클라이언트가 하나의 같은 인스턴스를 공유하기 때문에 싱글톤 객체는 상태를 유지(stateful)하게 설계하면 안 된다. 특정 클라이언트에 의존적인 필드가 있으면 안 된다. 특정 클라이언트가 값을 변경할 수 있는 필드가 있으면 안 된다. 가급적 읽기만 가능해야 한다. 스프링 빈의 필드에 공유 값을 설정하면 정말 큰 장애가 발생할 수 있다! 상태를 유지할 경우 발생하는 문제점 예시 public class StatefulService { private int price; // 상태를 유지하는 필드 public int order(String name, int price) ..

스터딩/Spring

싱글톤 컨테이너 (1)

웹 애플리케이션과 싱글톤 스프링은 태생이 기업용 온라인 서비스 기술을 지원하기 위해 탄생했다. 대부분의 스프링 애플리케이션은 웹 애플리케이션이다. 물론 웹이 아닌 애플리케이션 개발도 얼마든지 개발할 수 있다. 웹 애플리케이션은 보통 여러 고객이 동시에 요청을 한다. 웹 애플리케이션은 여러 고객이 동시에 요청을 한다고 했는데 그러면 정말로 계속 새로운 service를 만들까? public class SingletonTest { @Test @DisplayName("스프링 없는 순수한 DI 컨테이너") void pureContainer() { AppConfig appConfig = new AppConfig(); //1. 조회: 호출할 때 마다 객체를 생성 MemberService memberService1 =..

스터딩/Spring

스프링 컨테이너와 스프링 빈 (2)

컨테이너에 등록된 모든 빈 조회 package springConquest.core.findBean; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import springConquest.core.AppConfig; public class ApplicationContextInfoTest { AnnotationConfigApplicationContext ac =..

스터딩/Spring

스프링 컨테이너와 스프링 빈 (1)

스프링 컨테이너 생성 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); ApplicationContext를 스프링 컨테이너라 한다. ApplicationContext는 인터페이스이다. 스프링 컨테이너는 XML을 기반으로 만들 수 있고, 애노테이션 기반의 자바 설정 클래스로 만들 수 있다. 전에 AppConfig를 사용했던 방식이 애노테이션 기반의 자바 설정 클래스로 스프링 컨테이너를 만든 것이다. 스프링 컨테이너 생성 과정 new AnnotationConfigApplicationContext(AppConfig.class)로 컨테이너를 생성하고 ➜ 스프링 컨테이너에는 스프링 빈 저장소..

스터딩/Spring

스프링 핵심 원리 이해2 - 객체 지향 원리 적용하기

새로운 할인 정책 개발 새로운 할인 정책을 확장해 보자. 기획자: 서비스 오픈 직전에 할인 정책을 정률 할인으로 바꾸고 싶어요. 순진 개발자: 제가 처음부터 고정 금액 할인은 아니라고 했잖아요. (잘못된 대화법 ㅎ..) 기획자: 애자일 소프트웨어 개발 선언 몰라요? "계획을 따르기보다 변화에 대응하기를" 순진 개발자: ... (하지만 난 유연한 설계가 가능하도록 객체지향 설계 원칙을 준수했지 ㅎ) package springConquest.core.discount; import springConquest.core.member.Grade; import springConquest.core.member.Member; // RateDiscountPolicy 코드 추가 public class RateDiscount..

스터딩/Spring

스프링 핵심 원리 이해1 - 예제로 이해하기

프로젝트 생성 프로젝트 생성은 저번에 정리해 둔 글을 참고해 주세요! 비즈니스 요구사항과 설계 회원 회원은 가입하고 조회할 수 있다. 회원의 등급은 일반과 VIP가 있다. 회원 데이터는 자체 DB를 구축할 수 있고, 외부 시스템과 연동할 수 있다. (미확정) ➜ 유연하고 변경이 용이하게 설계 주문과 할인 정책 회원은 상품을 주문할 수 있다. 회원 등급에 따라 할인이 적용될 수 있다. 할인 정책은 우선 VIP는 1000원을 할인해 주는 고정 금액 할인을 적용 (미확정, 회사의 기본 할인 정책을 아직 정하지 못했고, 최대한 미루고 싶다. 할인을 적용하지 않을 수도 있다.) ➜ 유연하고 변경이 용이하게 설계 기획이 다 되지 않았다고 개발을 무기한으로 기다릴 수 없다. 객체 지향 설계를 이용해서 개발을 해보자...

스터딩/Spring

SOLID

SOLID 클린코드로 유명한 로버트 마틴이 좋은 객체 지향 설계의 5가지 원칙 (SOLID)을 정리 SRP: 단일 책임 원칙 OCP: 개방-폐쇄 원칙 LSP: 리스코프 치환 원칙 ISP: 인터페이스 분리 원칙 DIP: 의존관계 역전 원칙 SRP 단일 책임 원칙 Single responsibility principle 한 클래스는 하나의 책임만 가져야 한다. 하나의 책임이라는 것은 모호하다. • 클 수 있고, 작을 수 있다. • 문맥과 상황에 따라 다르다. 중요한 기준은 변경이다. 변경이 있을 때 파급 효과가 적으면 단일 책임 원칙을 잘 따른 것 예) UI 변경, 객체의 생성과 사용을 분리 ⭐️ OCP 개방-폐쇄 원칙 Open/closed principle 소프트웨어 요소는 확장에는 열려 있으나 변경에는 ..

스터딩/Spring

좋은 객체 지향

객체 지향 객체 지향 특징 추상화 캡슐화 상속 다형성 객체 지향 프로그래밍 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다. (협력) 객체 지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용된다. 💭 유연하고, 변경이 용이? 레고 블럭 조립하듯이 키보드, 마우스 갈아 끼우듯이 컴포넌트를 쉽고 유연하게 변경하면서 개발할 수 있는 방법 바로 객체 지향의 핵심! 다형성 예시를 실세계로 들지만 실세계와 객체 지향을 1:1로 잘 맞지는 않는다. 그대로 실세계와 비유로 이해를 도울 수 있다. ➜ 역할..

스터딩/Spring

스프링이란 ?

스프링 생태계 스프링 데이터: DB접근 및 기본적인 CRUD를 편리하게 도와주는 스프링 데이터라는 기술이고, 가장 많이 쓰이는 것은 스프링 데이터 JPA 스프링 세션: 세션기능을 편리하게 쓸 수 있도록 도와주는 기술 스프링 시큐리티: 보안과 관련된 기술 스프링 Rest Docs: api문서와 Test를 엮어서 api문서화를 편리하게 하는 기술 스프링 배치: 실무에서는 1000만 명을 동시에 업데이트해야 할 수도 있는데 그때 한 번에 실시간으로 업데이트하기가 어렵기 때문에 배치처리(1000건씩 가져와서 업데이트하고 저장하고 반복)에 특화된 기술 스프링 클라우드: 최근 클라우드 기술에 특화된 기술 스프링 공식문서에 들어가면 더 많은 스프링에서 지원하는 기술들이 존재한다. 핵심❗️스프링 프레임워크 핵심기술: ..

호야_
'스터딩/Spring' 카테고리의 글 목록