[블로그 만들기] 5. 글쓰기 기능 만들기 (1)

MVC 와 @Repository
Aug 24, 2024
[블로그 만들기] 5. 글쓰기 기능 만들기 (1)

5. 글쓰기 기능 만들기 (1)

 
DB 에 들어갈 게시글 테이블까지 만들었다면(Board 클래스),
DB 에 글쓰기 ‘INSERT’ 를 요청할 Repository 클래스를 만들어보자.

5-1. BoardRepository 만들기

 
BoardRepository 클래스를 만든다.
 
notion image
 

5-1-1. @Repository 어노테이션

 
BoardRepository 클래스에 @Repository 라는 어노테이션을 붙인다.
notion image
 
스프링이 스캔해서 @Repository 가 붙어있는 애들은 heap 메모리에 뜨게 된다.
 
notion image
 
스프링이 시작할 때 IoC 라는 메모리(List 자료형)를 띄우는데, new 된 애들 변수를 여기에 저장해 놓는다. 꺼내 쓰기 쉽게 관리를 해준다.
 
notion image
 

5-1-2. @Autowired 어노테이션

 
Entity (→ 테이블) Manager 를 통해서 쿼리를 전송하고 응답도 받는다.
em 을 통해서 하는 것으로, (하이버네이트가 만들어준다.)
레파지토리 클래스 안에 EntityManager 를 넣어준다.
private EntityManager em;
 
IoC 에 떠있는 애들을 꺼내올 때에는 @Autowired 를 붙이면 꺼내올 수 있다.
EntityManager 도 IoC 에 떠있기 때문에, (내가 띄운게 아니라, 스프링이 띄움) @Autowired 를 붙여서 바로 꺼내 쓸 수 있다.
 
notion image
 

MVC(Model View Controller)

 

Controller 의 책임

 
동작 구조를 살펴 보자.
컨트롤러의 책임은 클라이언트의 요청을 받는 것이다(url 로)
컨트롤러는 클라이언트와 요청과 응답을 담당한다.
(지금이야 클라이언트가 브라우저지만, 클라이언트는 브라우저, 휴대폰, 키오스크.. 등 단순히 브라우저에만 국한되지 않는다.)
 
notion image
 
하나의 서버를 크게 Presentation 계층와 Business 계층, DB 로 나뉘었을 때,
presentation 계층은 화면에 뭘 표시하기 위한 계층이다. [클라이언트 → 컨트롤러]
 

Repository 의 책임

 
Repository 는 DB 에 붙어있으니, DAO(Data Access Object) 라고 부르는데 스프링에서는 DAO 가 아닌 Repository 라고 부른다.
Repository는 데이터를 write 하거나 read 하는 역할을 갖고 있다. (select, insert, update, delete 데이터)
하나의 서버를 보면, Repository 가 DB 에만 붙는 게 아니니까 DAO 라고 부를 수 없다.[빨간색으로 그린 서버]
💡
DAO(Data Access Object)→(C, R, U, D) : 데이터를 쓰기, 읽기하는 객체
하지만, 현재는 Repository 를 DAO 로만 쓸거다.
Repository 는 다른 서버의 데이터도 끌어받고, 공공데이터도 끌어받을 수 있다. ex. 날씨 데이터
 
 
notion image
 
Repository 는 쓰고 읽기의 책임이 있다. 위의 동작 구조를 다시 보자.
클라이언트에서 데이터가 필요하면 ‘내가 DB 에서 찾아올게’ 하고 하이버네이트로부터 찾아오는 것이다.
ex. 클라이언트가 날씨 데이터가 필요하다며 요청한다.
→ 컨트롤러가 화면만 보여줄 수 없으니, Repository 에게 요청
→ ‘안들고있으니 다른 데이터 들고올게’
→ R 가 받은 데이터를 C 한테 돌려준다.
 
h2 데이터로 받은 정보를 하이버네이트가 오브젝트매핑(OM)하고, 응답데이터를 R 에게 돌려주고, C 로 돌려주는데, 이 때 그 응답데이터를 모델(Model)이라 한다.
 

MVC, VC, MC

 
💡
클라이언트가 순수하게 html 요청하는데, VC(View, Controller) 에서 데이터가 필요하다면 넘어가고,
리턴된 Model 을 컨트롤러가 응답하기 직전에 템플릿을 하나 만들어서 그림에 Model 을 끼워서 보낸다. 이것을 MVC(Model View Controller) 라 한다.
 
화면만 돌려주는건 VC , 만약 데이터가 필요하면 요청한다.
컨트롤러한테 요청했는데 컨트롤러는 데이터가 없으니 Repository 에게 요청하고
응답데이터인 모델을 컨트롤러가 받아서 모델 자체를 보내는 거면 JSON 으로 보내면 되고,
jsp 같은 템플릿을 통해서 보내는거면 view 를 응답해주는 것이다.
 
💡
- 클라이언트가 요청해서 C가 응답 (VC)
- 클라이언트가 요청해서 View 없이 M만 응답해줄 수있다.(MC) → MC 를 할 줄 알아야한다.
 
기본이 MVC 이다.
 
이해하려 하지 말고 동작 구조를 받아들이자,
남이 만든 걸 배울 때는 만들어진 방식을 그대로 배우고 테스트, 실습하는 것.
잘하게 되면 그 때 깊게 파고들자.
 
@Controller 붙이면 Ioc 에 뜬다. @Respository 붙이면 Ioc 에 뜬다. 테스트 해보자,
@Controller 붙이고 new 에 뜨나 확인해보자.
 

 

5-2. C <> R 연결

 
레파지토리를 만들었으니, 컨트롤러에 가서 BoardRepository 를 연결해줘야 한다.
어노테이션 붙이는 거 잊지 말기.
 
notion image
 
Share article

eunmouse