본문 바로가기

공부/백엔드

[스프링 부트 핵심 가이드] 4-5 : 스프링부트 APP 개발, API 개발

반응형

[스프링 부트 핵심 가이드] 책을 보며 공부한 내용입니다.

1. 스프링부트 어플리케이션 개발

스프링부트 프로젝트를 생성하는 방법

 

1. IntelliJ Spring initializr

 

: IntelliJ Ultimate 에서 제공하는 Spring initializr를 이용해서 생성한다.

 

Type (빌드 관리 도구)

- Gradle(build.gradle로 의존 관리)

- Maven(pom.xml로 의존 관리)

 

Group+Artifact = Package name

 

Packaging

- jar(java application)

- war(java web application) 아카이브

 

 

2. https://start.spring.io/ 사이트 이용

 

EXPLORE - 프로젝트 파일 미리보기

GENERATE - 프로젝트 파일 다운로드

-> 다운받은 파일을 IDEA에서 열기

 

 

빌드관리도구

 

빌드 관리 도구: JVM, WAS가 프로젝트를 인식하고 실행할 수 있게 프로젝트 파일을 빌드하는 도구.

  • 프로젝트 관리: 프로젝트 버전 / 아티팩트 관리
  • 빌드 및 패키징: 의존성 관리, 패키지 형식으로 빌드
  • 테스트: 빌드 전, 단위 테스트로 코드 확인
  • 배포: 빌드가 완료된 패키지를 원격 저장소에 배포

 

메이븐 생명주기 (https://maven.apache.org/)

 

기본 생명주기 : validate - compile - test - package - verify - install - deploy

클린 생명주기 : clean(이전 빌드 파일 제거)

사이트 생명주기 : site(설정 파일 기반 문서 사이트 생성) - site-deploy (사이트 서버 배포)

 

- validate: 빌드 사용 가능 여부 검토, complie: 컴파일, test: 단위 테스트

- package: 컴파일한 코드를 jar 등으로 패키징,  verify: 패키지 유효성 확인

- install: 패키지 로컬 설치, deploy: 원격 저장소로 패키지 복사

 

 

Gradle 생명주기 (https://docs.gradle.org/current/userguide/build_lifecycle.html)

 

Initialization : setting.gradle 감지

Configuration : build.gradle 평가, 작업에 대한 작업 그래프 생성

Execution : 작업 실행

 

 


2. API 작성

API Test

1. url 창에 입력 - Get만 가능, 자세한 요청/응답은 개발자 도구(f12) - Network에서 확인

 

2. API 테스트 도구 - Talend API (구글크롬 확장프로그램), Postman 등

 

3. IntelliJ http 파일 - .http 파일

 

HTTP Method

: 자원에 대한 행위를 표현하는 메서드

 

 - Controller에서 HTTP Method 작성

1. @RequestMapping(method=RequestMethod.GET/POST/PUT/DELETE)

2. @GetMapping, @PostMapping, @PutMapping, @DeleteMapping

 

- URI와 URL의 차이

URL: 웹 주소로 어느 서버에 위치해있는지 나타낸다. (기본 주소)

URI: 서버에서 특정 리소스가 어디에 위치해있는지 나타낸다.

-> URI은 URL+위치(https, parameter 등 포함)

 

 

1. GET (@GetMapping)

: 서버에서 값을 가져오는 api

 

데이터 전송

: 주로 GET에서는 url에 값을 넣어 보낸다.

 

1. PathVariable

: url path에 값을 포함해 전달

@GetMapping("/path/{var}")
public String getVariable(@PathVariable String var) {
	return var;
}

 

-> /path/123 을 입력하면 var 변수에 "123"이 저장된다.

  • {var}와 매개변수 var의 이름이 같으면 생략 가능하고, 아니면 @PathVariable("var")으로 무엇을 가리키는지 명시 (IntelliJ로 빌드하는 경우, 컴파일 옵션에 -parameters 를 주어야 생략 가능)
  • 여러개도 가능하다. -> /{var1}/{var2}
  • 사용: 데이터를 id(숫자 형태)로 불러오거나 삭제하거나 할 때 사용할 수 있다.

 

2. RequestParam

: url 뒤에 쿼리 형식으로 값을 전달하는 방식으로 검색 조건(page, keyword) 등을 넣을 때 주로 사용한다.

@GetMappint("/path1")
public void getParam(@RequestParam String name, @RequestParam int age) {
	// code
}

@GetMappint("/path2")
public void getParamMap(@RequestParam Map<String, String> paramMap) {
	paramMap.entrySet().forEach(map-> {
    	System.out.println(map.getKey() + " " + map.getValue());
    }
}

@GetMappint("/path3")
public void getParamByDTO(MemberDto memberDto) {
	// memberDto.get..
}

-> /path?name=myname&age=25 (?key=value  형태)로 입력하면 RequestParam의 동일한 이름의 변수로 들어간다.

  1. RequestParam이 받아오는 자료형은 String 외에도 형변환이 가능한 다른 자료형으로 가져올 수 있다.
  2. Map으로 다 가져올 수도 있는데, 갯수나 형태 제한없이 자유롭게 값을 가져올 수 있다. (어떤 값이 들어올지 특정하기 어려울 때)
  3. Dto로 받아서 파라미터 값을 변수로 갖는 객체로 가져올 수 있다.

 

2. POST (@PostMapping)

: DB에 리소스를 저장할 때 사용하는 api

 

데이터 전송

: 주로 POST에서는 HTTP의 body에 데이터를 담아 전송한다.

@PostMapping("/path")
public String postWithBody(@RequestBody Map<String, Object> bodyMap) {
	// code
}

-> RequestBody는 body에 담은 데이터(주로 json 형태)를 가져온다.

  • json 형태: { "key": "value", "listKey": [{ }, { }..] }
  • 가져올 수 있는 값은 RequestParam과 마찬가지로 Map, Dto, 기본 자료형 등이 있다.

 

3. PUT (@PutMapping)

: DB에 리소스를 업데이트할 때 사용하는 api

 

 

4. DELETE (@DeleteMapping)

: DB에 리소스를 삭제할 때 사용하는 api

 

 

데이터 응답

: RestController, ResponseBody에서는 리턴하는 것을 그대로 body에 응답한다. (<-> View 리턴)

  • String은 문자열 그대로 (contentType : text/plain) 리턴된다.
  • DTO, Map은 Json 형태 (application/json) 로 리턴할 수 있다.
  • ResponseEntity : header(HttpsHeaders)와 body를 리턴할 수 있다. HttpEntity를 상속 받음
    • status : HttpStatus - ACCEPT(202), BAD_REQUEST(404), FORBIDDEN(405) 등
    • body : ResponseEntity<T>에서 T 데이터를 리턴

 


 

Swagger - API 명세 문서화

: API가 어떤 요청을 받아 처리를 하고 응답을 주는지 작성한 문서

의존성: springfox-swagger2, springfox-swagger-ui

 

 

Logback - 로깅 라이브러리

: 시스템 상태 및 동작 정보를 시간 순으로 기록하는 '로깅'을 하는 프레임워크

- 문제 발생 시 원인 분석을 위해 사용할 수 있다.

반응형