목록전체 글 (261)
당니의 개발자 스토리
주문과 할인 도메인 개발 이번 시간에는 주문과 할인 도메인을 개발해 보겠습니다. 먼저, 할인 정책이 들어가야 되겠죠. 패키지를 하나 만들 겁니다. hello.core 밑에다가 dicount 패키지를 만들고요, 그 다음에 여기에다가 DiscountPolicy(할인정책) 라는 interface를 만들 겁니다. 그리고 얘는 discount 라는 메서드만 있어요. 파라미터로는 member와 price를 넘길 겁니다. 여기서 좋은 단축키, F2를 누르면 에러난 곳으로 바로 이동합니다. 그리고나서 만능 option + enter를 누르면 됩니다. 그리고 주석으로 return이 할인 대상 금액이라고 적어요. 이 discount 메서드를 호출하고 나면, 그 결과로 할인한 금액을 리턴해줍니다. 그러면 이제 이거에 대한 ..
주문과 할인 도메인 설계 이번 시간에는 주문과 할인 도메인을 한번 설계해 보겠습니다. 이제부터 조금 복잡해집니다. 주문과 할인 정책을 다시 떠올려 볼게요. 회원은 상품을 주문할 수 있고, 회원 등급에 따라서 할인 정책을 적용할 수 있다고 했죠. 그런데 할인 정책은 모든 VIP는 1,000원을 할인해주는 고정 금액 할인을 적용할 거예요. 나중에 변경이 될 수도 있는 거예요. VIP 분들은 그냥 주문할 때마다 무조건 1,000원씩 할인을 해주는 거예요. 그런데 문제는 기획자가 '아... 아직 사장님 의사결정을 못했어요.. 할인 정책은 변경 가능성이 높습니다' 라고 얘기하는 거에요. 그래서 오픈 직전까지 고민을 미루고 싶대요. 본인은 1,000원 할인을 해주고 싶은데 아직 사장님이 승인을 안 한 거예요. 회사..
회원 도메인 실행과 테스트 이번 시간에는 우리가 만든 회원 도메인이 정상적으로 동작하는지 테스트를 만들어 볼게요. 클래스 다이어그램을 보면, 빠짐없이 다 개발이 됐고, 그 다음에는 이 그림을 만들 거에요. 그러니까 회원 서비스가 실제로 런타임에 동작을 하면, 클라이언트는 MemberServiceImpl 이라는 회원 서비스를 사용하게 되고, 회원 서비스는 메모리 회원 저장소, 우리가 new 해가지고 MemoryMemberRepository 넣었었죠. 그래서 실제 인스턴스 간의 참조 그림은 이렇게 된다고 이해하시면 됩니다. 그래서 클래스 다이어그램은 정적인 거구요. 객체 다이어그램은 동적인 거에요. 왜냐면, 객체 다이어그램은 new로 생성 해가지고 실제 코드에 들어가 봐야 알 수 있잖아요. 이제 실제 동작하..
회원 도메인 개발 이제 본격적으로 회원 도메인을 개발해보겠습니다. 이 그림을 보고 만들면 되겠죠? 꼭 직접 따라치세요! 먼저, member 패키지를 만들겠습니다. 그리고 나서, member에다가 등급을 만들겁니다. Enum 으로 만드셔야 합니다. Enum 클래스란? 요구사항 중에 회원 등급은 basic 이랑 vip, 두가지가 있다고 했죠. 그 다음에, 회원 Entity를 만들겁니다. Entity는 JPA에서 테이블에 대응하는 하나의 클래스라고 생각하면 됩니다. 클래스로 Member 를 만들고, 회원은 세 가지 속성밖에 없습니다. 그리고 나서, cmd + N 해서 생성자를 만들겠습니다. Ok 하면, 이렇게 됩니다. 그 다음에 Getter, Setter 를 만들어 줄 거에요. 역시 cmd + N 해서 Get..
회원 도메인 설계 이전 시간에 요구사항을 들었고, 이번 시간부터 디테일하게 개발자가 회원 도메인에 대해서 설계를 하는 거에요. 회원 요구사항을 떠올려보면, 회원을 가입하고 조회할 수 있다. 그리고 회원은 일반과 VIP 두가지 등급이 있다. 그리고 회원 데이터는 자체 데이터베이스를 구축할 수도 있고 외부 시스템과 연동할 수도 있는데, 아직 결정이 안났대요. 그래도 여러분은 굉장히 유능한 개발자이기 때문에 일단 설계를 들어갑니다. 회원 도메인을 먼저 설계를 해봐요. 어떻게 되냐면, 이 클라이언트가 회원 서비스를 호출을 합니다. 근데 이 회원 서비스는 회원을 가입하고 조회하는 두 가지 기능을 제공해요. 그 다음에 회원 저장소라는 걸 별도로 만듭니다. 왜냐하면 회원 DB를 자체 구축할 수도 있고, 외부 시스템과..
비즈니스 요구사항과 설계 이번 시간에는 비즈니스 요구사항과 설계를 들어가 보겠습니다. 먼저 회원, 주문, 할인정책 이렇게 3가지 요구사항이 있어요. 회원 요구사항 먼저 들어볼게요. 여러분이 개발자고 기획자가 와서 막 요구사항을 내는 거예요. 회원을 가입하고 조회할 수 있다. 이 두 가지 기능이 있어야 되고, 회원에는 등급이 있대요. 회원은 일반과 VIP 두 가지 등급이 있다. 그리고 회원 데이터는 자체 DB를 구축할 수 있고, 외부 시스템과 연동할 수 있다. 그러니까 자체적으로 DB를 가지고 회원 시스템을 구축할 수도 있고, 아니면 뭔가 이 기능을 외주를 주거나, 회사 외부에 있는 시스템에서 만들어둔 회원 시스템을 그대로 활용할 수도 있는 거예요. 이거에 대해서 아직 결정이 안 된 거예요. 뭔가 미확정 ..
스프링 핵심 원리 이해1 - 예제 만들기 지금까지 우리가 배운 대로 역할과 구현을 나누어서, 그러니까 인터페이스와 구현한 객체를 나누어서 개발을 해볼 거에요. 근데 정말 순수한 자바로만 개발을 할 겁니다. 그렇게 해서 먼저, 프로젝트 세팅을 하고, 그 다음에 비즈니스 요구사항을 듣고 설계를 할 거에요. 그리고 예제가 어느 정도는 복잡도가 있어야 되기 때문에 회원 도메인, 주문, 할인 같은 도메인들을 넣어가지고, 물론 예제의 핵심에 집중해야 되니까 굉장히 간단하게 할 거에요. 이 도메인들을 섞어서 예제를 하나 만들어 볼 겁니다. 그리고 역할과 구현을 나누고, 이걸 스프링의 도움 없이 순수한 자바로만 개발을 해볼 거에요. 그렇게 해서 나중에 실제 요구사항이 변경됐을 때, 정말 유연하게 잘 대처가 가능한가? ..
이번 시간에는 객체지향 설계와 스프링에 대해서 알아보겠습니다. 다시 스프링으로 돌아왔습니다. 스프링 이야기에 객체지향 이야기가 왜 이렇게 많이 나오는가 하면, 사실 스프링은 다음 설명할 기술들로 다형성이랑 OCP, DIP가 가능하게 지원을 해주는 기술입니다. DI는 뭐냐면, Dependency Injection이라고 하고 보통 의존관계 주입 또는 의존성 주입이라고 합니다. 그리고 DI 컨테이너라는 걸 제공한다는데, 이건 뭐냐면 자바의 객체들을 어떤 컨테이너 안에 넣어놓고, 이 안에서 의존관계를 서로 연결해주고 주입해주는 기능들을 제공해주는 거예요. 이것들을 활용하면, 클라이언트 코드의 변경 없이 기능을 확장할 수 있는 거예요. 그래서 쉽게 부품을 교체하듯이 개발을 할 수가 있습니다. 다시 스프링이 없던 ..