본문 바로가기

프로그래밍/Spring

[REST API 실습] 1. Springboot 프로젝트 생성하고 RestController 작성 후 실행하기(Gradle)

본 포스팅은 스터디 모임의 발표 참고자료로 사용하기 위해 작성되었습니다.

 

 

목차

1) Springboot 프로젝트 생성하고 RestController 작성 후 실행하기(Gradle)

2) AWS RDS로 MariaDB 생성해서 워크벤치에 연결하기

3) JPA(Hibernate) + HikariCP로 스프링부트 프로젝트와 RDS MariaDB 연동 후 CRUD 메소드 구현

4) Springboot 프로젝트 AWS EC2 인스턴스에 배포

5) 안드로이드 앱에서 Retrofit을 사용해서 REST API와 통신하기(CRUD 구현)

 

참고사항

1) 부가적인 설명은 최대한 배제하는 대신 모든 과정을 여과 없이 스크린샷으로 남겼습니다. 그래서 대부분의 스크린샷이 창 전체를 포함합니다.

2) 이론적인 이해가 필요한 부분은 해시 태그(#)를 통해 키워드만 남겨놓도록 하겠습니다. 

3) 모든 과정을 정확하게 따르기 위해서는 IntelliJ, Gradle, Putty, AWS 계정, Mysql Workbench, Postman이 필요합니다.(테스트 과정을 패스한다면 Mysql Workbench, Postman은 필요 없습니다.)

 

1. Springboot 프로젝트 생성하고 RestController 작성 후 실행하기(Gradle)

1) 프로젝트 생성

- 인텔리제이에서 새로운 프로젝트를 생성합니다.

#spring.io

 

- Group과 Artifact는 자유롭게 변경하셔도 괜찮습니다.

- Gradle 프로젝트로 선택합니다.

#Gradle

 

- 라이브러리 의존성은 Web과 Lombok만 추가해서 시작합니다.

- 다른 의존성 추가시 설정 파일 부재로 인해 부팅이 불가능할 수 있습니다. 

#Lombok

 

- 프로젝트명과 폴더 경로는 자유롭게 작성합니다.

 

- Use auto-import를 체크합니다.(필수 사항은 아닙니다.)

- Gradle home이 비어있어서 프로젝트를 생성할 수 없는 경우 Gradle을 따로 설치합니다.

#https://gradle.org/install/

 

- 프로젝트가 생성되었습니다. 첫 빌드시 시간이 꽤 소요됩니다. 잠시 기다려주세요.

 

- 빌드가 완료되었습니다. 2분 30초가 걸렸네요.

 

2) 생성된 프로젝트 테스트

- 아무런 코드도 작성하지 않고 잘 실행이 되는지 확인합니다.

#@SpringBootApplication

 

- 포트가 겹쳐서 부팅에 실패했습니다.

 

- 설정 파일을 통해 포트를 변경하겠습니다.

- application.properties 파일을 yml 파일로 변경합니다.(기존 형식이 편하시다면 그대로 쓰셔도 무방합니다. 크게 다르지 않습니다.)

 

application.yml로 변경합니다.

 

- 아래와 같은 형식으로 포트를 지정해줍니다. 비어있는 포트라면 65535까지 아무 포트나 가능합니다.

- 들여쓰기와 띄어쓰기, 오탈자에 주의해주세요. 약간만 잘못되더라도 인식되지 않습니다.

 

- 다시 부팅을 시도합니다.

- 아직은 어플리케이션이 가벼운 상태라서 부팅하는데 2.5초밖에 걸리지 않습니다.

 

- http://localhost:3333으로 접속을 시도합니다.

- 아래와 같은 에러페이지가 나오는게 정상입니다. 스프링부트 프로젝트 자체에서 응답하는 에러페이지입니다.

 

- 아래와 같은 에러화면이 나오면 서버가 정상적으로 작동되지 않는 상태입니다.

 

3) 테스트용 RestController 작성

- controller패키지를 생성하고 안에 테스트용 컨트롤러를 작성합니다.

- 아래 코드에 지정된 대로 기본 경로 "/"로 접근시 Hello!라는 메세지를 반환합니다.

- 코드

#@Controller #@RestController #@RequestMapping #Servlet

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {

    @RequestMapping("/")
    public String index() {
        return "Hello!";
    }
}

 

- 부팅 후 localhost:3333으로 접근하자 Hello!라는 텍스트를 반환합니다.

4) Member 객체 모델 정의

 

- 이제 본격적인 코드 작성을 위해 객체 모델을 작성합니다.

- model 패키지를 만들고 안에 Member 클래스를 생성합니다.

- 여러가지 데이터 타입을 사용해보기 위해 다양한 속성을 지정했습니다.

#Lombok #@Data #@AllArgsConstuctor

- 코드

@Data
@AllArgsConstructor
public class Member {
    private long id;
    private String name;
    private int age;
    private String address;
    private Date createdAt;
}

 

5) Member 컨트롤러 작성 및 테스트

- Member 컨트롤러를 작성합니다.

- TestController와 달리 RequestMapping 어노테이션이 클래스 자체에 지정되었습니다.

- 테스트 api를 작성해서 객체를 잘 반환하는지 테스트합니다.

#@GetMapping

- 코드

    @GetMapping("/test")
    public Member memberTest(){
        return new Member(0L, "Wickies", 20, "제주", new Date());
    }

 

- 웹 브라우저에서 localhost:3333/member/test에 접근합니다.

- JSON 형식으로 잘 반환되는걸 확인했습니다.

 

- 리스트 형식으로도 반환이 잘 되는지 테스트합니다.

- 코드

    @GetMapping("/test2")
    public ArrayList<Member> memberTest2(){
        return new ArrayList(Arrays.asList(
                new Member(1L, "Wickies", 20, "제주", new Date()),
                new Member(2L, "마동석", 40, "전주", new Date()),
                new Member(3L, "조승우", 22, "무주", new Date()),
                new Member(4L, "박보영", 32, "진주", new Date()),
                new Member(5L, "엄복동", 17, "상주", new Date())
        ));
    }

 

- 리스트 형식도 잘 반환이 되는걸 확인했습니다.

 

1장은 여기까지입니다.

의도하지는 않았지만 문체가 번역체 같네요.

 

2장부터는 데이터베이스를 다뤄보겠습니다.