🌱 오늘의 주제 : 스프링 MVC를 이용한 게시판 구축 (2)
🌱 서비스 구현
- 일반적으로 DAO(Mapper)는 데이터베이스 테이블 당 하나를 만든다.
- 하지만, 사용자에게 제공되는 서비스는 여러 테이블의 정보를 조합해서 제공하는 경우가 많다.
- 따라서, 하나의 서비스에서 다수의 DAO를 사용하기도 하고 때로는 다수의 서비스가 하나의 DAO를 사용하기도 한다.
- Service는 DAO와 연동뿐만 아니라 서버 기술 (웹, 클라이언트/ 서버)이나 각 벤더별 데이터 베이스에 종속되지 않는 로직을 구현하는 곳이기도 한다.
🌱 목록 구현
- 스프링 MVC에서 C, 즉 컨트롤러(controller)의 역할을 수행한 클래스를 추가 후, @Controller 어노테이션을 지정하고 @RequestMapping 어노테이션을 지정한다.
- MVC에서 Model은 컨트롤러에서 뷰로 전달해주는 정보다. 모델을 생성하는 것은 DispatcherServlet의 역할이다.
- DispatcherServlet이 생성한 모델에 대한 참조 변수는 @ReqeustMapping 어노테이션이 붙은 메서드 인자를 선언하기만 하면 자동으로 받을 수 있다.
- model에 addAttribute() 메서드를 이용해 반환값을 model에 추가한다.
@RequestMapping("/live")
@Controller
public class LiveController {
@Autowired
private LiveBO liveBO;
//localhost/live/live_writing_view
@GetMapping("/live_writing_view")
public String live_writing_view(
Model model) {
model.addAttribute("view", "live/liveWriting");
return "template/layout";
}
// localhost/live/live_view
@GetMapping("/live_view")
public String live_view(
@RequestParam(value="languageCategoryId",defaultValue="EN") String languageCategoryId,
Model model, HttpSession session) {
Integer userId = (Integer)session.getAttribute("userId");
// db
List<LiveView> liveViewList = liveBO.generateCardList(languageCategoryId, userId);
model.addAttribute("liveViewList", liveViewList);
model.addAttribute("view", "live/liveDetail");
return "template/layout";
}
}
- 아래 코드는 view 경로이다.
- prefix는 접두사
- suffix는 접미사 / .jsp를 붙인 이름에 해당하는 파일이 뷰가 되는 내용이다.
server:
port: 80
spring:
mvc:
view:
prefix: /WEB-INF/jsp/
suffix: .jsp
🌱 읽기 구현
- 스프링 MVC에서 SEO(Search Engine Optimization, 검색 엔진 최적화)에 최적화호딘 URL을 처리할 수 있는 메커니즘을 제공한다. 이때 @PathVarible 어노테이션을 사용한다.
- @RequestMapping의 value 속성에서 {commentId}를 볼 수 있는데 이를 경로 변수(PathVariable)라고 한다.
@RestController
public class GrammarLikeRestController {
@Autowired
private GrammarLikeBO grammarLikeBO;
@RequestMapping("/like/{commentId}")
public Map<String, Object> like (
@PathVariable int commentId,
HttpSession session) {
Map<String, Object> result = new HashMap<>();
// 로그인 여부 체크
Integer userId = (Integer)session.getAttribute("userId");
if (userId == null) {
result.put("code", 300);
result.put("errorMessage", "Please log in.");
return result;
}
// BO 호출
grammarLikeBO.likeToggle(commentId, userId);
// 응답
result.put("code", 1);
result.put("result", "Your like is updated.");
return result;
}
}
'Spring > Book - 스프링 입문을 위한 자바 객체 지향의 원리와 이해' 카테고리의 다른 글
00B. 자바8 람다와 인터페이스 스펙 변화 (0) | 2023.07.07 |
---|---|
00A. 스프링 MVC를 이용한 게시판 구축 (1) (0) | 2023.05.19 |
07. Spring - 의존성 주입 (0) | 2023.04.28 |
07. 스프링 삼각형과 설정 정보 (1) (0) | 2023.04.14 |
06. 스프링이 사랑한 디자인 패턴 (0) | 2023.04.07 |