반복주기 3 - 데이터베이스, 개인 정보 수정 기능 구현

본 포스팅은 박재성 NEXT 교수님의 Spring-Boot, JPA로 질문/답변 게시판 구현 과정을 공부한 내용입니다.
전체 개발 과정은 Mac OS에서 진행됐습니다.

이번에 할 거

데이터베이스에 사용자 데이터 추가
개인정보 수정 기능 구현

3-1 QnA HTML 템플릿, H2 데이터베이스 설치, 설정, 관리툴 확인

H2 데이터베이스를 설치해보자.
H2는 자바로 구현되있고 상당히 가볍다. 그래서 별도의 설치가 필요없다
pom.xml에 추가하면된다. localhost:8080/h2-console 로 들어가면 h2 DB 관리 페이지가 나온다
<!-- https://mvnrepository.com/artifact/com.h2database/h2 -->
		<dependency>
			<groupId>com.h2database</groupId>
			<artifactId>h2</artifactId>
			<version>1.4.192</version>
		</dependency>
템플릿은 web-application-server 에서 참조했다.

3-2 자바 객체와 테이블 매핑, 회원가입 기능 구현

JPA 사용 자바객체로 맵핑해놓은 테이블이 생성된다.
pom.xml에 jpa 추가한다(maven repository에서 dependency 코드 찾기)
User 객체가 db와 연동된다는 것을 표시해주기 위해 annotation을 사용한다(@Entity)
primary key 지정 (@Id), 자동 증가 primary key쓰고 싶으면 (@Id, @GeneratedValue) Long id;
not null 설정 @Column(nullable=false)
설정하지 않아도 default 값으로 설정된다

데이터를 추가하는 interface를 만든다.(UserRepository 또는 UserDao)
 (User : 데이터 타입, Long : User primary key 데이터 타입)
—> DB에 데이터 추가하고 조회하는 기능 구현
 application.properties 에서 h2 DB 설정을 할 수 있다.
제대로 설정이 되면 /h2-console에서 connect 하면 USER 테이블이 추가된 걸 볼 수 있다
    
UserController.java
@Autowired
private UserRepository userRepository; 해서 사용한다
.save : 저장

/form.html 이용해서 가입해보고
h2-console에서 확인

h2는 기본 설정이 memory db 설정이다. 즉, 서버가 멈추면 다 사라진다.
설정을 바꿔줘야한다.(spring-boot가 jpa를 실행할 때 drop을 하고 테이블을 생성한다)

3-3 html 정리, url 정리, 리팩토링

Create :만드는거면 post(/users)
Read : 조회면 get(/users)
Controller -> RequestMapping(“/users”) —> @PostMapping(“”) : url 중복을 제거할 수 있다

항상 html 상단은 똑같다
html은 동적이기 때문에 중복제거가 힘들다.
mustache를 사용하면 제거할 수 있다

templates/include/navigation.html 파일을 include 할 수 있다

3-4 개인 정보 수정 기능 구현

template에 있는 html은 브라우저에서 바로 접근할 수 없다 -> 각 컨트롤러를 구현해주어야 한다.
(template에 넣어야 include를 이용할 수 있다)
기본적인 MVC 패턴에서 View를 접근할 때 무조건 컨트롤러를 통해서 접근해야한다.
HomeController —> index.html
회원가입 UserController —> (“form.html”)

개인정보 수정
관리자 모드로 진행한다(로그인은 다음에)
회원가입 폼에 데이터가 채워진 상태로 보여지도록 한다.
UserController에서 추가한다(/users//form)
controller에서 id를 얻어오려면 @PathVariable을 사용한다.(파라미터에서) 
사용자 정보를 전달해야되기 때문에 Model도 구현(findOne)

*추가로 한거
header 중복 제거(mustache include)
css 상대경로 -> 절대경로
수정화면 mustache로 전달받은 데이터 표시 ( value = “” )

개인정보 수정
hidden을 이용해 사용자 id도 같이 받아온다
또는
action에 id를 넣는다(url을 통해)
UserController에서 update method 구현(“/{id}”)
user를 업데이트하고 userRepository에 save한다. userId가 있으면 update 없으면 insert한다
redirect로 list화면으로 넘긴다.

업데이트를 PUT으로 한다(html은 get, post밖에 없다.)
<input type=“hidden” name=“_method” value=“put” />

Controller @PutMapping(“/{id}”)

삭제할 때는 delete 하면된다.

3-5 원격 서버에 소스코드 배포

메이븐에서 스프링 부트를 실행시키는 걸로 배포해보자(자르 ㄴㄴ)
./mvnw spring-boot:run &
Written on October 19, 2016