본문 바로가기

FrameWork/Spring16

싱글톤 컨테이너 앞서 말한 싱글톤에서 정리를 하자면 먼저 스프링은 기업용 온라인 서비스 기술을 방향으로 지원하기 위해 만들어지고 개발되어왔다. 그렇기에 대부분이 웹 애플리케이션인데, 싱글톤사용전에는 웹 애플리케이션은 보통 여러 클라이언트들에게 동시 요청이 올 때마다 새로운 객체를 생성 소멸 했었다. 순수한 DI컨테이너는 요청을 할 때마다 새로운 객체가 만들어 졌는데 이렇게 새롭게 만들어진 객체는 고객의 요청 트래픽이 예를들어 초당 100개면 100개의 객체가 생성, 소멸이 되어 메모리 낭비가 심해진다. 이런 해결방안으로 단 하나의 객체만을 생성하고 공유하도록 하는 것이 싱글톤 패턴이다. 하지만 이 싱글톤 패턴은 위 처럼 장점이 분명하지만 단점이 여러개 존재했었는데 이 싱글톤의 문제점을 모두 해결해주면서 장점까지 끌어 갈.. 2023. 7. 24.
싱글톤 컨테이너와 싱글톤레지스트리에 대한 고찰 전 글에서는 스프링의 싱글톤 디자인패턴에 대해서 배웠다. 스프링의 탄생의 목적은 기업용 웹 서비스를 위해 태어났으며, 여러 고객이 동시에 사용하는 서비스를 처리하기 위해 탄생 되었는데, 이 때 발생하는 고객들의 서비스로 인해 생기는 메모리의 할당 때문에 싱글톤이 만들어졌다. 예를 들어 고객들의 수십에서 수백만건의 요청이 발생하는 서비스에서 매 요청시 새로운 객체가 생성되면서 소멸되는 과정이 발생되는데 이렇게 되면 생성되는 객체수를 메모리가 감당하기 어려워 질 수 있게 되며 해당 서비스를 운영하는 부분에 있어 서비스 장애를 초래하게 될 것이다. 하지만 이를 해결한 것이 바로 싱글톤이다. 싱글톤은 단일 인스턴스를 가지며 싱글톤패턴을 가지가되는데 이는 하나의 객체를 이용하여 고객의 요청을 처리함으로써, 효율적.. 2023. 7. 21.
웹 애플리케이션과 싱글톤 스프링은 태생이 기업용 온라인 서비스 기술을 지원하기 위해 생겼다. 물론 온라인만 처리하는 것이 아닌 여러종류의 애플리케이션이 있다. 대부분의 스프링 애플리케이션은 웹 애플리케이션도 있고 웹이 아닌 애플리케이션 개발도 얼마든지 할 수 있다. 웹 애플리케이션은 보통 여러 고객이 동시에 요청을 한다. 클라이언트(고객)들의 여러번 요청하면 웹 애플리케이션은 요청이 올때마다 객체를 만들어야 한다. Appconfig를 호출할 때 마다 새로운 객체가 생성이 되는데, 위에말처럼 고객들을 대상으로 하는 온라인 서비스이기 때문에 요청하는 고객들이 많아질 수록 엄청난 양의 객체가 생성될 수 있다. 순수한 DI컨테이너인 AppConfig는 요청을 할 때마다 객체를 새로 생성한다. 고객 트래픽이 초당 100개가 나오면 초당 .. 2023. 7. 19.
@RequiredArgsConstructor @RequiredArgsConstructor 애너테이션의 특징과 이를 활용한 의존성 주입에 대한 정리와 생각. @RequirdArgsConstructor 애너테이션은 문서를 살펴 보았을 때 초기화 되지 않은 final 필드나,@NotNull 애너테이션이 붙은 필드에 대해 생성자를 생해 주는 기능이 있다. 스프링의 의존성 주입중하나이다. 아래는 같은 코드 이지만 @RequiredArgsConstructor애너테이션이 있고 없고 차이를 아래 예제를 보면 확실히 체감 가능할 것 같다. 먼저 @RequiredArgsConstructor애너테이션을 사용하지 않았을 경우 package com.jjk.jjkshop.dto; import java.beans.ConstructorProperties; public clas.. 2023. 7. 16.
Spring은 어떻게 다양한 설정 형식을 지원할까?BeanDefinition Spring은 어떻게 다양한 설정 형식을 지원할까? 바로 BeanDefinition이라는 추상화 때문에 다행이다. 역할과 구현을 개념적으로 나누어서 가능하다. BeanDefinition은 속성 값, 생성자 인수 값 및 구체적인 구현에서 제공하는 추가 정보가 있는 빈 인스턴스를 말한다. BeanDefinition은 추상화이기 때문에 최소한의 인터페이스 이며 BeanFactoryPostProcessor속성 값과 기타 빈 메타데이터를 검사하고 수정할 수 있도록 하는 것이다. BeanDefinition에는 많은 옵션들이 있다. IoC Container의 BeanDefinition이 등록될 때 꼭 필요한 것은 beanClassName이다. 어떤 코드인지 어떤 구성으로 되어있는지 보다는 Spring Containe.. 2023. 7. 13.
JPA (작성중) JPA는 Java Persistence API이다.👉 Memory(ram)은 휘발성 데이터 저장소이다. 이 ram은 전기가 끊어지면 데이터가 증발하기 때문에 비휘발성인 HardDisk에 영구적으로 저장할 수 있게끔 해줘야한다. Java에 데이터를 영구히 기록할 수 있게 해주는 API를 JPA라 말한다. API란?👉 Application Programming Interface라고 말한다. Application 은 프로그램 Programming 은 프로그램을 만드는 과정? Interface는 그걸 만들게 해주는 것을 Interface라 한다. 프로그램을 만들기 위해서 제공해주는 것을 API라 한다. 프로토콜과 인터페이스는 약속을 의미한다. 하지만 서로 약속의 의미는 다르다. 인터페이스의 예 => 나랑 연락하.. 2023. 7. 12.
Spring Framework에 대해 정리해보기 Framework 👉 틀에서 동작하다는 그냥 단어적 의미인데 곰곰이 생각해보면 이 틀안에서 (벗어나지 않고) 개발을 하면된다. Spring은 오픈소스👉 Spring의 오픈소스의 의미는 내부를 볼 수 있다 라는 의미가 있다. 즉 내부를 볼 수 있다는 것은 사용자가 불편한 점이 있다면 수정해서 사용할 수 있다.(어나더레벨..) Spring은 IoC 컨네이너이다👉 어찌보면 Spring의 가장 핵심 이다.IoC는 Inversion of Controll 즉 제어의 역전이다. 주도권이 사용자가 아닌 Spring에 있다. Class는 설계도 Object는 실체화가 가능한 것 Instance는 실체화 된 것 Spring이 heap 영역에 Object를 읽어서 Memory에 올려준다. Spring이 객체를 생성해 준다... 2023. 7. 11.
관심사 분리 애플리케이션을 하나의 공연이라 생각해보면 각각의 인터페이스를 배역(배우 역할)이라 생각해보자. 그런데 실제 배역에 맞는 배우를 선택하는 것은 누가 하는가? 로미오와 줄리엣 공연을 하면 로미오 역할은 누가 줄리엣 역할은 누가할지? 배우들이 정하는게 아니다. 이전 코드는 마치 로미오 역할(인터페이스)을 하는 레오나르도 디카프리오(구현체, 배우)가 줄리엣 역할(인터페이스)을 하는 여자 주인공(구현체,배우)을 직접 초빙하는 것과 같다. 디카프리오는 공연도 해야하고 동시에 여자 주인공도 공연에 직접 초빙해야하는 "다양한 책임"을 가지고 있다. -스프링 핵심원리 /기본편 - 김영한강사님 스프링 프레임워크의 관심사 분리는 소프트웨어 개발에서의 각각의 관심사를 독립적으로 처리하고 분리하여 모듈화하는 개념이다. 이를 통.. 2023. 7. 10.
AOP란?🧑‍💻 이 글은 김영한 강사님의 우아한형제들 최연소 기술이사 김영한의 스프링 완전 정복 ㅇ에서 공부한 내용을 정리해 보았습니다. AOP 아직 학원에서 공부한 부분이 아닌 강의로 접한 부분이라 확실한 개념이 잡히지 않아 어디에 쓰이는지와 왜 쓰이는지 두루뭉실하게만 알아보아서 향후 조금씩 수정해 보겠습니다. 강사님 피셜 AOP는 배우기 굉장히 어렵고 사용하기 어렵다고하신다.(안써봐서 모른다..) AOP는 언제 사용할까? 모든 메소드의 호출 시간을 측정하고 싶다면? 공통 관심 사항(Cross-cutting concern) vs 핵심 관심 사항(core concern) 회원 가입 시간, 회원 조회 시간을 측정하고 싶다면? AOP의 사용 예제 👇 만약에 실무에 근무 하고 있다 가정해보자. 악덕상사가 나타나서 "우리 시스.. 2023. 7. 1.