* 이 포스트는 인프런에 있는 김영한 님의 '스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술' 강의를 들으면서 내용을 정리한 글입니다. *

 

[메인 컨텐츠]

[무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의 (inflearn.com)

 

# 2022-03-04 #

 

#목차#

18. 회원 웹 기능 - 등록

19. 회원 웹 기능 - 조회


18. 회원 웹 기능 - 등록

 

폼(form)을 사용해서 회원가입을 위한 이름을 입력값으로 받고, 이를 저장소에 반영하는 기능이다. 

여기서는 MemberForm.java 파일을 따로 만들어서 폼 기능을 구현하였다. 

+ django에서는 forms.py로 아예 폼들을 따로 모아서 models.py에 있는 모델과 분리시키던데, 스프링에서도 이런 방법이 자연스러운 것인지는 아직 잘 모르겠다. 

 

여느 폼 기능과 똑같이, 폼 클래스에서는 받아야 할 입력값들을 private한 필드로 선언한다. 그리고 getter, setter 메소드만 public으로 선언한다. 

 

여기서는 REST API 방식 대신 MVC 방식을 사용하여 각 페이지/기능에 맞는 html 페이지가 따로 존재했다. 

 

HTTP 요청 주고받는 순서

1. HTTP GET 방식으로 form을 제공하는 페이지에 접속한다.

2. 필요한 값을 입력하고 등록 버튼을 누른다. 

3. 해당 폼은 html의 form 태그 안에서 만들어진 폼이며, 이 경우 form 태그는 action=""으로 입력된 폼을 어떤 주소로 보낼지에 대한 정보를 담고 있다. 

등록 버튼을 누른 순간 해당 url 주소로, HTTP POST 방식으로 폼이 전송된다. 

4. html의 form 태그에 명시된 해당 주소로 가면 POST 방식으로 들어온 요청을 처리하는 메소드가 있다(있다고 가정한다).

5. 해당 메소드에서는 매개변수로 MemberForm 객체를 받고, 해당 객체의 .getName() 등의 메소드(MemberForm 내부에서 정의된 메소드)를 통해서 사용자가 입력한 값에 접근하고 추가적인 처리를 할 수 있다.


19. 회원 웹 기능 - 조회

 

조회 기능은 GET 방식으로 이뤄지며, 여기서는 저장소 역할을 하는 List 객체 안에 저장된 모든 member의 정보를 꺼내보는 기능이다. 

 

즉 데이터 저장소(여기서는 실제 DB가 아니지만 DB와 동일하다고 봐도 무방하다)에 접근해야 하는데, 그러려면 컨트롤러(controller) 클래스에서 리포지토리(repository)의 기능을 사용해야 한다. 

 

다행히 앞서 컴포넌트 스캔 또는 자바 방식으로 스프링 빈을 직접 등록함으로써 이 문제는 이미 해결되었다.

싱글톤 패턴을 사용하면서 컨트롤러는 서비스에, 서비스는 리포지토리에 의존하고 있기 때문이다. 

 

따라서 컨트롤러 클래스에서는 private 타입으로 선언한 서비스 클래스 객체를 호출한 다음, 해당 객체가 가진 join() 메소드를 호출하면 된다.

그러면 서비스 클래스에서는 private 타입으로 선언한 리포지토리 클래스 객체를 갖고 있기 때문에, 결과적으로 데이터를 저장하는 객체에 접근해서 데이터를 꺼내올 수 있다. 

 

다만 현재는 웹 MVC 방식을 사용하기 때문에 스프링에서는 직접 데이터를 List 형태로 꺼내지 않고 웹 템플릿에 넘긴다. Spring에서는 이럴 때 Model 객체를 사용한다. 

즉 Model 타입의 객체를 매개변수로 받아서, 해당 model 객체에 addAttribute()로 속성을 추가한다. 이후 템플릿 이름을 호출하면 해당 model 객체는 호출한 템플릿에서 변수로 사용될 수 있다. 

 

이로써 간단한 등록 및 조회 기능을 구현하였지만 한계가 있다. DB나 파일 등을 사용해야만 서버를 껐다가 켜도 해당 데이터가 남아 있다. 따라서 다음 시간에는 Spring에서 DB를 사용하고 연결하는 방법에 대해 포스팅하려고 한다. 

 

+ Recent posts