Spring Boot 2

20
Spring-boot로 java 웹서버 만들기 2화. NEXT 2기 Dragonist nodejs, rubyonrails, 등등 생산성 좋은 것들이 많다고 spring어려워하는 사람들에게 spring도 spring-boot사용하면 보다 빠르게 웹서버 만들수 있다는걸 보여주고 싶었어요 Copyright(c)2015 github.com/dragonist All rights reserved
  • Upload

    -
  • Category

    Software

  • view

    377
  • download

    1

Transcript of Spring Boot 2

Page 1: Spring Boot 2

Spring-boot로 java 웹서버 만들기

2화.

NEXT 2기 Dragonist nodejs, rubyonrails, 등등 생산성 좋은 것들이 많다고 spring어려워하는 사람들에게 spring도 spring-boot사용하면 보다 빠르게 웹서버 만들수 있다는걸 보여주고 싶었어요

Copyright(c)2015 github.com/dragonist All rights reserved

Page 2: Spring Boot 2

index.html 이 보일래면 어떻게 해야 할지 궁금 한가요? 그건 다음 시간에 ㅋㅋㅋㅋㅋ 이래야 드라마틱한 개발임 ㅋㅋㅋㅋㅋㅋ이제 index.html을 보여주는 서버를 만들어보자

Page 3: Spring Boot 2

이부분 지우세요

Page 4: Spring Boot 2

오른쪽 마우스->new or ctrl+N java class 만들기 package랑 이름은 적당히 잘짓기!

타이핑 하고 서버를 켜보세요

Page 5: Spring Boot 2

index.html 페이지 잘 나옴!

콘솔로그도 잘나옴

Page 6: Spring Boot 2

이제 데이터를 저장하자 DB

Page 7: Spring Boot 2

DB : 데이터 베이스 Orcle, MySQL, Mongo, H2 데이터를 저장하는곳

제일 간단한 H2를 써볼꺼다 H2는 로컬 디비여서 따로 사이트에들어가서 깔지않고 Maven보고 깔아오라 시키면 된다

H2 와 동시에 JPA라는 녀석을 써볼꺼다 디비가 뭔지, 어떤 쿼리를 날려야 하는지 알필요없다 그냥 객체지향적으로 데이터를 저장하는 것처럼 보이도록 것임 디비관련 된 부분은 알아서 JPA가 해줄것이다.

Page 8: Spring Boot 2

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId>

</dependency>

<dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><scope>runtime</scope>

</dependency>

pom.xml에 추가하고 maven build

Page 9: Spring Boot 2

pom.xml이 변경 사항이 있다면 1) pom.xml 오른쪽 클릭 2) Run As -> Maven build 선택

Goals : eclipse:clean eclipse:eclipse Run클릭

지난 화에 Maven 빌드 했던 방법

Page 10: Spring Boot 2

@Entity 저장할 객체 @Id Key 값

User 데이터를 디비 넣어보자

클릭

Page 11: Spring Boot 2

오른쪽 마우스->new or ctrl+N java interface 만들기 package랑 이름은 적당히 잘짓기!

타이핑!

Page 12: Spring Boot 2

한번 테스트코드를 만들어보자

디비 완료?

Page 13: Spring Boot 2

Ctrl+N juni 까지만 치면 Junit Test Case가 나온다 enter 그리고 타이핑

기본적인 Junit Test 만드는법

Page 14: Spring Boot 2

만들어져 있는 테스트 코드 파일을 누르고 Ctrl+ C, Ctril+V 이름을 지정하고 OK (페키지가 필요한면 페키지 정도는 ctrl+N으로 만들고) 새로만든 파일을 마우스로 움직인다.

귀차니즘의 JunitTest 만드는법

Page 15: Spring Boot 2

테스트 코드 만들고 Run

junit Test Case 만들기 package: demo.repository class name: UserRepositoryTest

Page 16: Spring Boot 2

Content Assist 기능! Eclipse가 무거운 이유는 정말 편한 기능이 많이 있기 때문!!!! 인스턴스.(메소드)상태에 커서를 두고 alt+space 나 ctrl+space 눌러보면 사용가능한 메소드 가 나오고 메소드의 리턴값 어떤 용도인지 전부 나옴!

Page 17: Spring Boot 2

