썸네일 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이라는 프로젝트에서 버킷을 만들도록 하겠습니다. 들어가서 버킷 만들기 버튼을 클릭하면 버킷 이름, 데이터 저장 위치, 객체(모든 형식의 파일) 접근/보호 방법을 설정한 후, 버킷을 생성할 수 있습니다. 그리고 나서 버킷에 접근하기 위한 ..
썸네일 [Kotlin] Command-line으로 컴파일하고 실행하기 Kotlin command-line compiler | Kotlin kotlinlang.org 1. 코틀린 설치 $ brew install kotlin 2. 컴파일 위와 같은 코틀린 파일을 만들고, kotlinc 명령어로 코틀린 파일을 컴파일 합니다. $ kotlinc hello.kt -include-runtime -d hello.jar 3. 실행 $ java -jar hello.jar
썸네일 [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와..
썸네일 [JAVA 객체지향프로그래밍] 인터페이스 (인터페이스를 사용하는 이유, 템플릿 메서드, DAO 구현) 이 글은 패스트 캠퍼스 한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지 강의를 듣고 공부한 내용을 바탕으로 정리한 글입니다. 1. 인터페이스 인터페이스란, 추상 메서드만을 가질 수 있고, 구현 메서드는 가질 수 없는 추상 클래스의 일종입니다. 인터페이스에서는 모든 메서드가 추상 메서드로 선언(public abstract)되고 모든 변수는 상수로 선언(public static final)됩니다. 기본적으로는 아래와 같이 인터페이스를 작성합니다. interface [interface name] { float pi = 3.14F; void someMethod(); } 일반적으로는 위과 같이 작성하고, 위의 예시에서 pi는 자동으로 public static final float로 상수로 선언되..
썸네일 [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. 사용자 계정을 생성합..
썸네일 [JAVA 객체지향프로그래밍] 다형성 이 글은 패스트 캠퍼스 한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지 강의를 듣고 공부한 내용을 바탕으로 정리한 글입니다. 1. 다형성 다형성(polymorphism)이란 '여러 개의 형태를 갖는다'라는 의미입니다. 즉, 하나의 코드가 여러 자료형으로 구현되어 실행되는 것을 말합니다. 따라서 같은 코드에서 자료형에 따라 다른 실행 결과가 나옵니다. 이는 정보 은닉과 상속과 함께 객체지향 프로그래밍의 가장 큰 특징 중 하나이자 장점입니다. 다형성을 잘 활용하면 유연하고, 확장성있고, 유지보수가 편리한 프로그램을 만들 수 있습니다. 예시로 동물 클래스를 상속받는 인간, 호랑이, 독수리 클래스를 만들어보겠습니다. class Animal { public void move() { System...
썸네일 [Spring MVC] 컨트롤러의 Exception 처리 이 글은 코드로 배우는 스프링 웹 프로젝트(남가람북스, 구멍가게 코딩단)을 읽고 공부한 내용을 바탕으로 정리한 글입니다. 스프링 MVC에서 Controller를 작성할 때 Exception을 처리하는 방식은 크게 두가지 방식으로 처리합니다. @ExceptionHandler와 @ControllerAdvice를 이용한 처리 @ResponseEntity를 이용하는 예외 메시지 구성 1. @ControllerAdvice AOP(Aspect-Oriented-Programming) 방식을 이용하여 공통적인 예외사항에 대해서는 별도로 @ControllerAdvice를 이용해서 분리하는 방식입니다. 💡 AOP(Aspect-Oriented-Programming)이란? '핵심적인 로직은 아니지만 프로그램에서 필요한 공통적..