복습

Back - Front 분리를 위한 디자인 패턴(MVC, MVVM)

  • 스프링은 WebMVC패턴을 지원

  • 어디서 확인할 수 있나? 관련 의존성 : org.springframework.boot:spring-boot-starter-web

  • 스프링에서 ViewResolver 클래스는 왜 필요한가? 현재는 페이지 구현이 적은 상황이지만 나중에 30개의 페이지가 생길 때는?

  • 그렇기 때문에 각 관심사의 분리가 필요하다.

  • 관련 어노테이션

  • @RestController : 둘의 분리를 도와주는 어노테이션 -> return : String temp = g.toJson(XXXList)

  • @RequestParam - React 사용 시 필요!
    - 받아오는 값은? js 언어이다. (apllication/json)
    - const notice = {이름 : 값, 이름1 : 값1, 이름2 : 값2 ...} -> 이 부분이 Front-Back의 만나는 부분

  • @Controller : InternalVewResolver -> return : String(화면이름)

  • 화면의 분리

  • webapp

  • WEB-INF

컨트롤계층 지원 어노테이션 -> 웹 요청을 받고 적절한 응답을 반환하는 역할

@Controller -> 페이지로 출력

  • 메소드 이름이 페이지 이름이 됨.
  • 화면 직접 처리 시 사용
  • Model 클래스와 함께 사용
  • @RequestMapping + @ Controller -> WebServlet임!
    ![[Pasted image 20240104100445.png]]

@RestController -> 문자열로 출력

  • [[mime type]] : 아래의 경우 사용(페이지 출력 아닌 모든 경우) <- Model 사용 필요 x
    - text/plain
    - application/json
  • back front의 완전한 분리를 지원하는 설계(UI, JSON 활용 필요 시 사용)
  • 이 어노테이션이 붙은 클래스 메소드의 리턴타입은 String이다.
  • 주의, 절대 redirect나 forward 붙이지 말 것!!
  • 세션을 주입받을 수 있다 -> 상태관리([쿠키], [[Session]](서버 cache메모리) -> 타임라인 존재)
    ![[Pasted image 20240104093642.png]]

강의 내용

댓글처리(오늘은 Back부터 설계)

  • 순서

  • DB설계 -> xml 작성 -> Dao, Logic, Controller 작성

  • @Service, @Component
    - @Component는 빈을 등록해서 주입받아야 할 클래스

  • 고민

  • 상세보기, 댓글을 하나의 List에 담을 수 있나? No, 다른 테이블에서 가져오고, 댓글의 갯수를 확정할 수 없으니까!!

  • 상세보기 & 댓글의 구조!!

[
	{}, //bList.get(0)
	{   //bList.get(1)_
	comments: [
				{},
				{},
				...
			  ]
	}
]
  • 댓글은 어떻게 가져올 수 있을까?
List<Map<String,Object>> bList = new ArrayList<>();
bList.size()= 2
Map<String, Object> detail = bList.get(0);
Map = bList=get(1);
  • 댓글 가져오는 쿼리문 작성하기!!

  • 테이블 두 개를 같이 사용해야 하니 Join을 써야할 것 같은데 어떤 join을 사용할까??
  • 공통되는 b_no가 있지만, 댓글이 있을 수도 있지만 댓글이 없는 게시글이 있을 수도 있다, 꼭 데이터를 직접 넣어서 확인해보는 것이 필요하다(나중에 믿고 실행했다가 다 터져버릴 수 있음...)
  • 테이블이 두 개 이상일 때, 먼저 드라이브되는 클래스를 잘 적어야 한다!!
  • 관계 형태를 클래스 설계로 바꿀 수 있어야 한다!!
  • 부모(board230527)은 Null이 될 수 없고, 자식(board230527_comment)는 Null이 될 수 있음.

  • 공통되는 b_no가 있지만, 댓글이 있을 수도 있지만 댓글이 없는 게시글이 있을 수도 있으니까 적절한 join을 사용한다.

  • 상세보기 & 댓글이 표시되는 화면에서 사용할 거여서 natural join, outer join 모두 사용 가능하다!

  • 우리는 일단, natural join을 사용하여 공통으로 들어가는 b_no에 대해 같은 값을 갖는 테이블을 select 할 수 있도록 board.xml에 select를 아래와 같이 추가하였다.

    <select id="commentList" parameterType="map" resultType="map">
        select bc_no, bc_comment, bc_writer
        from board230527_comment NATURAL JOIN board230527
        where b_no= #{b_no}
        order by bc_no desc;
    </select>

0개의 댓글

Powered by GraphCDN, the GraphQL CDN