[Spring Boot] 프로젝트 시작하기

늦잠·2024년 4월 17일
0

간단하게 처음부터 스프링부트 프로젝트를 만들어보고 테스트 해보되,

평소에 별 생각없이 사용했거나 살짝 헷갈리는 부분을 더 세세하게 정리해보았다.

인텔리제이의 Spring Initializr로 프로젝트 시작.


언어는 Java.


Type 옵션에선 사용할 빌드 도구를 선택한다.

빌드 도구란 소스 코드를 실행 가능한 어플리케이션으로 만들어주는 작업을 자동화 시켜주는 도구이다.

Maven vs Gradle

  • 2004년 출시 vs 2012년 출시
  • xml 기반 vs groovy or kotlyn 기반
  • 성능면에선 여러 면에서 gradle이 우수.

같은 차이점이 있음. 오래된 프로젝트가 아니면 gradle을 쓰는 추세이고,

gradle Kotlin vs gradle Groovy

  • kotlin은 ide에서 자동완성이나 오류밑줄 표시 등을 지원
  • kotlin은 자바 8이상부터 지원.
  • 조건에 따라 다르지만 느린 편 vs 빠른 편

의 차이가 있다. 점점 kotlin이 조금씩 대세가 되어가는 중이지만 이전 프로젝트는 대부분 groovy기반 이었기 때문에 kotlin을 쓰는건 다음으로.


jdk, java 버전은 설치되어 있는 버전으로 하였다.


사용한 dependency는 다음과 같다.
(db연결은 나중에 테스트 해보려 하므로 여기에서 Srping Data JPA, MySQL Driver, Spring Data MongoDB는 일단 제외.)

  • Spring Boot DevTools :
    Spring Boot Application을 개발하는 데 도움이 되는 다양한 도구들.
    • Property Defaults : 캐싱 관련 기능은 배포 시 성능 향상에 도움이 되지만 개발 단계에선 문제 덩어리임. 개발 단계에선 이를 자동으로 비활성해 주는 기능...인듯? (잘 모르겠음)
    • Automatic Restart : 서버의 내용이 수정되면 자동으로 서버 재시작해줌.
    • LiveReload : 리소스가 변경되면 LiveReload라는 내장 서버가 자동으로 브라우저를 새로고침 함.
    • Remote Debug Tunneling
    • Remote Update and Restart
  • Lombok :
    개발에 도움이 되는 다양한 어노테이션을 제공함.
    ex)@Getter, @Data, @Builder
  • Spring Web:
    Spring Boot 애플리케이션을 만드는 데 필수적인 여러 모듈이 포함되어 있음. Embedded 톰캣을 포함하고 있음.

아파치(Apache) : 가장 많이 쓰이는 웹 서버 중 하나.
톰캣(Tomcat) : 아파치 재단에서 만든 웹 어플리케이션 서버(WAS). 자바 서블릿을 실행시키고, JSP가 포함되어 있는 웹페이지를 만듬.

웹 서버는 클라이언트의 요청을 받아 처리한다. 정적인 컨텐츠(html, css, js)는 직접 처리하고, 동적인 컨텐츠는 WAS에게 넘겨준다. 사실 WAS는 웹 서버의 역할도 할 수 있으나 그 부담을 줄이고 WAS가 클라이언트에게 직접 노출되는 것을 막기 위해 웹 서버와 WAS를 같이 사용한다.

  • Spring Data JPA :
    JPA(Java Persistence API)는 자바 진영에서 ORM(Object-Relational Mapping) 기술 표준으로 사용되는 인터페이스 모음이다. 어플리케이션 쪽 객체와 DB의 데이터를 매핑해주는, 연결시켜주는 친구. JPA는 어디까지나 인터페이스이기 때문에 구현해줄 Hibernate 등이 필요하다.

MySQL Driver나 Spring Data MongoDB는 db와 연결할 때 필요한 드라이버들.

Dependency 쪽은 여러 곳을 참고했으나 특히 여기를 많이 참고 : https://appleg1226.tistory.com/11


@RestController
@RequestMapping("api/v1/simple")
public class SimpleController {

    @Autowired
    SimpleService simpleService;

    @GetMapping("/hellow/{hellow}")
    public ResponseEntity<String> answerMePlease(@PathVariable String hellow){
        String answer = simpleService.answerMePlease(hellow);

        if(answer == null || answer.length() == 0){
            return ResponseEntity.status(400).body("something woring");
        }
        return ResponseEntity.status(200).body(answer);
    }
}

간단하게 만든 Controller. Request나 Response가 복잡하면 따로 이를 위한 클래스를 만들어 주는 것이 좋으나 지금은 간단하게 하는 것이니 생략.

간단하게 문자열 받아서 HI를 덧붙여서 되돌려주는 API.

@RestController vs @Controller:

  • Controller는 주로 View를 반환하기 위해 사용. Data를 반환하기 위해선 메서드에 @ResponseBody를 붙인다.
  • RestController는 자동으로 @ResponseBody가 붙음. 즉 주로 Data를 반환하기 위해 사용.

@PathVariable vs @RequestParam
둘다 주소값에 붙어서 전달되는 변수를 받아오기 위해 사용.

  • @PathVariable의 경우
    • "/경로1/경로2/{PathVariable1}/{PathVariable2}" 의 형태.
    • 경로 하나에(슬래시 하나에) 하나만.
  • @RequestParam의 경우
    • "/경로1/경로2?RequestParam1=값1&RequestParam2=값2" 의 형태
  • 공통적으로
    • 여러개일 경우 Map으로 받아올 수 있음.
    • 변수 이름과 같으면 자동으로 바인딩. 이름이 같지 않아도 바인딩 될 변수 이름을 명시하는 방법도 가능.
    • required 옵션을 true로 하면 필수.

@Service
public class SimpleService {

    public String answerMePlease(String hellow){
        return hellow + "-> HI!";
    }
}

간단하게 Service도 만들어서 실제 로직 구현.

어노테이션 관련 참고 : https://velog.io/@rara_kim/Spring-%EC%96%B4%EB%85%B8%ED%85%8C%EC%9D%B4%EC%85%98Annotation


implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0'

테스트를 위해 Swagger를 사용하기로 했다.
Swagger를 사용하기 위해 필요한 Dependency를 추가하고

@Configuration
public class SwaggerConfig {
    @Bean
    public OpenAPI openAPI() {
        return new OpenAPI()
                .components(new Components())
                .info(apiInfo());
    }

    private Info apiInfo() {
        return new Info()
                .title("API Test") // API의 제목
                .description("Let's practice Swagger UI") // API에 대한 설명
                .version("1.0.0"); // API의 버전
    }
}

@Configuration으로 설정 클래스를 만들었다.

Swagger 세팅 출처 :
https://velog.io/@gmlstjq123/SpringBoot-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%EC%97%90-Swagger-UI-%EC%A0%81%EC%9A%A9%ED%95%98%EA%B8%B0


어플리케이션을 실행하고

http://localhost:8080/swagger-ui/index.html 에 접속하면

테스트 해 볼 수 있는 Swagger 페이지를 확인할 수 있다.

스크린샷을 찍는 걸 잊었지만 원하는 대로 입력한 문자열에 HI를 덧붙인 문자열이 반환된다.


빌드도구/Dependency/어노테이션... 뭔가 자꾸 덧붙여서 적다보니 글이 지저분하다. 그렇다고 하나하나 떼서 따로 다른 글에 정리해서 쓰는건 어렵다. 다른 것보다 글 쓰는 연습부터 해야될 듯. 이 글도 나중에 다시 정리해야겠다.

profile
피카

0개의 댓글