스프링 기초 설계

곽현민·2026년 1월 2일

3 Layer Architecture

3계층 구조에 대해서 처음에는 어렵게 다가왔다.
하지만 점차 여러번 접하다보니 생각보다 쉽고 정말 편리하다는 생각이 들었다.

3계층 구조는 Controller, Service, Repository로 이루어져있다.
이를 이용하기 위해 Entity와 dto클래스도 함께 만들어줘야한다.
이것까지가 한 세트로 생각하면 편하다.

Controller

@RestController // 컨트롤러 역할
@RequiredArgsConstructor // 필수 속성 지닌 생성자
public class Controller {
	private final Service service;
    
    // @{Http메서드}Mapping과 ResponseEntity를 이용해
       요청과 응답을 dto를 통해 전달(to Service) 및 반환(to Client) 구조 구현 ...
}

Service

@Service // 서비스 역할
@RequiredArgsConstructor // 필수 속성 지닌 생성자
public class Service {
	private final Repository repository;
    
    //@Transactional : 작업 단위(트랜잭션 내 작업 중 하나라도 실패 시 전체 실패)
      Controller로부터 전달받은 dto를 repository를 통해 기능 구현
      Controller가 요구하는 응답dto와 동일한 타입으로 변환 후 전달 ...

Repository

public interface Repository extends JpaRepository<Entity, IdDataType> {
	// 추가적인 쿼리 메서드 구현 가능 ...
    // JpaRepository : 레포지토리 역할
}

(Controller, Service, Repository의 import는 생략되있음)

Entity

@Getter // 게터 역할
@Entity // 엔티티 역할
@Table(name = "entities") // 테이블 역할
@NoArgsConstructor(access = AccessLevel.PROTECTED) // 기본 생성자(접근제어자)
public class Entity {
	@Id // 고유 식별자 PK
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    // 여러 속성, 생성자, 세터 ...
}

dto

  • Request DTO

    @Getter // 게터 역할
    public class RequestDto {
    	// 요청에 필요한 속성들 ...
    } 
    
  • Response DTO

    @Getter // 게터 역할
    public class ResponseDto {
    	// 응답에 필요한 속성들, 이를 포함한 생성자 ...
    }

의존성

위의 작업을 이루기 위해 의존성은 Lombok, Spring Web, Spring Data JPA, MySQL Driver를 선택했다.
application.properties 설정

spring.datasource.url=jdbc:mysql://localhost:3306/{데이터베이스명}
spring.datasource.username=root
spring.datasource.password=12345678
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.hibernate.ddl-auto=create
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true

CRUD

위를 통해 CRUD
Create, Read, Update, Delete를 구현하는 연습을 통해 구조의 이해를 배웠다.
점차 클래스들 간의 역할과 책임에 대해서 익숙해지는 경험이 채워졌다.
위에서도 말했듯이 처음에는 복잡해보이고, 뭐가 뭔지 잘 몰랐는데,
반복하다 보니 정말 필요한 것만 간략하게 있으면서 편리하게 작업을 도와준다는 생각이 들정도로 이해가 늘어갔다.

0개의 댓글