개인정보처리방침 추가 및 회원가입 UI 개선

This commit is contained in:
CPABONG 2025-08-03 12:30:21 +09:00
parent 1693501d1c
commit d44c4fe510
10 changed files with 270 additions and 25 deletions

View File

@ -2,6 +2,7 @@ import re
from django import forms from django import forms
from django.contrib.auth.models import User from django.contrib.auth.models import User
from .models import Person from .models import Person
from .peopleinfo import PEOPLE
def format_phone_number(phone): def format_phone_number(phone):
"""전화번호에서 대시 제거""" """전화번호에서 대시 제거"""
@ -14,16 +15,20 @@ def format_phone_with_dash(phone):
return f"{phone[:3]}-{phone[3:7]}-{phone[7:]}" return f"{phone[:3]}-{phone[3:7]}-{phone[7:]}"
return phone return phone
# 허가된 사람들의 정보 (실제 데이터로 교체 필요) # peopleinfo.py에서 PEOPLE 데이터를 가져와서 허가된 사람들의 정보로 변환
PEOPLE = [ ALLOWED_PEOPLE = []
{'이름': '김봉수', '연락처': '01033433319'}, for person in PEOPLE:
# ... 더 많은 사람들 # 전화번호에서 대시 제거
] phone_without_dash = format_phone_number(person['연락처'])
ALLOWED_PEOPLE.append({
'이름': person['이름'],
'연락처': phone_without_dash
})
def is_allowed_person(name, phone): def is_allowed_person(name, phone):
"""허가된 사람인지 확인""" """허가된 사람인지 확인"""
formatted_phone = format_phone_number(phone) formatted_phone = format_phone_number(phone)
for person in PEOPLE: for person in ALLOWED_PEOPLE:
if person['이름'] == name and person['연락처'] == formatted_phone: if person['이름'] == name and person['연락처'] == formatted_phone:
return True return True
return False return False
@ -55,11 +60,11 @@ def is_already_registered(name, phone):
def get_allowed_names(): def get_allowed_names():
"""허가된 모든 이름 목록 반환""" """허가된 모든 이름 목록 반환"""
return [person['이름'] for person in PEOPLE] return [person['이름'] for person in ALLOWED_PEOPLE]
def get_phone_by_name(name): def get_phone_by_name(name):
"""이름으로 전화번호 찾기""" """이름으로 전화번호 찾기"""
for person in PEOPLE: for person in ALLOWED_PEOPLE:
if person['이름'] == name: if person['이름'] == name:
return person['연락처'] return person['연락처']
return None return None
@ -137,7 +142,7 @@ class Step2AccountForm(forms.Form):
) )
privacy_agreement = forms.BooleanField( privacy_agreement = forms.BooleanField(
required=True, required=True,
label='정보공개 동의', label='정보공개 및 개인정보처리방침 동의',
widget=forms.CheckboxInput(attrs={ widget=forms.CheckboxInput(attrs={
'class': 'w-4 h-4 text-blue-600 bg-gray-700 border-gray-600 rounded focus:ring-blue-500 focus:ring-2' 'class': 'w-4 h-4 text-blue-600 bg-gray-700 border-gray-600 rounded focus:ring-blue-500 focus:ring-2'
}) })
@ -147,10 +152,14 @@ class Step2AccountForm(forms.Form):
cleaned_data = super().clean() cleaned_data = super().clean()
password1 = cleaned_data.get('password1') password1 = cleaned_data.get('password1')
password2 = cleaned_data.get('password2') password2 = cleaned_data.get('password2')
privacy_agreement = cleaned_data.get('privacy_agreement')
if password1 and password2 and password1 != password2: if password1 and password2 and password1 != password2:
raise forms.ValidationError('비밀번호가 일치하지 않습니다.') raise forms.ValidationError('비밀번호가 일치하지 않습니다.')
if not privacy_agreement:
raise forms.ValidationError('정보공개 및 개인정보처리방침 동의는 필수입니다.')
return cleaned_data return cleaned_data
def save(self, name, phone, request, commit=True): def save(self, name, phone, request, commit=True):

View File

@ -102,23 +102,41 @@
<label for="{{ form2.privacy_agreement.id_for_label }}" class="block text-base font-semibold text-white cursor-pointer mb-2"> <label for="{{ form2.privacy_agreement.id_for_label }}" class="block text-base font-semibold text-white cursor-pointer mb-2">
{{ form2.privacy_agreement.label }} {{ form2.privacy_agreement.label }}
</label> </label>
<div class="text-sm text-gray-300 leading-relaxed text-left mt-3 -ml-8">
<div class="bg-gray-800 bg-opacity-50 p-3 rounded-lg border border-gray-600 max-h-40 overflow-y-auto text-xs">
<div class="text-gray-300 leading-relaxed">
<p class="mb-2"><strong>1. 정보공개 동의</strong></p>
<p class="mb-2 text-left">다음 정보의 공개에 동의합니다:</p>
<ul class="list-disc list-inside space-y-1 text-gray-300 text-left mb-3">
<li>이름</li>
<li>생년월일</li>
<li>소속</li>
<li>직책</li>
<li>연락처</li>
<li>주소</li>
<li>사진</li>
</ul>
<p class="mb-3 text-yellow-300 font-medium text-left">※ 위 정보는 신라 AMP 제8기 수강생들 간에 공유됩니다.</p>
<p class="mb-2"><strong>2. 개인정보처리방침 동의</strong></p>
<p class="mb-2"><strong>신라 AMP</strong>은 다음의 목적을 위하여 개인정보를 처리하고 있으며, 다음의 목적 이외의 용도로는 이용하지 않습니다.</p>
<ul class="list-disc list-inside space-y-1 mb-2">
<li>회원 가입의사 확인, 회원에 대한 서비스 제공에 따른 본인 식별·인증</li>
<li>회원자격 유지·관리, 서비스 이용에 따른 본인확인</li>
<li>신라 AMP 제8기 수강생들 간의 정보 공유 및 커뮤니케이션</li>
<li>서비스 이용에 대한 통계 및 분석</li>
</ul>
<p class="mb-2"><strong>수집하는 개인정보 항목:</strong></p>
<ul class="list-disc list-inside space-y-1 mb-2">
<li><strong>필수항목</strong>: 이름, 전화번호, 소속, 직책, 주소, 생년월일, 사진</li>
</ul>
<p class="mb-2"><strong>보유기간</strong>: 회원의 회원탈퇴 및 파기요청시 지체없이 파기</p>
<p class="text-yellow-300 font-medium">※ 자세한 내용은 <a href="{% url 'privacy_policy' %}" target="_blank" class="text-blue-400 hover:text-blue-300 underline">개인정보처리방침</a>을 참조하세요.</p>
</div>
</div>
</div>
</div> </div>
</div> </div>
{% if form2.privacy_agreement.help_text %}
<div class="text-sm text-gray-300 leading-relaxed text-left mt-3 ml-3">
<p class="mb-2 text-left">다음 정보의 공개에 동의합니다:</p>
<ul class="list-disc list-inside space-y-1 text-gray-300 text-left">
<li>이름</li>
<li>생년월일</li>
<li>소속</li>
<li>직책</li>
<li>연락처</li>
<li>주소</li>
<li>사진</li>
</ul>
<p class="mt-3 text-yellow-300 font-medium text-left">※ 위 정보는 신라 AMP 제8기 수강생들 간에 공유됩니다.</p>
</div>
{% endif %}
</div> </div>
<button type="submit" class="w-full py-3 bg-blue-600 hover:bg-blue-700 active:bg-blue-800 rounded-xl text-white font-semibold text-base transition duration-200 shadow-md hover:shadow-lg"> <button type="submit" class="w-full py-3 bg-blue-600 hover:bg-blue-700 active:bg-blue-800 rounded-xl text-white font-semibold text-base transition duration-200 shadow-md hover:shadow-lg">

View File

@ -13,6 +13,7 @@ urlpatterns = [
path('withdraw/', views.withdraw, name='withdraw'), path('withdraw/', views.withdraw, name='withdraw'),
path('session_logout/', views.session_logout, name='session_logout'), path('session_logout/', views.session_logout, name='session_logout'),
path('signup/', views.signup_view, name='signup'), path('signup/', views.signup_view, name='signup'),
path('privacy-policy/', views.privacy_policy, name='privacy_policy'),
] ]
if settings.DEBUG: if settings.DEBUG:

View File

@ -371,3 +371,7 @@ def signup_view(request):
request.session['signup_step'] = 1 request.session['signup_step'] = 1
request.session['signup_verified'] = False request.session['signup_verified'] = False
return redirect('signup') return redirect('signup')
def privacy_policy(request):
"""개인정보처리방침 페이지"""
return render(request, 'privacy_policy.html')

Binary file not shown.

1
tatus Normal file
View File

@ -0,0 +1 @@
* master

View File

@ -0,0 +1,212 @@
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>개인정보처리방침 | 신라 AMP</title>
<style>
body {
font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
line-height: 1.6;
color: #333;
max-width: 800px;
margin: 0 auto;
padding: 20px;
background-color: #f5f5f5;
}
.container {
background: white;
padding: 40px;
border-radius: 12px;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
}
h1 {
color: #1f2937;
border-bottom: 3px solid #3b82f6;
padding-bottom: 10px;
margin-bottom: 30px;
}
h2 {
color: #374151;
margin-top: 30px;
margin-bottom: 15px;
font-size: 1.25rem;
}
h3 {
color: #4b5563;
margin-top: 20px;
margin-bottom: 10px;
font-size: 1.1rem;
}
p {
margin-bottom: 15px;
text-align: justify;
}
ul {
margin-bottom: 15px;
padding-left: 20px;
}
li {
margin-bottom: 8px;
}
.highlight {
background-color: #fef3c7;
padding: 15px;
border-radius: 8px;
border-left: 4px solid #f59e0b;
margin: 20px 0;
}
.contact-info {
background-color: #e0f2fe;
padding: 20px;
border-radius: 8px;
border-left: 4px solid #0288d1;
margin: 20px 0;
}
.footer {
margin-top: 40px;
padding-top: 20px;
border-top: 1px solid #e5e7eb;
text-align: center;
color: #6b7280;
font-size: 0.9rem;
}
</style>
</head>
<body>
<div class="container">
<h1>개인정보처리방침</h1>
<p><strong>신라 AMP</strong>('신라 AMP'이하 '신라 AMP')은 다음의 목적을 위하여 개인정보를 처리하고 있으며, 다음의 목적 이외의 용도로는 이용하지 않습니다.</p>
<h2>1. 개인정보의 처리 목적</h2>
<p>신라 AMP은 다음의 목적을 위하여 개인정보를 처리하고 있으며, 다음의 목적 이외의 용도로는 이용하지 않습니다.</p>
<ul>
<li>회원 가입의사 확인, 회원에 대한 서비스 제공에 따른 본인 식별·인증</li>
<li>회원자격 유지·관리, 서비스 이용에 따른 본인확인</li>
<li>신라 AMP 제8기 수강생들 간의 정보 공유 및 커뮤니케이션</li>
<li>서비스 이용에 대한 통계 및 분석</li>
</ul>
<h2>2. 개인정보의 처리 및 보유 기간</h2>
<p>① 신라 AMP은 정보주체로부터 개인정보를 수집할 때 동의 받은 개인정보 보유·이용기간 또는 법령에 따른 개인정보 보유·이용기간 내에서 개인정보를 처리·보유합니다.</p>
<p>② 구체적인 개인정보 처리 및 보유 기간은 다음과 같습니다.</p>
<ul>
<li><strong>회원 가입 및 관리</strong>: 회원가입 및 서비스 이용을 통한 관리</li>
<li><strong>보유 기간</strong>: 회원 탈퇴 시, 즉시 삭제</li>
</ul>
<h2>3. 정보주체와 법정대리인의 권리·의무 및 그 행사방법</h2>
<p>이용자는 개인정보주체로써 다음과 같은 권리를 행사할 수 있습니다.</p>
<p>① 정보주체는 신라 AMP에 대해 언제든지 다음 각 호의 개인정보 보호 관련 권리를 행사할 수 있습니다.</p>
<ul>
<li>개인정보 열람요구</li>
<li>오류 등이 있을 경우 정정 요구</li>
<li>삭제요구</li>
<li>처리정지 요구</li>
</ul>
<h2>4. 처리하는 개인정보의 항목</h2>
<p>① 신라 AMP은 다음의 개인정보 항목을 처리하고 있습니다.</p>
<div class="highlight">
<h3>신라 AMP에서 수집하는 개인정보 항목</h3>
<p>신라 AMP 회원 가입 시, 제공 동의를 해주시는 개인정보 수집 항목입니다.</p>
<h4>■ 회원 가입 시(회원)</h4>
<ul>
<li><strong>필수항목</strong>: 이름, 전화번호, 비밀번호</li>
<li><strong>선택항목</strong>: 이메일, 소속, 직책, 주소, 생년월일, 사진, 키워드</li>
<li><strong>수집목적</strong>: 신라 AMP 회원관리 및 수강생 간 정보 공유</li>
<li><strong>보유기간</strong>: 회원 탈퇴 또는 동의철회 시 지체없이 파기</li>
</ul>
</div>
<p>② 신라 AMP은 만 14세 미만 아동의 개인정보를 보호하기 위하여 회원가입은 만14세 이상만 가능하도록 함으로써 아동의 개인정보를 수집하지 않습니다.</p>
<h2>5. 개인정보의 파기</h2>
<p>신라 AMP은 원칙적으로 개인정보 처리목적이 달성된 경우에는 지체없이 해당 개인정보를 파기합니다. 파기의 절차, 기한 및 방법은 다음과 같습니다.</p>
<h3>- 파기절차</h3>
<p>이용자가 입력한 정보는 목적 달성 후 별도의 DB에 옮겨져(종이의 경우 별도의 서류) 내부 방침 및 기타 관련 법령에 따라 일정기간 저장된 후 혹은 즉시 파기됩니다. 이 때, DB로 옮겨진 개인정보는 법률에 의한 경우가 아니고서는 다른 목적으로 이용되지 않습니다.</p>
<h3>- 파기기한</h3>
<p>이용자의 개인정보는 개인정보의 보유기간이 경과된 경우에는 보유기간의 종료일로부터 5일 이내에, 개인정보의 처리 목적 달성, 해당 서비스의 폐지, 사업의 종료 등 그 개인정보가 불필요하게 되었을 때에는 개인정보의 처리가 불필요한 것으로 인정되는 날로부터 5일 이내에 그 개인정보를 파기합니다.</p>
<h2>6. 개인정보 자동 수집 장치의 설치·운영 및 거부에 관한 사항</h2>
<p>① 신라 AMP은 개별적인 맞춤서비스를 제공하기 위해 이용정보를 저장하고 수시로 불러오는 '쿠키(cookie)'를 사용합니다.</p>
<p>② 쿠키는 웹사이트를 운영하는데 이용되는 서버(https)가 이용자의 컴퓨터 브라우저에게 보내는 소량의 정보이며 이용자들의 PC 컴퓨터내의 하드디스크에 저장되기도 합니다.</p>
<ul>
<li><strong>쿠키의 사용 목적</strong>: 이용자가 방문한 각 서비스와 웹 사이트들에 대한 방문 및 이용형태, 인기 검색어, 보안접속 여부, 등을 파악하여 이용자에게 최적화된 정보 제공을 위해 사용됩니다.</li>
<li><strong>쿠키의 설치·운영 및 거부</strong>: 웹브라우저 상단의 도구>인터넷 옵션>개인정보 메뉴의 옵션 설정을 통해 쿠키 저장을 거부 할 수 있습니다.</li>
<li><strong>쿠키 저장을 거부할 경우</strong> 맞춤형 서비스 이용에 어려움이 발생할 수 있습니다.</li>
</ul>
<h2>7. 개인정보 보호책임자</h2>
<p>① 신라 AMP은 개인정보 처리에 관한 업무를 총괄해서 책임지고, 개인정보 처리와 관련한 정보주체의 불만처리 및 피해구제 등을 위하여 아래와 같이 개인정보 보호책임자를 지정하고 있습니다.</p>
<div class="contact-info">
<h3>▶ 개인정보 보호책임자</h3>
<p><strong>성명</strong>: 신라 AMP 관리자<br>
<strong>직책</strong>: 관리자<br>
<strong>연락처</strong>: admin@sillaamp.com</p>
</div>
<p>② 신라 AMP의 서비스를 이용하시면서 발생한 모든 개인정보 보호 관련 문의, 불만처리, 피해구제 등에 관한 사항을 개인정보 보호책임자로 문의하실 수 있습니다.</p>
<p>신라 AMP은 정보주체의 문의에 대해 지체 없이 답변 및 처리해드릴 것입니다.</p>
<h2>8. 개인정보 처리방침 변경</h2>
<p>① 이 개인정보처리방침은 시행일로부터 적용되며, 법령 및 방침에 따른 변경내용의 추가, 삭제 및 정정이 있는 경우에는 변경사항의 시행 7일 전부터 공지사항을 통하여 고지할 것입니다.</p>
<h2>9. 개인정보의 안전성 확보 조치</h2>
<p>신라 AMP은 개인정보보호법 제29조에 따라 다음과 같이 안전성 확보에 필요한 기술적/관리적 및 물리적 조치를 하고 있습니다.</p>
<h3>① 개인정보 취급 직원의 최소화 및 교육</h3>
<p>개인정보를 취급하는 직원을 지정하고 담당자에 한정시켜 최소화 하여 개인정보를 관리하는 대책을 시행하고 있습니다.</p>
<h3>② 해킹 등에 대비한 기술적 대책</h3>
<p>신라 AMP은 해킹이나 컴퓨터 바이러스 등에 의한 개인정보 유출 및 훼손을 막기 위하여 보안프로그램을 설치하고 주기적인 갱신·점검을 하며 외부로부터 접근이 통제된 구역에 시스템을 설치하고 기술적/물리적으로 감시 및 차단하고 있습니다.</p>
<h3>③ 개인정보의 암호화</h3>
<p>이용자의 개인정보는 비밀번호는 암호화 되어 저장 및 관리되고 있어, 본인만이 알 수 있으며 중요한 데이터는 파일 및 전송 데이터를 암호화 하거나 파일 잠금 기능을 사용하는 등의 별도 보안기능을 사용하고 있습니다.</p>
<h3>④ 접속기록의 보관 및 위변조 방지</h3>
<p>개인정보처리시스템에 접속한 기록을 최소 6개월 이상 보관, 관리하고 있으며, 접속 기록이 위변조 및 도난, 분실되지 않도록 보안기능 사용하고 있습니다.</p>
<h3>⑤ 개인정보에 대한 접근 제한</h3>
<p>개인정보를 처리하는 데이터베이스시스템에 대한 접근권한의 부여,변경,말소를 통하여 개인정보에 대한 접근통제를 위하여 필요한 조치를 하고 있으며 침입차단시스템을 이용하여 외부로부터의 무단 접근을 통제하고 있습니다.</p>
<h2>10. 정보주체의 권익침해에 대한 구제방법</h2>
<p>아래의 기관은 신라 AMP과는 별개의 기관으로서, 신라 AMP의 자체적인 개인정보 불만처리, 피해구제 결과에 만족하지 못하시거나 보다 자세한 도움이 필요하시면 문의하여 주시기 바랍니다.</p>
<div class="contact-info">
<h3>▶ 개인정보 침해신고센터 (한국인터넷진흥원 운영)</h3>
<ul>
<li><strong>소관업무</strong>: 개인정보 침해사실 신고, 상담 신청</li>
<li><strong>홈페이지</strong>: privacy.kisa.or.kr</li>
<li><strong>전화</strong>: (국번없이) 118</li>
<li><strong>주소</strong>: (58324) 전남 나주시 진흥길 9(빛가람동 301-2) 3층 개인정보침해신고센터</li>
</ul>
<h3>▶ 개인정보 분쟁조정위원회</h3>
<ul>
<li><strong>소관업무</strong>: 개인정보 분쟁조정신청, 집단분쟁조정 (민사적 해결)</li>
<li><strong>홈페이지</strong>: www.kopico.go.kr</li>
<li><strong>전화</strong>: (국번없이) 1833-6972</li>
<li><strong>주소</strong>: (03171)서울특별시 종로구 세종대로 209 정부서울청사 4층</li>
</ul>
<h3>▶ 대검찰청 사이버범죄수사단</h3>
<p><strong>전화</strong>: 02-3480-3573 (www.spo.go.kr)</p>
<h3>▶ 경찰청 사이버안전국</h3>
<p><strong>전화</strong>: 182 (http://cyberbureau.police.go.kr)</p>
</div>
<div class="footer">
<p><strong>시행일자</strong>: 2024년 1월 1일</p>
<p>본 개인정보처리방침은 신라 AMP 서비스 이용과 관련된 개인정보 보호에 대한 정책을 담고 있습니다.</p>
</div>
</div>
</body>
</html>