if(saveFile.substring(0,1).equals("/")){ // mac, linux용 경로처리 thumbnailPath = saveFile.replace(uploadDir, ""); } else { // windows용 경로 처리 -> 설정 파일에 명시한 첫 글자(/)를 제거해야 함 thumbnailPath = saveFile.replace(uploadDir.substring(1), ""); }
이 코드가 어째서 윈도우와 리눅스 계열 os로 구분하는 코드가 되는거지?
FileHelper.java:337-343
A1.
GitHub Copilot
해당 코드는 saveFile 경로의 첫 글자가 '/'인지 확인하여 운영체제에 따라 경로 처리를 다르게 하고 있습니다.
if(saveFile.substring(0,1).equals("/")){
// mac, linux용 경로처리
thumbnailPath = saveFile.replace(uploadDir, "");
} else {
// windows용 경로 처리 -> 설정 파일에 명시한 첫 글자(/)를 제거해야 함
thumbnailPath = saveFile.replace(uploadDir.substring(1), "");
}
설명:
Linux/MacOS의 경우:
- ㅇ파일 경로는 일반적으로 '/'로 시작합니다. 예를 들어 "/uploads/2021/09/01/image.jpg"와 같이 절대 경로로 표현됩니다.
- 따라서 saveFile의 첫 글자가 '/'이면 Linux나 MacOS로 간주하고, uploadDir를 그대로 사용하여 경로에서 제거합니다.
- thumbnailPath = saveFile.replace(uploadDir, "");는 saveFile에서 uploadDir 부분을 빈 문자열로 대체하여 상대 경로를 얻습니다.
Window의 경우:
- 파일 경로는 드라이브 문자(C:\)로 시작하거나, 상대 경로로 '/' 없이 시작합니다.
- 따라서 saveFile의 첫 글자가 '/'가 아니면 Windows로 간주하고, uploadDir의 첫 글자(/)를 제거한 후 경로에서 제거합니다.
- uploadDir.substring(1)을 사용하여 uploadDir에서 첫 글자를 제거합니다.
- thumbnailPath = saveFile.replace(uploadDir.substring(1), "");는 saveFile에서 수정된 uploadDir 부분을 제거합니다.
결론적으로, 이 코드는 파일 경로의 형식 차이로 인해 발생하는 운영체제 간의 문제를 처리하기 위해 작성되었습니다. 운영체제에 따른 파일 경로 구조를 고려하여 적절히 thumbnailPath를 생성합니다.
쉽게 생각해서,
일단 주소를 받은 다음에
가장 앞의 글자가 / 가 있는지 없는지 확인해보고,
/가 있으면 리눅스 계열 경로니까
바로 saveFile의 문자열에서 uploadDir에 해당하는 문자열을 빈 문자열로 바꾸는 것이고,
앞에 /가 없으면
uploadDir에서 맨 앞의 / 뒤의 경로만을 뽑고, 그 문자열과 saveFile 문자열에서 같은 부분을 빈 문자열로 바꾸겠다는 의미.
'오답노트 및 하다 막힌 부분 > Java' 카테고리의 다른 글
Mapper에 대한 메소드와 try-catch (0) | 2024.11.07 |
---|---|
객체 파라미터의 참조 (0) | 2024.10.24 |