본문 바로가기

분류 전체보기

(34)
SQL BASICS 뽀개기 (수정 중) DBMS, RDBMS, NoSQL데이터들은 DB에 저장.이 DB를 관리하는 시스템을 DBMS 즉, DataBase Management System이라고 함.RDBMS는 데이터가 표 형태로 저장되어 고정된 스키마를 가지고 있는 형태를 뜻하고.NoSQL은 데이터가 고정된 스키마 없이 다양한 방식으로 저장 가능 - 딕셔너리, 문서, 그래프 등.RDBMS로는 MySQL, PostgreSQL, Oracle 등이, NoSQL로는 MongoDB (문서형) 등이 있음.RDBMS는 수직확장(기존의 서버를 업그레이드)에 더 적합함. 수평확장 (다중 서버)은 어려움.RDBMS에 우리가 접근하여 뭔가 인터랙션할 수 있는 언어가 SQL. NoSQL은 다 다름 - MongoDB는 MQL. * 기본적으로는 SQL은 백엔드 DB용이..
[스프링 리뷰] 스프링 기본적으로는 JAVA 진영에서 가장 많이 사용되는 프레임워크.다시말해, 개발자가 애플리케이션을 개발하고 싶은데 JAVA 언어를 쓰고 싶다면, 그걸 잘 도와주는 아이가 스프링이다.개발자가 비즈니스 로직에 더 집중할 수 있도록 기술적인 부분을 관리해줌. 다양한 모듈로 구성되어 있다. 핵심 컨테이너, 웹, 데이터, 메시징, AOP 등의 모듈이 있는데 개발자가 필요에 따라 선택적으로 사용할 수 있음. 중요한 디자인 패턴으로는 의존성 주입 (Dependency Injection), 제어역전 (Inversion of Control), 관점 지향 프로그래밍 (AOP) 등이 있음 => 궁극적으로는 느슨한 결합 (Loose Coupling)을 달성할 수 있음. 느슨한 결합은 단위 테스트를 수행하기 용이함.   *..
[스프링 핵심] 빈 스코프 & 프로토타입 빈 이 중 우리가 알아둬야 하는 녀석들은: 싱글톤, 프로토타입, request 이렇게 세개 정도 된다. 싱글톤의 경우 프로토타입 스코프프로토타입 스코프는 싱글톤과 정반대로, 매번 새로운 애를 만들어서 반환해준다. 스프링 컨테이너가 프로토타입 빈을 생성, 의존관계 주입, 초기화까지만 처리하고 클라이언트에 던져버리고, 이후에는 빈에 대해서 관리하지 않는다. 그러니까 @PreDestroy 같은 종료 메서드를 호출할 수 없다. 이런식으로 Bean 설정하는 곳 위에다가 써주는 거다! 실제로 스프링에서 prototype을 시멘틱하게 사용하는 법스프링은 기본적으로 싱글톤을 사용한다. 그렇기 때문에 그냥 "prototype"만 해주면, 싱글톤의 물결 속에 prototype도 제 역할을 못하고 싱글톤처럼 활동하게 된다. 즉..
[스프링 핵심] 빈 생명주기 콜백 스프링은 빈을 언제 초기화하고, 종료할까?  생성자를 만들 때는 정말 필수적인 정보만 받게 해야 한다. 반면 초기화는 본격적인 무거운 작업들을 진행하면 된다.그 둘을 잘 분리하는 것이 중요하다. 생성자를 만들 때는 무거운 작업을 하라고 만든 것이 아니기 때문이다.  스프링이 처음 만들어지거나, 없어지기 직전에 자기한테 의존하는 애들한테 알려주는 것을 위와 같이 세 경우에 진행한다. InitializingBean, DisposableBean InitilizingBean은 afterPropertiesSet을, DisposableBean은 destroy 메서드를 지원함. => 코드레벨까지 너무 의존적이라 거의 안 씀. 빈 등록 초기화, 소멸 메서드 지정 애노테이션 @PostConstruct, @PreDestr..
[스프링 핵심] 의존관계 자동 주입 +α 의존관계 주입하는 다양한 방법이 있다생성자 주입, setter 주입, 필드 주입, 일반 메서드 주입 - 거의 생성자 주입을쓰고, setter도 가끔 쓴다. 생성자 주입참고로 생성자 주입은 지금껏 우리가 한 행위다.생성자 호출 시점에 딱 1번만 호출되는 것이 보장된다. 불변, 필수 의존관계에 사용.@Componentpublic class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired public OrderServiceImpl(MemberRepository memberRepository, Di..
[스프링 핵심] 컴포넌트 스캔 & 의존관계 자동 주입 스프링 빈을 하나하나 @Bean으로 만들어주지 않아도 되는 방법이 있다. 그 기능의 이름은 컴포넌트 스캔. 컴포넌트 스캔@ComponentScan 애노테이션은 @가 붙은 모두 빈들을 자동 등록한다.만약 등록을 빼고 싶은 애가 있다면 예외등록도 가능하다 - excludeFilters.package hello.core;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.FilterType;@Configuration@ComponentScan( exclude..
[스프링 핵심] 싱글톤 컨테이너 웹 앱은 보통 여러 고객이 동시에 요청을 한다. 스프링은 기업의 웹 앱을 지원하기 위해 탄생했다.그러니까 스프링은 여러 고객의 동시요청에 잘 리액션하게끔 만들어진 것이다. 스프링이 없이 순수 JAVA만으로 만들면, 필연적으로 new를 쓰게 되고, 고객 요청 시마다 new를 쓰니까 그 횟수만큼 새로운 애들이 만들어진다. 그러니까 순수 JAVA의 경우에는, 만약 고객 트래픽이 초당 100이 나오면 초당 100개의 객체가 생성괴고 소멸된다.=> 메모리 낭비가 심하다. => 해당 객체를 하나만 생성하고, 공유하도록 설계하면 된다 (  싱글톤 패턴- 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴- 객체 인스턴스를 2개 이상 생성하지 못하도록 막아야 한다 * private 생성자를 사용해서 외부..
[스프링 핵심] 스프링 컨테이너와 스프링 빈 스프링 컨테이너 생성스프링 컨테이너가 생성되는 과정: 기본적으로 생성자의 꼴로 생성을 한다.ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); * ApplicationContext를 스프링 컨테이너이자 인터페이스다. XML로도 만들 수 있지만, 애노테이션 자바로도 만들 수 있음.앞서서 다룬 AppConfig와 같은.  스프링 컨테이너는 하나만 있는 게 아니라 BeanFactory와 ApplicationContext로 구분하곤 한다. 그런데 BeanFactory를 직접 사용하는 경우는 거의 없으므로 통상 ApplicationContext를 부른다고 생각하면 된다.  이렇게 만든 빈들을 ..