Spring

파일과 텍스트 함께 전송하기2 - 지양해야 하는 이유

da77777 2022. 6. 9. 20:40

☞ 파일과 텍스트 함께 전송하기 이 방법을 지양해야 하는 이유

 

 

파일 첨부가 가능한 게시글 등록 처리 시, 파일 등록 / 텍스트 등록 처리 컨트롤러를 분리하는 것이 좋다고 함.

 

파일을 포함한 게시글 등록 시, 클라이언트 쪽에서 요청을 2번 보내는 거.

텍스트 데이터는 '텍스트만' 처리하는 컨드롤러로 / 파일은 '파일만' 처리하는 컨트롤러로

 

근데 이미 파일 업로드 로직은 분리되어 있고, 서비스단에서 해당 메소드를 끌어와서 사용하는데 뭐가 문제인지 감이 안 와서.. 개발자 분들 계신 카톡방에 '컨트롤러'를 쪼개야 하는 이유를 여쭤봄

 

 

바이너리 파일과 json데이터를 별도로 처리해야 하는 이유
  1. 파일 업로드가 여러 기능에서 필요할 때, 필요 시마다 파일 업로드 메소드를 끌어와서 사용할 경우 해당 로직이 여기저기 분산됨
    유지보수 어려울 수 있음
    더보기
    파일 처리 컨트롤러를 분리하면
    게시글 뿐만 아니라 그 외 기타 파일이 포함된 요청은 파일처리컨트롤러+필요컨트롤러 로 요청을 보내면 되는 것

    내가 한 방식(파일+텍스트를 한 컨트롤러에서 처리)은
    파일 처리에 수정이 필요하다거나 할 때
    파일 처리를 포함한 컨트롤러와 서비스(게시글, 프로필 등이 있겠지)를 모두 수정해야 하지만

    파일 처리를 한 컨트롤러에서만 처리하게 되면 그 컨트롤러 하나만 수정하면 되겠지


  2. 하나의 게시글에 여러 파일(고용량)을 업로드해야 하는 경우 등을 고려해보았을 때, 한 번의 요청으로 여러 파일과 글을 등록하게 되는데 압축하지 않을 경우 트래픽 증가할 수 있음 
    → 게시글 등록 시 시간이 오래 걸림

 

위와 같은 이유로 각각 별도의 프로세스로 진행하는 것이 좋다고 함.

 


여기서 드는 의문

지금은 서비스단에서 @Transactional 을 통해 트랜잭션 처리를 하고 있는데, 컨트롤러에서 나눠지게 되면

게시글 업로드 실패 시 트랜잭션 처리는 어떻게 하는가?

아무리 생각해봐도 모르겠어서 결국 이것도 질문함..^^

 

받은 답변으로는

  1. 백에서 클라이언트에게 실패 응답을 보내면 클라이언트가 방금 저장한 이미지 삭제를 요청
  2. 게시글 등록 실패 하였으나 이미 업로드 된 이미지는 그냥 두었다가 주기적으로 미사용 이미지를 체크하여 제거

등의 방식이 있다고 함.