Spring
스프링 기본 - 비즈니스 요구사항과 설계
스프링 기본 - 비즈니스 요구사항과 설계
2022.05.24비즈니스 요구사항과 설계 회원 회원을 가입하고 조회할 수 있다. 회원은 일반과 VIP 두 가지 등급이 있다. 회원 데이터는 자체 DB를 구축할 수 있고, 외부 시스템과 연동할 수 있다. (미확정) 주문과 할인 정책 회원은 상품을 주문할 수 있다. 회원 등급에 따라 할인 정책을 적용할 수 있다. 할인 정책은 모든 VIP는 1000원을 할인해주는 고정 금액 할인을 적용해달라. (나중에 변경 될 수 있다.) 할인 정책은 변경 가능성이 높다. 회사의 기본 할인 정책을 아직 정하지 못했고, 오픈 직전까지 고민을 미루고 싶다. 최악의 경우, 할인을 적용하지 않을 수도 있다. (미확정) 요구사항을 보면, 회원 데이터, 할인 정책 같은 부분은 지금 결정하기 어려운 부분이다. 그렇다고 이런 정책이 결정될 때 까지 개발을..
스프링 기본 - 객체 지향 설계와 스프링 / 프로젝트 생성
스프링 기본 - 객체 지향 설계와 스프링 / 프로젝트 생성
2022.05.24객체 지향 설계와 스프링 스프링의 역사 2002년 로드 존슨 책 출간 EJB의 문제점 지적 EJB 없이도 충분히 고품질의 확장 가능한 애플리케이션을 개발할 수 있음을 보여주고, 30,000라인 이상의 기반 기술을 예제 코드로 선보임 여기에 지금의 스프링 핵심 개념과 기반 코드가 들어가 있음 BeanFactory, ApplicationContext, POJO, 제어의 역전, 의존관계 주입 책이 유명해지고, 개발자들이 책의 예제 코드를 프로젝트에 사용 책 출간 직후 Juergen Hoeller(유겐 휠러), Yann Caroff(얀 카로프)가 로든 존슨에게 오픈소스 프로젝트를 제안 스프링의 핵심 코드의 상당수는 유겐 휠러가 개발 스프링 이름은 전통적인 J2EE(EJB) 라는 겨울을 넘어 새로운 시작이라는 뜻..
스프링 입문 - AOP 적용
스프링 입문 - AOP 적용
2022.05.23AOP 적용 AOP : Aspect Oriented Programming 공통 관심 사항(cross-cutting concern) vs 핵심 관심 사항(core concern) 분리 좌측처럼 분산되어 있는 공통 관심 사항인 시간 측정 로직을 우측 처럼 한곳에 모으고, 내가 원하는 곳에 공통 관심 사항을 적용한다는 개념이 AOP이다. AOP 적용 방법을 알아보자. 우선, hellospring패키지의 하위에 aop라는 이름으로 패키지를 생성했다 그리고 aop패키지 안에, TimeTraceAop라는 이름으로 클래스를 생성했다. 그리고, Aop는 @Asepect 라는 애너테이션을 적어줘야 한다. 코드는 이렇게 작성해 주었다. 그리고 작성한 Aop클래스인 TimeTraceAop를 스프링빈으로 등록해줘야 한다. 컴..
스프링 입문 - AOP가 필요한 상황
스프링 입문 - AOP가 필요한 상황
2022.05.23AOP AOP가 필요한 상황 모든 메서드의 호출 시간을 측정하고 싶다면? 공통 관심 사항(cross-cutting concern) vs 핵심 관심 사항(core concern) 회원 가입 시간, 회원 조회 시간을 측정하고 싶다면? 우선, 제일 간단한 방법으로, join() 메서드의 실행시간을 측정해보자. System.currentTimeMillis(); 이것을 사용하면 밀리세컨드로 받을 수 있다. 그리고 로직이 끝날 때, 시간을 찍어야 하는데, 예외가 터져도 찍어야 하므로, try-finally를 사용했다. 실행시간은 finish - start 로 구해서 찍어주었다. 통합테스트로 돌려보았더니, 이렇게 찍힌다. 모든 메서드의 실행시간을 측정해야 하므로, findMembers() 에도 동일하게 작성해주자. ..
스프링 입문 - 스프링 데이터 JPA
스프링 입문 - 스프링 데이터 JPA
2022.05.23우리가 SpringBoot와 JPA만 사용을 해도 개발 생산성이 정말 많이 증가한다. 개발 해야할 코드도 엄청나게 줄어든다. 그런데, 여기에다가 SpringDataJPA를 사용하면, 우리가 "이것까진 안되지 않을까?" 라는 이러한 한계를 넘어서, 정말 마법처럼, 인터페이스만으로 개발을 완료할 수 있다.(물론 디테일 하게 들어가면 조금 다를수도..) 그리고, 반복적으로 개발해온 기본 CRUD 기능도 스프링 데이터 JPA가 모두 제공해준다. 스프링 부트와 JPA라는 기반 위에, 스프링 데이터 JPA라는 환상적인 프레임워크를 더하면, 지금까지 조금이라도 단순하고 반복이라 생각했던 개발 코드들이 확연하게 줄어든다. 따라서, 엔지니어/개발자는 핵심 비즈니스 로직을 개발하는데, 집중할 수 있다. 실무에서 관계형 데..
스프링 입문 - JPA
스프링 입문 - JPA
2022.05.22이전에 Jdbc를 해보고, JdbcTemplate를 써봤는데, Jdbc에서 JdbcTemplate로 바꿔보니, 개발해야하는 반복적인 코드가 확 줄었던 경험을 해보았다. 그런데, 아직도 해결이 안되는 것이 하나가 있다. "SQL은 결국 개발자가 직접 작성을 해야 한다는 것" 이 문제는 해결할 수 없을까? JPA라는 기술을 사용하면 SQL쿼리도 JPA가 자동으로 처리를 해준다. JPA를 사용하면 개발 생산성을 크게 높일 수 있다. 마치 우리가 MemoryMemberRepository를 사용했던 것처럼 객체를 메모리에 넣듯이 JPA에 집어넣으면, JPA가 중간에서 DB에 SQL날리고, DB를 통해서 데이터를 가져오는 것을 JPA가 처리해준다. JPA가 단순히 SQL을 만들어 주는 것을 넘어서서, JPA를 사용..