게시판

    [SpringBoot] 게시판 구현하기 13 (파일 삭제하기) - 책 응용편

    들어가기 전에 하기 포스팅은 "스프링부트 시작하기(김인우 저)"를 공부하며 만든 springboot 프로젝트 내에 추가로 구현한 부분에 대해 적은 글입니다. 잘못된 부분이 있을 수 있으니 참고만 해주시면 좋을 것 같습니다. "스프링부트 시작하기" 책에는 파일 업로드 및 다운로드만 존재하여, 기존에 업로드한 파일을 삭제하는 것에 대해 알아볼 것입니다. 뷰 변경하기 boardDetail.html 코드 속 업로드된 파일 리스트 옆에 삭제 버튼을 추가하였습니다. 게시글 상세 화면 게시글 상세내용 글 번호 조회수 작성자 작성일 제목 : 기존에는 a 태그에서 th:each를 설정하였으나, 파일 삭제 버튼에서도 해당 속성을 사용할 수 있도록 div에 설정하는 것으로 변경했습니다. th:onclick에서 locatio..

    [SpringBoot] 게시판 구현하기 12 (파일 업로드와 다운로드)

    들어가기 전에 하기 포스팅은 "스프링부트 시작하기(김인우 저)" 책을 공부하며 적은 포스팅입니다. 이번 포스팅에서는 파일 업로드와 다운로드에 대해 살펴보도록 하겠습니다. 웹 어플리케이션에서 파일 관련 기능은 매우 중요합니다. 일반적인 게시판만 해도 파일을 첨부할 수 있고, 대다수의 SNS는 이미지와 함께 글을 작성합니다. 쉬워보일 수 있으나, 내부적으로는 구현해야 할 기능이 많아 여러 가지를 생각해야 합니다. 예를 들어 사용자 편의를 위해 파일 업로드 시 드래그 앤 드롭 기능, 첨부파일의 유효성 검사, 파일 전송의 진행률이나 예외처리 등 고려할 것들이 많습니다. 여기서는 파일 업로드 및 다운로드 시 핵심적인 내용에 대해서만 다룰 것입니다. 파일 첨부를 위한 기본 설정 먼저 파일 업로드와 다운로드 기능 구..

    [SpringBoot] 게시판 구현하기 11 (스프링의 다양한 기능 살펴보기 - 예외처리)

    들어가기 전에 하기 포스팅은 "스프링부트 시작하기(김인우 저)" 책을 공부하며 적은 포스팅입니다. 이번 포스팅에서는 예외처리에 대해 살펴보도록 하겠습니다. 예외처리 스프링의 예외처리 방식은 크게 3가지로 나눌 수 있습니다. try/catch를 이용한 예외처리 각각의 컨트롤러단에서 @ExceptionHandler를 이용한 예외처리 @ControllerAdvice를 이용한 전역 예외처리 try/catch를 사용한 예외처리의 경우 스프링이 아닌 자바의 예외처리 방법이므로 여기서는 다루지 않습니다. 그리고 @ExceptionHandler 어노테이션을 이용한 예외처리의 경우 컨트롤러별로 동일 예외처리를 추가해야 해서 코드 중복이 많아져 이번 포스팅에서는 3번 @ControllerAdvice를 이용한 전역 예외처리..

    [SpringBoot] 게시판 구현하기 10 (스프링의 다양한 기능 살펴보기 - 트랜잭션)

    들어가기 전에 하기 포스팅은 "스프링부트 시작하기(김인우 저)" 책을 공부하며 적은 포스팅입니다. 이번 포스팅에서는 트랜잭션에 대해 살펴보도록 하겠습니다. 트랜잭션 먼저 돈을 송금하는 과정을 예로 들어 트랜잭션 개념을 간단히 알아보겠습니다. 돈을 송금하는 과정은 아래와 같습니다. 송금하고자 하는 계좌와 금액을 선택합니다. 이체하는 계좌에서 돈이 출금됩니다. 이체받는 계좌에 돈이 입금됩니다. 거래가 정상적으로 완료됩니다. 거래가 정상적으로 처리되면 문제가 없지만, 중간에 문제가 발생할 수 있습니다. 예를 들어, 2번과 3번 과정 사이에서 문제가 발생했다고 가정합니다. 그렇게 되면, 돈은 출금되었는데 실제로 이체 받을 사람 계좌에는 돈이 들어오지 않게 됩니다. 따라서, 돈을 송금하는 과정에서 문제가 발생하면..

    [SpringBoot] 게시판 구현하기 8 (스프링의 다양한 기능 살펴보기 - 인터셉터)

    들어가기 전에 하기 포스팅은 "스프링부트 시작하기(김인우 저)" 책을 공부하며 적은 포스팅입니다. 이번 포스팅에서는 인터셉터에 대해 살펴보도록 하겠습니다. 인터셉터(Interceptor) Spring의 인터셉터는 어떠한 URI을 호출했을 때 해당 요청의 컨트롤러가 처리되기 전 또는 후에 작업을 하기 위해 사용됩니다. 이러한 역할은 필터(Filter)와 인터셉터(Interceptor)로 수행할 수 있습니다. 먼저, 필터(Filter)와 인터셉터(Interceptor)의 차이를 알아보겠습니다. 필터(Filter) VS 인터셉터(Interceptor) 필터는 디스패처 서블릿 앞 단에서 동작하지만, 인터셉터는 디스패처 서블릿에서 컨트롤러로 가기 전에 동작합니다. 필터는 J2EE 표준 스펙에 있는 서블릿 기능 중..

    [SpringBoot] 게시판 구현하기 6 (게시글 수정 및 삭제 기능 만들기)

    들어가기 전에 하기 포스팅은 "스프링부트 시작하기(김인우 저)" 책을 공부하며 적은 포스팅입니다. 이번 시간에는 앞서 등록한 게시글 상세 화면에서 게시글 수정 및 삭제할 수 있는 기능을 넣어보도록 하겠습니다. 뷰 변경하기 먼저 기존에 만든 게시글 상세 화면을 약간 수정하여 수정 및 삭제 기능을 추가하겠습니다. boardDetail.html 내용을 아래와 같이 수정합니다. ADD START ~ ADD END 사이 내용들만 추가하면 됩니다. 게시글 상세 화면 게시글 상세내용 글 번호 조회수 작성자 작성일 제목 : 데이터 전송을 위해 을 추가합니다. : form을 이용하여 데이터를 전송할때는 입력창(, 등)의 내용만 전달됩니다. 그래서, 입력창이 아닌 데이터들 중 글을 수정하거나 삭제할 때 필요한 글 번호를 ..

    [SpringBoot] 게시판 구현하기 5 (게시글 상세 화면 만들기)

    들어가기 전에 하기 포스팅은 "스프링부트 시작하기(김인우 저)" 책을 공부하며 적은 포스팅입니다. 이번 시간에는 앞서 등록한 게시글을 확인할 수 있는 상세 화면을 만들어 보겠습니다. 게시글 상세 화면 만들기 게시글 상세 화면 만들기 전 조회 로직의 흐름에 대해 먼저 살펴보겠습니다. 목록 화면에서 상세 내용을 확인하고 싶은 글을 선택합니다. 즉, 목록 화면에서 선택된 글의 상세 화면을 호출하는 기능이 필요합니다. 선택된 글의 상세 내용을 조회하고 조회수를 증가시킵니다. 즉, 상세 내용을 조회할 때 비즈니스 로직은 목록 조회와 다르게 두 가지가 됩니다. 비즈니스 로직을 처리하는 서비스 영역에 두 가지 작업(게시글 조회 & 조회수 증가)을 진행해야 합니다. 조회된 글 내용을 화면에 표시합니다. 목록 화면 수정..

    [SpringBoot] 게시판 구현하기 4 (게시글 등록 기능 생성하기)

    들어가기 전에 하기 포스팅은 "스프링부트 시작하기(김인우 저)" 책을 공부하며 적은 포스팅입니다. 이번 시간에는 앞서 게시글 목록 만들 때, 직접 쿼리로 날렸던 게시글 등록 기능을 GUI로 표현할 수 있도록 구성해보도록 하겠습니다. 게시글 등록 화면 만들기 게시글 등록은 사용자가 입력한 내용이 서버에 저장되는 순서로 진행되므로, 게시글 목록을 만들 때와는 다르게 화면 먼저 만들어보도록 하겠습니다. templates/board 폴더 내에 boardWrite.html 파일을 생성하고 다음과 같이 작성합니다. 게시판 등록 제목 : 사용자로부터 입력된 값을 서버로 전달하기 위해 을 이용합니다. action 속성에는 요청을 수행할 서버의 주소를 입력합니다. 이 단계에서는 아직 /board/insertBoard.d..