TIL 88 - [ Spring 최종 프로젝트 ( Day 24 ) - 파일 크기 제한, 문제 이미지 수정/삭제 DB 잔존 현상 리팩토링 ]

2025. 7. 1. 22:03·[내일배움캠프-Sparta]/Spring 6기
반응형

최종 프로젝트도 이제 슬슬 마무리가 되어 가는 것 같다.

 

오늘은 팀원들과 의논하면서, 마무리 하는 시간을 가지면서 브로셔, RDS 데이터 넣기, readMe, 테케 테스트, PPT 및 대본, 발표 등 역할을 나누고, 각자 수행해 나가는 작업을하고, 부족한 부분이 있으면 코드 리팩토링 하는 시간을 가졌다.

1️⃣ 파일 크기 제한

이번에 S3 기능에 파일 크기 제한도 넣어주면 좋지 않을까라는 생각에 넣어 보았다.

확인을 해보니까 PostMan에서 자체적으로 크기를 제한 해준다. ( 5MB )

spring.servlet.multipart.max-file-size=5MB
spring.servlet.multipart.max-request-size=5MB

Properties에 Spring으로 막아 줄수 있지만, 서버내에서 바로 막아버리는 것이기 때문에 간단하지만, 범용성이 너무 적다. → 이것을 선언 하지 않으면 스프링 내에서는 1MB를 기본값을 두었다.

그래서 서비스 로직에서 메소드를 추가해서 해결하였다.

S3_FILE_TOO_LARGE(false, HttpStatus.BAD_REQUEST, "파일 크기가 허용 범위를 초과했습니다.");

S3ResponseCode에 커스텀 예외처리로 파일 크기가 크다는 예외처리를 추가해주고, S3Uploader 클래스 에서 private static final 로 선언해 파일 크기 제한을 (5MB) 두게 구현하였다.

 

추가적으로 PostMan에서는 자체적으로 5MB를 파일 크기를 제한하기 때문에, 굳이 추가를 해야하나 싶지만 PostMan이 아닌 다른 곳에서도 테스트를 할수도 있기 때문에 임시적으로 걸어놓은 것 즉, 확장성을 고려해서 로직을 추가해보았다.

S3Uploder 클래스 수정

private static final 로 이제 5MB 상수를 선언해주고 (1KB = 1024byte) , 파일 크기를 넘어가면 예외처리를 해주는 로직을 추가해주었다.

	// 5MB 파일 최대 크기
	private static final long MAX_FILE_SIZE = 5 * 1024 * 1024;
				 |
	       |
				// 파일 크기 검사
			if (multipartFile.getSize() > MAX_FILE_SIZE) {
				throw new S3Exception(S3ExceptionCode.S3_FILE_TOO_LARGE);
			}

 

2️⃣ DB 잔존 현상 리팩토링

AWS S3 내 에서는 수정, 삭제가 API 호출이 될때 정상적으로 처리가 되지만, DB 내 에서는 영향이 가지 않고, 잔존해 있는 현상이 발견되었다. 그래서 리팩토링 하는 시간을 가졌다.

그래서 ProblemService에서 이미지 수정을 하는 로직을 확인해보았다. 문제 수정,삭제 API 호출시 정상적으로 잘 작동은 하지만, 테이블을 확인해서 보니까 DB에는 이미지 기록이 그대로 남아 있는 현상을 발견하였다.

	// 문제 수정시 문제를 DB 저장 용도
	public void saveProblem(Problem problem) {
		problemRepository.save(problem);
	}

ProblemDomainService에다가 problem을 저장하는 로직이 없어서, 추가해주고, save를 사용하게 해주었다. ( 아키텍처 구조를 지킴 )

 

	// 이미지 수정
	private void updateProblemImage(Problem problem, MultipartFile newImage) {

		// 기존 이미지가 있다면 삭제 처리
		if (!problem.getImageUrl().isEmpty()) {
			for(String fileUrl : problem.getImageUrl()) {
				s3Uploader.delete(fileUrl, "problem");
			}
			problem.clearImages();
			problemDomainService.saveProblem(problem); // <--- 이 로직이 추가 되어 있지 않아서 DB에 반영이 되지 않았다.
		}

		String newImageUrl = uploadImageAfterTransaction(newImage, problem.getId());
		problem.addImage(newImageUrl);
	}

