🤍파일 업로드 처리 구현하기 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..
🤍방명록 검색 구현 검색을 구현하기 위해 생각해보아야 할 것 검색 기능을 구현하기 위해 PageRequestDTO에 검색 타입(type), 검색어(keyword) 추가 필요 서비스 계층에서 Querydsl 이용해서 검색 처리 검색 타입은 제목(t), 내용(c), 작성자(w)로 검색하는 경우와 제목 혹은 내용(tc), 제목 혹은 내용 혹은 작성자(twc)로 검색하는 경우가 있다. 1. PageRequestDTO 수정 2. 서비스 코드 작성 PageRequestDTO를 파라미터로 받아 검색 조건(type)이 있을 시 conditionBuilder 변수를 생성해서 검색 조건을 or로 연결해서 처리함. 검색 조건이 없을 시 'gno>0'으로만 생성됨. 3. 검색 조건을 처리하기 위해 목록 getList() 메소..