Spring

Dev/Spring

9. 빈 스코프

강의내용 빈 스코프란? -> 빈이존재할 수 있는 범위이다. 우리가 알고있던 빈 존재 범위는 사실 싱글콘 빈의 범위이다. 그게 기본값이니까. 하지만 스프링은 다양한 스코프를 지원한다. 1. 프로토타입 2. 웹관련 -request, session, application 스코프 등등이 존재한다. 프로토타입 스코프 매우 짧은 스코프이다. 스프링 컨테이너는 프로토타입 빈을 생성하고, 의존관계 주입, 초기화까지만 처리한다 -> 그러므로 @PreDestory는 동작하지 않는다. 그리고 싱글톤이 아니니까 이렇게 클라이언트는 서로 다른 빈을 받게된다. 이런 특성을 지닌 프로토타입 빈을 싱글톤과 같이 쓴다면 어떻게 될까? 프로토타입 빈이 호출됐지만, 결국 클라이언트 빈 호출시 한번만 호출되므로, 기대한 결과가 안나오게 된..

Dev/Spring

8. 빈 생명주기 콜백

강의 복습 스프링에서 DB 연결 같이 초기화랑 종료 작업이 필요한 일을 어떻게 해야할까? 초기화 콜백, 소멸전 콜백 이 두개를 사용하면 된다. 그전에 알아야 할 사실...! 스프링 빈의 이벤트 라이프사이클 스프링 컨테이너 생성 스프링 빈 생성 의존관계 주입 초기화 콜백 사용 소멸전 콜백 스프링 종료 이 순서로 이루어진다. 다시 돌아와서, 다양한 방식으로 이런 생명주기 콜백을 지원한다. 1. 인터페이스(InitializingBean, DisposableBean) 2. 설정 정보에 초기화 메서드, 종료 메서드 지정 3. @PostConstruct, @PreDestory 애노테이션 지원 이 중에서 @PostConstruct, @PreDestory 애노테이션을 사용하자 이유? -> 최신 스프링에서 가장 권장하는..

Dev/Spring

7. 의존관계 자동 주입

강의 내용 의존관계 주입 방법은 크게 4가지다. 생성자 주입 수정자 주입(setter 주입) 필드 주입 일반 메서드 주입 생성자 주입을 쓰면 된다는것을 기억하자 -> 불변하고, 누락 방지 가능하기 때문. 불변하다? 대부분의 의존관계 주입은 한번 일어나면 애플리케이션 종료시점까지 의존관계를 변경할 일이 없다. 오히려 대부분의 의존관계는 애플리케이션 종료 전까지 변하면 안된다.(불변해야 한다.) 수정자 주입을 사용하면, setXxx 메서드를 public으로 열어두어야 한다. 누군가 실수로 변경할 수 도 있고, 변경하면 안되는 메서드를 열어두는 것은 좋은 설계 방법이 아니다. 생성자 주입은 객체를 생성할 때 딱 1번만 호출되므로 이후에 호출되는 일이 없다. 따라서 불변하게 설계할 수 있다. 누락방지? 생성자 ..

Dev/Spring

6. 컴포넌트 스캔

강의 복습 자동등록 이전까지는 config, xml, 혹은 사용자 지정 설정 파일로 직접 스프링 빈을 등록했었다. @ComponetScan, @Component, @Autowired 등의 사용은 이들을 편하게 자동으로 해준다. @Component 말고도 @Configuration @Service @Controller @Repository 이런것들이 붙어있어도 빈으로 등록된다 -> 사실 위 annotation 들은 @Component를 포함하고 있기 때문이다. +어노테이션이 상속을 지원하고 이런건아닌데, 스프링 쓰면 비슷하게 동작한다. 옵션 컴포넌트 스캔은 다양한 옵션이있다. FilterType이라고 한다. FilterType은 5가지 옵션이 있다. ANNOTATION: 기본값, 애노테이션을 인식해서 동작..

Dev/Spring

5. 싱글톤 컨테이너

