일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 대덕인재개발원
- 인터페이스
- 다형성
- abstract
- 객체 비교
- 오라클
- 추상메서드
- 예외미루기
- 컬렉션프레임워크
- 자동차수리시스템
- 컬렉션 타입
- exception
- Java
- GRANT VIEW
- 집합_SET
- 한국건설관리시스템
- oracle
- EnhancedFor
- 사용자예외클래스생성
- NestedFor
- 제네릭
- 생성자오버로드
- cursor문
- 예외처리
- 환경설정
- 어윈 사용법
- 메소드오버로딩
- 참조형변수
- 정수형타입
- 자바
- Today
- Total
목록React (99)
거니의 velog
[더 할 수 있는 작업 ?] * 이제 프로젝트 개발은 끝났다. 여기서는 앞으로 여러분이 더 할 수 있는 작업을 살펴보자. [1] 코드 스플리팅 * 현재 프로젝트에서 가장 큰 자바스크립트 파일 크기는 약 138KB 이다. 현재는 프로젝트 규모가 그리 크지 않으므로 코드 스플리팅이 반드시 필요한 상황은 아니다. 하지만 프로젝트의 기능이 더 많이 추가되어 500KB를 넘어가기 시작하면 코드 스플리팅을 생각해 보는 것이 좋다. * 코드 스플리팅은 프로젝트 규모가 커졌을 때 도입하는 것이 바람직하기는 하지만, 프로젝트를 장기적으로 유지 보수할 것 같다면 초반부터 도입하는 것을 권장한다. 왜냐하면, 개발을 계속하면서 결국 프로젝트의 규모가 커질 확률이 높기 때문이다. [2] 서버 호스팅 * 여러분이 만든 웹 애플리..
2. 포스트 삭제 * 마지막으로 구현할 프로젝트의 기능은 포스트 삭제이다. 이에 대한 작업을 마치고 나서 프로젝트를 마무리할 것이다. * 삭제 버튼을 누를 때 포스트를 바로 삭제하는 것이 아니라, 사용자의 확인을 한 번 더 요청하고 나서 삭제하려고 한다. 이렇게 하는 이유는 사용자가 실수로 삭제하는 것을 방지하기 위해서이다. * 사용자에게 한 번 더 확인을 요청하기 위해 모달 컴포넌트를 만들 것이다. 모달(modal)이란 페이지에 나타난 내용 위에 새 레이어로 어떠한 창을 보여 주는 것을 말한다. * 이 프로젝트에서는 모달 컴포넌트를 포스트 읽기 페이지에서만 사용하지만, 컴포넌트의 재사용성을 고려하여 common 디렉터리에 만들어 볼 것이다. * AskModal 이라는 컴포넌트를 다음과 같이 만들어 보자..
(2) 수정 버튼 클릭 시 글쓰기 페이지로 이동하기 * 이제 수정 버튼을 클릭하면 글쓰기 페이지로 이동하고, 현재 보고 있는 포스트가 나타나게 해 보자. 우선 write 리덕스 모듈에 SET_ORIGINAL_POST 라는 액션을 만들자. 이 액션은 현재 보고 있는 포스트 정보를 write 모듈에서 관리하는 상태에 넣는다. [modules/write.js] (...) const SET_ORIGINAL_POST = 'write/SET_ORIGINAL_POST'; (...) export const setOriginalPost = createAction(SET_ORIGINAL_POST, (post) => post); // saga 생성 (...) const initialState = { title: '', bo..
* 드디어 블로그 프로젝트의 마지막 장이다. 이 장에서는 포스트를 수정하는 기능과 포스트를 삭제하는 기능을 구현하고, 프로젝트를 마무리한다. * 이번 실습은 다음 흐름으로 진행된다. 1. 포스트 수정 * 먼저 포스트 수정 기능을 구현해 보자. (1) PostActionButtons 컴포넌트 만들기 * 포스트를 읽는 화면에서 포스트 작성자에게만 포스트 상단에 수정 버튼과 삭제 버튼이 나타나도록 렌더링해 보겠다. 이번에 만들 버튼은 기존에 만들어서 사용하던 Button과 스타일이 다르므로, 기존의 Button 컴포넌트를 재사용하지는 않을 것이다. * components/post 디렉터리에 PostActionButtons 라는 컴포넌트를 생성하자. [components/post/PostActionButtons..
(4) 페이지네이션 구현하기 * 이번에는 페이지네이션 기능을 구현해 보자. list API를 만들 때 마지막 페이지 번호를 HTTP 헤더를 통해 클라이언트에 전달하도록 설정했다. 그러나 요청을 관리하는 사가를 쉽게 만들기 위해 작성한 createRequestSaga 에서는 SUCCESS 액션을 발생시킬 때 payload에 reponse.data 값만 넣어 주기 때문에 현재 구조로는 헤더를 확인할 수 없다. * 그렇기 때문에 createRequestSaga를 조금 수정해 줄 것이다. [lib/createRequestSaga.js] (...) export default function createRequestSaga(type, request) { const SUCCESS = `${type}_SUCCESS`;..
(3) HTML 필터링하기 * sanitize-html 이라는 라이브러리를 사용하여 HTML을 필터링해 보겠다. 이 라이브러리는 HTML을 작성하고 보여 주어야 하는 서비스에서 매우 유용하다. 단순히 HTML을 제거하는 기능뿐만 아니라 특정 HTML만 허용하는 기능도 있기 때문에 글쓰기 API에서 사용하면 손쉽게 악성 스크립트 삽입을 막을 수 있다. * 백엔드 프로젝트 디렉터리에서 yarn을 사용하여 sanitize-html을 설치하자. $ yarn add sanitize-html * 이어서 백엔드 프로젝트의 post.ctrl.js를 수정한다. 먼저 맨 위에 sanitize-html을 불러 오자. [src/api/posts/posts.ctrl.js] import Post from '../../models..
(2) 포스트 목록 조회 API 연동하기 * postLIst 컴포넌트에서 실제 데이터를 보여 줄 수 있도록 API를 연동해 보자. 우리가 사용할 list API는 username, page, tag 값을 쿼리 값으로 넣어서 사용한다. API를 사용할 때 파라미터로 문자열들을 받아 와서 직접 조합해도 되지만, 여기서는 qs 라이브러리를 사용하여 쿼리 값을 생성할 것이다. 이 라이브러리를 사용하면 쿼리 값을 더 편리하게 생성하고 JSON으로 변환할 수 있다. * yarn 으로 qs를 설치하자. $ yarn add qs * 그리고 lib/api/posts.js 파일에 다음 함수를 추가하자. import qs from 'qs'; import client from './client'; export const wr..
2. 포스트 목록 페이지 구현하기 * 이번에는 여러 개의 포스트를 보여 주는 포스트 목록 페이지를 구현해 본다. (1) PostList UI 준비하기 * PostList라는 컴포넌트를 만든다. 이 컴포넌트에서는 포스트들을 배열로 받아 와서 렌더링해 준다. 사용자가 로그인 중이라면 페이지 상단 우측에 새 글 작성하기 버튼을 보여 준다. * components/posts 디렉터리를 만들고, 그 안에 PostList 컴포넌트를 다음과 같이 작성해 주자. [components/posts/PostList.js] import React from 'react'; import styled from 'styled-components'; import Responsive from '../common/Responsive'; ..
* 지금까지 회원 인증 시스템과 글쓰기 기능의 구현을 완료했다. 이번 장에서는 등록한 포스트를 조회할 수 있는 기능을 구현해 보자. 포스트를 조회하는 기능은 두 가지가 있다. 첫 번째는 포스트 하나를 읽는 포스트 읽기 기능이고, 두 번째는 여러 포스트를 조회하는 포스트 목록 기능이다. * 이번 실습은 다음 흐름으로 진행된다. 1. 포스트 읽기 페이지 구현하기 * 작성한 포스트를 읽을 수 있는 페이지를 만들어 보자. (1) PostViewer UI 준비하기 * 서버에서 데이터를 받아 오기 전에 먼저 UI를 완성하자. 구현할 UI는 다음 정보를 보여 줄 것이다. * 포스트 제목* 태그 * 작성자 계정명* 제목 * 작성된 시간* 내용 * PostViewer 라는 컴포넌트를 만들어 이 정보들을 보여 줄 것이다...
(3) 글쓰기 API 연동하기 * 글쓰기에 관련된 상태들이 모두 리덕스에서 관리되고 있으니, 이제 글쓰기 API를 연동해 보자. 앞에서 회원 인증에 관련된 API를 요청하는 함수를 auth.js 라는 파일에 만들어 주었다. 이번에는 포스트에 관련된 API를 요청하는 함수를 posts.js 라는 파일에 작성해 보겠다. posts.js 파일을 lib/api 디렉터리에 생성하자. [lib/api/posts.js] import client from './client'; export const writePost = ({ title, body, tags }) => client.post('/api/posts', { title, body, tags }); * 다음으로 이 함수를 호출하는 리덕스 액션과 사가를 준비한다...