스프링 부트 계층
- 컨트롤러/프레젠테이션 계층 <-> 서비스/비즈니스 계층 <-> 리포지토리/퍼시스턴스 계층 <-> 데이터베이스
프레젠테이션 계층
- HTTP 요청을 받고 이 요청을 비즈니스 계층으로 전송하는 역할을 한다. 컨트롤러가 프레젠테이션 계층의 역할을 한다.
비즈니스 계층
- 모든 비즈니스 로직을 처리한다. 비즈니스 로직이란 서비스를 만들기 위한 로직을 말한다. 쉽게 말해 웹 사이트에서 벌어지는 모든 작업, 주문 서비스라고 한다면 주문 개수, 가격 등의 데이터를 처리하기 위한 로직, 주문 처리를 하다가 발생하는 예외 처리 로직, 주문을 받거나 취소하는 것 같이 프로세스를 구현하기 위한 로직 등을 생각하면 된다. 서비스가 비즈니스 계층의 역할을 한다.
퍼시스턴스 계층
- 모든 데이터베이스 관련 로직을 처리한다. 데이터베이스에 접근하는 DAO 객체를 사용할 수도 있다. 리포지토리가 퍼시스턴스 계층의 역할을 한다.
스프링 부트 디렉터리 살펴보기
main
- 실제 코드를 작성하는 공간, 프로젝트 실행에 필요한 소스코드나 리소스 파일은 모두 이 폴더 안에 들어 있다.
test
- 프로젝트의 소스 코드를 테스트할 목적의 코드나 리소스 파일이 들어 있다.
build.gradle
- 빌드를 설정하는 파일, 의존성이나 플러그인 설정 등과 같이 빌드에 필요한 설정을 할 때 사용한다.
settings.gradle
- 빌드할 프로젝트의 정보를 설정하는 파일
스프링 부트 프로젝트 만들기
Contorller(프레젠테이션 계층)
@RestController
public class TestController {
@Autowired
TestService testService;
@GetMapping("/test")
public List<Member> getAllMembers() {
List<Member> members = testService.getAllMembers();
return members;
}
}
Service(비즈니스 계층)
@Service
public class TestService {
@Autowired
MemberRepository memberRepository;
public List<Member> getAllMembers(){
return memberRepository.findAll();
}
}
- MemberRepository라는 빈을 주입 받은 후에 findAll() 메서드를 호출해 멤버 테이블에 저장된 멤버 목록을 모두 가져온다.
Repository(퍼시스턴트 계층)
DAO(Data Access Object)
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Entity
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", updatable = false)
private Long id;
@Column(name = "name", nullable = false)
private String name;
}
Reopository
@Repository
public interface MemberRepository extends JpaRepository<Member, Long> {
}
작동 확인하기
SQL 파일 생성
- resources 디렉터리에 data.sql 파일을 생성한다.
INSERT into member (id, name) VALUES (1, 'name 1')
INSERT into member (id, name) VALUES (2, 'name 2')
INSERT into member (id, name) VALUES (3, 'name 3')
application.yml 파일 설정
spring:
jpa:
# 전송 쿼리 확인
show-sql: true
properties:
hibernate:
format_sql: ture
# 테이블 생성 후에 data.sql 실행
defer-datasource-initialization: true
HTTP 요청
- 포스트맨에서 HTTP 메서드를 GET으로 설정 후, URL에 http://localhost:8080/test 입력 후 Send 버튼 누른다.
- 결과
[
{
"id": 1,
"name": "name 1"
},
{
"id": 2,
"name": "name 2"
},
{
"id": 3,
"name": "name 3"
}
]
정리
- 클라이언트에서 HTTP 요청 한다.
- 컨트롤러에서 해당하는 url 요청을 받고 서비스로 전송
- 서비스에서 모든 비즈니스 로직을 처리한다.
- 서비스에서 사용하는 리포지토리 작업을 처리한다. 이 과정에서 데이터베이스에 접근한다.
'스프링부트' 카테고리의 다른 글
[스프링 부트(Spring Boot)] 블로그 만들기(1)(글 생성, POST) (4) | 2024.09.19 |
---|---|
[스프링 부트(Spring Boot)] 데이터 베이스 조작(ORM, JPA, Hibernate, Spring data JPA) (0) | 2024.09.19 |
[스프링 부트(Spring Boot)] 테스트 코드(given-when-then 패턴) (0) | 2024.09.04 |
[스프링 부트(Spring Boot)] 개념 이해하기(빈이란? @Component) (1) | 2024.09.04 |