스프링 부트 3 구조 살펴보기

·2023년 12월 2일
0

Spring Boot

목록 보기
3/21
post-thumbnail

😎 스프링 부트 3의 구조

👀 프레젠테이션 계층

HTTP 요청을 받고 이 요청을 비즈니스 계층으로 전송하는 역할을 한다. 컨트롤러가 바로 프레젠테이션 계층의 역할을 한다.

👀 비즈니스 계층

모든 비즈니스 로직을 처리한다. 서비스가 이 역할을 한다.

👀 퍼시스턴스 계층

모든 데이터베이스 관련 로직을 처리한다. 리포지토리(DAO)가 이 역할을 한다.

👀 데이터베이스

데이터를 저장하는 역할을 한다.

이 구조는 지금껏 많이 다뤄 보았기 때문에 바로 간단한 예제와 함께 구조를 살펴보려고 한다.

🔎 예제로 살펴보기

1. main 디렉토리 구성

resource 폴더에 위와 같이 디렉토리와 파일을 생성한다.

  • templates : HTML과 같은 뷰 관련 파일을 넣을 디렉토리
  • static : JS, CSS, 이미지와 같은 정적인 파일을 넣을 디렉토리
  • application.yml : 데이터베이스의 설정 정보, 로깅 설정 정보 등 스프링 부트 설정을 할 수 있는 파일
  • data.sql : 애플리케이션이 실행될 때 저장할 더미 데이터를 넣을 SQL 파일

2. build.gradle에 의존성 추가

bulid.gradle

dependencies {

	(생략)

    // 스프링 데이터 JPA
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    runtimeOnly 'com.h2database:h2' // 인메모리 데이터베이스
    compileOnly 'org.projectlombok:lombok' // 롬복
    annotationProcessor 'org.projectlombok:lombok'
}

3. 프레젠테이션, 서비스, 퍼시스턴스 계층 생성

TestController.java

package me.ansoohyeon.springbootdeveloper;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class TestController {

    @Autowired // TestService 빈 주입
    TestService testService;

    @GetMapping("/test")
    public List<Member> getAllMembers(){
        List<Member> members = testService.getAllMembers();
        return members;
    }
}

TestService.java

package me.ansoohyeon.springbootdeveloper;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class TestService {

    @Autowired
    MemberRepository memberRepository; // 빈 주입

    public List<Member> getAllMembers(){
        return memberRepository.findAll(); // 멤버 목록 얻기
    }
}

Member.java

package me.ansoohyeon.springbootdeveloper;

import jakarta.persistence.*;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

@NoArgsConstructor(access = AccessLevel.PROTECTED)
@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;
}

MemberRepository.java

package me.ansoohyeon.springbootdeveloper;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface MemberRepository extends JpaRepository<Member, Long> {
}

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: true

    # 테이블 생성 후에 data.sql 실행
    defer-datasource-initialization: true

4. 프로젝트 실행

프로젝트 실행 후 콘솔 창에서 'CREATE TABLE'을 검색해 테이블이 잘 만들어졌는지 확인해 보자.

테이블이 제대로 생성되었다. 이제 포스트맨으로 HTTP 요청을 시도해 보자.

data.sql 파일로 작성해 저장한 데이터를 클라이언트가 확인할 수 있다!


✌ 마무리하며

익숙한 MVC2 패턴을 적용하여 스프링 부트 3의 구조르 살펴보았다. 어노테이션이 조금 다른 것 말고는 크게 어려운 점이 없는 것 같다..!

profile
풀스택 개발자 기록집 📁

0개의 댓글