본문 바로가기
공부/springboot

45일차 복습

by 샤샤샤샤 2023. 1. 17.

스프링부트 복습.

 

집에서 복습하고 티스토리에 정리까지할 시간이 도저히 나지 않아서 먼저 복습부터 했다.

이번 설 연휴에 한번 티스토리를 정리하면서 대대적인 개편을 해봐야겠다.

 

기존의 스프링에서 사용자 편의성을 크게 증가시킨것이 스프링 부트다.따라서 기능적인 차이는 크게 없으나, 스프링 부트를 사용하는 것이 훨씬 편하다.

스프링은 자바에서 서버를 구동하고 코드를 실행하기 위한 프레임 워크다. 자바로 돌아가는 서버와 구동코드라고 생각하면 된다.

 

시작

https://start.spring.io/

위 사이트에서 손쉽게 스프링부트 시작 셋팅을 할 수있다.

 

1. Maven vs  Gradle

필요한 라이브러리를 가져오고, 빌드를 관리하는 툴이다. 과거에는 Maven이 주류였으나, 이제는 Gradle가 대세가 되었다.

 

2. 버전 선택.

SnapChat이 적혀져있으면 개발중인 버전이다. 그냥 완성된 버전 가져다 쓰면 된다.

 

3. Group

보통은 기업 도메인 같은 것을 적지만, 개인은 어떻게 해도 상관없다.

 

4. Artifact, Name

만드는 스프링부트의 이름. 프로젝트 이름같은 것.

 

5. Description

설명

 

6. package name

자바 패키지 이름.

 

7. Dependency

필요한 라이브러리를 선택한다. html을 구현시키는 템플릿 엔진인 thymleaf를 보통 많이 사용한다. 또한 web를 만드는 것이 목적이니 spring web역시 필요하다. 그 외에도 lombok과 같이 다양한 기능을 제공하는 라이브러리가 많으니, 필요한 라이브러리를 가져오면 된다.

 

파일과 폴더들에 대한 설명

 

main과 test폴더

main은 서버를 구동하고 코드를 적기위한 공간이며, test는 서버를 구동시키기 전, 코드가 옳바르게 작동하는지 시험해보기 위한 공간이다. 과거에는 test가 내장되어 있지 않았으나, 중요도가 올라감에 따라 내장되게 바뀌었다.

 

build.gradle

과거 스프링을 사용할 적엔 모든 설정을 하나하나 적어야 했으나, 스프링부트가 나오면서 코드도 짧아지고 알아서 작성되게 되었다. 

 

plugin

깊게 파고들 단계가 아니다. 그냥 버젼과 라이브러리를 당겨온다는 수준으로만 알고 있자.

 

dependencies

가져온 dependencies를 표시한다.

junit5 라이브러리가 내장되어 있어서 가져오지 않은 라이브러리도 일부 표시가 된다. 

섣불리 코드 위치를 바꾸거나, Implementation 코드를 내리거나 하면 구동을 안할수도 있기에 건들이지 말자.

 

repositories

dependencies에서 설정된 라이브러리들을 어디서 가져올것이지 설정한다.

예를들어 mavenCenter()로 되어있으면, mavenCenter이라는 공개된 사이트에서 라이브러리를 가져온다.

 

gitignore

git에는 필요한 소스코드 파일만 올라가야 하기 때문에 몇몇 파일들은 올라가지 않도록 설정을 해줘야 한다. 스프링부트는 알아서 무시할 파일을 미리 설정해주기 때문에 아주 편하다.

 

gradlew

gradle.bat

gradle빌드 파일. 아직은 건들이지 말자

 

외부라이브러리

dependencies를 비롯한 스프링에서 자동적으로 가져온 라이브러리를 모두 보여준다.

 

main파일

main파일안에 기본적으로 파일이 하나 만들어져 있을 것이다. 모든 코드가 main메서드에서 시작하는 자바의 특성답게, 앞으로 만들 코드들을 구동시키는 가장 기본적인 밑바탕이 되는 서버를 구동시키기 위한 파일이다.

코드를 실행시키면 아래와 같은 문구가 콘솔창에 뜰 것이다.

 

여기서 Tomcat이 HTTP서버를 내장하고 있어 코드를 돌릴수 있다.

인터넷을 켜서 다음과 같이 URL창에 쳐보자.

localhost:8080

기본적으로 자바의 tomcat이 사용하는 포트는 8080이다.

