[세미나] API 개발과 테스트 코드

매빈·2023년 4월 22일

EFUB 세미나

목록 보기
5/6
post-thumbnail

Spring Project 생성


Project: 빌드 도구

  1. Gradle
  • Groovy 기반으로 빌드 스크립트 작성
  • 의존성 관리를 위한 다양한 방법을 제공
  • Maven보다 빌드 속도가 빠름
  1. Maven
  • XML 기반으로 빌드 스크립트 작성
  • 생명주기와 프로젝트 객체 모델 개념이 도입됨
  • 연관된 라이브러리들이 함께 업데이트됨

Dependencies

  1. 라이브러리 vs. 프레임워크
  • 라이브러리 : 이미 만들어진 기능을 이용할 때 사용
  • 프레임워크 : 미리 만들어진 구조에 코드를 끼워 넣을 때 사용

MVC 패턴


Model

  • 애플리케이션의 정보, 데이터를 가진 객체

View

  • 사용자 인터페이스에 해당
  • 모델로부터 얻어 온 정보를 표시

Controller

  • 사용자의 요청에 대응하는 데이터를 Json 형태로 반환

프로젝트 구조


  • Domain : 소프트웨어로 해결하고자 하는 문제 영역
  • DTO (Data Transfer Object) : 계층끼리 데이터를 주고받을 수 있게 하는 객체
  • Controller : 사용자의 요청에 대해 Json 형태로 객체 데이터를 반환
  • Service : 비즈니스 로직 실행
  • Repository : 도메인 객체를 관리하는 저장소
  • .yml
    • 시스템끼리 데이터를 주고받을 때 사용하는 정해진 포맷이 있는 파일 형식
    • 계층 구조의 형식으로 작성 ➡️ 2칸 띄어쓰기로 계층을 만들 수 있음.
      spring:
        datasource:
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://127.0.0.1:3306/{서버 주소}?createDatabaseIfNotExist=true&characterEncoding =UTF-8&characterSetResults=UTF-8
          username: {username}
          password: {password}
        jpa:
          hibernate:
            ddl-auto: update
          generate-ddl: true
          show-sql: true
    • .yml vs. .properties
      • .yml : 계층 구조의 형태로 작성 가능
        • .properties : 계층 구조의 형태로 작성 불가

Annotation

객체, 클래스, 메서드 등에 특별한 의미, 기능을 부여

Entity

  • 데이터 모델링에서 사용되는 객체
  • JPA를 사용해서 테이블과 매핑할 클래스는 모두 Entity에 해당
  • @Entity로 표시
  • @Setter 지양: 어느 경로로 값이 변경된 것인지 파악하기 어려움
  • Builder 패턴: 생성자 없이 객체를 생성할 때 사용하는 패턴, @Builder로 표시

Repository

  • 엔티티를 관리하는 저장소
  • 실제로 DB에 접근
  • API를 직접 사용하는 계층
  • MVC 패턴에서 Model에 해당
  • @Repository로 표시

1. JPA

  • Java Persistence API
  • Java 진영의 ORM 기술에 대한 API 표준 명세
  • 인터페이스의 모음이므로 사용하려면 구현 필요

2. Spring DATA JPA
사용 방법

public interface MemberRepository extends JpaRepository<Member, Long> { 
	List<Member> findByUsernameAndAge(String username, int age);
    
    // findByUsernameAndAge(String username, int age)
    // == SELECT * FROM Member WHERE Username=username AND Age=age
}

Controller

  • client로부터 DTO 형태로 요청을 받음
    ➡️ Service의 기능을 호출
    ➡️ 받은 응답을 DTO 형태로 클라이언트에 반환
  • @Controller로 표시

Service

  • Controller로부터 요청을 받음
    ➡️ 데이터 가공
    ➡️ 가공한 데이터를 Controller로 전달
  • Repository를 이용하여 데이터 관리
  • @Service로 표시

로직 정리

0개의 댓글