🎁 모든 강의 30% + 무료 강의 선물🎁

인프런 워밍업 스터디 클럽 3기 3주 차 발자국

Layered Architecture

 

테스트하기 어려운 부분 분리,

테스트 하고자 하는 영역에 집중,

명시적이고 이해할 수 있는 형태의 문서 작성 가능

여러 가지 모듈이 합쳐진 결과를 우리는 예상 할 수 있는가?

이를 위한 통.합.테.스.트

통합 테스트

🔸 여러 모듈이 협력하는 기능을 통합적으로 검증하는 테스트

🔸 일반적으로 작은 범위의 단위 테스트만으로는 기능 전체의 신뢰성을 보장할 수 없다.

🔸 풍부한 단위 테스트 & 큰 기능 단위를 검증하는 통합 테스트

Library vs. Framework

내 코드가 주체가 되어서 필요한 기능은 외부에서 끌어다 옴 vs. 이미 갖춰진 동작 환경에서 내 코드가 수동적으로 역할을 하게 됨

Spring

🔸 Ioc (Inversion of Control)

객체의 생명주기를 주관해서. 필요한 객체가 있을때 필요한 객체를 제3자가 만들어서 주입해줌

🔸 DI (Dependency Injection)

생성자를 주입해서 사용함. 어디서 온 것인지는 알 수 없음(주는 것만 사용)

🔸 AOP (Aspect Oriented Programming)

비즈니스 흐름과 관계없는 부분을 하나로 모아서 다른 모듈로 분리해서 사용(스프링에서는 프록시 사용해서 구현 함)

ORM (Object-Relational Mapping)

객체지향에 대한 개념과 관계형 DB 간의 패러다임이 달라서 DB에 넣기에 어려움

🔸 객체 지향 패러다임과 관계형 DB 패러다임의 불일치

🔸 이전에는 개발자가 객체의 데이터를 한땀한땀 매피하여 DB에 저장 및 조회(CRUD)

🔸 ORM 을 사용함으로써 개발자는 단순 작업을 줄이고, 비즈니스 로직에 집중할 수 있다.

JPA. (Java Persistence API)

🔸 Java 진영의 ORM 기술 표준

🔸인터페이스이고, 여러 구현체가 있지만 보통 Hibernate를 많이 사용한다.

🔸 반복적인 CRUD SQL 을 생성 및 실행해주고, 여러 부가 기능들을 제공한다.

🔸 편리하지만 쿼리를 직접 작성하지 않기 때문에, 어떤 식으로 쿼리가 만들어지고 실행되는지 명확하게 이해하고 있어야 한다.

🔸 Spring 진영에서는 JPA를 한번 더 추상화한 Spring Data JPA 제공

🔸 QueryDSL 과 조합하여 많이 사용한다. (타입체크, 동적쿼리에 대한 장점. 실무에서는 필수로 사용하지만 강의의 범위를 넘어섬)

🔸@Entity 테이블 과 객체를 매핑, @Id , @Column Entity 정의

🔸@ManyToOne 두 객체간의 연관관계, @OneToMany, @OneToOne, @ManyToMany(일대다 - 다대일 관계로 풀어서 사용)

엔티티 설계

Order 와 Product 는 다대다 관계로서. 주문 입장에서 여러 음료수, 음료수 입장에서 여러 주문들이 된다.

다대다 관계는. 일대다, 다대일 관계로 풀어서 접근할 것

Order — OrderProduct — Product

요구사항

🔸 키오스크 주문을 위한 상품 후보 리스트 조회하기

🔸 상품의 판매 상태 : 판매중, 판매보류, 판매중지

→ 판매중, 판매보류인 상태의 상품을 화면에 보여준다

🔸 id, 상품 번호, 상품 타입, 판매 상태, 상품 이름, 가격

Persistence Layer

🔸 Data Access 의 역할(여기에 집중한 레이어)

🔸 비즈니스 가공 로직이 포함되어서는 안 된다. Data에 대한 CRUD에만 집중한 레이어

Business Layer

🔸 비즈니스 로직을 구현하는 역할

🔸 Persistence Layer 와의 상호작용(Data를 읽고 쓰는 행위) 을 통해 비즈니스 로직을 전개시킨다.

🔸 트랜잭션을 보장해야 한다.(로직을 전개하다 문제가 생기면 롤백해야 하기에, 롤백에 대한 트랜잭션을 보장해 줘야 한다). 작업 단위에 대한 원자성

댓글을 작성해보세요.


채널톡 아이콘