[Spring Boot 스터디] 3회차

minhyeok·2023년 3월 13일
0
post-thumbnail

참고 링크 : API란?
참고 링크 : RESTful 웹 API 디자인
참고 링크 : HTTP API vs REST API
참고 링크 : 작업 마무리하지 못할 때

학습 내용

SpringBoot 프로젝트 생성하기

New Project 를 통해 SpringBoot 프로젝트를 생성해본다. 얼티밋 버전에서는 Spring initiallzr 가 내장되어 있는 지 몰랐다. 조건에 맞게 설정해준다.

스프링 버전 지정에 주의하며 필요한 의존성 중에서 Spring Web 을 추가한다.

프로젝트를 실행시켜본다. 열린 port 번호를 확인하고 들어가 본다.

위와 같은 페이지가 뜨면 성공.

간단한 테스트용 API를 만들어보자. api/test 라는 path에 들어가면 hello를 출력하도록 하는 class를 작성한다.

어노테이션(Annotation)

어노테이션은 원래 자바에서 사용되는 기능으로 “주석”이라는 의미를 갖고 있다.
주석은 주석인데, 기능이 있는 주석이라고 할 수 있다.

자주 사용되는 어노테이션 예시

  • @Override : 선언한 메서드가 오버리아드 되었다는 것을 나타낸다. 만약 부모 클래스 또는 인터페이스에서 해당 메서드를 찾을 수 없다면 컴파일 에러를 발생시킴
  • @Deprecated : 해당 메소드가 더 이상 사용되지 않음을 나타낸다. 만약 @Deprecated 어노테이션이 위에 붙은 메소드를 사용할 경우 컴파일 에러를 발생시킴

어노테이션의 종류

  • 표준(내장) 어노테이션 : 자바가 기본적으로 제공해주는 어노테이션
  • 메타 어노테이션 : 어노테이션을 위한 어노테이션
  • 사용자정의 어노테이션 : 사용자가 직접 정의하는 어노테이션

어노테이션의 용도

  1. 컴파일러에게 코드 작성 문법 에러를 체크하도록 정보를 제공
  2. 소프트웨어 개발툴이 빌드나 배치시 코드를 자동으로 생성할 수 있도록 정보 제공
  3. 실행시(런타임시)특정 기능을 실행하도록 정보를 제공

참고 링크 : 어노테이션 - 총정리
참고 링크 : 어노테이션이란?

Controller / RestController

Controller

컨트롤러 클래스는 api 요청을 경로에 따라 매핑해주는 클래스이다. 이 클래스는RequestMapping 어노테이션이 붙어있는 메소드들을 포함한다. 컨트롤러 클래스의 역할은 api를 사용자의 요청을 분류하는 것 까지이다.

@Controller / @RestController 는 거의 같다고 보면 될것 같다. 요즘은 @RestController가 더 많이 쓰인다고 한다.
GetMapping은 GET 메소드에만 적용하는 RequestMapping이다.

RequestMapping

@RequestMapping은 api 주소들을 맞는 함수로 이어주는 역할을 한다. 아래 코드는 “api/test”로 요청이 들어오면 test()함수를 실행해! 라는 의미이다.

요청의 경로에 맞게 실행해야 하는 함수를 이어 주는 것이다.

@RequestMapping("api/test")
public String test() {
    return "test";
}

즉 Controller와 RequestMapping는 “/abc/def 경로로 가줘!” 하고 요청이 들어오면 그 경로에 맞게 어디로 갈지 길을 찾아 연결시켜주는 역할을 한다.

JAR 빌드

프로젝트 위치로 가서 gradlew build를 실행하면 빌드가 진행된다. 윈도우에서 진행해서 .\ 이다. 리눅스에서는 ./

build/libs 로 이동하여 jar 파일을 확인한다.
java -jar [jar파일명].jar 을 통해 빌드한다.

인텔리제이에서 실행하지 않아도 웹페이지가 동일하게 동작하는 것을 확인할 수 있다.
빌드 종료는 ctrl + C 를 눌러서 종료한다.

./gradlew clean 를 사용하면 build 폴더가 삭제되는 것을 확인할 수 있다.
다시 빌드하려면 gradlew clean build를 사용하면 된다.

3회차 미션

문자열 리턴하는 GET api 생성하기

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

@RestController
public class TestController {
    @GetMapping("name")
    public String test(){
        return "송민혁";
    }
}

간단하게 localhost:8080/name 을 방문하였을 때 내 이름을 호출하는 api를 작성해보았다.
어노테이션을 이용해, RestController 와 GetMapping 을 활용하였다.

query parameter로 입력받은 값을 리턴하는 GET api 생성하기

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {
    @GetMapping("test")
    public String test(@RequestParam("name") String name){
        return "hello " + name;
    }
}

위와 같이 localhost:8080/test?name=송민혁 을 입력하여, 쿼리 파라미터로 name 이라는 값에 name=송민혁 을 입력하였더니 입력받은 값이 리턴되는 API를 작성해보았다. test라는 path 이후로 쿼리 파라미터를 입력하였다.

lombok 의존성 추가하고 로그 찍어보기

lombok 의존성 추가하는 방법은 다른 글에 작성해 놓았다. 이 글을 참고하자.

기존의 클래스를 활용한 방법으로는
private static final Logger log = LoggerFactory.getLogger(Slf4jSample.class);
을 사용해 로그를 찍는 방법이 있다.

@Slf4j 어노테이션을 사용하는 방식에 대해서 봐보자.

@Slf4j
@RestController
public class TestController {
    @GetMapping("test")
    public String test(@RequestParam("name") String name){
        log.info("---------- Log 테스트 ---------");
        return "hello " + name;
    }
}

동일하게 로그가 찍히며 특징이라면 자동으로 log 변수를 선언하여 준 것을 볼 수 있다.
어노테이션이 편한 모습을 확인할 수 있다.
그러나 여기서 @Slf4j 선언하여 사용할 경우 변수명이 log로 고정된다는 점이 있다.

정리

  • 배운내용, 깨달은 점
    어노테이션과 Controller, GetMapping 과 같은 개념을 알게 되었다. 이번 학습에서는 오류가 난 부분과 헤맸던 부분 정리에 신경을 많이 써보았다.

  • 어려웠던 점, 반성하고 싶은 점 / 개선할 방법
    이번 스터디는 어려운 점이 없었다!

  • 궁금한 점
    이번 스터디엔 없습니다! 감사합니다~

0개의 댓글