스프링 부트 : Restful API 서버 만들기 - 1 of ?

2020. 5. 15. 01:36Development/[Server] 서버

728x90

잘 알지는 못하지만 ..

스프링 부트를 공부해서 포스팅을 남겨본다....

기본적인 셋팅 등이나 설계를 검색하느라 아까운 시간을 허비할 수 있으니..

 

스프링 부트의 경우 스프링과 비교하여 아주 심플하게 API 서버 프로젝트를 만들 수 있다.

 

다만.. 당연한 이야기일 수 있으나

아래와 같은 상황에 따라 프로젝트의 양이나 복잡도가 달라진다고 할 수 있다.

 

1. 원천 데이터의 형태 : RDBMS, NoSQL, Hadoop 등
 : 어떠한 곳에서 원천 데이터에서 정보를 가져와서 클라이언트에 보내줄지를 정해야 한다.

2. 캐시 데이터 사용 여부
 : 클라이언트의 정보 요청을 받을때마다 계속 원천데이터를 새롭게 읽어들일 것인지, 그렇게 계속 Read하여 실시간으로 최신정보를 리턴할 필요가 없는지 (예를 들어 1시간 주기로만 갱신정보를 리턴해도 된다든가 하는)를 정해야 한다.

3. HTTP 메소드 방식 : restful 인가 아닌가
 : API 주소를 좀더 명확하고 정형화하여 처리하는데 목적을 둔 restful api방식을 최근에는 선호하는 추세이다.

4. 접근 제어 : 보안처리 및 사용자 제어
 : 익명의 사용자도 접근이 가능하게 할것인가 아닌가에 따라 보안 정책 및 사용자 구분 처리를 해야한다.

 

가장 기본적인 형태로 프로젝트를 구성한다면 다음과 같은 방식으로 인텔리제이에서 프로젝트를 생성, 시작한다.

 


(1) 프로젝트 생성 - maven 프로젝트로 시작하는 방식 기준

 

1) 인텔리제이를 실행하여 "Create New Project" 클릭후에 다음과 같이 진행한다.

 maven 선택 후 Next

 


(2) 프로젝트 기본 구성확인 및 수정

 프로젝트를 생성하면 다음과 같이 첫화면이 열린다.

 1) Spring Boot 프로젝트 설정

  1. pom.xml을 다음과 같이 수정 (parent, dependencies, build)하여 스프링 부트 의존성을 추가.

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.sentilab</groupId>
    <artifactId>sentilabHadoop</artifactId>
    <version>1.0-SNAPSHOT</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.7.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

2. pom.xml 셋팅 후, 우측 maven 탭을 선택하여 좌상단 "리프레시" 아이콘을 클릭하여 다운로드 시작

3. java 디렉토리를 우클릭하여 기본 실행 패키지와 Application 클래스 생성

생성을 하면 아래와 같은 프로젝트 구조가 된다.

 

 2) startApp 클래스 수정 : 스프링 부트 향으로 변경

package com.sentilab;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class startApp {

    public static void main(String[] args) {
        SpringApplication.run(startApp.class, args);
    }
}

    *. 핵심

  • @SpringBootApplication 어노테이션 추가 
  • main 클래스에 SpringApplication.run 추가 

  3) 실행 타겟 만들기

   1. 메뉴바 상단 Add Configuration 을 클릭

   2. 팝업 좌측 + 버튼을 클릭하여 Spring Boot 선택  (인텔리j 커뮤니티 버전에서는 스프링 부트가 보이지 않습니다..)

   3. 상단 Name 변경

   3. 우측 Main Class 부분의 ... 버튼 클릭 > startApp 선택 > OK

메인 시작 클래스 선택

   4. 메뉴 상단 녹색 세모 ▶ 버튼을 클릭하여 빌드 실행 > 하단 Run 에서 정상 실행 결과 확인

 

 *참고 : jar 파일은 다음과 같이 생성

 maven 탭에서 package 클릭 > target 디렉토리에 파일이 생성됨

 

 

 4) Rest Api적용

 1. ApiController 생성

: 다음과 같이  기본적인 API 호출 리턴 클래스를 생성하고 앱 재시작 (추후에는 좀 더 정제하여 개선 예정)

package com.sentilab;

import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ApiController {
    @RequestMapping(value = "/api/hadoop", method = RequestMethod.GET)
    @ResponseStatus(value = HttpStatus.OK)
    public String getHadoopData() {
        return "{\"result\":\"ok\"}";
    }
}

 

2. PostMan (www.postman.com/downloads/) 과 같은 클라이언트 호출 프로그램으로 아래와 같이

localhost:8080/api/hadoop을 호출해보면 정상적으로 결과를 리턴해준다.

 

 (또는 아래와 같이 curl 명령어로 콘솔에서 확인)

$ curl -XGET http://localhost:8080/api/hadoop


{"result":"ok"}

 

 다음 포스팅 주제

 1) 스케쥴러

  : 스케쥴러를 통해 특정 데이터 주기적으로 호출

 2) 캐시

  : 캐시 기능을 통해 클라이언트의 과도한 데이터 호출 방지

 3) 하둡

  :  의존성 추가, 데이터 읽어오기

 4) API 수정

  : API 클래스에서 읽어온 데이터를 JSON으로 변환하여 반환

 

728x90