Purple Bobblehead Bunny

Backend/SPRINGBOOT 12

[SpringBoot] 에러 페이지 설정

개발 시 많이 보게 되는 페이지.. 에러가 발생하게 되면 해당 에러에 맞는 에러 페이지를 보여주도록 설정한다. 에러 페이지를 관리 할 Controller를 생성하여 ErrorController 인터페이스를 상속받아 에러 컨트롤러를 생성한다. package com.jun.study import org.springframework.boot.web.servlet.error.ErrorController; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import javax.servlet...

Backend/SPRINGBOOT 2023.01.09

[SpringBoot] SpringBoot, JWT 오류 The signing key's size is 240 bits which is not secure enough for the HS256 algorithm

SpringBoot JWT 공부를 하다가 오류를 발견 했다.... 오류 코드를 보면.. io.jsonwebtoken.security.WeakKeyException: The signing key's size is 240 bits which is not secure enough for the HS256 algorithm. The JWT JWA Specification (RFC 7518, Section 3.2) states that keys used with HS256 MUST have a size >= 256 bits (the key size must be greater than or equal to the hash output size). Consider using the io.jsonwebtoken.se..

Backend/SPRINGBOOT 2022.11.14

[SpringBoot] 게시판 만들기 9. 검색

JPA Repository에서는 다음과 같은 키워드로 검색 하는 기능을 제공 하고 있다. findBy(컬럼 이름) -> 컬럼에서 키워드를 넣어서 찾는다(정확한 키워드명을 검색) findBy(컬럼 이름)Containing -> 컬럼에서 키워드가 포함된 것을 찾는다(키워드 중 일부분만 검색해도 가능) 우선 Repository로 가자 return type을 Page로, 제네릭을 써서 보드 객체를 담고, 매개변수로 keyword, pageable을 담는다. pageable을 쓰는 이유는, 검색을 해도 그 검색 된 키워드 목록을 페이지로 보여주기 위해서다. Service로 가서, 추가를 해 준다. 위 설명처럼 JPA Repository에서는 findByContaining 기능이 있다. 검색 단어를 위한 searc..

Backend/SPRINGBOOT 2022.11.01

[SpringBoot] 게시판 만들기 9. 페이징 처리

우리는 페이징 처리 뿐만이 아니라, 정렬 순서도 생각을 해야 한다. 보통 페이지에서 공지사항이나, 자유게시판을 보면 최근에 올린 글이 제일 상단에 올라가게끔 구현을 해 놓는다. 우선 Controller로 가서 boardList를 수정한다. @PageableDefault라는 어노테이션을 사용하는데, 메서드 매개변수로 Pageable을 받고, 브라우저 요청 파라미터로 Pageable에 값을 넘길 수 있다. ex) localhost:8080/board/list?page=3&size=5 페이징을 처리 할 클래스도 따로 만들어 줘야 하고, 쿼리문도 적어줘야 하는데 findAll 메서드를 사용 할 때 pageable 클래스를 넘겨주면 간단하게 처리가 가능하다, page : default 페이지 size : 한 페이..

Backend/SPRINGBOOT 2022.11.01

[SpringBoot] 게시판 만들기 8. 파일 업로드

게시판 파일 업로드를 해 본다. 글 작성 페이지에서 진행을 하므로 boardwrite.html 로 가서 코드를 조금 수정 해 주자. 게시물 작성 작성 input type 중, file이란 type이 있고, DB와 연동하기 위해 name 값으로 file을 주고 enctype="multipart/form-data"는, 요소가 파일이나 이미지를 서버로 전송할 때 주로 사용한다. MySQL workBench로 가서 파일 이름과, 파일 경로를 저장하기 위한 컬럼을 추가 해 주자. 파일을 저장 하기 위해, resources/static 파일 안에 files 디렉토리를 만들어 준다. 이제 BoardService의, 게시물 작성 코드를 변경을 해 준다. 파일 업로드는 게시물 작성에서 이뤄진다. 파일 업로드를 위해 매개..

Backend/SPRINGBOOT 2022.11.01

[SpringBoot] 게시판 만들기 7. 처리 메시지