기존에 problem.clearImages(); 이것만으로 엔티티 만 수정이되고 DB에는 저장이 되는 로직이 하나도 없어서, 문제가 되었다. 그래서 저장하는 로직이 필요해서 saveProblem을 사용해 저장하게 하였다.

바로 적용해서 DB에 반영하는 방법으로 해결하였다.

반응형

'[내일배움캠프-Sparta] > Spring 6기' 카테고리의 다른 글

TIL 90 - [ Spring 최종 프로젝트 ( Day 26 ) - 5분 브리핑 [2회차], ReadMe 작성 ]  (0) 2025.07.04
TIL 89 - [ Spring 최종 프로젝트 ( Day 25 ) - 문제 테스트 코드 작성 ]  (0) 2025.07.02
TIL 87 - [ Spring 최종 프로젝트 ( Day 23 ) - 문제 조회 성능 최적화 ]  (0) 2025.06.30
TIL 86 - [ Spring 최종 프로젝트 ( Day 22 ) - S3 문제 이미지 수정/삭제 기능 구현 ]  (0) 2025.06.28
TIL 85 - [ Spring 최종 프로젝트 ( Day 21 ) - Category, Difficulty 리팩토링 ]  (0) 2025.06.26
'[내일배움캠프-Sparta]/Spring 6기' 카테고리의 다른 글
  • TIL 90 - [ Spring 최종 프로젝트 ( Day 26 ) - 5분 브리핑 [2회차], ReadMe 작성 ]
  • TIL 89 - [ Spring 최종 프로젝트 ( Day 25 ) - 문제 테스트 코드 작성 ]
  • TIL 87 - [ Spring 최종 프로젝트 ( Day 23 ) - 문제 조회 성능 최적화 ]
  • TIL 86 - [ Spring 최종 프로젝트 ( Day 22 ) - S3 문제 이미지 수정/삭제 기능 구현 ]
dimenshun
dimenshun
한 소년의 개발 일기
    반응형
  • dimenshun
    Dev Life Notes
    dimenshun
  • 전체
    오늘
    어제
    • 분류 전체보기 (268)
      • CS (23)
        • 자료구조 (0)
        • 알고리즘 (0)
        • 컴퓨터 구조 (8)
        • 네트워크 (6)
        • 운영체제 (3)
        • DB ( + SQLD ) (5)
        • SW공학 (1)
      • 프로그래밍 (3)
        • Java (0)
        • Spring (0)
        • HTML,CSS (3)
        • JavaScript (0)
      • 개발 툴 (7)
        • Git(버전관리) (1)
        • Docker (3)
        • AWS (2)
        • JSP (1)
      • 코딩테스트(Algorithm) (125)
        • 백준 (6)
        • 프로그래머스 (119)
      • [내일배움캠프-Sparta] (110)
        • Spring 6기 (106)
        • KPT 회고 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    세션
    OS
    network
    SQLD
    spring
    AWS
    SQL
    개발자
    운영체제
    KPT
    Testcode
    web
    웹
    코딩테스트
    네트워크
    docker
    내일배움캠프
    컴퓨터구조
    db
    Python
    It
    백엔드
    CPU
    cs
    Til
    트랜잭션
    메모리
    알고리즘
    배포
    Java
  • hELLO· Designed By정상우.v4.10.3
dimenshun
TIL 88 - [ Spring 최종 프로젝트 ( Day 24 ) - 파일 크기 제한, 문제 이미지 수정/삭제 DB 잔존 현상 리팩토링 ]
상단으로

티스토리툴바