강의 복습 싱글톤 패턴: 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴이다. -> 그래서 객체 인스턴스를 2개 이상 생성하지 못하도록 막아야 한다. 그래서 직접 싱글톤 패턴을 만들어 봤었다. 그런데 여러 문제가 있었다. 싱글톤 패턴 문제점: 싱글톤 패턴을 구현하는 코드 자체가 많이 들어간다. 의존관계상 클라이언트가 구체 클래스에 의존한다. DIP를 위반한다. 클라이언트가 구체 클래스에 의존해서 OCP 원칙을 위반할 가능성이 높다. 테스트하기 어렵다. 내부 속성을 변경하거나 초기화 하기 어렵다. private 생성자로 자식 클래스를 만들기 어렵다. 결론적으로 유연성이 떨어진다. 안티패턴으로 불리기도 한다. ...단점이 이렇게 많다고? 하지만 스프링 컨테이너를 쓰면 단점을 모두 없에고 장..

Dev/Spring

4. 스프링 컨테이너와 스프링 빈

강의 복습 //스프링 컨테이너 생성 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); ApplicationContext 인터페이스에 여러가지 구현체를 대입하여 스프링 컨테이너를 생성가능하다. 등록된 스프링 빈은 설정정보를 이용, DI 가 이루어진다. 스프링 컨테이너에서 스프링 빈을 찾는 가장 기본적인 조회 방법: ac.getBean(빈이름, 타입) ac.getBean(타입) 해당 타입 전부 조회: ac.getBeansOfType() 조회시 고려사항: 타입 조회시 같은 타입 빈이 둘 이상이면? -> 오류 부모타입으로 조회하면? -> 자식 타입 전부 조회됨. ApplicationCont..

Dev/Spring

2 & 3. 스프링 핵심 원리 이해

강의 복습 섹션 2, 3에서는 스프링 핵심 원리 이해에 관한 내용을 배웠다. 우선 스프링 없이 프로젝트를 생성 후, 불편함을 해결하다보면 왜 스프링이라는 프레임워크가 나올 수 밖에 없는지 따라갈수 있었다. JUnit을 통한 테스트 작성 방법도 배웠다. 사실 이전에 들은 스프링 입문 강의에서 듣긴했지만. 스프링의 핵심은 좋은 객체지향 프로그래밍을 쉽게 만들 수 있게 해주는것이다. 좋은 객체지향 프로그래밍은, SOLID 원칙을 준수하면 된다. config파일을 생성해서 리팩토링하면 기존 코드로만은 지키기 불가능한 SRP,OCP, DIP 원칙을 지킬 수 있다. 이 config 파일을 생성한 것이 프레임워크를 쓰면 얻는 장점과 유사하다. IoC, DI 이것들이 config 덕에 생겨났다. IoC = 제어의 역전..

Dev/개발일지

김영한 스프링 강좌 리뷰 (인프런)

빠른결론: 김영한님 사랑합니다! . . . 1. 나의 과거 백엔드 웹 개발자를 희망하는 나는 역시나 스프링을 배우기로 했었다. 그래서 작년 11월쯤 학기가 끝나고 여러가지 방법으로 스프링 배우는 방법을 찾아보았다. 유투브, 책, 인터넷 강의 등등... 많은 방법을 고려해봤으나, 유투브는 체계적이지 않고 부실하단 생각을 했고, 인터넷 강의는 돈을 줘야하고, 남은 방법은 책을 보는것 이라고 생각해서 책을샀다. 그게 잘못이였다. 순간의 잘못된 선택은 몸을 고생하게 한다. 토비의 스프링은 뉴비인 내가 볼만한 책이 아니고, 다른 책들은 뭔가 나온지 오래되어서 구식일것같고,평가도 별로 안좋고... 해서 나온지 별로 안된 뉴비를 위한 만들면서 배우는 스프링을 컨셉으로 잡은 어떤 책을 구매했는데, 진짜... 저자분한테..

ChoiBulldog
'Spring' 태그의 글 목록 (2 Page)