글 작성이 완료되었거나, 수정, 삭제를 했을 때 보통 알람이 뜨게 된다. 우선 templates 폴더 안에 message.html을 생성 한다. 타임리프를 사용 할 것이다. CDATA는 너무 생소하다. 구글링을 해 보니, 그냥 사용을 해도 무방하지만, script 에러를 피할 수 있다. 예를 들어, HTML 의 유효성 검사(Validate)를 검사하는 Parser 입장에선 이것이 잘못되었다고 간주하여 사용자에게 경고 메세지를 띄울 수 있다. 이럴 때 오류로 처리를 해, 없는 라인으로 처리 될 수도 있다. 쉽게 말 해, 문법 오류를 막을 수가 있다. Controller에서 메시지를 message.html로 전송을 해준다. message를 담아서 alert창이 화면에 문구를 출력이 된다. location.r..

Backend/SPRINGBOOT 2022.10.31

[SpringBoot] 게시판 만들기 6. 게시글 수정

게시글 수정을 할 것이다 우선 boardmodify.html을 만들자. 글 작성과 같기 때문에 boardwrite.html 코드를 복사해서 그대로 만들자! 게시물 작성 수정 그리고 항상 그랬듯이 BoardController로 이동하고 처음 보는 어노테이션이 나타났다 ! @PathVariable : 현 코드 기준으로 URI이 들어왔을 때 id부분이 인식이 되어서 Integer 형태의 id로 들어오게 된다. 예를 들면, 아래 URI 에서 진한 부분이 @PathVariable로 처리해 줄 수 있다. http://localhost:8080/board/modify/12 이 전 주소와는 다르게 ?id=1 이런식이 아닌 /1 이런 식으로 URI 주소가 나타나니까 보기 훨씬 깔끔하다고 느껴졌다. 게시물 수정은 writ..

Backend/SPRINGBOOT 2022.10.31

[SpringBoot] 게시판 만들기 5. 게시글 삭제

게시글 삭제는 게시글 상세 페이지에서 진행을 한다. boardview.html 에서 추가를 한다 글 삭제 BoardService로 간 후 게시물 삭제 코드를 구현 한다. 게시글 상세 페이지와 마찬 가지로 어떤 게시글을 불러올 지 지정을 해 줘야 한다. 그래서 매개변수로 id를 넣어주고 JpaRepository의 deleteById 메서드를 입력 해 준다. BoardController로 돌아간 후 boardService의 boardDelete() 메서드를 입력 해 준 후, 마찬가지로 매개변수로 id를 불러온다. 여기서 삭제가 되면, /board/list로 돌아가게 된다! redirect는 사용자가 어떤 URL로 웹 서버를 요청했을 때, 다른 URL로 넘겨주는 것이다. redirect: 다음 문자열이 "/"..

Backend/SPRINGBOOT 2022.10.31

[SpringBoot] 게시판 만들기 4. 게시글 상세 페이지

게시물 리스트를 만들었다. 여기서 게시글을 클릭을 하면 그 게시글에 대한 상세 페이지가 또 필요하다. BoardController에서 /board/view를 GetMapping 해 준 뒤, Service로 가서 게시물 상세 리스트에 대한 코드를 구현한다. 여기서, 우리는 게시글을 불러올 때 어떤 게시글을 불러올지 지정을 해 줘야 하는데 매개변수로 Integer 값을 넣어줘야 한다. Spring Data JPA 사용 시 Repository에서 return type을 Optional로 바로 받을 수 있도록 지원을 하고 있다. get() 메서드를 이용해 반환된 객체를 꺼내 쓸 수 있게 된다. 다시 Controller로 가서 추가를 해 준다. 넘겨주기만 하고, 출력을 해 주는 부분은 따로 처리를 안해서 마찬가지..

Backend/SPRINGBOOT 2022.10.31

[SpringBoot] 게시판 만들기 3. 게시글 페이지

우선 MySQL로 가서 테스트 프로시저를 작성하자. 간단하게 테스트 데이터를 만든다. 게시글 리스트를 볼려면 어느 정도 글이 있어야 한다. use board; 를 입력 해 데이터베이스 스키마를 사용한다고 선언부터 한 뒤 프로시저를 생성 후, call testDataInsert(); 로 프로시저를 실행 하고, insert * from board; 로 확인을 하자. DELIMITER $$ CREATE PROCEDURE testDataInsert() BEGIN DECLARE i INT DEFAULT 1; WHILE i

Backend/SPRINGBOOT 2022.10.31