윤준영, 더불어 성장하는 개발자    카테고리    태그

5주차 강의 복습

프로젝트 구조

실제 프로젝트 생성시 트리 구조

  • src/main/java : 자바 파일을 작성하는 공간
    • Controller, Service, Repository, Entity, DTO 등이 들어감
  • src/main/resources : 자바를 제외한 HTML, CSS, JS, yml 파일을 작성하는 곳
    • static : css, js, 이미지 파일등을 저장하는 공간
    • templates : html 파일 형태로 자바 객체와 연동되는 템플릿 파일이 저장되는 공간
    • application.yml*.properties : 스프링부트의 설정 정보를 관리하는 파일
    • yml 파일 형식이 properties 보다 가독성이 더 나음
  • Build.gradle : Gradle이 사용하는 환경설정 파일로, 필요한 플러그인과 라이브러리 등을 기술함

Entity

Entity 클래스

  • 데이터베이스에 쓰일 필드와 여러 엔티티간 관계를 정의하는 역할
  • 데이터베이스 테이블에 대응하는 하나의 클래스라고 생각하면 됨
  • @Entity : JPA를 사용해 테이블과 매핑할 클래스에 붙여주는 어노테이션
  • @Id : Primary Key(PK)로 지정할 필드 위에 붙여주는 어노테이션
  • @GeneratedValue(stategy=GenerationType.IDENTITY) : 데이터를 저장할 때 값을 따로 설정하지 않아도 자동으로 1씩 증가하여 저장

ORM/JPA

  • 객체와 관계형 데이터베이스 간 매핑을 자동으로 처리해주는 기술
  • ORM에서는 Entity들을 객체의 형태로 다룰 수 있게 해줌
  • JPA는 자바에서 ORM을 사용하기 위한 표준 인터페이스로 스프링에서는 JPA를 쓰기 편하게 만들어 놓은 모듈인 Spring Data JPA를 사용함
  • Spring Data JPA는 JPA를 Repository 기반으로 간편하고 효율적으로 사용할 수 있는 모듈
  • 사용자가 Repository에 메소드를 입력하면, 스프링이 알아서 적합한 쿼리를 전송하는 구현체를 만들어 Bean으로 등록함

Repository

1
2
@Repository
public interface PostRepository extends JpaRepository<Post, Long> {}
  • DB 통신이 필요할 때 사용하며, 함수명으로 기능을 제작함
    • 일반 객체 조회는 findBy로 시작 ex) findById(Long Id)
  • JpaRepository의 제네릭 타입으로 <Entity, PK의 타입>을 지정해주면 자도응로 스프링의 Bean으로 등록됨
  • JpaRepository를 상속하면 인터페이스는 Entity에 대해 아래의 기능을 제공

h2의 ddl-auto 옵션

application.yml

  • create : 실행될 때마다 기존 스키마를 삭제하고 새로운 스키마 생성
  • create-drop : create와 동일한데 종료시에 스키마를 다시 삭제하는 특징이 있음
  • update : 기존 스키마와 현재 Entity를 비교하고, 변경점이 있으면 그키마에 반영함
  • validate : 기존 스키마와 Entity를 비교하고, 일치 여부를 확인함. 이때 변경사항이 있으면 반영하지 않고, 경고를 발생시키거나 예외를 던짐
  • none : 자동으로 스키마를 생성하거나 업데이트 하지 않음. 개발자가 수동으로 관리해야 함
  • 개발할 때는 create, update를 사용하고, 서버 배포 후에는 validate, none을 사용함

Controller

Controller 클래스

  • 사용자가 웹 브라이즈에 요청을 보내면, 그 요청을 Controller가 받아 처리를 담당하는 Service 호출
  • @Controller는 View를 반환하기 위해 사용하며, @RestController는 JSON 형태의 객체 데이터를 반환함
  • @PostMapping : Body를 통해 서버로 요청 데이터 전송하는 메소드 (Create)
  • @GetMapping : 리소스 조회(Read) 메소드
  • @PutMapping : 리소스 대체(Update) 메서드
  • @DeleteMapping : 리소스 제거(Delete) 메서드

Service

Service 클래스

  • 실제 서비스를 구현하기 위한 비즈니스 로직(실제 서비스에서 제공하는 여러 기능을 구현)을 주로 다룸
  • Controller에서 바로 Repository에 연결하여 사용할 수 있지만, 코드 중복이 발생할 수 있기 때문에 Service로 따로 분류하여 사용
  • @Service
    • 해당 어노테이션 적용시 루트 컨테이너에 Bean 객체로 생성해 줌
    • Bean 객체로 등록을 해야 스프링 부트가 제공하는 기능 사용 가능
  • @Transactional
    • 해당 어노테이션 적용시 특정 범위 내 메소드가 Transaction이 되도록 보장해줌
    • 이때 Transaction은 작업 단위를 그룹화 해 에러가 발생했을 때 복구가 가능하도록 용이하게 만듦

4주차 강의 복습

6주차 강의 복습

Comments powered by Disqus.

바로가기