본문 바로가기
Team Project/TIL, WIL

TIL(33) 21-11-03 : Spring 시작

by 감사쟁이야 2021. 11. 3.

Facts

✅ TDP Service를 Sam famework를 사용하여 Serverless로 배포

✅ Spring 프레임워크의 기본 레이어(Repository, Service, Controller) 이해

✅ JPA 이해

 

Findings

✏️  기본 레이어

사진 출처 : 내일배움캠프 스프링-1

스프링에서 서버를 개발할 때, 처리 과정을 3개로 분리해서 개발한다.

분리하는 이유는, 코드가 변경이 되어도 서로 영향을 주지 않게 하여, 확장성을 높이기 위함이다.

역할별로 Controller, Service, Repository로 분리한다. 

 

(1) Controller 

  • 클라이언트의 요청을 받음
  • 요청에 대한 처리는 서비스에게 전담
  • 클라이언트에게 응답

(2) Service

  • 서버에서 사용자의 요구사항 처리하는 핵심 기능
  • DB 정보가 필요할 때는 Repository에게 전담

(3) Repository

  • DB 관리 
  • DB CRUD 작업 처리

 

✏️  JPA (Java Persistence API)

자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스이다.

SQL을 쓰지 않고 데이터를 생성, 조회, 수정, 삭제할 수 있도록 해주는 번역기다.

 

🤔 JPA가 있다면,

  자바를 짜다가 갑자기 SQL를 짜지 않아도 된다. 명령(ex. SQL query)을 자바로 만들 수 있다.

  그러면 유지보수가 쉽다.
🤔 유지보수가 쉽다고? 왜?
  기존 : 필드 변경 시, 모든 SQL을 수정해야 한다.
  JPA : 필드만 추가하면 된다. SQL은 JPA가 처리하기 때문에 손댈 것이 없다.

 

  • LectureRepository.java Interface
     아래의 코드는 LectureRepository가 JPA Repository의 메소드를 사용한다는 것을 말한다.
    <Lecture, Long>은 <엔티티, ID 유형>을 말한다. Lecture Class는 Long형을 ID로 지정하고 있기에 <Lecture, Long>라고 작성한다.
public interface LectureRepository extends JpaRepository<Lecture, Long> {}
  • JPA 실행 코드
@Bean
public CommandLineRunner demo(LectureRepository lectureRepository) {
    return (args) -> {
        Lecture course = new Lecture("웹개발의 봄", "남병관");
        lectureRepository.save(course);
        lectureRepository.findAll();
    };
}​

 

✏️  JPA가 클래스가 아닌 인터페이스를 사용하는 이유

<상속>을 통해, 코드를 재사용한다면, 부모클래스를 상속받은 자식클래스에서는 부모 클래스의 모든 메서드를 그대로 사용할 수 있기에, 캡슐화를 위반한다. 또한, 원치않은 메서드들도 상속된다. 원치 않은 메서드도 상속되면 의도치 않은 버그도 발생시킬 수 있다.

<인터페이스>를 사용하면, 함수의 특징만을 정의하고 함수의 내용이 없기에 결합도가 낮다.

클래스의 기본틀(= 함수의 특징만을 정의한 명세)을 제공하여 정의된 메서드를 통해서만 코드를 재사용할 수 있기에, 개발자들에게 정형화된 개발을 할 수 있게 해준다.

 

📝 출처

 

[Spring] JpaRepository 이용

Spring Data JPA는 "JpaRepository"라는 기능을 사용하면 매우 간단히 데이터를 검색 할 수 있도록 된다. 그 기본적인 사용법을 설명한다. JpaRepository 인터페이스 생성 이전에 기본적인 데이터베이스 액세

araikuma.tistory.com