[Spring] 스프링 부트 첫걸음 1
: Android앱 REST API 서버 만들기 1 (GET요청, @PathVariable)
** 해당 글은 하단 참고란의 영상을 보고 따라서 공부하며 기록한 글입니다.
IDE 준비
- Eclipse : 나는 설치되어있음
- STS : Sping.io 사이트에서 Projects > Spring Tools 4 다운받아 설치(https://spring.io/tools)
** jar파일로 설치해 본 적이 없어서 당황.. jar파일은 그냥 더블클릭하면 압축이 풀린다. 이 블로그 참고해서 설치 진행 https://gxnzi.tistory.com/99
프로젝트 생성
설치 후 자동으로 실행됨
혹시 실행된 창을 꺼버렸다면 방금 설치할 때 눌렀던 SpringToolSuite4.exe 를 다시 누른다.(처음엔 이런 요상한 부분에서 막히고 그러더라)
- 창에서 workspace를 생성할 경로+\+워크스페이스이름을 입력하고 Launch 클릭.
- File > New > Spring Starter Project 로 새 프로젝트 생성
Spring Starter Project 는 우리가 몇가지 설정만 해주면
설정에 맞는 기본 프로젝트 템플릿을 생성해서 다운받아주는 서비스다.
간단하게 이름만 설정하고(나는 demo로 함) next
필요한 dependency를 체크해줄건데
우리는 api 서버를 만들 거니까 Web > Spring Web 에만 체크해주면 충분하다.
(html 을 응답하는 web서버가 아니라 앱 서버로만 쓸 건데 나한테도 필요한건가?일단 ㄱ)
잠시 후 다운로드 끝
- 프로젝트 위에 우클릭 > Run as > Spring Boot App 을 눌러 실행해본다.
**해당 메뉴가 없으면 프로젝트 내부의 src/main/java 안의 패키지 안에 있는 .java파일에서 우클릭한다.
잘 돌아가면 콘솔창이 뜨고
거기 로그를 잘 읽어보면 톰캣서버가 도는 중일거고
Tomcat initialized with port(s): 8080 (http)
이런 식으로 포트 번호도 나온다.
크롬 브라우저 등에서 http://localhost:8080 이렇게 포트번호를 붙여서 이 서버에 접속할 수 있는데
지금은 아무것도 안 만들었으니까 오류페이지만 나온다.
콘솔 창에 빨간 네모를 누르면 실행이 종료된다.
api를 만들어보자~!
api 서버 코드 작성하기 - GET
Model클래스 만들기
- src/main/java > com.examples.demo(프젝명임) 안에 model 패키지를 만들자.
데이터를 담을 java파일들을 만들 것이므로
패키지명을 model로 하겠다.
com.examples.demo 우클릭 > New > Package > Name 에 com.example.demo 라고 되어있는데
이 뒤에 .model 을 붙여서 com.example.demo.model 패키지를 만든다.
- 해당 패키지 안에 UserProfile이란 클래스를 하나 만든다.
New > Class > Name에 UserProfile라 하고 Finish
- 이 클래스에 private 변수 4개를 만들고 초기화내용(생성자)과 Getter, Setter를 만든다.
id, name, phone, address 모두 String 이다.
그리고 필드(변수) 초기화 코드(생성자)를 자동으로 추가해주는 기능을 사용하자.
우클릭 > Source > Generate Constructor using Fields > 변수 전부 체크하고 Generate
Getter와 Setter 들도 생성하자
Source > Generate Getters and Setters > 변수 전부 체크하고 Generate
추가 후 코드 모습
UserProfile.java
package com.example.demo.model;
public class UserProfile {
private String id;
private String name;
private String phone;
private String address;
public UserProfile(String id, String name, String phone, String address) {
super();
this.id = id;
this.name = name;
this.phone = phone;
this.address = address;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
Controller 만들기
클라이언트의 요청을 처리하는 부분을 Controller라 함
- model과 동일한 위치에 controller 패키지 생성하고 그 안에 UserProfileController 라는 클래스 만듦
클래스에 어노테이션을 달자.
- @RestController
이러면 Spring Framework가 이 클래스를 인식해서 알아서 인스턴스 생성해서 컨트롤러로 사용함.
(빨간 줄이 뜨면 RestController를 import 해주면 된다.)
**이클립스 import 단축키는 Ctrl + Shift + O
요청에 따른 api처리
클라리언트로부터 사용자 id를 인자로 받아서
해당 사용자의 정보를 json으로 응답하는 내용을 만들어보자
- UserProfileController 클래스 안에 @PostConstruct 어노테이션을 단 init()함수를 작성한다.
PostConstruct 는 RestController클래스의 인스턴스 생성 후 제일 먼저 실행되는 부분.
초기화 내용이 들어감.
우리는 아직 DB가 없으므로 임시로 사용할 데이터인 Map을 클래스 안에 만들고 init()메서드에서 값을 넣어놓자.
- @GetMapping 어노테이션을 단 api함수인 getUserProfile()함수를 작성한다.
어노테이션의 인수로는 파라미터를 포함한 요청 경로를 문자열로 넣는다.
이 경로로 요청이 들어올 시 getUserProfile라는 api함수를 실행한다.
getUserProfile()함수는 파라미터로 받은 id값을 이용해 UserProfile데이터를 반환한다.
UserProfile를 반환하도록 해놓기만 해도 응답 시 스프링이 json형태로 응답을 보내준다.
여기까지 코드
UserProfileController.java
package com.example.demo.controller;
import java.util.HashMap;
import java.util.Map;
import javax.annotation.PostConstruct;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import com.example.demo.model.UserProfile;
@RestController
public class UserProfileController {
private Map<String, UserProfile> userMap;
@PostConstruct
public void init() {
userMap = new HashMap<String, UserProfile>();
userMap.put("1", new UserProfile("1", "홍길동", "111-1111", "서울시 강남구 대치1동"));
userMap.put("2", new UserProfile("2", "홍길지", "111-1112", "서울시 강남구 대치2동"));
userMap.put("3", new UserProfile("3", "홍길순", "111-1113", "서울시 강남구 대치3동"));
}
@GetMapping("/user/{id}") //이러한 경로로 받음. 파라미터로 id값을 받을 것. //id를 받아 UserProfile을 반환하는 메서드
public UserProfile getUserProfile(@PathVariable("id") String id) {
return userMap.get(id); //id값을 이용해 UserProfile반환
}
}
코드 변경 후에는 서버를 껐다 켜줘야 한다.
서버를 다시 실행하고
크롬 브라우저에서 url을 입력해 잘 실행되는지 확인힌다.
http://localhost:8080/user/1
json을 잘 봔환한다.
굿~
잘되니까 하나 더
- id값 없이 userMap의 모든 데이터를 반환하는 api인 getUserAll() 작성해보자
getUserProfile메서드 바로 밑에 아래 코드를 추가한다.
@GetMapping("/user/all")
public List<UserProfile> getUserProfileList() {
return new ArrayList<UserProfile>(userMap.values()); //values()는 해당 Map의 키값과 밸류값들을 반환하는 메서드. userMap의 키값과 밸류값들을 arrayList로 변환해서 반환
}
잘된다~~
다른 기능도 만들어보자.
http프로토콜 종류
- Get : 데이터 조회
- Post : 데이터 생성
- Put : 데이터 수정
- Delete : 데이터 삭제에 주로 쓴다.
우리는 Get만 만들어봤으니까 다른 것도 만들어보자.
다음 글에 계속 - POST, PUT, DELETE
참고 https://www.youtube.com/watch?v=nrxzK_ky3uc&list=PLvdZg8T1CFZuMZh5PzNUAhDprr0ksjkNp&index=1