����������� ������������������   @Autowired����������� ������������������  ����������� ������������������   UserRepository����������� ������������������  repo;����������� ������������������  ����������� ������������������   ����������� ������������������  ����������� ������������������   static����������� ������������������  User����������� ������������������  user;����������� ������������������  ����������� ������������������   ����������� ������������������  ����������� ������������������   @BeforeClass����������� ������������������  ����������� ������������������   public����������� ������������������  static����������� ������������������  void����������� ������������������  setUpBeforeClass()����������� ������������������  throws����������� ������������������  Exception����������� ������������������  {����������� ������������������  ����������� ������������������   ����������� ������������������   user����������� ������������������  =����������� ������������������  new����������� ������������������  User();����������� ������������������  ����������� ������������������   ����������� ������������������   user.setId("erin314");����������� ������������������  ����������� ������������������   ����������� ������������������   user.setEmail("[email protected]");����������� ������������������  ����������� ������������������   ����������� ������������������   user.setName("erin");����������� ������������������  ����������� ������������������   ����������� ������������������   user.setPassword("1234");����������� ������������������  ����������� ������������������   }����������� ������������������  ����������� ������������������   ����������� ������������������  ����������� ������������������   @After����������� ������������������  ����������� ������������������   public����������� ������������������  void����������� ������������������  tearDown()����������� ������������������  throws����������� ������������������  Exception����������� ������������������  {����������� ������������������  ����������� ������������������   ����������� ������������������   repo.deleteAll();����������� ������������������  ����������� ������������������   }����������� ������������������  ����������� ������������������   ����������� ������������������  ����������� ������������������   @Test����������� ������������������  ����������� ������������������   public����������� ������������������  void����������� ������������������  save()����������� ������������������  {����������� ������������������  ����������� ������������������   ����������� ������������������   User����������� ������������������  result����������� ������������������  =����������� ������������������  repo.save(user);����������� ������������������  ����������� ������������������   ����������� ������������������   ����������� ������������������  ����������� ������������������   ����������� ������������������   assertEquals(result.getId(),����������� ������������������  user.getId());����������� ������������������  ����������� ������������������   ����������� ������������������   assertEquals(result.getEmail(),����������� ������������������  user.getEmail());����������� ������������������  ����������� ������������������   ����������� ������������������   assertEquals(result.getName(),����������� ������������������  user.getName());����������� ������������������  ����������� ������������������   }����������� ������������������  ����������� ������������������   ����������� ������������������  ����������� ������������������   @Test����������� ������������������  ����������� ������������������   public����������� ������������������  void����������� ������������������  find()����������� ������������������  throws����������� ������������������  Exception����������� ������������������  {����������� ������������������  ����������� ������������������   ����������� ������������������   repo.save(user);����������� ������������������  ����������� ������������������   ����������� ������������������   User����������� ������������������  result����������� ������������������  =����������� ������������������  repo.findOne(user.getId());����������� ������������������  ����������� ������������������   ����������� ������������������   ����������� ������������������  ����������� ������������������   ����������� ������������������   assertEquals(result.getId(),����������� ������������������  user.getId());����������� ������������������  ����������� ������������������   ����������� ������������������   assertEquals(result.getEmail(),����������� ������������������  user.getEmail());����������� ������������������  ����������� ������������������   ����������� ������������������   assertEquals(result.getName(),����������� ������������������  user.getName());����������� ������������������  ����������� ������������������   }����������� ������������������  ����������� ������������������   @Test����������� ������������������  ����������� ������������������   public����������� ������������������  void����������� ������������������  update()����������� ������������������  throws����������� ������������������  Exception����������� ������������������  {����������� ������������������  ����������� ������������������   ����������� ������������������   User����������� ������������������  temp����������� ������������������  =����������� ������������������  repo.save(user);����������� ������������������  ����������� ������������������   ����������� ������������������   temp.setName("dragonist");����������� ������������������  ����������� ������������������   ����������� ������������������   User����������� ������������������  result����������� ������������������  =����������� ������������������  repo.save(temp);����������� ������������������  ����������� ������������������   ����������� ������������������   ����������� ������������������  ����������� ������������������   ����������� ������������������   assertEquals(result.getId(),����������� ������������������  temp.getId());����������� ������������������  ����������� ������������������   ����������� ������������������   assertEquals(result.getEmail(),����������� ������������������  temp.getEmail());����������� ������������������  ����������� ������������������   ����������� ������������������   assertEquals(result.getName(),����������� ������������������  temp.getName());����������� ������������������  ����������� ������������������   }����������� ������������������  

����������� ������������������   @Test����������� ������������������  ����������� ������������������   public����������� ������������������  void����������� ������������������  delete()����������� ������������������  throws����������� ������������������  Exception{����������� ������������������  ����������� ������������������   ����������� ������������������   User����������� ������������������  temp����������� ������������������  =����������� ������������������  repo.save(user);����������� ������������������  ����������� ������������������   ����������� ������������������   repo.delete(temp);����������� ������������������  ����������� ������������������   ����������� ������������������   User����������� ������������������  result����������� ������������������  =����������� ������������������  repo.findOne(user.getId());����������� ������������������  ����������� ������������������   ����������� ������������������   ����������� ������������������  ����������� ������������������   ����������� ������������������   assertNull(result);����������� ������������������  ����������� ������������������   }

** Junit Test @Test : 테스트가 잘 돌아가면 초록불이 뜬다 메소드는 순서대로 실행되지 않는다. 맨밑에 test 메소드 부터 돌아갈 수도 있다

@BeforeClass 테스트묶음 가 돌기 전에 한번 실행된다. @Before 각 테스트가 돌기 전에 매번 실행된다. @AfterClass @After 나머진 알아서

** CRUD로 보는 Repository Test JPA는 자바 콜랙션(Collection)의 Map 처럼 디비가 다뤄지길 바랬다. 그래서 다음과 같은 코드로 CRUD 테스트가 만들어진다

C: create 추가 R: read 읽기 U: update 수정 D: delete 삭제

Page 18: Spring Boot 2

여기서 잠깐

repo.save(user)

Entity Manager

DB (H2)

저장 해줘 저장 해줘

repo.find(id)

user

repo.find(id)

user 인스턴스 하나

오! 이 user 인스턴스가 만들어진게 있어!

1찾아줘

2리턴

4리턴3찾아줘

user.setName(“hi”) repo.save(user)

저장 해줘

내가 갖고 있는 user가 변경되었군 데이터만 변경해주면 되겠네

변경 해줘

JPA가 뭐하는 놈인지 감이오나요? Japa Persistent API: (persistent_고집,지속) Entity(user)를 POJO(Plain Old Java Object) 라고 부른다. JPA안에는 EntityManager라는 녀석이 POJO를 관리한다.

JPA

Page 19: Spring Boot 2

요청에 대한 응답 처리 Controller

HelloController

MainController

DB역활 Repository

UserRepository DB요청

User

Model 주고받는 객체

View 응답

JSP

HTML

Page 20: Spring Boot 2

끝: 1화, 2화 복습하기!