2 분 소요

코딩 자율학습단 4주차

16장. 웹 페이지에서 댓글 목록 보기

1.댓글의 레이아웃

댓글은 크게 두 영역으로 나뉩니다.

기존 댓글을 보여주는 영역(_list)와 새 댓글을 입력하는 영역(_new)입니다.

2.댓글 뷰 파일의 구성

댓글 뷰 파일은 댓글 영역을 보여주는 뷰 파일(_comments.mustache), 댓글 목록을 보여주는 뷰 파일(_list.mustache), 새 댓글을 작성하는 뷰 파일(_new.mustache)로 나누어 작성합니다.

3. {{#commentDtos}}{{/commentDtos}}

뷰 페이지에서 모델이 등록된 데이터의 사용 범위를 지정할 떄 사용하는 머스테치 문법입니다.

부터 까지 범위 내에서 commentDtos 데이터를 사용할 수 있으며 commentDtos 데이터의 수만큼 해당 범위를 반복합니다.

16장 수행 결과

image image

셀프체크 수행 결과

package com.example.firstproject.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

import java.util.List;

@Controller
public class GroupController {
    @Autowired
    private GroupService groupService;
    @Autowired
    private TeamService teamService;
    
    @GetMapping("/groups/{groupId}")
    public String group(@PathVariable int groupId, Model model) {
        // 해당 메서드를 완성하세요.
        GroupDto groupDto = groupService.getGroup(groupId);
        List<TeamDto> teamDtos = teamService.getTeamsOnGroup(groupId);
        model.addAttribute("teamDtoList", teamDtos);
        return "groups/show";
    }
}

17장. 웹 페이지에서 댓글 등록하기

1.댓글 등록하기

댓글 등록하기는 2단계로 나누어 구현합니다.

  1. 댓글 생성 뷰 페이지(_new)에 댓글 입력 폼 만들기
  2. [댓글 작성] 버튼을 클릭해 REST API 요청 보내기

2.버튼 변수화

버튼 같은 문서 내 특정 요소를 변수로 받아 오려면 다음과 같이 querySelector() 메서드를 사용해 해당 요소를 선택한 후 변수에 저장합니다.

자료형 변수명 = document.querySelector(“#id_값”);

3.버튼 이벤트 감지

클릭, 마우스 오버 같이 웹 페이지에서 발생한 특정 이벤트는 addEventListener() 메서드를 사용해 감지합니다.

// 이벤트가 감지되면 이벤트 처리 함수를 실행 요소명.addEventListener(“이벤트_타입”, 이벤트_처리_함수)

4.댓글 객체 생성

댓글 객체를 자바스크립트로 만드는 방법은 3가지가 있습니다.

객체 리터럴 방식, 생성자 함수 방식, Object.create() 방식입니다.

책에서는 객체를 변수로 선언하는 객체 리터럴 방식을 사용했습니다. 형식은 다음과 같습니다.

var object = {
    key1: value1,
    key2: value2,
    ...
}

5.REST API 호출과 응답 처리

자바스크립트로 REST API 요청을 보낼 때 fetch() 함수를 사용합니다.

POST 요청을 보낼 때 형식은 다음과 같습니다.

전송 데이터가 자바스크립트 객체이므로 JSON 문자열로 변환해 보낸다는 점을 기억해 주세요.

fetch('API_주소',{
    method: 'POST',                         // 요청 메서드(GET, POST, PATCH, DELETE)
    headers:{                               // 헤더 정보
        "Content-Type": "application/json"
    },
    body: JSON.stringify(객체)              // 전송 데이터
}).then(response => {                       // 응답을 받아 처리하는 구문
    응답_처리문;
});

18장. 웹 페이지에서 댓글 수정하기

1.모달

웹에서 새 창을 띄우는 팝업 창과 달리 같은 브라우저 내부에서 상위 레이어를 띄우는 방식으로 사용하는 창입니다.

모달 창이 뜨면 기존 창은 비활성 상태가 되고, 모달 창을 종료해야만 원래 화면으로 돌아갈 수 있습니다.

2.댓글 수정하기

댓글 수정하기는 크게 2단계로 나누어 구현합니다.

  1. 모달 기능을 이용해 모달 창에 수정 폼 만들기
  2. 모달 트리거 버튼을 통해 기존 댓글을 가져와 수정 폼에 반영한 후 REST API 요청 보내기

3.트리거 데이터 전달

모달 트리거 버튼에 data-* 속성을 이용하면 데이터를 모달로 전달할 수 있습니다. 방법은 다음과 같습니다.

  1. 모달 트리거 버튼에 수정할 댓글 정보를 data-* 속성 값으로 저장한다.
  2. show.bs.modal 이벤트를 감지해 핸들러에서 모달 트리거 버튼을 변수(triggerBtn)화한다.
  3. 버튼 변수(triggerBtn)를 이용해 data-* 속성에 담긴 댓글 정보를 가져온다.
  4. 수정 폼에 데이터를 반영한다.

4.모달 이벤트 감지

모달 이벤트 감지 코드는 다음과 같습니다. 모달은 열리기 직전 show.bs.modal 이벤트를 발생시키고, 이를 처리할 함수는 발생한 이벤트를 첫 번째 매개변수로 받아 실행합니다.

요소명.addEventListener(“show.bs.modal”, function(event){ });

19장. 웹 페이지에서 댓글 삭제하기

1.댓글 삭제하기

댓글 삭제하기는 크게 2단계로 나누어 구현합니다.

  1. [삭제] 버튼 추가하기
  2. [삭제] 버튼 클릭해 REST API 요청 보내기

2.querySelectorAll()

선택자로 지정한 모든 요소를 찾아 반환합니다.

.querySelectorAll(“CSS_선택자_문법”)

3.forEach()

배열 또는 배열과 유사한 일련의 데이터 묶음(NodeList, Map, Set, String, …)을 순회해 처리하는 메서드로, 매개변수로 주어진 함수를 배열 속 각 요소에 적용해 처리합니다.

.forEach(function(){
    // 실행문
});

4.백틱(`) 문자열

백틱(`)은 문자열을 정의하는 방법으로 키보드의 숫자 1 왼쪽에 있는 키를 눌러 입력합니다.

백틱(`)을 사용하면 문자열 사이에 변수를 편리하게 삽입할 수 있습니다.

변수 삽입 문법은 ${}를 사용합니다.

const x = “한우”; const burger = ${x} 버거; // “한우 버거”

댓글남기기