Spring Boot & MySQL

1.9. 확장과 개선 방향

backend 따라쟁이 2024. 12. 26. 22:57

Spring Boot와 MySQL을 활용한 기본 CRUD 애플리케이션을 완성한 후에는, 더 복잡한 요구사항을 처리하거나 애플리케이션의 성능과 확장성을 높이기 위해 개선 작업을 진행할 수 있습니다. 이 섹션에서는 애플리케이션 확장과 개선을 위한 방향을 제안합니다.


9.1 JDBC에서 JPA로 전환

문제점: JDBC의 한계

  • SQL 쿼리를 직접 작성해야 하므로 복잡한 쿼리를 관리하기 어려움.
  • 데이터베이스 변경 시, SQL 쿼리를 수정해야 할 가능성이 높음.

해결책: JPA(Hibernate) 활용

JPA는 객체 지향적인 데이터베이스 접근 방식을 제공합니다. Spring Data JPA를 사용하면 더 적은 코드로 데이터베이스 작업을 처리할 수 있습니다.

Spring Data JPA로 전환 예시

1. 의존성 추가: pom.xml에 다음을 추가합니다:

2. Entity 클래스 작성:

3. Repository 인터페이스 작성:

4. JPA 사용으로 간단해진 코드:

  • 데이터를 조회하려면 단순히 userRepository.findAll() 호출.

9.2 트랜잭션 관리

트랜잭션이란?

  • 여러 데이터베이스 작업을 하나의 작업 단위로 묶어 처리.
  • 작업 도중 오류가 발생하면 모든 작업을 롤백(취소).

Spring 트랜잭션 관리

1. 트랜잭션 의존성 추가: spring-boot-starter-data-jpa를 포함하면 기본적으로 트랜잭션 지원 가능.

2. 트랜잭션 설정: 서비스 계층에 @Transactional 어노테이션을 추가하여 트랜잭션을 관리합니다.

3. 트랜잭션 롤백 처리: 특정 조건에서 트랜잭션 롤백을 트리거합니다. 


9.3 보안 강화

Spring Security 도입

  • Spring Security는 인증(Authentication)과 권한 관리(Authorization)를 제공하여 애플리케이션을 보호합니다.

구현 예시

1. 의존성 추가:

2. 보안 설정 클래스:

3. 기본 사용자 설정: application.properties에 기본 사용자 설정 추가:

 

 


9.4 페이징 및 정렬 구현

대량 데이터 문제

  • 데이터가 많아질수록 전체 데이터를 한 번에 조회하면 성능이 저하될 수 있음.

Spring Data JPA의 페이징 및 정렬

1. 페이징 매개변수 추가:

  • Pageable을 사용하여 페이지 번호와 크기를 지정합니다.

2. REST API 요청 예시:

  • /users?page=0&size=10&sort=name,asc

9.5 애플리케이션 성능 최적화

1. 쿼리 최적화

  • 복잡한 쿼리를 JPQL이나 네이티브 SQL로 작성.
  • N+1 문제를 해결하기 위해 @EntityGraph 또는 JOIN FETCH 사용.

2. 캐싱 도입

  • 데이터베이스 접근을 줄이기 위해 캐싱을 적용.
  • Spring Cache를 사용:

3. 데이터베이스 인덱스 추가

  • 자주 검색되는 컬럼에 인덱스 추가:


9.6 배포와 운영

1. 애플리케이션 패키징

  • Spring Boot 애플리케이션은 단일 JAR 파일로 패키징하여 쉽게 배포 가능: 
  •  
    mvn clean package

2. 클라우드 배포

  • AWS, Heroku, 또는 Docker를 사용하여 애플리케이션을 클라우드 환경에 배포.
  • Dockerfile 예제:


9.7 테스트 작성

1. 단위 테스트

  • 서비스 및 데이터베이스 작업을 테스트:

2. 통합 테스트

  • MockMvc를 사용하여 REST API 테스트:


결론

Spring Boot와 MySQL을 활용한 기본 애플리케이션은 여기서 한 단계 더 나아가야 합니다. 위의 확장 및 개선 방향은 다음과 같은 목표를 달성하는 데 도움을 줄 것입니다:

  1. 효율적이고 안정적인 데이터 관리: JPA와 트랜잭션 관리.
  2. 보안 강화: Spring Security 도입.
  3. 성능 최적화: 캐싱과 쿼리 최적화.
  4. 운영 준비 완료: 클라우드 배포와 테스트 자동화.

위 개선 방향을 하나씩 적용하며, 실무에서 요구하는 고품질의 애플리케이션 개발에 도전해 보세요!

'Spring Boot & MySQL' 카테고리의 다른 글

1.10. 결론  (0) 2024.12.25
1.8. 전체 코드 예제  (0) 2024.12.25
1.7. 자주 발생하는 문제와 해결 방법  (0) 2024.12.25
1.6. 데이터 타입 변환과 오류 처리  (0) 2024.12.25
1.5. REST API와 연동  (1) 2024.12.22