TIL/Today I Learned
[TIL] 23.09.05 Today I Learned / 조회수 기능, 컴포넌트화, 기타 수정
임성장
2023. 9. 5. 23:35
728x90
요약: 조회수 기능, 컴포넌트화, 기타 수정
일시: 23.09.05
장소: 더휴먼컴퓨터아트아카데미
배운 점:
조회수 기능
// db에 저장되어 있는 view 정보가 string이라서 $inc 명령어가 오류 발생
// update를 통해 number로 형변환
let number = await db.collection("~").updateOne(
{ _id: new ObjectId(id) }, // 업데이트할 문서를 선택하는 조건
{ $set: { view: Number(result.view) } }
)
// 상세페이지로 접속 시 DB의 view 1씩 증가
let view = await db.collection("~").updateOne(
{ _id: new ObjectId(id) }, // 업데이트할 문서를 선택하는 조건
{ $inc: { view: 1 } }
)
컴포넌트화
- 한 컴포넌트에 합쳐져있는 코드들을 기능 별로 나누어서 컴포넌트로 나눔
컴포넌트화의 장점
- 모듈화: 컴포넌트는 코드를 모듈화하는 데 도움을 줍니다. 각 컴포넌트는 특정한 역할 또는 기능을 수행하므로 코드를 논리적인 조각으로 분할하고 개별적으로 작업할 수 있습니다.
- 재사용성: 컴포넌트는 독립적으로 설계되므로 다른 프로젝트나 부분에서 재사용할 수 있습니다. 이는 개발 생산성을 향상시키고 코드 중복을 줄이는 데 도움이 됩니다.
- 유지 보수성: 컴포넌트 기반 아키텍처는 코드를 더 쉽게 이해하고 수정할 수 있도록 도와줍니다. 각 컴포넌트는 자체 상태와 로직을 가지므로 문제가 발생했을 때 해당 컴포넌트만 수정하면 됩니다.
- 코드의 가독성: 컴포넌트는 논리적으로 분리되어 있으므로 코드의 가독성을 향상시킵니다. 각 컴포넌트는 특정한 역할을 수행하므로 코드를 이해하기 쉬워집니다.
- 테스트 용이성: 컴포넌트는 독립적으로 테스트할 수 있으므로 코드의 품질을 유지하고 버그를 미리 발견하는 데 도움을 줍니다.
- 협업 용이성: 컴포넌트 기반 개발은 여러 개발자가 동시에 작업하는 협업 환경에서 효과적입니다. 각 개발자는 자신이 작성한 컴포넌트를 독립적으로 개발하고 통합할 수 있습니다.
- 성능 최적화: 일부 프레임워크와 라이브러리는 컴포넌트 단위의 업데이트를 관리하여 성능을 최적화할 수 있습니다. 변경된 부분만 다시 렌더링되므로 불필요한 작업을 최소화합니다.
- 유연성: 컴포넌트를 조합하여 복잡한 UI나 기능을 구축할 수 있습니다. 이로써 애플리케이션을 쉽게 확장하고 변경할 수 있습니다.
- 재사용 가능한 UI 라이브러리: 많은 UI 라이브러리와 프레임워크에서 사전에 정의된 컴포넌트를 제공하므로 개발자는 이러한 컴포넌트를 사용하여 빠르게 UI를 구축할 수 있습니다.
기타 수정
const handleSubmit = async () => {
try {
// 댓글 저장을 위한 POST 요청
// 댓글 내용과 부모 글의 id 값 전송
const response = await fetch("/api/post/boardComment", {
method: "POST",
// 범객체 타입을 전송하기 위해서는 stringify 사용
body: JSON.stringify({ comment, _id }),
});
// 서버와의 통신이 성공하면
if (response.ok) {
// 댓글 입력창 초기화
setComment("");
// 에러 메시지 초기화
setErrorMessage("");
// 댓글 목록 업데이트를 위해 상태값 변화
setUpdateComment(true);
// 서버와의 통신이 실패하면
} else {
// 서버로부터 오류 메시지 저장
const errorData = await response.json();
// 입력창 초기화
setComment("");
setShow(true);
// 오류 메시지 state에 저장
setErrorMessage(errorData);
}
} catch (error) {
setComment("");
console.error("Error:", error);
}
};
- 서버와 통신을 실패했을 때, state를 초기화해서 입력창의 플레이스홀더를 출력할 수 있게 함.
session: {
strategy: 'jwt',
maxAge: 12 * 60 * 60 // 12시간
// maxAge: 30 * 24 * 60 * 60 //30일
},
- 로그인 유지 기한 수정
부족한 점:
728x90