일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- Java
- List
- delete recursive
- Calendar
- composite key
- date
- NIO
- alter
- Properties
- priority_queue
- Union-find
- 스프링부트
- union_find
- spring boot
- JPA
- math
- 스택
- dfs
- html
- sql
- 큐
- set
- deque
- CSS
- string
- map
- javascript
- onetomany
- BFS
- scanner
- Today
- Total
목록공부/스프링 (12)
김미썸코딩
이 기능을 구현하면서 Spring framework을 써야할 백가지 이유 중 하나가 추가되었다. 내가 구현하고자 하는 기능은.. request로 header에 range가 들어오면 동영상을 해당 range만큼 range request로 보내고 (206 : partial content) range가 들어오지 않으면 동영상을 한번에 보내는 것이다. (200 : ok) header의 range를 가져와서 직접 분기처리를 해줘야하는줄 알았지만 FileSystemResource라는 아주 좋은 클래스가 있었다. range값의 유무를 통해 알아서 200 or 206으로 처리해주기 때문에 range request 구현조차 필요없었다. 컨트롤러를 보면 다음과 같다. @GetMapping(value = "/{media_i..
@Builder와 @NoArgsConstructor를 함께 사용하면 아래와 같은 에러 메세지를 볼 수 있다. 당연한 결과다 ㅎ "actual and formal argument lists differ in length" 이땐 @AllArgsConstructor를 사용하면 해결이 된다. @Builder @AllArgsConstructor @NoArgsConstructor
캐시에 대한 설명과 사용법을 익힌 후, 실제 프로젝트에 적용한 코드를 마지막에 추가했다. [목차] 1. 개요 2. 스프링 캐시 설정, 캐시 매니저 3. 어노테이션 기반 캐시 사용하기 4. 프로젝트에 적용하기 개요 캐시란? 캐시(Cache)는 컴퓨터 과학에서 데이터나 값을 미리 저장해 놓는 임시 장소를 의미한다. 캐시 접근 시간에 비해 원래 데이터를 접근하는 시간이 오래걸리거나, 값을 다시 계산하는 시간을 절약할 때 주로 사용되며, 동일 결과를 리턴하는 반복적인 작업이 많고, 각 작업의 시간이 오래걸리거나 서버에 부담을 주는 경우 사용하면 효율적이다. 만약 매번 다른 결과를 돌려줘야하는 작업이거나 수정이 빈번한 데이터의 경우 캐시를 적용해봐야 오히려 성능이 떨어질 것이다. 로컬 캐시? 글로벌 캐시? Loc..
동영상 업로드, 조회 기능을 구현하다보니 업로드한 동영상을 조회하면 그 동영상을 모두 다운로드한 후에 플레이 할 수 있어서.. 길이가 긴 동영상의 경우 다 다운로드 될 때 까지 기다려야했다. 이 문제를 해결하기 위한 방법이 각종 동영상 사이트에서 이용되는 스트리밍 서비스이다. 동영상을 조회하면 내가 지정한 range 만큼 request를 계속 날려서 range 만큼 동영상을 다운로드해 오고, 그동안 로드 된부분은 플레이 할수 있다. 이 기능은 HTTP range requests를 활용하면 쉽게 만들수 있다. HTTP Range Requests HTTP 범위 요청이란 HTTP를 통해 일정한 부분을 서버에서 클라이언트로 보내는 것을 허락하는 것이다. 범위를 알 수 있는 대형 미디어 파일을 나누어서 읽을 수 ..
구현된 서비스는.. pdf 파일을 업로드 하면, 1. 원본파일을 저장하고 2. 각 페이지를 image와 thumbnail로 변환한다. 위의 1,2번을 완료 해야 스프링 컨트롤러에서 응답하도록 구현을 했는데.. 2번의 과정이 너무 오래 걸려 응답이 늦어졌다. 따라서 1번까지만 하고 응답하고, 2번은 비동기로 구현하게 되었다. 방법은 간단하다. @EnableAsync로 비동기 기능을 활성화 비동기로 동작을 원하는 메소드(public 메소드)에 @Async 어노테이션을 붙여준다. @Async 어노테이션을 사용해서 비동기 서비스 만들기 1. springboot에서 Async 비동기 기능 활성화 및 thread pool 설정 아래와 같이 java config 파일을 만든다. > config > AsyncConfi..
백엔드에서 업로드한 파일을 삭제하는 기능을 구현하려면, 서버에서 저장된 것과 DB에 저장된 걸 두개다 삭제해야한다. 여기서 DB의 메타 하나를 삭제하는건 문제가 되지않는다. 실제 물리파일이 아니기 때문에 delete쿼리로 쉽게 삭제가 되기 때문이다. 하지만, 실제 물리파일이 저장된 폴더를 삭제하는 것이 문제가 된다. 한번에 삭제 되지않고, 폴더가 비어있어야 삭제가 되기때문이다. 현재 서비스에서 물리파일은 서버에 다음 경로로 저장되어 있다. *** (파일/폴더명) 폴더 파일 *** (파일 메타 pk) > (원본 pdf 파일명) > image > (페이지번호).png > thumbnail > (페이지번호).png 그래서 image, thumbnail폴더에 저장된 png 파일들을 모두 삭제한후 image, t..