들어가기 전에하기 포스팅은 "스프링부트 시작하기(김인우 저)" 책을 공부하며 적은 포스팅입니다. 이전 포스팅에서는 RESTful 게시판으로 변경하는 방법을 살펴보았습니다. 앞선 구현을 가지고는 REST API를 만들었다고 이야기하기는 어렵습니다. 이번 포스팅을 통해 실제 어플리케이션 개발에서 프론트와 백엔드가 어떻게 나뉘는지 살펴보도록 하겠습니다. 일반적인 어플리케이션은 백엔드 서버와 클라이언트로 나뉩니다. 여기서 클라이언트는 웹 페이지가 될 수도 있고, 안드로이드나 iOS 앱이 될 수도 있습니다. 그리고, 백엔드 서버는 이러한 클라이언트의 요청을 수행하는 API를 만듭니다. 지금까지는 하나의 어플리케이션에서 Thymeleaf와 jQuery를 이용해 화면을 개발했습니다. 그리고, 이를 실행하기 위한 로직..
들어가기 전에하기 포스팅은 "스프링부트 시작하기(김인우 저)" 책을 공부하며 적은 포스팅입니다. 이번 포스팅에서는 RESTful에 대해 살펴보도록 하겠습니다.REST란?REST란 REpresentational State Tranfer의 약자로, HTTP 창시자 중 한 사람인 로이 필딩(Roy Fielding)이 2000년에 발표한 박사 학위 논문에서 소개되었습니다. 로이 필딩은 기존 웹 아키텍처가 HTTP 본래의 우수성을 잘 활용하지 못한다고 생각하여 HTTP의 장점을 최대한 활용할 수 있는 아키텍처로 REST를 소개했습니다.잘 표현된 HTTP URI로 리소스를 정의하고, HTTP 메소드로 리소스에 대한 행위를 정의합니다. 리소스는 JSON, XML과 같은 여러 언어로 표현할 수 있습니다.REST의 특징..
참고 사항하기 내용을 실습하게 되면, 게시판 구현하기 15를 실습할 때 문제가 생길 수 있습니다.존재하는 게시글에 파일을 추가하기 위해 boardDetail.html 내 form 태그에 enctype을 설정하였는데, 이 부분이 추후 RESTful로 변경할 때에 POST로만 form을 사용할 수 있는 문제를 일으킵니다. 따라서, 아래 내용은 참고만 하면 좋겠습니다. 들어가기 전에하기 포스팅은 "스프링부트 시작하기(김인우 저)"를 공부하며 만든 springboot 프로젝트 내에 추가로 구현한 부분에 대해 적은 글입니다. 잘못된 부분이 있을 수 있으니 참고만 해주시면 좋을 것 같습니다. "스프링부트 시작하기" 책에는 신규 게시글을 만들 때 파일 업로드만 가능하여, 기존에 업로드한 게시글에 파일을 추가하는 것..
들어가기 전에하기 포스팅은 "스프링부트 시작하기(김인우 저)"를 공부하며 만든 springboot 프로젝트 내에 추가로 구현한 부분에 대해 적은 글입니다. 잘못된 부분이 있을 수 있으니 참고만 해주시면 좋을 것 같습니다. "스프링부트 시작하기" 책에는 파일 업로드 및 다운로드만 존재하여, 기존에 업로드한 파일을 삭제하는 것에 대해 알아볼 것입니다.뷰 변경하기boardDetail.html 코드 속 업로드된 파일 리스트 옆에 삭제 버튼을 추가하였습니다. 게시글 상세 화면 게시글 상세내용 글 번호 조회수 작성자 작성일 ..
들어가기 전에 하기 포스팅은 "스프링부트 시작하기(김인우 저)" 책을 공부하며 적은 포스팅입니다. 이번 포스팅에서는 파일 업로드와 다운로드에 대해 살펴보도록 하겠습니다. 웹 어플리케이션에서 파일 관련 기능은 매우 중요합니다. 일반적인 게시판만 해도 파일을 첨부할 수 있고, 대다수의 SNS는 이미지와 함께 글을 작성합니다. 쉬워보일 수 있으나, 내부적으로는 구현해야 할 기능이 많아 여러 가지를 생각해야 합니다. 예를 들어 사용자 편의를 위해 파일 업로드 시 드래그 앤 드롭 기능, 첨부파일의 유효성 검사, 파일 전송의 진행률이나 예외처리 등 고려할 것들이 많습니다. 여기서는 파일 업로드 및 다운로드 시 핵심적인 내용에 대해서만 다룰 것입니다. 파일 첨부를 위한 기본 설정 먼저 파일 업로드와 다운로드 기능 구..
들어가기 전에하기 포스팅은 "스프링부트 시작하기(김인우 저)" 책을 공부하며 적은 포스팅입니다. 이번 포스팅에서는 예외처리에 대해 살펴보도록 하겠습니다.예외처리스프링의 예외처리 방식은 크게 3가지로 나눌 수 있습니다.try/catch를 이용한 예외처리각각의 컨트롤러단에서 @ExceptionHandler를 이용한 예외처리@ControllerAdvice를 이용한 전역 예외처리try/catch를 사용한 예외처리의 경우 스프링이 아닌 자바의 예외처리 방법이므로 여기서는 다루지 않습니다. 그리고 @ExceptionHandler 어노테이션을 이용한 예외처리의 경우 컨트롤러별로 동일 예외처리를 추가해야 해서 코드 중복이 많아져 이번 포스팅에서는 3번 @ControllerAdvice를 이용한 전역 예외처리에 대해 알아..
들어가기 전에하기 포스팅은 "스프링부트 시작하기(김인우 저)" 책을 공부하며 적은 포스팅입니다. 이번 포스팅에서는 트랜잭션에 대해 살펴보도록 하겠습니다.트랜잭션먼저 돈을 송금하는 과정을 예로 들어 트랜잭션 개념을 간단히 알아보겠습니다. 돈을 송금하는 과정은 아래와 같습니다.송금하고자 하는 계좌와 금액을 선택합니다.이체하는 계좌에서 돈이 출금됩니다.이체받는 계좌에 돈이 입금됩니다.거래가 정상적으로 완료됩니다.거래가 정상적으로 처리되면 문제가 없지만, 중간에 문제가 발생할 수 있습니다. 예를 들어, 2번과 3번 과정 사이에서 문제가 발생했다고 가정합니다. 그렇게 되면, 돈은 출금되었는데 실제로 이체 받을 사람 계좌에는 돈이 들어오지 않게 됩니다. 따라서, 돈을 송금하는 과정에서 문제가 발생하면 이와 관련된 ..
들어가기 전에하기 포스팅은 "스프링부트 시작하기(김인우 저)" 책을 공부하며 적은 포스팅입니다. 이번 포스팅에서는 AOP에 대해 살펴보도록 하겠습니다.AOP(Aspect Oriented Programming, 관점지향 프로그래밍)AOP란, OOP(Object Oriented Programming, 객체지향 프로그래밍)를 더욱 OOP답게 사용하도록 도와주는 개념입니다.객체지향이란, 기능과 데이터들을 모아 재사용이 가능한 객체로 캡슐화하는 것을 의미합니다. 이렇게 캡슐화된 클래스들을 프로젝트 내 여러 곳에서 반복적으로 재사용하여 생산성을 높일 수 있습니다.하지만, 실제 어플리케이션을 개발하다보면 객체의 핵심코드 외에도 여러 기능이 들어 갑니다. 메소드 호출 전후의 로그, 데이터 검증 및 확인 로그, 예외처리..