목록프로젝트 (9)
공유메모장
문제 상황: @keyup.enter 로 등록해 둔 함수가 실행은 되지만, 이후 등록된 다른 페이지로 routing이 되지 않음 Connect 문제 파악: 이벤트 처리하는 함수가 비동기로 동작하기 때문이라 추측. async connect() { const socket = new SockJS('http://localhost:8080/ws'); this.stompClient = Stomp.over(socket); this.stompClient.connect({}, frame => { if(!this.connected){ //backend에서 member list 가져오기 // roomId 붙여서 요청 ..

문제상황 gradle을 이용해서 Lomok library를 받았는데, 라이브러리 import 자체에는 문제가 없고, 애노테이션을 사용하는 줄에도 문제가 없는데, 의존성 주입시점에 객체가 null이거나 setter, getter 등이 생성되지 않음시도- 프로젝트 초기화 후 rebuilding- build.gradle에서 lombok만 빼고 refrash했다가, 다시 lombok추가한 후 refrash - SpringToolSuite.ini 에 -javaagent:lombok.jar 추가위의 방법 모두 실패함 해결방법project 에서 Project and External Dependencies 찾고, 해당 디렉토리에서 lombok 찾은 후 우클릭Run As에서 Java Application으로 실행 ( ..

영화 조회를 위해 필요한 정보들 : Movie 객체, MovieImage 객체리스트, 리뷰 평균 평점, 리뷰 개수 조회를 위한 JPQL 은 아래와 같다. 영화 세부 조회 MovieRepository interface // 리뷰와 조인한 후에 count, avg 등 함수를 이용하게 되는데 이때 영화 이미지 별로 group by를 실행해야만 한다. //그래야 영화 이미지들의 개수만큼 데이터를 만들어낼 수 있다. @Query("select m, mi, avg(coalesce(r.grade,0)), count(distinct(r))" + "from Movie m left outer join MovieImage mi on mi.movie = m "+ "left outer join Review r on r.movi..

HTML 삽입 미리보기할 수 없는 소스 테이블 구조 현재 데이터베이스에는 Movie 테이블에 데이터가 100개 + a , Movie_image 테이블에 데이터가 300 + b 개 있다. review 테이블에는 200 + c 개, m_member 테이블에 100개의 데이터가 있다. 목록 데이터는 영화 제목과 이미지, 리뷰 개수, 평균 평점으로 구성되며 이를 화면에 출력한다. 화면에 목록과 페이지 처리를 하기 위해서는 Page와 Pageable을 파라미터로 받고, 리턴하는 PageRequestDTO, PageResultDTO가 필요하다. PageRequestDTO package com.example.mreview.dto; import lombok.AllArgsConstructor; import lombok...

앞선 포스트에서 Ajax로 파일 업로드를 처리해보았다. 이번에는 Ajax로 파일 업로드 처리를 하고, 이 정보를 데이터베이스에 저장하는 작업을 수행한다. Entity의 구성은 아래와 같다. 마찬가지로, DTO에서도 MovieImageDTO 는 MovieDTO 객체를 가진다. 반대로, MovieDTO는 MovieImageDTO 리스트를 가진다. Movie.java package com.example.mreview.entity; import lombok.*; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.I..

HTML 삽입 미리보기할 수 없는 소스 파일의 URL을 UploadResultDTO 객체에 저장해두었기 때문에 쉽게 처리할 수 있다. 파일 URL 자체가 년/월/일/uuid_파일명 으로 구성되어 있기 때문에 삭제할 파일의 위치를 그대로 찾아가면 된다. UploadContollor 의 removeFile 메소드 @PostMapping("/removeFile") public ResponseEntity removeFile(String fileName){ String srcFileName = null; try{ srcFileName = URLDecoder.decode(fileName,"UTF-8"); File file= new File(uploadPath + File.separator + srcFileName)..
HTML 삽입 미리보기할 수 없는 소스 원본 이미지는 데이터를 많이 소비해야 하기 때문에 썸네일을 만들어 전송한다. 원본 파일을 보기 위해 썸네일을 클릭했을 때 원본 파일을 보여주는 방식을 사용한다. 1. 업로드 된 파일을 저장하고 썸네일 라이브러리를 활용해서 썸네일 파일을 만듦 2. 썸네일 파일은 맨 앞에 "s_"를 붙여서 일반 파일과 구분한다. 3. UploadResultDTO에 getThumbnailURL()을 추가해서 썸네일의 경로를 태그로 처리한다. (현재는 원본 파일의 경로를 로 처리 중이다.) 썸네일 처리 라이브러리는 java.imageio 패키지를 사용해도 되지만, 프로젝트에서는 Thumbnailator 라이브러리를 이용한다. Thumbnailator 라이브러리 사용의 이점은 2가지가 있다..

결과 데이터는 JSON으로 전송할 것이므로 어떤 구조의 데이터를 전송할 것인지 결정해야 한다. 브라우저에서 필요한 정보는 다음과 같다. 업로드된 파일의 원래 이름 파일의 uuid 값 업로드된 파일의 저장 경로 위의 정보는 UploadController에서 파일을 저장할 때 만들어진 문자열로도 처리가 가능하지만, 브라우저에서 처리가 간단할 수 있도록 클래스와 객체를 구성해서 처리한다. 해당 처리를 위해 UploadResultDTO 클래스를 생성한다. package com.example.mreview.dto; import lombok.AllArgsConstructor; import lombok.Data; import java.io.UnsupportedEncodingException; import java.n..