이런 창이 뜨면 성공적으로 서버가 구동하고 있는 것이다. 서버가 돌지 않으면 서버를 찾을수 없다는 브라우저의 자체 경고 문구가 뜬다.

 

MVC

Model

View

Controller

이 세가지를 의미한다.

모델은 데이터 베이스와 소통하며 데이터를 관리한다. 컨트롤러에게 데이터를 전달하며, 뷰와는 소통하지 않는다.

뷰는 유저가 보는 화면이다. 컨트롤러와만 소통하며, 액션과 데이터를 주고 받는다.

컨트롤러는 뷰로부터 인풋값을 받으며, 모델에게 받은 데이터를 가공해 뷰에게 넘겨주기도 하고, 뷰로부터 받은 데이터를 가공해 모델에게 전달하기도 한다.

웹 설계의 기본적인 방침이다.

 

컨트롤러 만들기

 src - main - java - 그룹명 아래 폴더에 새로운 파일(폴더를 새로 만들고 그안에 만들어도 괜찮음)을 만들고, 해당 클래스 위에 @Controller라는 어노테이션을 붙여 컨트롤러임을 명시하면 된다.

이어서 함수를 하나 만들어 서버가 구동하면 실행되길 원하는 코드를 함수 안에 적고, @GetMapping("/요청")형식의 어노테이션을 함수 위에 명시하자. 그러면 해당 URL창에 해당 요청을 하면 코드가 실행된다.

```java
package com.study.springboot;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.ResponseBody;

// @Controller : HTTP Request를 처리하는 클래스라는 의미
@Controller
public class MainController {
    // @GetMapping : HTTP Get요청을 받는 경로는 지정.(Route)
    // @ResponseBody : HTTP 응답으로 순수한 문자열로 반환한다는 의미
    // 요청 URL : localhost:8080/
    @GetMapping("/") // 현재 상태를 의미. 즉, 어떠한 요청도 하지 않은 창일때 코드가 실행됨.
    @ResponseBody
    public String main(){
        return "Hello Springboot~!!";
    }
}
```

@Controller : 컨트롤러 클래스로 지정한다.

@GetMapping : HTTP Get 요청을 받는 경로를 지정.

                          만약 @GetMapping("/mom")과 같이 지정했다면

localhost:8080/mom

                          이라는 요청을 웹 브라우저에 보냈을때, 브라우저가 구동되고 있는 서버와 연동되어 미리 적어둔 함수가                              작동한다.

@ResponseBody : return값을 문자열 형태로 요청을 수행한 웹 브라우저 body태그 안에 넣는다.

 

test파일

test를 실행하기 위한 파일이다.

인텔리제이의 경우, 코드 내에서 마우스 우클릭 => 생성 => 테스트를 누르면 만들수 있다. alt + insert 단축키로도 가능하다. 테스트하길 원하는 함수만 선택해서 만들수 있으며, 자동적으로 test파일 내에 똑같은 코드의 파일이 만들어진다.

@Test 어노테이션이 붙어서 테스트 파일임을 명시해준다.

옆의 화살표를 눌러 원하는 코드만 실행해볼수도 있으며, 정상적으로 작동하면 '테스트 통과'라는 문구가 뜬다.

package com.study.springboot;

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.springframework.test.web.servlet.MockMvc;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

@ExtendWith(SpringExtension.class)
@WebMvcTest(controllers = MainController.class)
class MainControllerTest {
    //@Autowired : 자동객체생성
    //MockMvc : 가상으로 HTTP 요청을 보내주는 객체
    @Autowired
    private MockMvc mockMvc;

    //@Test : 테스트 케이스 메서드임을 알려줌.
    //      : 단독실행이 가능함.
    @Test
    void main() throws Exception{
        String hello = "Hello Springboot~!!";
        mockMvc.perform(get("/"))
                .andExpect(status().isOk())
                .andExpect(content().string(hello));
    }
}

이와 같이도 쓸수 있다. 이에 대해서는 좀더 알아보고 쓰겠다.

'공부 > springboot' 카테고리의 다른 글

MVC -- Model(2) : 데이터 받아오기  (0) 2023.01.25
데이터의 전송 타입( Get/ Post)  (0) 2023.01.25
MVC -- Model(1): 데이터 전송하기  (0) 2023.01.25
타임리프 레이아웃  (0) 2023.01.25
46일차 복습  (1) 2023.01.19