어제 데이터와 학습페이지 문제 데이터를 넣고, 오늘은 하루종일 프로젝트할 시간이 있어 추가할 기능들을 생각해 봤다.
많은 양의 데이터를 사용자와 서버 모두에게 효율적으로 보여주기 위함
1. 성능 향상
페이지네이션에도 여러 종류가 있었지만 적은 인원과 시간을 고려하여 Offset 방식으로 페이지 처리를 하기로 했다.
페이지네이션
- Offset
# 페이지 번호 (기본값 1)
page = int(request.args.get('page', 1))
per_page = 10 # 페이지당 항목 수
# 전체 페이지 수 계산
total_items = len(combined_data)
total_pages = (total_items + per_page - 1) // per_page
# 페이지 범위 확인 및 조정
if page < 1:
page = 1
elif page > total_pages and total_pages > 0:
page = total_pages
# 페이지네이션을 위한 페이지 범위 계산
start_page = max(1, page - 1)
end_page = min(total_pages, page + 1)
# 현재 페이지의 데이터만 슬라이싱
start_idx = (page - 1) * per_page
end_idx = start_idx + per_page
# All 카테고리일 때는 페이징하지 않음
if active_cate == 'All':
paginated_data = combined_data
else:
paginated_data = combined_data[start_idx:end_idx]
{% if show_pagination and total_pages > 1 %}
<nav class="pagination is-centered mt-5" role="navigation" aria-label="pagination">
<ul class="pagination-list">
{% if current_page > 2 %}
<li>
<a href="{{ url_for('myStudy', cate=active_cate, page=1, q=query) }}"
class="pagination-link">1</a>
</li>
{% if current_page > 3 %}
<li><span class="pagination-ellipsis">…</span></li>
{% endif %}
{% endif %}
{% for p in range(start_page, end_page + 1) %}
<li>
<a href="{{ url_for('myStudy', cate=active_cate, page=p, q=query) }}"
class="pagination-link {{ 'is-current' if p == current_page }}">
{{ p }}
</a>
</li>
{% endfor %}
{% if current_page < total_pages-2 %}
<li><span class="pagination-ellipsis">…</span></li>
{% endif %}
<li>
<a href="{{ url_for('myStudy', cate=active_cate, page=total_pages, q=query) }}"
class="pagination-link">
{{ total_pages }}
</a>
</li>
</ul>
</nav>
{% endif %}
결과 화면

# 검색어 가져오기
query = request.args.get('q', '').strip()
# 검색 필터링
if query:
combined_data = [
data for data in combined_data
if query.lower() in data['question']['question'].lower()
]
<form method="get" action="{{ url_for('myStudy') }}" class="mb-4">
<div class="field has-addons">
<div class="control is-expanded">
<input class="input" type="text" name="q" placeholder="문제 검색..."
value="{{ request.args.get('q', '') }}">
</div>
<div class="control">
<button class="button is-info" type="submit">
검색
</button>
</div>
</div>
</form>
<a href="{{ url_for('myStudy', cate=active_cate, page=p, q=query) }}"
HTTP와 HTTPS의 주요 차이점을 설명해드리겠습니다:
HTTP (HyperText Transfer Protocol)
웹에서 데이터를 주고받는 기본 프로토콜
평문(plain text)으로 데이터 전송
포트 80 사용
HTTPS (HyperText Transfer Protocol Secure)
HTTP에 SSL/TLS 암호화가 추가된 보안 프로토콜
암호화된 데이터 전송
포트 443 사용
HTTPS 통신을 위해 OpenSSL을 통해 인증서를 발급 받았다.
openssl req -x509 -newkey rsa:4096 -nodes -out cert.pem -keyout key.pem -days 365
chmod 777 cert.pem
Chmod 777 key.pem

