728x90
의존성 (Dependencies)
Lombok
- 역할: 반복적인 코드 생성을 줄여주는 라이브러리입니다. 예를 들어, getter/setter, toString, equals, hashCode 메서드 등을 자동으로 생성해줍니다.
- 주요 기능: @Getter, @Setter, @ToString, @Builder, @AllArgsConstructor, @NoArgsConstructor 등.
Spring Web
- 역할: 스프링 기반 웹 애플리케이션 개발을 위한 의존성으로, HTTP 요청/응답 및 RESTful API 구현에 사용됩니다.
- 주요 기능: Spring MVC, REST API 지원, 웹 애플리케이션의 엔드포인트 설정.
Spring Data JPA
- 역할: JPA(Java Persistence API)를 쉽게 사용하기 위한 스프링 모듈로, 데이터베이스와의 상호작용을 간소화합니다.
- 주요 기능: 데이터베이스 쿼리를 자동으로 생성하거나, JPA를 기반으로 한 리포지토리 인터페이스 제공.
MySQL Driver
- 역할: MySQL 데이터베이스와의 연결을 가능하게 하는 JDBC 드라이버입니다. 애플리케이션이 MySQL 데이터베이스와 통신할 수 있도록 도와줍니다.
- 주요 기능: MySQL 데이터베이스 연결, SQL 쿼리 실행, 트랜잭션 처리.
환경 설정
프로젝트의 src > main > resources > application.properties를 application.yaml으로 변경해주세요.
properties -> yaml로 변경하는 이유
- 가독성: YAML은 계층 구조를 시각적으로 표현할 수 있어 가독성이 높습니다.
- 중복 제거 및 코드의 간결성: YAML은 중첩된 구성을 쉽게 표현할 수 있어 중복을 줄일 수 있습니다.
- 다른 시스템과의 호환성: YAML은 다양한 시스템에서 널리 사용되며, JSON과 유사한 형식으로 다른 도구와의 연동이 용이합니다.
properties 예시:
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=secret
yaml 예시:
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb
username: root
password: secret
yaml 기본 설정
spring:
jpa:
show-sql: true # 실행되는 SQL 쿼리를 콘솔에 출력
properties:
format_sql: true # SQL 쿼리를 가독성 높게 포맷팅
dialect: org.hibernate.dialect.MySQL8Dialect # MySQL 8에 최적화된 방언 사용
hibernate:
ddl-auto: validate # 엔티티 클래스와 데이터베이스 테이블이 일치하는지 검증
datasource:
url: jdbc:mysql://localhost:3306/user?useSSL=false&useUnicode=true&allowPublicKeyRetrieval=true # 데이터베이스 연결 URL
driver-class-name: com.mysql.cj.jdbc.Driver # MySQL 데이터베이스 드라이버
username: root # 데이터베이스 사용자 이름
password: 1234 # 데이터베이스 비밀번호
추가로 설정할 수 있는 옵션
# spring.datasource.initialization-mode: always # 애플리케이션 시작 시 데이터베이스 초기화 스크립트를 실행
# spring.datasource.hikari.maximum-pool-size: 10 # 커넥션 풀에서 최대 커넥션 수 설정
# spring.jpa.open-in-view: false # 트랜잭션 종료 후 영속성 컨텍스트를 닫음
# spring.jpa.generate-ddl: true # 엔티티 정보를 기반으로 DDL 자동 생성
# spring.jpa.hibernate.naming.physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl # 테이블 및 칼럼 이름 변환 전략 설정
엔티티 객체 생성하기
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Entity(name = "user") // JPA 엔티티로 지정하며, 데이터베이스 테이블 이름을 "user"로 설정
public class UserEntity {
@Id // 해당 필드를 엔티티의 기본 키로 지정
@GeneratedValue(strategy = GenerationType.IDENTITY) // 기본 키의 값을 데이터베이스에서 자동 생성하도록 설정
private Long id; // 사용자 ID
private String name; // 사용자 이름
private Integer age; // 사용자 나이
private String email; // 사용자 이메일
}
- 속성과 이름 일치: JPA 엔티티 클래스의 필드 이름은 데이터베이스 테이블의 칼럼 이름과 일치해야 합니다. 이 일치는 Hibernate가 엔티티 객체를 데이터베이스에 저장할 때 정확한 매핑을 수행할 수 있게 도와줍니다. 예를 들어, name 필드는 user 테이블의 name 칼럼과 연결되어야 하며, 그렇지 않으면 데이터베이스와의 통신에서 오류가 발생할 수 있습니다.
Repository 생성
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserRepository extends JpaRepository<UserEntity, Long> {
}
Controller 만들기
@RequiredArgsConstructor
@RestController
public class UserApiController {
private final UserRepository userRepository;
@GetMapping("/find-all")
public List<UserEntity> findAll() {
return userRepository.findAll();
}
}
테스트 해보기
- http://localhost:8080/find-all
추가적으로 Entity 객체와 매핑하지 않는 것이 좋은 이유
- 데이터 은닉
- DTO는 클라이언트에 전달할 데이터만 포함하므로, 엔티티의 모든 속성을 노출하지 않습니다.
- 이는 보안성을 높이고 불필요한 데이터 노출을 방지합니다.
- 구조 분리
- DTO를 사용하면 데이터의 구조를 클라이언트와 서버 간에 명확히 분리할 수 있습니다.
- 클라이언트에서 필요한 데이터만 포함되므로 데이터 전송이 간편해집니다.
- 유효성 검사 및 변환
- DTO를 사용하면 데이터 전송 중 유효성 검사를 더 쉽게 수행할 수 있습니다.
- DTO에 필요한 검증 어노테이션을 추가하여 입력 데이터를 검증할 수 있습니다.
- DTO를 다른 형식의 데이터를 수신하고 변환하는 데 유용합니다.
- 퍼포먼스 최적화
- 엔티티는 종종 데이터베이스의 전체 테이블 구조를 반영하므로 크기가 클 수 있습니다.
- DTO를 사용하면 필요한 데이터만 전송하여 네트워크 대역폭과 메모리 사용을 줄일 수 있습니다.
- 응집성 및 유지보수성 향상
- DTO를 사용함으로써 엔티티와 비즈니스 로직의 응집성을 높일 수 있습니다.
- 비즈니스 로직이 DTO를 사용하여 데이터를 처리하므로, 엔티티 구조가 변경되더라도 DTO는 별도로 수정할 수 있습니다.
- API 버전 관리
- DTO를 사용하면 API의 버전을 관리하기 쉬워집니다.
- 클라이언트가 필요로 하는 데이터 형식이 변경되더라도, 기존 엔티티 구조를 변경하지 않고 DTO를 수정하여 새로운 API 버전을 구현할 수 있습니다.
- 데이터 통합
- 여러 엔티티의 데이터를 통합하여 하나의 DTO로 클라이언트에 전달할 수 있습니다.
- 이를 통해 여러 데이터 출처에서 오는 정보를 통합하여 클라이언트에게 제공할 수 있습니다.
DTO를 모르시는 분들은 여기를 눌러주세요
728x90
'Spring Boot' 카테고리의 다른 글
[Spring Boot] 여러가지 Annotation (2) | 2024.10.10 |
---|---|
[Spring Boot] JPA 연관 관계 설정하기 (1) | 2024.10.10 |
[Spring Boot] DTO 유효성 검사를 위한 커스텀 어노테이션 만들기 (3) | 2024.10.03 |
[Spring Boot] Validation AssertTrue/False 사용법 (1) | 2024.10.03 |
[Spring Boot] "Validation(유효성)"검증 실패 처리: 클라이언트에게 적절한 오류 메시지 보내는 방법" (3) | 2024.10.03 |