본문 바로가기
잡식

Java에서 STS를 활용한 파일 업로드 API 예제

by 불멸남생 2025. 3. 19.

1. 개요

Spring Tool Suite(STS)를 활용하여 Java에서 파일 업로드 API를 구현하는 방법을 상세히 설명합니다. 이 글에서는 Spring Boot와 MultipartFile을 이용하여 파일 업로드 API를 개발하고, 클라이언트가 요청을 보낼 수 있도록 API 엔드포인트를 설계합니다. 또한, 파일 저장 방식과 보안 고려 사항까지 포괄적으로 다룹니다.

2. STS를 이용한 파일 업로드 API 개요

파일 업로드 기능은 웹 애플리케이션에서 중요한 요소로, 이미지, 문서, 동영상 등 다양한 파일을 서버로 전송할 수 있습니다. Java Spring Boot 환경에서는 MultipartFile 클래스를 사용하여 파일을 처리합니다. 여기서는 STS(Spring Tool Suite)를 활용하여 프로젝트를 설정하고 파일 업로드 API를 개발하는 과정을 상세히 다룹니다.

3. STS에서 Spring Boot 프로젝트 생성하기

3.1 STS 설치 및 설정

STS(Spring Tool Suite)는 Spring 개발을 보다 편리하게 지원하는 통합 개발 환경(IDE)입니다. 먼저, STS를 설치한 후 프로젝트를 생성합니다.

  1. STS 다운로드 및 설치:
  2. 새로운 Spring Boot 프로젝트 생성:
    • File → New → Spring Starter Project 선택
    • 프로젝트명과 패키지 구조를 입력
    • Spring Web 및 Spring Boot DevTools를 포함하여 프로젝트 생성

3.2 필수 의존성 추가

프로젝트의 pom.xml 파일에서 파일 업로드를 위해 필요한 의존성을 추가합니다.

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-validation</artifactId>
    </dependency>
</dependencies>

이제 Spring Boot 프로젝트에서 파일 업로드 기능을 구현할 준비가 되었습니다.

반응형

4. 파일 업로드 API 개발

4.1 컨트롤러 생성 및 엔드포인트 구현

Spring Boot에서 파일 업로드 API는 @RestController와 @PostMapping을 사용하여 구현할 수 있습니다. MultipartFile 객체를 활용하여 업로드된 파일을 처리합니다.

@RestController
@RequestMapping("/api/files")
public class FileUploadController {

    private final String uploadDir = "C:/uploads/";

    @PostMapping("/upload")
    public ResponseEntity<String> uploadFile(@RequestParam("file") MultipartFile file) {
        if (file.isEmpty()) {
            return ResponseEntity.badRequest().body("파일이 없습니다.");
        }

        try {
            byte[] bytes = file.getBytes();
            Path path = Paths.get(uploadDir + file.getOriginalFilename());
            Files.write(path, bytes);
            return ResponseEntity.ok("파일 업로드 성공: " + file.getOriginalFilename());
        } catch (IOException e) {
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("파일 업로드 실패");
        }
    }
}

위 코드에서는 /api/files/upload 엔드포인트를 통해 파일을 업로드할 수 있습니다. 업로드된 파일은 C:/uploads/ 디렉토리에 저장됩니다.

반응형

5. 파일 저장 방식

5.1 서버 로컬 저장소에 저장

파일을 서버의 특정 디렉토리에 저장하는 방식은 가장 기본적인 방법이며, 구현이 간단합니다. 그러나 서버가 여러 대일 경우 모든 서버에 동일한 파일이 저장되어야 하므로 유지보수가 어렵습니다.

5.2 데이터베이스 저장

파일을 직접 DB에 저장하는 방식도 가능합니다. 파일의 내용을 BLOB 데이터로 저장할 수 있으며, 메타데이터(파일명, 업로드 시간 등)를 별도의 테이블에 관리할 수 있습니다.

@Entity
@Table(name = "files")
public class FileEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String fileName;

    @Lob
    private byte[] data;

    // Getter & Setter
}

5.3 클라우드 스토리지 사용

AWS S3, Google Cloud Storage 등을 이용하여 파일을 저장하는 방식도 있습니다. 클라우드를 활용하면 확장성이 뛰어나며, 데이터 손실 위험을 줄일 수 있습니다.

반응형

6. 보안 고려 사항

6.1 파일 크기 제한 설정

Spring Boot에서는 application.properties에서 파일 크기 제한을 설정할 수 있습니다.

spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=20MB

6.2 특정 파일 형식만 허용

파일 업로드 시 허용할 파일 형식을 검사하여 보안을 강화할 수 있습니다.

private boolean isAllowedFileType(String fileName) {
    String[] allowedExtensions = {".jpg", ".png", ".pdf"};
    for (String ext : allowedExtensions) {
        if (fileName.endsWith(ext)) {
            return true;
        }
    }
    return false;
}

6.3 파일 경로 탐색 공격 방지

사용자가 ../과 같은 상대 경로를 이용하여 서버 파일 시스템을 침해하지 못하도록 해야 합니다.

반응형

7. API 테스트

7.1 Postman을 이용한 API 테스트

Postman을 이용하면 파일 업로드 API를 쉽게 테스트할 수 있습니다.

  1. Postman 실행 후 POST 요청 생성
  2. http://localhost:8080/api/files/upload 입력
  3. Body → form-data → file 선택 후 파일 추가
  4. Send 버튼 클릭하여 테스트 진행

7.2 cURL을 이용한 테스트

터미널에서 cURL 명령어를 사용하여 API를 테스트할 수도 있습니다.

curl -X POST -F "file=@sample.pdf" http://localhost:8080/api/files/upload
반응형

8. 결론

이 글에서는 STS를 이용하여 Java Spring Boot 환경에서 파일 업로드 API를 개발하는 방법을 자세히 살펴보았습니다. 업로드된 파일을 저장하는 다양한 방식과 보안 고려 사항까지 설명하였으며, Postman과 cURL을 이용한 테스트 방법도 소개했습니다.
파일 업로드 기능은 웹 애플리케이션에서 필수적인 요소로, 이를 안전하고 효율적으로 구현하는 것이 중요합니다.

반응형