본문 바로가기
SpringBoot

이미지 등록

by zkzk7290 2025. 1. 21.
반응형
DB에 이미지를 저장하는 방법 
1.Blob( Binary Large Object ) : 자료형을 사용하여 저장하는 방식 -> 이진데이터 저장하는 방식 
이진 데이터 : 0,1로 이루어진 데이터 
데이터베이스의 크기를 증가시키고 성능에 많은 영향을 끼친다.
비용 처리가 크다.
2.Base64 : 64진법  쉽게 생각 아스킨 코드 문자 하나라고 생각하면 된다. 
 -> 이미지의 이진 데이터를 Text 형태로 바꾸는 Encoding 하는 방법  
인코딩 : 원하는 데이터를 암호화하여 읽을 수 없는 형태로 변환  (비밀번호 때 사용함)
데이터 해킹 방지, 부적절한 접근 방지 
디코딩 :  인코딩 된 데이터를 원래 형태로 복원하는 과정 
주로 데이터 보호, 암호화된 통신, 데이토 압축 

 

일반적으로 이미지를 저장하고 가져오는 방식 

장점   

  • 백에 이미지 등록이 빠름
  • 백업이 간단함 
  • 외부 서비스 의존성이 없음
  •  경로만 저장되기 때문에 db 부담이 없음 
  • 중 소규모 프로젝트가 가능

단점 

  • 저장 공간의 제약 
  • 보안 및 백업을 따로 처리 
  • 요청이 많아지면  속도에게 영향이 있음 

이해 가  안되시는 분은 이렇게 한번 작성해 보세요 그러면 눈으로만 읽는 것보다 훨씬 이해가 잘 됩니다.

 

백엔드 이미지 처리하는 코드 

MultipartFile :  spring에서 업로드된 파일을 다 둘 때 사용되는 인터페이스로 파일의 이름과 실제 데이터 파일의 크기등 구할 수 있음

@Service
public class ImgFileService {

    @Value("${user.dir}")
    //user.dir은 특정 파일이 아니라 특정 경로
    private String projectPath;

    public String convertImgFile(MultipartFile file, String subPath) {
        //file : 파일에 관한 정보 , subPath : 경로
        String originalFilename = file.getOriginalFilename();
        if (originalFilename == null || originalFilename.isEmpty()) {
            throw new IllegalArgumentException("Invalid file: file name is missing");
        }
		
        
        String newImgName = UUID.randomUUID().toString() + "_" + originalFilename;
		//UUID: 범용 고유 식별자를 의미 
        //16바이트(128비트)형태의 구조가지면 36개의 자리 + "-"4개러 구성
        //중복 되지 않는 유일한 값을 구성할때 주로 사용이 됨 
        //주로 세션 식별자, 쿠키값, DB키사용 
        String rootPath = projectPath + "/image/";
        String filePath = subPath + "/" + newImgName;
        File f = new File(rootPath + subPath);

        if (!f.exists() && !f.mkdirs()) {
        //f.mkdirs: java api 에서 디렉토리 폴더를 생성하는 메서드
            throw new RuntimeException("Failed to create directory: " + f.getAbsolutePath());
        }

        Path uploadPath = Paths.get(rootPath + filePath);

        try {
            Files.write(uploadPath, file.getBytes());
        } catch (IOException e) {
            throw new RuntimeException("Failed to save file: " + e.getMessage(), e);
        }
        System.out.println("Saving file to: " + uploadPath.toString());
        return filePath;
    }
}

https://adjh54.tistory.com/142

UUID에  조금 더 자세히 알고 싶으면 클릭!!!

 

[Java] UUID 이해 및 사용방법

해당 글에서는 UUID에 대해서 이해하며 구조를 파악하여 이를 활용할 수 있는 방법에 대해서 이해를 돕기 위해 작성한 글입니다.  1) UUID(Universally Unique Identifier) 정의 및 구조 1. UUID 정의💡 UUID(

adjh54.tistory.com

 

반응형

'SpringBoot' 카테고리의 다른 글

서블릿 컨테이너 구조  (0) 2025.02.18
JPA 필터  (0) 2024.12.14
final  (0) 2024.11.28
Spring Boot 기초 개념  (0) 2024.11.24
Spring boot 기초 개념 동작 원리  (2) 2024.11.23