[스프링 부트 핵심 가이드] 책을 보며 공부한 내용입니다.
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의 동일한 이름의 변수로 들어간다.
- RequestParam이 받아오는 자료형은 String 외에도 형변환이 가능한 다른 자료형으로 가져올 수 있다.
- Map으로 다 가져올 수도 있는데, 갯수나 형태 제한없이 자유롭게 값을 가져올 수 있다. (어떤 값이 들어올지 특정하기 어려울 때)
- 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 - 로깅 라이브러리
: 시스템 상태 및 동작 정보를 시간 순으로 기록하는 '로깅'을 하는 프레임워크
- 문제 발생 시 원인 분석을 위해 사용할 수 있다.
'공부 > 백엔드' 카테고리의 다른 글
| [스프링 부트 핵심 가이드] 8 : Spring Data Jpa (0) | 2024.05.19 |
|---|---|
| [스프링 부트 핵심 가이드] 6 : 스프링 데이터베이스 연동 (0) | 2024.05.10 |
| [스프링 부트 핵심 가이드] 1~3 : 스프링부트, MVC, 디자인패턴 (0) | 2024.04.25 |
| Backend 개발자 커리어 로드맵 (어떤 백엔드 개발자로 성장할까?) (0) | 2024.02.22 |
| [ObjectMapper] json String -> List<Map> 변환 (0) | 2023.11.07 |