[Study-NextStep] 2022-01-16

jeonye·2021년 12월 28일
0

Study

목록 보기
6/8

일시 : 2022-01-16
범위 : 자바 웹 프로그래밍 Next Step 8장 실습(p277-p303)
목적
1. Ajax 기술을 활용해 게시판에 답변을 추가, 삭제하는 기능 구현
2. HTML과 JSON 두 가지 형태의 응답을 함으로써 발생하는 MVC 프레임워크의 문제점을 살펴보고 이를 개선
실습

Realize

Ajax

브라우저가 서버에서 HTML 응답을 받아 처리하는 과정은 다음과 같다.

  1. 브라우저는 HTML을 라인 단위로 읽어내려가면서 서버에 재요청이 필요한 부분(CSS, 자바스크립트, 이미지 등)을 찾아 서버에 다시 요청을 보낸다.
  2. 서버에서 자원을 다운로드하면서 HTML DOM 트리를 구성한다.
  3. 서버에서 CSS 파일을 다운로드하면 앞에서 생성한 HTML DOM 트리에 CSS 스타일을 적용한 후 모니터 화면에 그리게 된다.

이처럼 서버에 요청을 보내고 응답을 받아 사용자에게 화면을 보여줄 때까지 많은 단계를 거치고, 많은 비용이 발생한다.

게시판의 추가, 삭제 등 화면의 일부만 변경되는 상황에서 위의 과정을 실행하는 것은 상당히 불합리하다. 이같은 단점을 보완하기 위해 등장한 기술이 AJAX(Asynchronous JavaScript and XML)이다.

Share

LocalDateTime

시간 관련해서 Date, Calendar 클래스를 사용해왔다. 하지만 이 클래스들은 Java의 날짜와 시간 API의 단점을 가지고 있다. 아래에 일부 내용을 기재해보았다.

  • Locale 정보에 따라 Calendar.getInstance() 메서드로 반환되는 클래스가 다르다보니 날짜 계산이 상이함
    Ex) GregorianCalendar, JapaneseImperialCalendar, BuddhistCalendar
  • Java의 기본 날짜, 시간 클래스는 불변 객체가 아니다.
    Calendar 객체나 Date 객체가 여러 객체에서 공유되면 한 곳에서 바꾼 값이 다른 곳에 영향을 미치는 부작용이 생길 수 있기 때문에, 새로운 객체를 생성해서 반환하는 구현이 필요하다.
    Ex) return new Date(this.endTime.getTime());
  • 헷갈리는 월 지정
    JDK 1.0에서부터 Date 클래스는 1월을 0으로 표현했기 때문에 Calendar.OCTOBER는 10이 아닌 9에 해당한다.

이러한 단점을 보완한 java.time API가 Java 8 이상부터 지원되고 있다.
java.time에 대한 사용법은 [Java] LocalDate,LocalTime,LocalDateTime 총 정리에서 확인 가능하다.

클래스설명
LocalDate로컬 날짜 클래스로 날짜 정보만 필요할 때 사용
LocalTime로컬 시간 클래스로 시간 정보만 필요할 때 사용
LocalDateTime날짜와 시간 정보 모두 필요할 때 사용

JSTL 활용한 줄바꿈

JSP 상단에 아래 문구 추가

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<% pageContext.setAttribute("replaceChar", "\n"); %>

줄바꿈 해야하는 값에 선언한 function 적용

${fn:replace(value, replaceChar, "</br>")}

단, textarea Tag에서는 줄바꿈되어 표시되므로 해당 처리를 하지 않아도 된다.

getGeneratedKeys

PreparedStatement.getGeneratedKeys 메소드 또는 Statement.getGeneratedKeys 메소드를 호출하여 자동 생성된 키 값이 포함된 ResultSet 오브젝트를 검색할 수 있다.
즉, 자동 생성키를 통해 신규 등록한 데이터를 조회할 수 있는 것이다.

Collections.unmodifiableMap

Collection 객체에 설정 값을 저장해 사용하는 경우가 많은데, 설정 값은 함부로 변경되면 안되기 때문에 변경을 막는 제약 조건을 걸고 싶을 때가 있다.
이처럼 read-only한 객체를 만들고 싶은 경우 아래의 메소드를 사용하면 된다.

  • Collections.unmodifiableMap
  • Collections.unmodifiableList

해당 메소드는 파라미터로 전달 받은 Collection 객체에 변경이 발생하면 예외를 return한다.

Find More

REST API

참고자료 이용하여 공부하기

0개의 댓글