const titles = [
...document.querySelectorAll(
'#NM_THEME_CONTAINER [data-page="1"].group_theme .theme_item'
)
]
.map((el) => el.querySelector(".title"))
.filter((el) => el != null)
.map((el) => el.innerText);
console.log(titles);
~
: 홈 디렉토리
cd ~
: 사용자 폴더로 이동
ls
: 현재 디렉토리의 모든 파일을 출력
clear
: 콘솔 화면을 지움
start .
: 파일탐색기 열림(Mac에서는 open .
)
ll
: ls -l
과 같음. 파일의 상세정보 출력
touch
: 파일 생성
history
: 명령어 입력한 걸 출력
운영체제 내부에는 커널이라는 소프트웨어가 있다.
커널은 직접 접근할 수 가 없고 응용프로그램에서 시스템콜을 통해 접근가능하다.
쉘의 명령어들은 시스템콜로 이루어진 프로세스이고 이를 통해 커널에 명령을 전달할 수 있다.
rm
: 파일 삭제
mkdir
: 폴더를 생성
*
: 와일드카드 (모든 파일)
rmdir
: 폴더삭제
폴더 안에 파일이 존재하는 경우 rmdir로 폴더를 지울 수 없다
ls -al
: a
파라미터를 넣으면 숨김파일도 표시된다.
숨김 파일은
rm *
로 지워지지 않는다. 숨김 파일을 지우려면rm .*
pwd
: 현재 위치를 절대경로로 출력
mkdir -p a/b/c/d
: a 만들고 b 만들고 c 만들고 d 디렉토리를 만듦
cd ..
: 부모 폴더로 이동
rm -rf
: -r
재귀적으로 -f
강제로 삭제. 위험한 명령어
echo
: 파일 디스크립터가 가리키는 파일로 출력(기본 디스크립터 1, 에러는 2)
cat
: 파일 디스크립터가 가리키는 파일에서 내용 받아옴(기본 0)
>
: truncate
>>
: append
| less
: 긴 내용을 스크롤로 볼 수 있게 함
a
: 입력모드
esc
: 메뉴모드
:wq!
: 저장 후 나감
수정 중 vim 을 꺼버린 경우 다시 들어가면 비정상 종료 이력이라고 뜬다.
swp파일을 지우고 vim을 다시 들어가면 해결
u
: undo
ctrl + r
: 복구
스프링 데이터 JPA는 페이징을 쉽게 할 수 있는 라이브러리를 제공한다.
Page<Question> findAll(Pageable pageable);
public Page<Question> getList(int page, String kw) {
List<Sort.Order> sorts = new ArrayList<>();
sorts.add(Sort.Order.desc("createDate"));
Pageable pageable = PageRequest.of(page, 10, Sort.by(sorts));
return questionRepository.findAll(pageable);
}
<tbody>
<tr class="text-center" th:each="question, loop : ${paging}">
<td th:text="${paging.getTotalElements - (paging.number*paging.size) - loop.index}"></td>
<td class="text-start">
<a th:href="@{|/question/detail/${question.id}|}" th:text="${question.subject}"></a>
<span class="text-danger small ms-2" th:if="${#lists.size(question.answerList) > 0}"
th:text="${#lists.size(question.answerList)}"></span>
</td>
<td><span th:if="${question.author != null}" th:text="${question.author.name}"></span></td>
<td th:text="${#temporals.format(question.createDate, 'yyyy-MM-dd HH:mm')}"></td>
<td th:text="${question.views}"></td>
</tr>
</tbody>
<!-- 페이징 처리 시작 -->
<div th:if="${!paging.isEmpty()}">
<ul class="pagination justify-content-center">
<li class="page-item" th:classappend="${!paging.hasPrevious} ? 'disabled'">
<a class="page-link" href="javascript:void(0);" th:data-page="${paging.number-1}">
<span>이전</span>
</a>
</li>
<li th:each="page : ${#numbers.sequence(0, paging.totalPages-1)}"
th:if="${page>=paging.number-5 and page <= paging.number+5}"
th:classappend="${page == paging.number} ? 'active'" class="page-item">
<a th:text="${page}" class="page-link" href="javascript:void(0);" th:data-page="${page}"></a>
</li>
<li class="page-item" th:classappend="${!paging.hasNext} ? 'disabled'">
<a class="page-link" href="javascript:void(0);" th:data-page="${paging.number+1}">
<span>다음</span>
</a>
</li>
</ul>
</div>
<!-- 페이징 처리 끝 -->