본문 바로가기

분류 전체보기

(36)
[스프링 핵심] 싱글톤 컨테이너 웹 앱은 보통 여러 고객이 동시에 요청을 한다. 스프링은 기업의 웹 앱을 지원하기 위해 탄생했다.그러니까 스프링은 여러 고객의 동시요청에 잘 리액션하게끔 만들어진 것이다. 스프링이 없이 순수 JAVA만으로 만들면, 필연적으로 new를 쓰게 되고, 고객 요청 시마다 new를 쓰니까 그 횟수만큼 새로운 애들이 만들어진다. 그러니까 순수 JAVA의 경우에는, 만약 고객 트래픽이 초당 100이 나오면 초당 100개의 객체가 생성괴고 소멸된다.=> 메모리 낭비가 심하다. => 해당 객체를 하나만 생성하고, 공유하도록 설계하면 된다 (  싱글톤 패턴- 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴- 객체 인스턴스를 2개 이상 생성하지 못하도록 막아야 한다 * private 생성자를 사용해서 외부..
[스프링 핵심] 스프링 컨테이너와 스프링 빈 스프링 컨테이너 생성스프링 컨테이너가 생성되는 과정: 기본적으로 생성자의 꼴로 생성을 한다.ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); * ApplicationContext를 스프링 컨테이너이자 인터페이스다. XML로도 만들 수 있지만, 애노테이션 자바로도 만들 수 있음.앞서서 다룬 AppConfig와 같은.  스프링 컨테이너는 하나만 있는 게 아니라 BeanFactory와 ApplicationContext로 구분하곤 한다. 그런데 BeanFactory를 직접 사용하는 경우는 거의 없으므로 통상 ApplicationContext를 부른다고 생각하면 된다.  이렇게 만든 빈들을 ..
[스프링 핵심] OOP 관점에서 코드 관찰하기, 스프링으로 전환하기 일단 정률 할인을 넣어준다. 그리고 테스트를 해준다. 만약 이렇게 잘 설계가 안된 코드라면 테스트를 하기도 매우 어려웠을 것이다. 그런데 우리 코드는 잘 되어 있기 때문에 좋은 것이다. 새로운 할인정책을 넣으려면, OrderServiceImpl로 들어가서 또 생성자를 건드려줘야 하는데,기존에 FixDiscountPolicy를 RateDiscountPolicy로 교체해줘야 한다... 지금까지 잘하고 있는지 확인해보자. OrderService가 DiscountPolicy의 인터페이스에만 의존하기로 되어있었는데, 그의 구현체 클래스에도 의존을 하고 있기 때문에 OCP를 위배하고 있다는 것이다. 그러니까 구현체를 다루는 부분의 코드를 아예 클라이언트 단의 코드에서 제거해야 한다. 어떻게? 관심사의 분리조승우가 ..
[스프링 핵심] 비즈니스 요구사항 맞춰 설계 및 순수 JAVA로 구현 spring initilizr로 일단 뼈대만 설정해둔다. 순수 JAVA로 먼저 짜보고, SPRING으로 다시 한번 짜면서 SPRING을 왜 쓰는지를 알려주신다고 하니 잘 들어보자. 비즈니스 요구사항과 설계 회원 도메인 설계클라이언트가 있고, 그들이 사용할 기능은 회원 서비스 즉, 회원가입과 회원조회가 있다. 그리고 거기에 곧장 DB와 같은 것들을 붙일 수도 있겠지만, 그게 아니라 회원 저장소라는 인터페이스를 따로 만들어주고, 저장소에 대한 구현을 메모리 회원 저장소, DB 회원 저장소, 외부 시스템 연동 회원 저장소로 나누어 구현한다고 한다 - 왜냐하면 미확정이라고 했기 때문에.여기서 핵심은, "회원 저장소"라는 회원을 저장하는 공간을 마련해두면 메모리 회원 저장소로 지금은 두더라도 DB 회원 저장소와 ..
[스프링 핵심] 스프링과 객체 지향 프로그래밍 IoC,DI,객체 지향 프로그래밍 SOLID,다형성 polymorphism,컨테이너,SRP,OCP/ DIP,,,, 이런 개념들을 모두 다뤄볼 예정이다. 스프링의 핵심가치는, "객체 지향 프로그래밍"이다옛날에는 EJB라는 기술이 있었다. 이게 표준이었다.그런데 이게, 제공하는 기능은 많은데 한 번 쓰기가 너무 복잡하고 느리고 힘들었다. 소위 "EJB 지옥".EJB에 지친 우리 선배 개발자들은 하나 둘 반기를 들기 시작했고, 차라리 기능이 적더라도 쓰기 간편하고 빠른 걸 만들고 싶다는 열망이 뻗치기 시작했다. 이 흐름의 가장 선봉장은 두명이 있었는데, 그게 오픈소스로 만들어졌고, 결국 각각 Spring과 Hibernate로 발전했다. 이후 JPA가 만들어졌다. 특이하게도 인터페이스 -> 구현체가 아니라, 구..
[스프링 입문] 스프링에서의 AOP AOP란?Aspect-Oriented Programming은 소프트웨어 개발의 한 패러다임으로, 앱의 공통 관심사(Cross-Cutting Concerns)를 모듈화하는 데에 중점을 둔다.  AOP의 기본개념?공통 관심사 Cross-cutting concerns: 앱의 여러 부분에서 공통적으로 필요한 기능을 말함. 예를 들어 로깅, 트랜잭션 관리, 보안, 예외처리 등. 이러한 기능들은 앱의 핵심 비즈니스 로직이 아니지만, 많은 클래스 혹은 메서드에서 필요로하는 기능이다.관점 Aspect: 공통 관심사를 모듈화한 단위를 aspect라고 함.그 외에도 위빙, 조인 포인트, 포인트컷, 어드바이스 등의 개념들이 있다. AOP가 필요한 상황?* 모든 메소드의 호출 시간을 측정하고 싶을 때, 모든 메소드의 앞뒤로 ..
[스프링 입문] 스프링에서의 DB 접근 기술 순서는,H2라는 가벼운 DB 설치 및 접근 => 순수 JDBC => 스프링 JPA 이렇게 진행이 될 예정이다. 내 컴퓨터에는 H2 설치가 에러가 뜨면서 계속 안 돼서 직접 해보지는 않고 간접 체험했다. H2 데이터베이스설치 후 깔끔한 GUI가 보임.일반적인 쿼리문을 통해서 DB에 들어가는 데이터를 만들어줌. 매우 직관적이고 쉬움.JAVA에서 Long을 쓴다면 SQL에서는 bigint를 사용함. * 이건 근데 cmd로 DB서버를 띄워둬야 한다. 그걸 끄면 작동 안 됨. 이제 이걸 앱과 연동시켜보자. 메모리가 아닌 DB에 데이터가 저장되게끔 해보자! 순수 JDBC 그리고 템플릿 사용지금 실무를 하는 데는 몰라도 지장없지만, 예전에는 어떻게 진행했는지를 알아보는 시간.,,,알아보기는 했는데 적기는 너무 귀찮으..
[스프링 입문] 스프링 빈과 의존관계 & MVC 개발하기 예시 기본적으로 Service가 Repository에게 의존하는 것처럼, Controller는 Service에게 의존한다. 방법은 두가지가 있다. (1) 각각의 어노테이션과 autowired를 활용하여 묶어주는 법이 있고, (2) 직접 스프링 빈에 입력해주는 법이 있다.  (1) annotation & autowired를 활용하기어노테이션이 있으면 해당 녀석을 스프링이 먼저 불러올 수 있다 - "컴포넌트 스캔 & 의존성 주입"정확히 말하면, 스프링은 어노테이션이 붙은 클래스들을 스프링 컨테이너에서 관리하는 Bean으로 등록한다. 그리고 Spring은 해당 빈들을 Dependency Injection으로 관리한다.  이때 의존성을 주입하는 방법은 여러가지가 있는데, 기본적으로는 @Autowired를 필수적으로 ..