커넥션 풀과 데이터소스
·
Spring
커넥션 풀 이해데이터베이스 커넥션을 획득할 때는 다음과 같은 복잡한 과정을 거친다.1. 애플리케이션 로직은 DB 드라이버를 통해 커넥션을 조회2. DB 드라이버는 DB와 TCP/IP 커넥션 연결한다. (3way handshake같은 네트워크 동작 발생)3. TCP/IP 커넥션이 연결되면 id, pw등 기타 부가정보를 DB에 전달4. DB는 id, pw를 통해 내부 인증 완료하고 내부에 DB 세션 생성5. DB는 커넥션 생성이 완료되었다는 응답 보냄6. DB 드라이버는 커넥션 객체를 생성해서 클라이언트에 반환 이렇게 과정이 복잡하고 시간도 많이 걸린다. DB는 물론 애플리케이션 서버에서도 커넥션 생성에 필요한 리소스를 매번 사용해야한다. 진짜 문제는 고객이 애플리케이션을 사용할 때 SQL을 실행하는 시간 ..
스프링 핵심 원리 (2)
·
Spring
새로운 할인 정책 개발- 고정 할인이 아닌 정률 할인으로 구매 금액의 10%를 할인으로 변경 정률 할인 클래스package hello.core.discount;import hello.core.member.Grade;import hello.core.member.Member;public class RateDiscountPolicy implements DiscountPolicy { private int discountPercent = 10; @Override public int discount(Member member, int price) { if (member.getGrade() == Grade.VIP) { return price * discountPercen..
스프링 핵심 원리(1)
·
Spring
회원 도메인 설계회원 도메인 요구사항- 회원 가입, 조회 가능- 회원은 일반회원, VIP회원 두 가지 등급으로 관리- 회원 데이터는 자체 DB를 구축할 수 있고, 외부 시스템과 연동할 수 있다. (미확정) 회원 등급package hello.core.member;public enum Grade { BASIC, VIP} 회원 Entitypublic class Member { private Long id; private String name; private Grade grade; public Member(Long id, String name, Grade grade) { this.id = id; this.name = name; this.gra..
컬렉션 프레임워크 - List
·
Java
리스트 추상화 - 인터페이스 도입다형성과 OCP 원칙을 가장 잘 활용할 수 있는 곳 중 하나가 자료구조 이다. List 자료구조 순서가 있고 중복을 허용하는 자료 구조를 List라고 한다. 우리가 이전에 만든 MyArrayList와 MylinkedList는 내부 구현만 다를 뿐 같은 기능을 제공하는 리스트이다.내부 구현이 다르기에 성능은 다를 수 있지만 핵심은 같은 기능을 제공하는 것이다.이 둘의 공통 기능을 인터페이스로 추상화 한다면 다형성을 활용한 다양한 이득을 얻을 수 있다. package collection.list;public interface MyList { int size(); void add(E e); void add(int index, E e); E get(int i..
Spring 입문 - DI (의존성 주입), IoC (제어의 역전), Bean
·
Spring
Dependency Injection (의존성 주입) 객체가 자체적으로 필요로 하는 의존성을 생성하는 것이 아니라, 외부에서 주입받는 디자인 패턴입니다. 객체간의 결합도를 낮추기 위해 사용합니다. 주로 Contructor 기반 주입, Field 기반 주입, Setter 기반 주입이 있습니다. DI를 사용하지 않을 경우 package org.example.ChickenStore class ChickenStoreWithoutDI { private val chicken: Chicken = FriedChicken() fun getCookedChicken(): Chicken { chicken.cook() return chicken } } class ChickenStoreWithoutDI2 { private val..