썸네일 Spring Boot와 GCS(Google Cloud Storage) 연동하여 파일 업로드 구현하기 (Sprint WebFlux에서 파일업로드, FilePart) 오늘은 Google Cloud Storage를 이용해서 파일을 업로드, 다운로드하는 API를 만들어보겠습니다. 1. 버킷 생성하기 먼저 파일을 업로드하고 다운로드할 버킷을 생성하겠습니다. 버킷이란, Google Cloud에서 객체를 저장하는 컨테이너입니다. Google Cloud 웹 콘솔(https://console.cloud.google.com)에서 프로젝트를 생성한 후, 해당 프로젝트에서 Cloud Storage > 버킷을 클릭합니다. 저는 capstone-design이라는 프로젝트에서 버킷을 만들도록 하겠습니다. 들어가서 버킷 만들기 버튼을 클릭하면 버킷 이름, 데이터 저장 위치, 객체(모든 형식의 파일) 접근/보호 방법을 설정한 후, 버킷을 생성할 수 있습니다. 그리고 나서 버킷에 접근하기 위한 ..
썸네일 [Spring Boot] API 개발 - response 내려주기 API 개발 시, response를 내려주는 방법에는 여러가지가 있습니다. 1. 단순 text 내려주기 @RestController @RequestMapping("/api-controller") public class ApiController { @GetMapping("/text") public String text(@RequestParam String account) { return account; } 2. JSON 타입으로 내려주기 java object로 리턴하지만 스프링 프레임워크에서는 object mapper가 자동으로 JSON으로 타입 변환을 해줍니다. JSON으로 request가 오면 object mapper를 통해서 object로 바뀌고 내가 작성한 method를 타게됩니다. method에서..
썸네일 [Spring Boot] API 개발 0. HTTP Method 각 HTTP Method가 하는 역할과 요청을 할 때 필요한 정보는 다음과 같습니다. CRUD 멱등성 안정성 Path Variable Query Parameter DataBody GET R (리소스 취득) O O O O X POST C (리소스 생성, 추가) X X O △ O PUT C/U(리소스 갱신, 생성) O X O △ O DELETE D(리소스 삭제) O X O O X 1. GET 요청 1-1. GET 요청 받아서 String 리턴하기 스프링에서는 @RestController를 지원합니다. @RestController는 스프링 프레임워크 4점대 버전 이상부터 사용가능하고 @Controller와 @ResponseBody가 결합된 어노테이션입니다. 즉, 컨트롤러 클래스 하위..
썸네일 REST API란? 0. API란? API는 Application Programming Interface의 약쟈로, 한 프로그램에서 다른 프로그램으로 데이터를 주고 받기 위한 방법입니다. (방법이란, 결국 코드임!) 웹서버에 어떤 상품의 정보를 보여주는 코드가 있다고 가정했을 때, 유저가 어떻게 이 코드를 실행시킬 수 있을까요? 바로 API를 통해서 실행시킬 수 있습니다. 위의 코드가 상품(product)의 정보를 데이터베이스에서 꺼내서 보여주는 코드라고 가정해봅시다. 유저가 이 코드를 실행시키기 위해서는 API 코드가 필요합니다. app.get() 부분이 API 코드에 해당하는 부분입니다. 사용자가 https://example/detail/:10을 요청하면 상품을 정보를 보여주는 코드가 실행되는 것이지요! 즉, API는 ..
썸네일 [Spring MVC] Presentation Tier 구현 이 글은 코드로 배우는 스프링 웹 프로젝트(남가람북스, 구멍가게 코딩단)을 읽고 공부한 내용을 바탕으로 정리한 글입니다. 1. Controller Controller 작성 전에, 원하는 기능을 호출하는 방식에 대해 table로 간단히 정리해보겠습니다. Task URL Method Parameter Form URL 이동 전체 목록 /board/list GET - - - 등록 /board/register POST 모든 항목 O O 조회 /board/get GET bno - - 삭제 /board/remove POST bno O O 수정 /board/modify POST 모든 항목 O O BoardController를 controller 패키지 안에 작성하고, 위의 테이블의 기능들을 차례대로 메서드로 작성해보도..
썸네일 [Spring MVC] Business Tier 구현 이 글은 코드로 배우는 스프링 웹 프로젝트(남가람북스, 구멍가게 코딩단)을 읽고 공부한 내용을 바탕으로 정리한 글입니다. 비즈니스 계층은 고객의 요구사항을 반영하는 계층으로 프레젠테이션 계층과 영속(persistence) 계층의 중간다리 역할을 합니다. 영속 계층은 데이터베이스를 기준으로 해서 설계를 나눠 구현하지만, 비즈니스 계층은 로직을 기준으로 해서 처리합니다. 예를 들어 persistence 계층이 데이터베이스를 기준으로 상품 처리 객체와 회원 처리 객체를 나누어 처리한다고 하면, business 계층은 로직에 따라 구매 서비스 하나의 객체로 처리합니다. (상품 처리 객체 / 회원 처리 객체와 상호작용) 1. Service 인터페이스 일반적으로 비즈니스 영역에 있는 객체들은 Service라는 용어..
썸네일 [Spring MVC] Persistence Tier CRUD 구현 이 글은 코드로 배우는 스프링 웹 프로젝트(남가람북스, 구멍가게 코딩단)을 읽고 공부한 내용을 바탕으로 정리한 글입니다. Persistence Tier(영속 계층, 데이터 계층)는 데이터를 어떤 방식으로 보관하고, 사용하는가에 대한 설계가 들어가는 계층입니다. 이번 글에서는 MyBatis를 사용하여 게시판 데이터에 대한 persistence 계층의 CRUD를 구현해보겠습니다. MyBatis를 사용한 persistence 계층의 작업은 항상 다음과 같은 순서로 진행합니다. 1. 테이블의 칼럼 구조를 반영하는 VO(Value Object) 클래스 생성 2. MyBatis의 Mapper 인터페이스의 작성과 XML 처리 3. 작성한 Mapper 인터페이스 테스트 0. MyBatis와 스프링 연동 MyBatis와..
썸네일 [Spring boot] Maria DB 설정 이 글은 코드로 배우는 스프링 부트 웹 프로젝트(남가람북스, 구멍가게 코딩단)을 읽고 공부한 내용을 바탕으로 정리한 글입니다. 스프링 부트 프로젝트에서 Maria 데이터베이스를 설정해보겠습니다. 1. MariaDB 설치 1. MariaDB를 설치합니다. (맥에서는 homebrew로 간단하게 설치할 수 있습니다.) brew install mariadb 2. MariaDB 서버를 구동합니다. brew services start mariadb 3. Maria DB에 접속합니다. mariadb -u root -p 2. 데이터베이스 생성, 사용자 계정 생성 및 권한 부여 1. 데이터베이스를 생성합니다. (저는 책에서와 같은 이름의 bootex라는 이름으로 데이터베이스를 생성하였습니다.) 2. 사용자 계정을 생성합..
썸네일 [Spring MVC] 컨트롤러의 Exception 처리 이 글은 코드로 배우는 스프링 웹 프로젝트(남가람북스, 구멍가게 코딩단)을 읽고 공부한 내용을 바탕으로 정리한 글입니다. 스프링 MVC에서 Controller를 작성할 때 Exception을 처리하는 방식은 크게 두가지 방식으로 처리합니다. @ExceptionHandler와 @ControllerAdvice를 이용한 처리 @ResponseEntity를 이용하는 예외 메시지 구성 1. @ControllerAdvice AOP(Aspect-Oriented-Programming) 방식을 이용하여 공통적인 예외사항에 대해서는 별도로 @ControllerAdvice를 이용해서 분리하는 방식입니다. 💡 AOP(Aspect-Oriented-Programming)이란? '핵심적인 로직은 아니지만 프로그램에서 필요한 공통적..
썸네일 [Spring MVC] 파일업로드 처리 이 글은 코드로 배우는 스프링 웹 프로젝트(남가람북스, 구멍가게 코딩단)을 읽고 공부한 내용을 바탕으로 정리한 글입니다. 1. commons-fileupload 라이브러리 추가 commons-fileupload commons-fileupload 1.3.1 2. dispatcher-servlet.xml 설정 dispatcher-servlet.xml은 스프링 MVC의 특정한 객체(Bean)을 설정해서 파일을 처리합니다. 파일 업로드를 할 때는 id가 multipartResolver인 객체를 설정합니다. 3. views/sample/exUpload.jsp 작성 4. 컨트롤러 작성 @GetMapping("/exUpload") public void exUpload() { log.info("----- exUploa..
썸네일 [Spring MVC] Controller 이 글은 코드로 배우는 스프링 웹 프로젝트(남가람북스, 구멍가게 코딩단)을 읽고 공부한 내용을 바탕으로 정리한 글입니다. Controller는 개발자가 작성하는 클래스입니다. 실제 Request를 처리하는 로직을 작성하게 됩니다. 스프링 MVC는 어노테이션을 중심으로 구성되는데, @Controller 어노테이션과 @RequestMapping 어노테이션 사용법을 예제를 통해서 공부해보겠습니다. 1. @Controller와 @RequestMapping 예제로 controller 패키지에 SampleController 클래스를 다음과 같이 작성해줍니다. import lombok.extern.log4j.Log4j; import org.springframework.stereotype.Controller; impo..
썸네일 [Spring MVC] 기본 구조 이 글은 코드로 배우는 스프링 웹 프로젝트(남가람북스, 구멍가게 코딩단)을 읽고 공부한 내용을 바탕으로 정리한 글입니다. 1. 프로젝트 실행 과정 [Spring] Spring MVC Project 생성하기(IntelliJ) 이 글은 더블에스 Devlog 블로그를 참고하여 정리한 내용을 바탕으로 작성한 글입니다. IntelliJ에서 Spring MVC Project 생성하기 - 더블에스 Devlog IntelliJ에서는 STS(Spring Tool Suite)처럼 Spring MVC Project를 생 eunbin00.tistory.com 기본적으로 프로젝트를 생성하고 정상적으로 실행되었다면 톰캣 서버 구동 시, 아래 이미지처럼 로그가 찍히는 것을 볼 수 있습니다. 이 로그를 하나씩 보면서 어떤 과정을 통..