본문 바로가기

Back End/Spring

[Spring] request 가 동시에 많이 들어오는 상황에 대한 고찰(파일 업로드)

반응형

■ 상황

프로젝트 진행 도중 아래와 같은 개발을 할 일이 생기게 되었다.

Apache & Tomcat, Spring기반 개발 환경이다.

포탈 - 웹오피스 간 파일 전송 API 개요

포탈과 웹 오피스 엔진간의 연동이다.

- 다운로드와 업로드는 HTTP통신을 통해 이루어지며, 업로드 시 multipart로 파일을 전송한다.

- 포탈에선 업로드시 파일을 다운로드 받아, 원래 경로에 있는 파일에 덮어쓴다.

- 유저 수는 최대 10000명이고, 오피스에서 한 파일을 동시에 수정 가능한 인원은 최대 200명이다.

 

■ 고민

다운로드, 업로드 API를 개발하는 도중 고민이 생기게 되었다.

웹오피스에서 동시다발적으로 여러 사용자가 파일을 수정하게 되면, 업로드 API가 동시다발적으로 요청되지 않을까? 라는 고민에서 시작했다.

 

1. 파일 업로드로 처리되는 속도보다 request가 쌓이는 속도가 빠르다면 어떻게 될까?

2. 멀티쓰레드 환경에서 하나의 파일을 계속 덮어쓰는 요청이 들어올 시 파일의 정합성은 어떻게 보장될까?

 

 

■ 결론

아래의 내용은 근거 없이 들은 내용으로 정리중입니다. 하나씩 공부해서 추가 예정입니다.

 

1. 파일 업로드로 처리되는 속도보다 request가 쌓이는 속도가 빠르다면 어떻게 될까?

회사 선배에게 물어봤다.

Spring자체적으로 request 큐를 관리한다고 한다.

큐에서 쌓이는 최대 용량보다 네트워크로 처리되는 속도가 더 빠르기 때문에 

큐에 쌓일 걱정은 하지 않고 개발해도 된다. (설령 그렇게 되더라도 아파치나 톰캣의 설정을 변경하면 된다.)

 

2. 멀티쓰레드 환경에서 하나의 파일을 계속 덮어쓰는 요청이 들어올 시 파일의 정합성은 어떻게 보장될까?

오피스 담당자에게 물어봤다.

OS자체적으로 파일 락이 걸리기 때문에 동시에 덮어씌워지면서 파일이 깨지는 현상은 없을 것이다.

다만, 너무 짧은 시간에 반복적으로 덮어쓰게 되면 락 때문에 나중에 들어온 요청이 실패할 수도 있다.

반응형