스프링수업 1일차

한 일

  • JDK 설치/확인
  • STS설치
  • RestContoller 사용하기
  • @GetMapping
  • @PostMapping
  • json으로 리턴하기

스프링 부트를 사용하여 수업할 예정.


JDK 설치/확인

cmd에 java --version 검색해서 자바 설치버전 확인. 설치가 되어있으면 관계없음.

jdk11버전 다운로드 후 jdk폴더에 압축파일 풀기


환경변수 확인. 등록되어있다면 교체할 필요는 없음.
수업은 jdk 11.0.2버전으로 진행.
(단, 아래에서 STS설치 후 JRE설정시 등로된 경로를 지정해줘야 하니 주의.)


없을경우 위 사진을 참고해 경로를 지정하고 설정해줌.

  • 파일경로
    c드라이브 > Spring > IDE (STS가 위치함) / JDK (JDK파일이 위치함) 로 구분


STS 설치

공식 스프링 홈페이지

STS(Spring Tools) 다운로드


git bash로 현재폴더 열기 > java -jar s + teb키로 문장을 자동완성시켜 실행 > 압축풀기

혹은 cmd > 파일경로 > java -jar s + teb키로 문장을 자동완성시켜 실행 > 압축풀기


실행

JRE11 설정

자바실행파일인 JRE도 11버전으로 맞춤

window > preferences > java > installed JREs 에서 Add 버튼 > Standard VM


현재 설정되어있는 JDK경로를 지정해줌


선택된 버전변경 후 확인

한글설정


window > preferences > General > workspace 에서 encoding을 Other(UTF-8) 로 변경.
XML Files도 확인 후 혹시 다른걸로 되어있으면 UTF-8로 변경한다.


@Controller 와 @RestController 차이

모든 요청은 Despatchar Servlet이 받고, controller가 있으면 해당 컨트롤러에 전달함.
Controller는 view를 통해 화면을 표시해줌.
RestController의 경우 화면없이 정보만 받아옴.

의존관계란?

A라이브러리가 B를 사용하고, B라이브러리가 C를 사용하고... 하는 관계를 의존관계라고 칭하며, 스프링부트에서는 대표적인 라이브러리를 dependencies로 가져오면 의존관계의 라이브러리를 자동으로 가져온다.
즉, 일일히 라이브러리를 다운받아 버전을 관리해줄 필요 없음.
확인은 프로젝트 폴더 내 maven Dependences에서 가능.


새 프로젝트 생성
new > spring starter

Group은 주로 회사의 도메인을 역순으로 적는다. 여기서는 com.myapp 으로 기입.


이후 완료하면 필요한 파일을 자동으로 로드하므로 대기.

pom.xml

  • dependencies 태그
    디펜던시 태그 안에서 프로젝트와 의존관계에 있는 라이브러리들을 관리한다.
  • java.version
    자바 버전을 알려줌
  • groupId
    프로젝트를 생성하는 고유의 아이디 결정

pom.xml > spring > Add spring 을 선택하면 new spring starter를 열어 다른 서비스를 추가할 수도 있음.


실행


콘솔의 글자버퍼가 작다는 에러.

설정에서 사진대로 버퍼를 늘려 해결함.


스프링부트 내부에 톰캣서버가 들어있어 자동으로 실행됨.
종료시에도 자동으로 같이 종료됨.


실행시킨 후 url창에 localhost:8080 검색 시 해당 화면이 뜨며, 톰캣은 실행중임.


RestController 사용하기

GetMapping 사용


새 클래스 생성


main패키지를 쓴 후 다음을 작성한다. 폴더구조가 위 사진처럼 되었는지확인.

HelloController

@RestController
public class HelloController {

	@GetMapping("/")
	public String sayHello() {
		return "헬로우";
	}
}


Get매서드를 실행한 것 처럼
다시 검색시 헬로우가 나옴.(/가 생략된 상태. localhost:8080/ 를 검색한 결과임.)


spring-boot-devtools 추가

=> 만약 적용이 안되면 pom.xml > maven > update로 업데이트 후 재시작

주소로 연결 시 @RestController의 내부에 있는 메서드가 알아서 요청을 받음.
컨트롤러가 없을 경우 요청을 받을 수 없음.

HelloController 수정

@RestController
@RequestMapping("/hello")
public class HelloController {

	@GetMapping("/basic")
	public String sayHello() {
		return "<h3>헬로우 월드</h3>";
	}
	
	@GetMapping("/korean")
	public String translate() {
		return "<h2>안녕하세요</h2>";
	}

	@GetMapping("/japen")
	public String translate2() {
		return "<h2>곤니치와</h2>";
	}
}

수정 후 localhost:8080/ 검색시 에러(경로가 지정되지 않은 메서드가 없기때문), http://localhost:8080/hello/korean으로 요청 시 정상적으로 문구가 나옴.


=> http://localhost:8080/hello/japan으로 요청한 결과.

어노테이션으로 지정해준 /hello 경로 아래에 있는 메서드가 요청을 받으므로 요청시 /hello 가 필요함.

PostMapping 사용

HelloController 클래스 내에 추가

@GetMapping("/form")
public String form() {
	return "<form method=\"post\" action=\"/hello/formpost\">\r\n"
			+ "    이름 : <input type=\"text\" name=\"name\"><br>\r\n"
			+ "    학번 : <input type=\"text\" name=\"id\"><br>\r\n"
			+ "    학과 : <input type=\"text\" name=\"dep\"><br>\r\n"
			+ "    <input type=\"submit\">\r\n"
			+ "</form>";
}

@PostMapping("/formpost")	// request parameter로 받은 "name"속성을 java로 String 속성 name으로 받음
public String formpost(@RequestParam("name") String name,
						@RequestParam("id") String id,
						@RequestParam("dep") String dep) {
	return "당신의 이름은 " + name + " id는 " + id + " 학과는 " + dep + "입니다.";
}

@GetMapping("/orders/{id}")	// {id} 는 패스변수 (파라메터가 아님)
public String order(@PathVariable String id) {
	return "주문 아이디는 " + id;
}

form 사용

입력 후 submit을 하면 PostMapping으로 넘어감

path변수 사용



path변수. 쿼리스트링과는 다름.
변수자리에 입력한 대로 출력됨.


json으로 리턴하기

새 컨트롤러 생성

UserController

@RestController
@RequestMapping("/user")	// 요청주소가 https://localhost:8080/user 로 시작하는 모든 url을 이 클래스로 받아온다
public class UserController {
	
	@GetMapping("/{id}/contact")
	public String displayContent(@PathVariable("id") String userId, 
								@RequestParam(value = "phone", defaultValue = "핸드폰 없음") String phone) {
		return "유저 아이디: " + userId + ", 연락처: " + phone;
	}
}


contact에 값이 없을때 defaultValue로 설정해둔 값이 대신 출력됨.


Product 클래스 생성.

public class Product {
	private int id;
	private String name;
	private int price;
	
	public Product(int id, String name, int price) {
		super();
		this.id = id;
		this.name = name;
		this.price = price;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getPrice() {
		return price;
	}
	public void setPrice(int price) {
		this.price = price;
	}
}

UserController 클래스에 추가

// 객체를 리턴하기 => 제이슨
@GetMapping("/{id}/products")
public List<Product> displayUserProducts() {
	return Arrays.asList(new Product(1, "모자", 5000), 
    	new Product(2, "신발", 12000), 
    	new Product(3, "가방", 18000));
}

좋은 웹페이지 즐겨찾기