Springboot

0woy·2023년 6월 26일
0

LikeLion

목록 보기
4/6
post-custom-banner

📌 순천향대학교 멋쟁이 사자처럼 동아리 백엔드 트랙에서 배운 내용을 정리하여 올립니다.

📕 Project Structure

📖 src / directory

- main/java: 자바 파일을 작성하는 공간
Controller, Service, Repository, Entity, DTO등

- main/resources: 자바를 제외한 HTML, CSS, JavaScript, Application/yml 파일을 작성하는 공간

- Templates : 템플릿 파일 저장.
이때 템플릿 파일은 HTML 파일 형태로 자바 객체와 연동되는 파일이다.

- Static : CSS, JS, 이미지 파일(jpg, png) 등 저장 공간

- application.yml / properties 파일: Springboot 설정 정보 관리 파일

.properties에서 .yml로 변경한 이유?
yml이 properties보다 가독성이 훨씬 나음.
.yml을 사용하는 것을 추천해서 변경

📖 Build.gradle: Gradle이 사용하는 환경 파일

프로젝트를 위해 필요한 플러그인 & 라이브러리 등 기술


📒 Entity

  • DB에 쓰일 필드와 여러 엔티티간 연관관계 정의
    즉, DB 테이블에 대응하는 하나의 클래스

    DB? 구조화된 정보 또는 데이터의 조직화된 모음으로서 일반적으로 컴퓨터 시스템에 저장되는 것

📖 Entity의 다양한 Annotation

  • @Entity: JPA를 사용해 테이블과 매핑할 클래스에 붙여주는 어노테이션
  • @Id: Primary Key(PK)로 지정할 필드위에 붙여주는 어노테이션
  • @GeneratedValue(stratege = GenertationType.IDENTITY): 데이터를 저장할 때 해당 속성에 값을 따로 세팅하지 않아도 1씩 자동으로 증가하여 저장

📗 ORM / JPA / Repository

1. ORM (Objective-Relational Mapping)

- 객체와 관계형DB 간의 매핑을 자동으로 처리해주는 기술

  • ORM에서는 Entity들을 객체의 형태로 다룰 수 있게 함
    - Spring에선 보통 JPA 이용

2. JPA (Java Persistence API)

- ORM 기술에 대한 API 표준 명세
쉽게말해, 자바에서 ORM을 사용하기 위한 표준 인터페이스
Spring Data JPA: JPA를 쓰기 편하게 만들어 놓은 모듈

📖 Spring Data JPA

- JPA를 Repository 기반으로 간편하고 효율적으로 사용할 수 있는 모듈.
- 사용자가 Repository에 정해진 규칙대로 메소드 입력시, Spring이 알아서 해당 메소드 이름에 적합한 쿼리를 날리는 구현체를 만들어 Bean으로 등록
Hibernate는 JAP(interface)의 구현체로서 가장 높은 점유율 가짐

3. Repository

- DB 통신이 필요할 때 사용
- 함수명으로 기능 제작

  • 일반 객체 조회는 findBy로 시작
  • By 뒤에는 기준이 되는 변수명 작성
    ex) findById (Long Id)
  • 개별 Interface를 만들고 JpaRepository라는 interface 상속 받음.
  • JpaRepository의 제네릭 타입으로 <Entity, PK의 타입>을 지정 -> Spring Data JPA는 자동으로 스프링의 빈(bean)으로 등록됨
    스프링이 내부적으로 인터페이스 타입에 맞는 객체를 생성해서 빈으로 등록
  • JpaRepository를 단순히 상속하는 것만으로도 인터페이스는 Entity에 대해 아래의 기능 제공
메서드기능
save()레코드 저장 (insert, update)
findOne()primary key로 레코드 한 건 찾기
findAll()전체 레코드 불러오기. 정렬(sort), 페이징(pageable) 가능
count()레코드 개수
delete()레코드 삭제

📖 application.yml

ddl-auto
• create : 실행될 때마다 기존 스키마를 삭제하고 새로운 스키마 생성.

• creat-drop : Create와 동일, 종료 시에 스키마를 다시 삭제함

• update : 기존 스키마와 현재 Entity를 비교하고 변경점이 있으면 스키마에 반영.

• validate : 기존 스키마와 Entity를 비교하고 일치 여부 확인.
변경사항이 있으면 반영하지 않고 경고 발생 or 예외 던짐

• none : 자동으로 스키마를 생성하거나 업데이트 하지 않는다. 개발자가 수동으로 관리 해야 함

테스트 할 때: create 또는 update
서버 배포 후: validate 또는 none


📘 Service / Controller

1. Service

Service에는 비즈니스 로직을 주로 다룸

비즈니스 로직이란?
ex) 주문 관리 시스템

  • 주문처리
  • 재고조회
  • 재고 감소
  • 주문 발송

📖 Service의 Annotation

①. @Service
루트 컨테이너에 Bean 객체로 생성해 줌.
루트 컨테이너에 Bean 객체로 등록을 해야 SpringBoot가 제공하는 기능 사용 가능

②. @Transactional
해당 범위 내 메소드가 Transcation이 되도록 보장

Transaction이란?
ex) 중고 거래
명품 지갑을 구매하기 위해 판매자에게 입금했으나 벽돌이 와버림
-> 시간을 되돌리고 싶은 구매자..
Transaction은 시간을 되돌릴 수 있음!
모든 작업들이 성공적으로 완료 되어야 DB에 적용하고, 중간에 에러가 발생하면 작업 원상복구.

📖 Service와 Controller를 분리하는 이유

Controller에서 바로 Repo로 연결해서 사용할 수 있는데,그러면 중복 코드 발생
즉, 코드 중복, 유지보수 및 재사용성 저하

2. Controller

- 사용자가 웹 브라우저에서 URI로 요청을 보내면, 그 요청을 Controller가 받음.
- 사용자의 Request를 전달 받아 요청의 처리를 담당하는 Service 호출

📖 @Controller VS @RestController

- @Controller: 주로 View(화면)을 반환하기 위해 사용
- @RestController: @Conteroller + @ResponseBody 의 형태로, JSON 형태 객체 데이터 반환

JSON이란?

  • JavaScript Object Notation_의 약자로, 데이터를 저장하거나 전송할 때 많이 사용되는 data 교환 형식
  • 특정 언어에 종속되지 않으며, 대부분 프로그래밍 언어에서 다룰 수 있음

📖 HTTP Method 종류

Method기능
PostMappingBody를 통해 서버로 요청 데이터 전송 (Create)
GetMapping리소스 조회 (Read)
PutMapping / PatchMapping리소스 대체 (update)
DeleteMapping리소스 제거 (Delete)

post-custom-banner

0개의 댓글