본문 바로가기

공부/Spring39

[스프링 핵심](4) 싱글톤 컨테이너 전에 굳이 스프링을 통해 DI 컨테이너를 등록했던 이유는 싱글톤을 유지하기 위해서이다. 웹 애플리케이션은 보통 여러 고객이 동시여 요청을 보낸다. 스프링 없는 순수 DI 컨테이너인 AppConfig는 요청을 할 때 마다 새로운 객체를 생성한다. 그래서 사용자가 많으면 많을수록 메모리 낭비가 심해져서, 해당 객체가 딱 1개만 생성되고, 공유하도록 설계를 바꾸도록 한다. 이게 싱글톤 패턴이다. 싱글톤 패턴 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴. 객체 인스턴스를 2개 이상 생성하지 못하도록 private 생성자를 이용해 외부에서 임의로 new 키워드를 사용하지 못하도록 막아야한다. package hello.core.singleton; public class SingletonServ.. 2024. 1. 7.
[스프링 핵심](3) 회원, 주문과 할인 예제를 스프링으로 전환 지금까지 작성한 순수 자바 코드를 스프링으로 전환해보자. AppConfig 수정 package hello.core; import hello.core.discount.DiscountPolicy; import hello.core.discount.RateDiscountPolicy; import hello.core.member.MemberService; import hello.core.member.MemberServiceImpl; import hello.core.member.MemoryMemberRepository; import hello.core.order.OrderService; import hello.core.order.OrderServiceImpl; import org.springframework.bea.. 2024. 1. 7.
[스프링 핵심](2) 회원, 주문과 할인 예제2 + IoC, DI, 그리고 컨테이너 정률 할인 정책을 추가 개발한다. package hello.core.discount; import hello.core.annotation.MainDiscountPolicy; import hello.core.member.Grade; import hello.core.member.Member; import org.springframework.stereotype.Component; public class RateDiscountPolicy implements DiscountPolicy { private final int discountPercent = 10; @Override public int discount(Member member, int price) { if (member.getGrade() == Grad.. 2024. 1. 7.
[스프링 핵심](1) 회원, 주문과 할인 예제 먼저 Enum으로 회원 등급을 구현한다. package hello.core.member; public enum Grade { BASIC, VIP } Member 도메인 객체를 구현한다. package hello.core.member; public 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.grade = grade; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } p.. 2024. 1. 6.
[스프링 입문](5) AOP 메소드의 호출 시간을 측정하고 싶다. 어떻게 해야할까? MemberService에 회원 조회 시간을 측정하는 코드를 추가한다. package hello.hellospring.service; @Transactional public class MemberService { /** * 회원가입 */ public Long join(Member member) { long start = System.currentTimeMillis(); try { validateDuplicateMember(member); //중복 회원 검증 memberRepository.save(member); return member.getId(); } finally { long finish = System.currentTimeMillis(); l.. 2024. 1. 6.
[스프링 입문](4) 회원 관리 예제를 통한 웹 MVC 개발 2 홈 화면을 추가해보자. 홈 컨트롤러 추가 package hello.hellospring.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controller public class HomeController { @GetMapping("/") public String home() { return "home"; } } 회원 관리용 홈 Hello Spring 회원 기능 회원 가입 회원 목록 회원 등록 폼 개발 MemberController에 등록 관련 코드를 추가한다. @GetMapping(value = "/members/new") publi.. 2024. 1. 6.