본문 바로가기

SpringFramework26

[Spring] 스프링으로 변환하기 스프링 변환 관련 애노테이션 @Configuration: 애플리케이션의 구성정보를 담당하는 파일이라고 명시 @Bean: 명시된 멤버들이 스프링 컨테이너에 등록된다. @Configuration public class AppConfig { @Bean private MemoryMemberRepository memberRepository() { return new MemoryMemberRepository(); } @Bean public DiscountPolicy discountPolicy() { return new FixDiscountPolicy(); } @Bean public MemberService memberService() { return new MemberServiceImpl(memberReposito.. 2021. 12. 15.
[Spring] IOC, DI, 그리고 컨테이너 제어의 역전 IoC (Inversion of Control) 개발자가 객체를 원하는대로 생성하고 호출하는데 이걸 프레임워크가 대신해준다. 즉, 이러한 제어를 개발자가 아닌 프레임워크가 해주기 때문에 제어의 역전이라고 부른다. 기존 프로그램은 클라이언트 구현 객체가 스스로 필요한 서버 구현객체를 생성하고, 연결하고, 실행했다. 한마디로 구현 객체가 프로그램의 제어의 흐름을 스스로 조종했다. 반면 AppConfig가 등장한 이후에 구현 객체는 자신의 로직을 실행하는 역할만 담당한다. 프로그램 제어 흐름은 이제 AppConfig가 가져간다. OrderServiceImpl은 필요한 인터페이스들을 호출하지만 어떤 구현객체가 올지는 모른다 (AppConfig가 알고 있다) 프레임워크 vs 라이브러리 프레임워크가 내.. 2021. 12. 15.
[Spring] 객체지향원리 개념 (DI) 새로운 할인 정책 개발 서비스 오픈 직전에 할인 정책을 지금처럼 고정 금액이 아니라 좀 더 합리적인 주문 금액당 할인하는 정률 할인으로 변경하려고 함. (%) public class RateDiscountPolicy implements DiscountPolicy { private int discountPercent = 10; @Override public int discount(Member member, int price) { if (member.getGrade() == Grade.VIP) { return price * discountPercent / 100; } else { return 0; } } } 새로운 할인정책 구현 클래스 생성 public class OrderServiceImpl impleme.. 2021. 12. 15.
[Spring] 예제 만들기 (순수 Java) 1. 비즈니스 요구사항과 설계 회원 회원을 가입하고 조회 회원은 일반과 VIP 두 가지 등급이 있다. 회원 데이터는 자체 DB를 구축할 수도 있고, 외부 시스템과 연동할 수 있다. (미확정) 주문과 할인 정책 회원은 상품을 주문할 수 있다. 회원 등급에 따라 할인 정책을 적용할 수 있다. 할인 정책은 모든 VIP는 1000원을 할인해주는 고정 금액 할인을 적용해달라. (나중에 변경될 수 있다.) 할인 정책은 변경 가능성이 높다. 회사의 기본 할인 정책을 정하지 못했고, 오픈 직전까지 고민을 미루고 싶다. 최악의 경우 할인을 적용하지 않을 수도 있다. 회원 데이터, 할인 정책 같은 부분은 지금 결정하기 어려운 부분이다. 인터페이스를 만들고 구현체를 언제든지 갈아 끼울수 있도록 설계하면 된다. 2. 회원 도.. 2021. 12. 13.
[Spring] SOLID 단일 책임원칙_SRP (Single Responsibility Principle) 한 클래스는 하나의 책임만 가져야한다. 이에 대한 기준은 변경이다. 변경이 있을때 파급효과가 적으면 단일 책임원칙을 잘 따른것 클라이언트 객체는 직접 구현객체를 생성하고, 실행하는 다양한 책임을 가지고 있었음 SRP 단일 책임 원칙에 따라 관심사를 분리함 구현 객체를 생성하고 연결하는 책임은 AppConfig가 담당 클라이언트 객체는 실행하는 책임만 담당 개방-폐쇄의 원칙_OCP (Open Closed Principle) 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다. 다형성을 활용하여 새로운 기능을 구현 구현 객체를 변경하려면 클라이언트 코드를 변경해야 한다. (다형성을 사용했지만 OCP 원칙을 지킬 .. 2021. 12. 13.
[Spring] 좋은 객체지향 프로그래밍이란? 객체지향 특징 추상화 복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려 내는것 코드의 재사용성, 가독성, 일관된 방향성 캡슐화 객체의 속성과 행위를 하나로 묶고 실제 구현 내용일부를 외부에 감추어 은닉한다. 외부에서 잘못된 사용으로 객체가 손상되지 않기 위해 사용, 접근 제한자 사용 상속 객체들간의 관계를 구축. 기존 클래스의 속성과 동작을 사용하기 위함 다형성 (오버라이딩) 프로그램 언어의 각 요소들이 다양한 자료형에 속하는 것을 허용 자료형에 따라 여러 타입의 요소를 생성할 수 있음 객체지향 프로그래밍 객체들의 모임으로 파악하는것. 각 객체는 메시지를 주고 받고 데이터를 처리 프로그램을 유연하고 변경을 용이하게 만들어준다 -> 컴포넌트를 쉽고 유연하게 변경하면서 사용 (다형성).. 2021. 12. 12.
[Spring] 스프링이란? 스프링 핵심기술: 스프링 DI 컨테이너, AOP, 이벤트, 기타 웹기술: 스프링 MVC, 스프링 WebFlux 데이터 접근 기술: 트랜재견, JDBC ORM 지원, XML 지원 기술통합: 캐시, 이메일, 원격접근, 스케쥴링 테스트: 스프링 기반 테스트 지원 언어: 코틀린, 그루비 스프링 부트 스프링을 편리하게 사용할 수 있도록 지원, 최근에는 기본으로 사용 단독으로 실행할 수 있는 스프링 애플리케이션을 쉽게 생성 Tomcat 같은 웹 서버를 내장해서 별도의 웹서버를 설치하지 않아도 됨 손쉬운 빌드 구성을 위한 starter 종속성 제공 스프링과 3rd parth(외부) 라이브러리 자동 구성 (버전을 맞춰줌) 메트릭, 상태확인, 외부 구성 같은 프로덕션 준비 기능 제공 관례에 의한 간결한 설정 핵심개념 자.. 2021. 12. 12.
[SpringBoot] JPA 1. build.gradle에 라이브러리 추가 (implementation 'org.springframework.boot:spring-boot-starter-data-jpa') dependencies { implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-web' // implementation 'org.springframework.boot:spring-boot-starter-jdbc' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' runti.. 2021. 12. 12.
[SpringBoot] 스프링을 사용한 테스트 @SpringBootTest @Transactional class MemberServiceIntegrationTest { @Autowired MemberService memberService; @Autowired MemberRepository memberRepository; @Test void 회원가입() { // given Member member = new Member(); member.setName("hello"); // when Long saveId = memberService.join(member); //then Member findMember = memberService.findOne(saveId).get(); assertThat(member.getName()).isEqualTo(findMem.. 2021. 12. 11.