🍀Spring

새로운  할인 정책 개발이번에는 주문한 금액의 %를 할인해주는 새로운 정률 할인 정책을 추가해보자. RateDiscountPolicy 추가 package hello.core.discount;import hello.core.member.Grade;import hello.core.member.Member;public class RateDiscountPolicy implements DiscountPolicy { private int discountPercent = 10; //10% 할인 @Override public int discount(Member member, int price) { if (member.getGrade() == Grade.VIP) { ret..
연관관계 매핑시 고려할 점 3가지다중성다대일 : @ManyToOne일대다 : @OneToMany일대일 : @OneToOne다대다 : @ManyToMany => 다대다는 실무에서 사용하면 안된다. 단방향, 양방향- 테이블외래키 하나로 양쪽 Join이 가능하다. 사실상 방향이라는 개념이 없다. - 객체참조용 필드가 있는 쪽에서 참조 대상으로만 참조가 가능하다.한 쪽만 참조하면 단방향, 양쪽이 서로 참조하면 양방향이다. 연관관계의 주인테이블은 외래 키(FK) 하나로 두 테이블의 연관관계를 맺고 있다.하지만, 객체의 양방향 관계는 A->B, B->A 처럼 참조가 2군데에서 필요하다. => 둘중 테이블의 FK를 관리할 곳이 필요하다. 연관관계의 주인 : 외래 키를 관리하는 참조주인의 반대편 : 외래 키에 영향을 ..
비즈니스 요구사항과 설계회원- 회원을 가입하고 조회할 수 있다.- 회원은 일반과 VIP 두 가지 등급이 있다.- 회원 데이터는 자체 DB를 구축할 수 있고, 외부 시스템과 연동할 수 있다. (미확정) 주문과 할인 정책- 회원은 상품을 주문할 수 있다.- 회원 등급에 따라 할인 정책을 적용할 수 있다.- 할인 정책은 모든 VIP는 1000원을 할인해주는 고정 금액 할인을 적용해달라. (나중에 변경 될 수 있다.)- 할인 정책은 변경 가능성이 높다. 회사의 기본 할인 정책을 아직 정하지 못했고, 오픈 직전까지 고민을 미루 고 싶다. 최악의 경우 할인을 적용하지 않을 수 도 있다. (미확정)  회원 도메인 설계  회원 도메인 개발회원 등급package hello.core.member;public enum Gr..
스프링이란?스프링은 '특정한 하나'로 볼 수 있지만, 여러 기술들의 모음으로 볼 수 있다. 그러한 기술들에는 다음과 같은 종류가 있다. 스프링 프레임워크스프링 부트 (스프링 프레임 워크의 모든 기술들을 편리하게 사용할 수 있도록 도와줌)스프링 데이터 (CRUD를 편리하게 사용할 수 있도록 도와줌)스프링 시큐리티 (보안 관련 기능을 편리하게 사용할 수 있도록 도와줌)스프링 세션 (세션 기능을 편리하게 사용할 수 있도록 도와줌)스프링 Rest Docs (api문서를 편리하게 사용할 수 있도록 도와줌)스프링 배치 (배치처리에 특화)스프링 클라우드 (클라우드 기술에 특화)  스프링 프레임워크• 핵심 기술: 스프링 DI 컨테이너, AOP, 이벤트, 기타• 웹 기술: 스프링 MVC, 스프링 WebFlux• 데이터 ..
먼저 빈(Bean)에 대해 알아보자. 빈(Bean) 스프링(Spring) 컨테이너가 관리하는 자바 객체를 빈(Bean)이라 한다. 스프링의 특징에는 제어의 역전(IoC)가 있다. 지금까지 사용자가 new연산을 통해 객체를 생성하고 메소드를 호출했지만 제어의 역전이 적용 된 경우에는 객체의 생성과 사용자의 제어권을 스프링에게 넘긴다. 사용자는 직접 new를 이용해 생성한 객체를 사용하지 않고, 스프링에 의하여 관리당하는 자바 객체를 사용한다. 이 객체를 '빈(bean)' 이라 한다.   @Controllerpublic class MemberController { private final MemberService memberService; @Autowired public MemberControl..
테스트 코드 작성시 자주 사용되는 Given-When-Then 에 대해 알아보자. given-when-then은 곧 - [준비 - 실행 - 검증] 이다. given테스트를 위해 준비를 하는 과정이다.  테스트에 사용하는 변수, 입력 값 등을 정의하거나, Mock 객체를 정의하는 구문도 given에 포함된다. 예시로 회원가입 테스트에 대해 알아보자.//Given Member member = new Member(); member.setName("hello");멤버 객체를 정의하고 멤버의 이름을 hello라고 저장하였다.  when실제로 액션을 하는 테스트를 실행하는 과정이다. //When Long saveId = memberService.join(member);saveI..
웹 개발에는 세가지 방식이 있다. 정적 컨텐츠MVC와 템플릿 엔진API 정적 컨텐츠는 파일을 그대로 웹브라우저에 전달해주는 방식 MVC와 템플릿 엔진은 서버에서 변형해서 html로 바꿔서 전달해주는 방식 API는 JSON이라는 데이터 포맷으로 클라이언트한테 데이터를 전달해주는 방식    정적 컨텐츠 스프링 부트는 정적 컨텐츠를 기본으로 제공해줌. resources 파일에정적 컨텐츠 입니다.static-hello.html 파일을 생성하고 실행하면 다음과 같이 바로 웹이 실행된다. 정적 컨텐츠의 실행방식은 간단하게처럼 표현될 수 있다. 웹 에서 hello-static.html을 내장 톰캣 서버에 넘기고 controller 쪽에서 hello-static을 찾고 없다면 내부에 있는 resources에 stati..
연관관계의 주인테이블은 외래 키 하나로 두 테이블의 연관관계를 관리한다. 그러나 객체는 양방향으로 사용시 각 개체가 서로를 참조해야 한다. 즉, 참조가 두번 필요하다. 객체를 테이블에 매핑할 때에 두 객체중 어떤 객체로 외래 키를 관리해야 하는지에 대한 고민이 생긴다. 여기서 외래 키를 관리하게 되는 객체를 연관관계의 주인이라 부른다.   연관관계의 주인을 정하는 법연관관계의 주인을 정할 때는, 테이블의 외래 키가 있는 곳으로 정해야 합니다.그리고 데이터베이스 테이블의 다대 일, 일대 다 관계에서는 항상 다 쪽이 외래 키를 가집니다.데이터베이스는 컬렉션을 담을 수 없기에, 일 쪽에서 외래 키를 가지는 것이 불가능합니다.  양방향 매핑 시 주의할 점양방향 매핑 시 연관관계의 주인을 지정해주어야 합니다. 지..
방향(Direction) : 단방향, 양방향다중성(Multiplicity)  : 다대일 (N:1) , 일대다 (1:N) , 일대일 (1:1) , 다대다 (N:M)연관관계의 주인(Owner) : 객체 양방향 연관관계는 관리 주인이 필요    객체를 테이블에 맞추어 모델링 (참조 대신에 외래 키를 그대로 사용) @Entity public class Member { @Id @GeneratedValue private Long id; @Column(name = "USERNAME") private String name; @Column(name = "TEAM_ID") private Long teamId; … } @Entity public clas..
@Id데이터베이스 테이블의 기본 키(PK)와 객체의 필드를 매핑시켜주는 어노테이션 @Id만 사용할 경우 기본 키를 직접 할당해 주어야 하며, 데이터가 생성해주는 값을 사용하려면 @GeneratedValue를 사용한다.  @GeneratedValue기본 키를 자동 생성해주는 어노테이션 속성으로는 startegy가 있으며, 이를 통해 자동 생성 전략을 지정할 수 있음. IDENTITY@GeneratedValue(strategy = GenerationType.IDENTITY) 기본 키 생성을 데이터베이스에 위임하는 전략 주로 MySQL, PostgreSQL, SQL Server에서 사용합니다.예를 들어 MySQL의 AUTO_INCREMENT 기능은 데이터베이스가 기본 키를 자동으로 생성해줍니다.IDENTITY..
말동말동현
'🍀Spring' 카테고리의 글 목록 (2 Page)