티스토리 뷰
어느덧 우테코 레벨2 미니프로젝트를 시작하게 되었다.
우리팀은 인스타그램을 클론하기로했고, 가장 먼저 내가 맡은 일은 게시글 관련 기능이다.
이때 사진과 동영상을 업로드해야한다.
일반 텍스트 데이터는 그냥 DB에 넣으면 됬는데, 이미지와 영상은 어떻게 해야할까?
먼저 이미지를 고려해서 가능한 방법들을 생각해봤다.
1. S3 이용
실제 현장에서 이런 방식으로 점점 전환되는 분위기인것 같고, 각종 걱정거리를 덜어주고 편하게 되는것같다.
우리팀은 S3 요금문제(나중에보니 가능하더라)와 지금단계에선 뒤에서 나올 기본적인 방법들을 먼저 경험해보고자, 이 방법은 보류했다.
이건 나중에 결국 쓰게될것같아서.
관련된 키워드는 "Springboot & S3"로 검색하면 많이 나와서, 나중에 s3를 쓸일이 생기면 참고하면 될것같다.
https://jojoldu.tistory.com/300
https://pjh3749.tistory.com/187
2. DB에 직접 저장
예를 들어, MySQL에 LOB과 같은 형태로 이미지파일을 통째로 집어넣는다.
이 방법은 다른 방법들에 비해 비교적 구현이 단순하고 쉽다는 장점이 있었다. 특히 JPA를 쓴다면 더더욱 쉬울것! 하지만 현실적으로 말은 안된다^^; 이 방법도 보류되었다.
3. 별도의 파일 서버 띄우기
최근엔 S3와 같은 클라우드를 이용하는 방식이 점점 확대되는것 같으나, 그 전까진 일반적으로 이렇게 별도의 파일 서버를 띄워서 url로 접근하는 방식이었던것같다.
이 방식 역시 귀찮아서 패스.
4. 서버가 파일을 직접 갖고있는다
서버를 돌리고있는 로컬환경에 파일을 직접 저장한다.
팀원들 모두 처음으로 서버와 파일을 다뤄보기 때문에, 학습차원에서 기본적인 방식을 공부해보고자했다.
2번 방법과 마찬가지로 쉬울줄 알았으나 생각보다 많은 이슈들이 있었다.
서버 로컬에서 저장하는 곳이 다음과 같은 3가지의 경우가 가능했다.
4.1 톰캣내부에 저장
우리는 가장먼저 String path = servletContext.getRealPath("upload");와 같이
@Autowired한 servletContext에서 realPath를 가져와, 그곳에 저장하려했다.
저장은 성공하지만 다음과 같은 경로에 저장된다.C:\\Users\\@@@\\AppData\\Local\\Temp\\tomcat-docbase.1467146151467214689.8080\\upload
스프링부트 내부에 톰캣이 내장되있기때문에 이런 형태를 띄는데, 문제는 1467146151467214689부분이 서버재시작마다 계속 바뀐다는 것이다.
path가 계속 바뀌니 우리가 컨트롤하기 어려웠다.
파고들면 docbase와 관련된 내부원리가 있는것같은데 일단은 패스.
사실 이곳에 저장하는게 애초에 어색하게 느껴지긴한다. (나중에 다시보니 왜 이런시도를 했나싶다)
4.2 프로젝트 내부에 저장
그래서 이번엔 resources/static/ 안에 저장하는 방법을 생각했다.
이 방법도 문제가 있다. jar파일로 만들때 파일도 함께 포함되버리는것. 또한 파일들이 깃헙까지 따라 들어가버린다.(git ignore한다고해도....?)
관련된 이슈가 이미 충분히 논의되고있었고, 다음 링크들에서 관련내용을 읽어본후 프로젝트 외부에 저장하기로 결정하였다.
이 방식의 장단점에 대해 추후 좀더 제대로 고민해봐야겠다.
https://zepinos.tistory.com/36 ★
https://okky.kr/article/543344 ★
https://eblo.tistory.com/51
https://start.goodtime.co.kr/2014/04/톰캣의-컨텍스트-외부로-경로-매핑하는-방법/
4.3 프로젝트 외부에 저장 (결정)
검색 키워드는 "tomcat 외부 resource 저장"
https://layers7.tistory.com/5
자료들을 참고해 프로젝트 외부에 별도 폴더를 생성하고 그곳에 이미지/동영상 파일을 저장했다.
오늘은 일단 기능구현부터 해봤고, 계속해서 기능추가 및 정리할 예정.
19.08.19 추가
이러한 4.3의 방식은 다음과 같은 이슈(삽질)로 이어졌다...
결국 결론은 다음부턴 맘편히 S3를 쓰자... 파일을 직접다루는 이런 raw한 방법은 공부삼아 이번 한번이면 충분할 것 같다 ^_^;;
'Server' 카테고리의 다른 글
인수테스트 디렉토리 분리 (with gradle) (0) | 2020.01.12 |
---|---|
Spring Rest Docs로 API 문서화하기 (0) | 2020.01.12 |
Server Push 기술 / Pull vs Push + Poll 차이 (0) | 2019.11.12 |
클라이언트에서 서버의 로컬파일에 어떻게 접근할것인가? (0) | 2019.09.14 |
- Total
- Today
- Yesterday
- bfs
- Java
- Algorithm
- reversing
- 웹해킹
- queue
- FRAGMENT
- C
- graph
- Android
- Vo
- mysql
- 프로그래머스
- javascript
- OneToMany
- 우아한 테크코스
- git
- 해외여행
- 개발자
- 리버싱
- dfs
- sort
- Stack
- Android Studio
- 회고
- Data Structure
- socket
- brute-force
- JPA
- webhacking.kr
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |