💡구현 목표 영화 등록과 수정에는 파일 업로드 기능을 활용해서 영화 포스터 등을 등록하도록 함. 회원은 특정 영화 조회 페이지에서 평점과 자신의 감상을 리뷰로 기록할 수 있음. 조회 화면에서 회원은 자신이 기록한 리뷰의 내용을 수정, 삭제할 수 있음. 🤍영화 등록 처리 1. MovieController 코드 작성 2. register.html 작성 3. 실행 화면 4. MovieDTO / MovieImageDTO 클래스 작성 이미 영화(Movie) 엔티티 클래스가 작성되었으므로 DTO, 서비스 계층만 추가 작업해주면 된다. 5. 서비스 계층 추가 Movie를 JPA로 처리하기 위해서는 MovieDTO를 Movie 객체로 변환 필요. 여기에서는 이전 프로젝트와 달리 Movie, MovieImage 객체도 ..
🤍파일 업로드 처리 구현하기 1. application.properties에 파일 업로드를 위한 코드 추가 spring.servlet.multipart.enabled=true//파일 업로드 가능 여부 선택 spring.servlet.multipart.location=C:\\upload//업로드된 파일 임시 저장 경로 spring.servlet.multipart.max-request-size=30MB//한 번에 최대 업로드 가능 용량 spring.servlet.multipart.max-file-size=10MB//파일 하나의 최대 크기 2. UploadController 클래스 작성 실제 업로드된 파일 처리는 컨트롤러로 처리함. (스프링에서는 MultipartFile 타입을 제공하므로 별도 추가적인 처리가..
💡구현 목표 영화(Movie)와 회원(Member)이 있고 회원이 영화에 대한 리뷰(Review)를 기록하는 시나리오를 기반으로 프로젝트를 구성함. 한 편의 영화는 여러 회원의 평가가 행해질 수 있다. 한 명의 회원은 여러 영화에 대해 평점을 줄 수 있다. 💡다대다 관계의 특징 다대다 관계(M:N)는 논리적 설계와 실제 테이블 설계가 다르게 됨. 영화 엔티티와 회원 엔티티는 양쪽 모두 독립적인 엔티티로 설계가 가능함.(대부분 명사인 경우) 사람에 해당하는 회원 입장에서는 여러 편의 영화를 평가한다는 구조가 됨. 영화 입장에서는 한 편의 영화는 여러 회원이 존재한다는 관계가 성립하게 됨. 다대다(M:N)를 해결하기 위해서는 실제 테이블 설계에 매핑(mapping) 테이블을 사용함. (=연결 테이블) 여기에..
🤍글 상세보기 구현하기 1. Index.jsp 글 상세보기 버튼에 태그 추가 2. BoardController 작성 //글 상세보기 @GetMapping("/board/{id}") public String findById(@PathVariable int id, Model model) { model.addAttribute("board", boardService.글상세보기(id)); return "board/detail"; } 3. BoardService 작성 public Board 글상세보기(int id) { return boardRepository.findById(id) .orElseThrow(()->{ return new IllegalArgumentException("글 상세보기 실패: 아이디를 찾을 ..
🤍글쓰기 구현하기 1.BoardController 작성 //글쓰기 @GetMapping("/board/saveForm") public String saveForm() { return "board/saveForm"; } 2. saveForm.jsp 작성 글쓰기 완료 3. content 부분은 summernote를 적용했다. (For Bootstrap4) 적용한 모습 4. 글쓰기 버튼 클릭시 글이 등록되도록 board.js 작성 let index = { init: function() { $("#btn-save").on("click", () => { this.save(); }); }, save: function() { //alert('user의 save함수 호출됨'); let data = { title: $(..
🤍스프링 시큐리티 구현하기 스프링 시큐리티는 스프링 기반의 애플리케이션(인증, 권한, 인가 등)을 담당하는 스프링 하위 프레임워크임. 1. 인증이 안 된 사용자들이 출입할 수 있는 /auth/ 경로를 UserController에 추가해 준다. 2. 요청이 들어왔을 때 인증이 필요한지, 필요하지 않은지 구분하는 시큐리티 필터를 등록하는 SecurityConfig 클래스 생성 3. 설정 후 localhost:8080 주소로 접근하면 아래와 같은 화면이 뜨지만 4. 인증없이 접근할 수 있도록 설정해놓은 /auth/ 주소로 접속하면 페이지가 잘 뜨는 것을 확인할 수 있다. 5. 기존에 작성한 loginForm.jsp에서 form태그를 수정한다. 6.SecurityConfig 코드를 아래와 같이 수정하면 위의 f..
✅구현 목표 게시물이 로딩된 이후 화면에서 댓글 수를 클릭하면 해당 게시물에 속한 댓글을 Ajax로 가져와서 화면에 보여줌. 특정 버튼 클릭 시 새로운 댓글을 입력할 수 있는 모달창을 보여주고 Ajax의 POST 방식으로 댓글을 전송함. 댓글 삭제, 수정은 댓글 등록과 동일하게 특정 댓글을 선택하여 모달창에서 처리함. 방식 호출 대상 파라미터 작업 반환 데이터 GET /replies/board/{bno}(게시물번호) 게시물 번호 해당 게시물의 댓글 조회 JSON 배열 POST /replies/ JSON으로 구성된 댓글 데이터 댓글 추가 추가된 댓글 번호 DELETE /replies/{rno} 댓글 번호 댓글 삭제 삭제 결과 문자열 PUT /replies/{rno} 댓글 번호+수정할 내용 댓글 수정 수정 ..
🤍연관 관계와 관계형 데이터베이스 설계 관계형 데이터베이스에서는 개체(entity)간의 관계(relation)라는 것에 대해 고민하게 됨. 일대일(1:1), 일대다(1:N), 다대일(N:1), 다대다(M:N) 관계를 이용하여 데이터가 서로 간에 어떻게 구성되었는지 표현함. 예를 들어, 회원과 게시글의 관계를 정의해보면 한 명의 회원은 여러 게시글을 작성할 수 있다. 하나의 게시글은 한 명의 회원에 의해 작성된다. 🤍게시판 프로젝트 시작 전 테스트 1. 엔티티 클래스 추가 Member Board Reply 하나의 게시글에는 여러 개의 댓글이 달릴 수 있다. -> @ManyToOne 한 명의 사용자는 여러 개의 게시글을 작성할 수 있다. -> @ManyToOne 완성된 테이블 관계도 2. Repository..