프로젝트 구조
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
: 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 옵션
create
: 실행될 때마다 기존 스키마를 삭제하고 새로운 스키마 생성create-drop
: create와 동일한데 종료시에 스키마를 다시 삭제하는 특징이 있음update
: 기존 스키마와 현재 Entity를 비교하고, 변경점이 있으면 그키마에 반영함validate
: 기존 스키마와 Entity를 비교하고, 일치 여부를 확인함. 이때 변경사항이 있으면 반영하지 않고, 경고를 발생시키거나 예외를 던짐none
: 자동으로 스키마를 생성하거나 업데이트 하지 않음. 개발자가 수동으로 관리해야 함- 개발할 때는
create
,update
를 사용하고, 서버 배포 후에는validate
,none
을 사용함
Controller
-
사용자가 웹 브라이즈에 요청을 보내면, 그 요청을 Controller가 받아 처리를 담당하는 Service 호출 @Controller
는 View를 반환하기 위해 사용하며,@RestController
는 JSON 형태의 객체 데이터를 반환함@PostMapping
: Body를 통해 서버로 요청 데이터 전송하는 메소드 (Create)@GetMapping
: 리소스 조회(Read) 메소드@PutMapping
: 리소스 대체(Update) 메서드@DeleteMapping
: 리소스 제거(Delete) 메서드
Service
-
실제 서비스를 구현하기 위한 비즈니스 로직(실제 서비스에서 제공하는 여러 기능을 구현)을 주로 다룸 - Controller에서 바로 Repository에 연결하여 사용할 수 있지만, 코드 중복이 발생할 수 있기 때문에 Service로 따로 분류하여 사용
@Service
- 해당 어노테이션 적용시 루트 컨테이너에 Bean 객체로 생성해 줌
- Bean 객체로 등록을 해야 스프링 부트가 제공하는 기능 사용 가능
@Transactional
- 해당 어노테이션 적용시 특정 범위 내 메소드가 Transaction이 되도록 보장해줌
- 이때 Transaction은 작업 단위를 그룹화 해 에러가 발생했을 때 복구가 가능하도록 용이하게 만듦
Comments powered by Disqus.