[DEV] J-Jay

스프링 부트 계층 파악하기 본문

Back-end/Spring

스프링 부트 계층 파악하기

J-Jay 2023. 9. 2. 17:14
728x90

스프링 부트 계층 파악하기

코드를 이용해서 스프링 부트에서는 계층을 어떻게 나누는지 확인해 보자.

 

build.gradle 의존성 추가

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa' //JPA

    runtimeOnly 'com.h2database:h2' //In Memory Database

    compileOnly 'org.projectlombok:lombok' //Lombok
    annotationProcessor 'org.projectlombok:lombok'

    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

프레젠테이션, 비즈니스, 퍼시스턴스 계층 생성

 

TestController.java - 프레젠테이션(Controller)

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

TestService.java - 비즈니스(Service)

@Service
public class TestService {
    @Autowired
    MemberRepository memberRepository; // 빈 주입
    public List<Member> getAllMembers() {
        return memberRepository.findAll(); //멤버 목록 얻기
    }
}

 

 

 

MemeberRepository라는 빈을 주입받은 후 findAll() 메서드를 호출해 멤버 테이블에 저장된 멤버 목록을 모두 가져온다.

 

Member.java - 퍼시스턴스(DAO)

@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;
}

DB에 접근할 때 사용할 객체인 Member DAO 생성 

 

MemberRepository.java - 퍼시스턴스(Repository 매핑)

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

member 테이블과 Member 클래스를 매핑하는 코드 

매핑 작업에는 인터페이스 파일이 필요하다. 이 인터페이스는 DB에서 데이터를 가져오는 퍼시스턴트 계층 역할을 한다.

 

PostMan

스프링 부트 요청(Request) - 응답(Response) 과정 정리

 

  1. PostMan에서 /test GET 요청을 한다.
  2. 스프링 부트의 디스패처 서블릿이 URL 분석, 요청을 처리할 컨트롤러 확인
    TestController가 /test라는 GET요청을 처리할 수 있는 getAllMembers() 메서드를 가지고 있으므로 전달 받음
  3. getAllMembers() 메서드와 /test GET 요청 매치, 비즈니스 계층과 퍼시스턴스 계층을 통해 필요한 데이터 수집
  4. View Resolver는 템플릿 엔진을 사용해 HTML 문서 또는 JSON, XML 등의 데이터 생성
  5. 결과 members를 return 하고 그 데이터를 PostMan에서 확인 가능