diff --git a/src/app/(user)/jobfair/advices/page.tsx b/src/app/(user)/jobfair/advices/page.tsx index d58fd75..e18edd0 100644 --- a/src/app/(user)/jobfair/advices/page.tsx +++ b/src/app/(user)/jobfair/advices/page.tsx @@ -48,7 +48,7 @@ const JobFairPage = () => { }); }; - const fetchInterviews = useCallback(async () => { + const fetchInterviews = useCallback(async () => { try { const response = await CommonAxios.get("/jobInterviews", { params: { @@ -68,7 +68,6 @@ const JobFairPage = () => { } }, [selectedYear, searchQuery, isLoggedIn]); - useEffect(() => { fetchInterviews(); // 데이터 가져오기 함수 호출 // TODO: isLoggedIn 을 추가한 이유는, 최초 요청 시 토큰 없이 요청이 되고 diff --git a/src/app/(user)/policy/page.module.css b/src/app/(user)/policy/page.module.css new file mode 100644 index 0000000..d0e850f --- /dev/null +++ b/src/app/(user)/policy/page.module.css @@ -0,0 +1,108 @@ +.container { + display: block; + padding: 0 16px; +} + +.hero { + background: #f7f9fb; + padding: 48px 0; + border-bottom: 1px solid #eef2f6; +} +.heroInner { + max-width: 1000px; + margin: 0 auto; + text-align: center; + padding: 0 12px; +} +.title { + font-size: 34px; + line-height: 1; + margin: 0; + font-weight: 700; + color: #0b1220; +} +.subtitle { + margin: 12px 0; + color: #475569; + max-width: 840px; + margin-left: auto; + margin-right: auto; +} +.effective { + display: block; + margin-top: 6px; + color: #94a3b8; + font-size: 13px; +} + +.containerBody { + max-width: 1000px; + margin: 28px auto 80px; + padding: 0 12px; +} + +.card { + border: 1px solid #e6edf3; + border-radius: 10px; + padding: 18px 20px; + margin-bottom: 16px; + background: #fff; +} +.cardHeader { + display: flex; + align-items: center; + gap: 12px; + margin-bottom: 8px; +} +.cardIcon { + width: 36px; + height: 36px; + border-radius: 9px; + display: inline-flex; + align-items: center; + justify-content: center; + background: #f1f5f9; + color: #0b1220; +} +.cardTitle { + margin: 0; + font-size: 16px; + font-weight: 700; +} +.cardBody { + margin: 0; + color: #334155; + line-height: 1.6; + font-size: 14px; + white-space: pre-wrap; +} + +.contactCard { + border: 1px solid #e6edf3; + border-radius: 10px; + padding: 18px 20px; + margin-top: 24px; + background: #fbfeff; +} +.contactTitle { + margin: 0 0 8px 0; + font-size: 15px; + font-weight: 700; +} +.contactBody { + color: #334155; + font-size: 14px; + line-height: 1.6; +} + +@media (min-width: 1024px) { + .hero { + padding: 64px 0; + } + .title { + font-size: 40px; + } + .containerBody { + margin-top: 40px; + } +} diff --git a/src/app/(user)/policy/page.tsx b/src/app/(user)/policy/page.tsx new file mode 100644 index 0000000..3cd8f01 --- /dev/null +++ b/src/app/(user)/policy/page.tsx @@ -0,0 +1,92 @@ +"use client"; + +import styles from "./page.module.css"; + +export default function PolicyPage() { + const sections = [ + { + title: "제1조 (목적)", + body: "이 약관은 SCG의 웹사이트 및 콘텐츠 관련 제반 서비스를 이용함에 있어 필요한 사항을 규정합니다.", + }, + { + title: "제2조 (정의)", + body: "“이용자”란 본 사이트에 접속하여 콘텐츠를 열람하거나 서비스를 신청한 자를 말합니다. “서비스”란 SCG가 제공하는 웹/플랫폼 관련 정보 및 문의기능 일체를 말합니다.", + }, + { + title: "제3조 (약관의 효력 및 변경)", + body: "본 약관은 홈페이지에 게시함으로써 효력이 발생합니다. 관련 법령 및 서비스 정책 변경 시 사전 공지 후 개정 가능합니다.", + }, + { + title: "제4조 (서비스의 이용)", + body: "이용자는 본 약관 및 관련 법령을 준수하여야 하며, 타인의 권리를 침해하거나 부정한 목적으로 이용할 수 없습니다.", + }, + { + title: "제5조 (지적재산권)", + body: "본 웹사이트에 게재된 콘텐츠(텍스트, 이미지, 영상 등)의 저작권은 성균관대학교에 있으며 무단 복제 및 배포를 금합니다.", + }, + { + title: "제6조 (면책조항)", + body: "SCG는 천재지변, 기술적 장애, 이용자 귀책사유로 인한 서비스 장애에 대해 책임을 지지 않습니다.", + }, + { + title: "제7조 (분쟁 해결)", + body: "본 약관에 따른 분쟁은 대한민국 법률에 따르며, SCG 소재지를 관할하는 법원을 제1심 법원으로 합니다.", + }, + ]; + + return ( +
+
+
+

이용약관

+

+ 본 약관은 시스템컨설턴트그룹(이하 ‘SCG’)이 제공하는 웹사이트 및 관련 서비스의 이용 + 조건을 규정합니다. +

+ +
+
+ +
+ {sections.map((s, idx) => ( +
+
+

{s.title}

+
+

{s.body}

+
+ ))} + +
+
+

부칙

+
+

본 약관은 2025년 8월 20일부터 시행합니다.

+
+ + +
+
+ ); +} diff --git a/src/app/(user)/privacy/page.module.css b/src/app/(user)/privacy/page.module.css new file mode 100644 index 0000000..dc1b9f2 --- /dev/null +++ b/src/app/(user)/privacy/page.module.css @@ -0,0 +1,124 @@ +.container { + display: block; + padding: 0 16px; +} + +.containerBody { + max-width: 1000px; + margin: 28px auto 80px; + padding: 0 12px; +} + +.hero { + background: #f7f9fb; + padding: 48px 0; + border-bottom: 1px solid #eef2f6; +} +.heroInner { + max-width: 1000px; + margin: 0 auto; + text-align: center; + padding: 0 12px; +} + +.title { + font-size: 34px; + line-height: 1; + margin: 0; + font-weight: 700; + color: #0b1220; +} +.subtitle { + margin: 12px 0; + color: #475569; + max-width: 840px; + margin-left: auto; + margin-right: auto; +} +.effective { + display: block; + margin-top: 6px; + color: #94a3b8; + font-size: 13px; +} + +.content { + max-width: 900px; + margin: 2rem auto; + color: rgb(55, 53, 47); + line-height: 1.7; + word-break: keep-all; +} + +.pageTitle { + font-size: 2rem; + font-weight: 700; + margin: 0 0 1rem; +} + +.content h2 { + font-size: 1.5rem; + margin: 1.5rem 0 0.5rem; + font-weight: 700; +} + +.content h3 { + font-size: 1.25rem; + margin: 1.25rem 0 0.5rem; + font-weight: 700; +} + +.content p { + margin: 0.5rem 0; +} + +.content a { + color: inherit; + text-decoration: underline; +} + +.content ul, +.content ol { + margin: 0.6rem 0; + padding-left: 1.25rem; +} + +.content li { + margin: 0.25rem 0; +} + +.content table { + width: 100%; + border-collapse: collapse; + margin: 1rem 0; +} + +.content th, +.content td { + border: 1px solid rgba(55, 53, 47, 0.12); + padding: 0.5rem; + text-align: left; + vertical-align: top; +} + +.content th { + color: rgba(55, 53, 47, 0.7); + font-weight: 600; + background: rgba(55, 53, 47, 0.03); +} + +.content blockquote { + margin: 1rem 0; + padding-left: 1rem; + border-left: 3px solid rgba(55, 53, 47, 0.7); +} + +.indented { + padding-left: 1.25rem; +} + +@media (min-width: 1024px) { + .content { + margin: 3rem auto; + } +} diff --git a/src/app/(user)/privacy/page.tsx b/src/app/(user)/privacy/page.tsx new file mode 100644 index 0000000..7c89b52 --- /dev/null +++ b/src/app/(user)/privacy/page.tsx @@ -0,0 +1,310 @@ +"use client"; + +import styles from "./page.module.css"; + +export default function PrivacyPage() { + return ( +
+
+
+

시스템컨설턴트그룹 개인정보 처리방침

+
+
+
+
+

+ 시스템컨설턴트그룹(이하 ‘SCG’)은 정보주체의 자유와 권리 보호를 위해 「개인정보 보호법」 및 + 관계 법령이 정한 바를 준수하여, 적법하게 개인정보를 처리하고 안전하게 관리하고 있습니다. + 이에 「개인 정보 보호법」 제30조에 따라 정보주체에게 개인정보 처리에 관한 절차 및 기준을 + 안내하고, 이와 관련된 고충을 신속하고 원활하게 처리할 수 있도록 하기 위하여 다음과 같이 + 개인정보 처리방침을 수립·공개합니다. +

+ +

개인정보의 처리 목적

+

+ SCG는 다음의 목적을 위하여 개인정보를 처리합니다. 처리하고 있는 개인정보는 다음의 목적 + 외의 용도로는 이용되지 않으며, 이용 목적이 변경되는 경우에는 「개인정보 보호법」 제18조에 + 따라 별도의 동의를 받는 등 필요한 조치를 이행할 예정입니다. +

+
    +
  1. + 회원 가입 및 관리 +

    + 회원 가입 의사 확인, 회원제 서비스 제공에 따른 본인 식별·인증, 회원자격 유지·관리, + 서비스 부정이용 방지, 각종 고지·통지, 고충처리 목적으로 개인정보를 처리합니다. +

    +
  2. +
  3. + 재화 또는 서비스 제공 +

    + 이벤트 상품 제공, 서비스 제공, 계약서·청구서 발송, 콘텐츠 제공, 맞춤형 서비스 제공, + 본인인증, 연령인증, 학생 혹은 교직원 신분인증의 목적으로 개인정보를 처리합니다. +

    +
  4. +
  5. + 서비스 개선 및 분석 +

    + 서비스 이용에 대한 분석, 인구통계학적 분석 및 서비스 개선을 목적으로 개인정보를 + 처리합니다. +

    +
  6. +
  7. + 서비스 개발 +

    기존 서비스와 별개의 신규 서비스 개발 목적으로 개인정보를 처리합니다.

    +
  8. +
+ +

처리하는 개인정보의 항목

+

SCG는 다음과 같은 개인정보 법적 근거로 정보주체의 개인정보를 수집 및 이용합니다.

+ +

+ 1. 정보주체의 동의를 받지 않고 처리하는 개인정보 항목 +

+

SCG는 다음의 개인정보 항목을 정보주체의 동의 없이 처리하고 있습니다.

+
    +
  1. + 회원 서비스 운영 +

    ・ 법적 근거: 「개인정보 보호법」 제15조제1항제4호(‘계약 체결·이행’)

    + +

    + ・ 수집·이용 항목 : 소셜 플랫폼에서 제공하는 이용자 고유 식별자(ID), 이메일주소, + 이름 또는 닉네임 +

    +
    +
  2. +
+ +

+ 2. 정보주체의 동의를 받아 처리하는 개인정보 항목 +

+

SCG는 다음의 개인정보 항목을 정보주체의 동의를 받아 처리하고 있습니다.

+
    +
  1. + 본인 식별, 서비스 관련 중요 정보 전달 +

    ・ 법적 근거: 「개인정보 보호법」 제15조제1항제1호(‘동의’)

    + +

    ・ 수집·이용 항목 : 성명, 전화번호, 이메일주소

    +
    +
  2. +
  3. + (학생) 학내 커뮤니티 이용 자격 증명 +

    ・ 법적 근거: 「개인정보 보호법」 제15조제1항제1호(‘동의’)

    + +

    ・ 수집·이용 항목 : 학번, 학과

    +
    +
  4. +
  5. + (교수/교직원/기업관계자) 전용 서비스 접근 권한 부여 +

    ・ 법적 근거: 「개인정보 보호법」 제15조제1항제1호(‘동의’)

    + +

    ・ 수집·이용 항목 : 소속, 직책

    +
    +
  6. +
  7. + (외부인) 서비스 이용 통계 및 분석, 부정 이용 방지 및 모니터링 +

    ・ 법적 근거: 「개인정보 보호법」 제15조제1항제1호(‘동의’)

    + +

    ・ 수집·이용 항목 : 가입경로

    +
    +
  8. +
+ +

개인정보의 처리 및 보유 기간

+

+ SCG는 법령에 따른 개인정보 보유·이용 기간 또는 정보주체로부터 개인정보를 수집 시에 + 동의받은 개인정보 보유·이용 기간 내에서 개인정보를 처리·보유합니다. +

+
    +
  1. + 회원 공통 정보 +

    + ・ 보유 정보: 소셜 플랫폼 제공 식별자(ID), 이메일 주소, 이름(닉네임), 성명, 전화번호, + 가입경로 등 +

    +

    + ・ 보유 기간: 회원 탈퇴 시까지 +

    +
  2. +
  3. + 이용자 유형별 추가 정보 +

    + ・ (학생) 보유 정보: 학번, 학과 +

    +
    +

    + ・ 보유 기간: 회원 탈퇴 시 또는 졸업 후 1년까지 +

    +
    +

    + ・ (교수/교직원/기업관계자) 보유 정보: 소속, 직책 +

    +
    +

    + ・ 보유 기간: 회원 탈퇴 시 또는 퇴직 후 즉시 파기 +

    +
    +
  4. +
  5. + 예외 사유 +

    + 다만, 다음의 사유에 해당하는 경우에는 해당 사유가 종료될 때까지{" "} + 개인정보를 보유합니다. +

    +

    + ・ 관계 법령 위반에 따른 수사·조사 등이 진행 중인 경우: 해당 수사·조사 종료 시까지 +

    +

    + ・ 서비스 이용에 따른 채권·채무관계가 남아있는 경우: 해당 채권·채무관계 정산 시까지 +

    +

    ・ 관련 법령에서 일정 기간 보관을 의무화하는 경우: 해당 법령에서 정한 기간까지

    +
  6. +
+ +

개인정보의 파기 절차 및 방법에 관한 사항

+
    +
  1. + SCG는 개인정보 보유기간의 경과, 처리목적 달성 등 개인정보가 불필요하게 되었을 때에는 + 지체없이 해당 개인정보를 파기합니다. +
  2. +
  3. + 정보주체로부터 동의받은 개인정보 보유기간이 경과하거나 처리목적이 달성되었음에도 + 불구하고 다른 법령에 따라 개인정보를 계속 보존하여야 하는 경우에는, 해당 개인정보를 + 별도의 데이터베이스(DB)로 옮기거나 보관장소를 달리하여 보존합니다. +
  4. +
  5. + 개인정보 파기의 절차 및 방법은 다음과 같습니다. +
      +
    1. + 파기절차 +

      + SCG는 파기 사유가 발생한 개인정보를 선정하고, SCG의 개인정보 보호책임자의 승인을 + 받아 개인정보를 파기합니다. +

      +
    2. +
    +
      +
    1. + 파기방법 +

      + SCG는 전자적 파일 형태로 기록·저장된 개인정보는 기록을 재생할 수 없도록 + 파기하며, 종이 문서에 기록·저장된 개인정보는 분쇄기로 분쇄하거나 소각하여 + 파기합니다. +

      +
    2. +
    +
  6. +
+ +

개인정보의 안전성 확보조치에 관한 사항

+

SCG는 개인정보의 안전성 확보를 위해 다음과 같은 조치를 취하고 있습니다.

+
    +
  1. 관리적 조치 : 내부 관리계획 수립·시행, 정기적 직원 교육, 전담조직 운영
  2. +
  3. + 기술적 조치 : 개인정보처리시스템에 대한 등의 접근 권한의 관리, 접근통제시스템 설치 및 + 기타 관련 보호 조치, 인터넷망 차단 조치, 개인정보의 암호화, 접속기록의 보관 및 점검, + 보안프로그램 설치 및 갱신, 개인정보처리시스템의 취약점 점검 및 보완 +
  4. +
  5. + 물리적 조치 : 전산실, 자료보관실 등의 접근통제, 서류·보조저장매체 등을 잠금장치가 있는 + 안전한 장소에 보관, 재해·재난에 대한 안전조치, 보조저장매체의 반출·입 통제 +
  6. +
+ +

정보주체와 법정대리인의 권리·의무 및 행사방법에 관한 사항

+
    +
  1. + 정보주체는 SCG에 대해 언제든지 개인정보 열람·전송·정정·삭제·처리정지 및 동의 철회 등을 + 요구(이하 “권리 행사”라 함)할 수 있습니다. +
  2. +
  3. + 권리 행사는 SCG에 대해 「개인정보 보호법 시행령」 제41조제1항에 따라 서면, 전화, + 전자우편, 인터넷 등을 통하여 하실 수 있으며, SCG는 이에 대해 지체없이 조치하겠습니다. +

    + · 정보주체는 언제든지 홈페이지에서 개인정보를 직접 조회·수정할 수 있으며 담당부서를 + 통해 개인정보를 삭제·처리정지·동의철회할 수 있습니다. +

    +
  4. +
  5. + 권리 행사는 정보주체의 법정대리인이나 위임을 받은 자 등 대리인을 통하여 하실 수도 + 있습니다. 이 경우 “개인정보 처리 방법에 관한 고시” [별지 11] 서식에 따른 위임장을 + 제출하셔야 합니다. +
  6. +
  7. + 정보주체가 개인정보 열람 및 처리 정지를 요구할 권리는 「개인정보 보호법」 제35조제4항 + 및 제37조제2항에 의하여 제한될 수 있습니다. +
  8. +
  9. + 다른 법령에서 그 개인정보가 수집 대상으로 명시되어 있는 경우에는 해당 개인정보의 + 삭제를 요구할 수 없습니다. +
  10. +
  11. SCG는 권리 행사를 한 자가 본인이거나 정당한 대리인인지를 확인합니다.
  12. +
  13. + 정보주체는 권리 행사를 아래의 부서에 할 수 있습니다. SCG는 정보주체로부터 권리행사를 + 청구받은 날로부터 10일(전송요구의 경우 지체 없이) 이내 회신하겠습니다. +

    ▶ 개인정보 권리 행사 청구 접수·처리 부서

    +
    +

    + 부서명 : 시스템컨설턴트그룹 +
    + 주소 : 성균관대학교 자연과학캠퍼스 제1공학관 22221 +
    + 연락처 : 031-290-7959,{" "} + + { + e.preventDefault(); + window.location.href = "mailto:" + ["scg", "@", "scg.skku.ac.kr"].join(""); + }} + style={{ wordBreak: "break-all" }} + > + scg [at] scg.skku.ac.kr + + +

    +
    +
  14. +
+ +

+ 개인정보 보호책임자의 성명 또는 개인정보 업무 담당부서 및 고충사항을 처리하는 부서에 + 관한 사항 +

+
    +
  1. + SCG는 개인정보 처리에 관한 업무를 총괄해서 책임지고, 개인정보 처리와 관련한 정보주체의 + 불만처리 및 피해구제 등을 위하여 아래와 같이 개인정보 보호책임자를 지정하고 있습니다. +

    ▶ 개인정보보호 담당부서

    +
    +

    + 부서명 : 시스템컨설턴트그룹 +
    + 주소 : 성균관대학교 자연과학캠퍼스 제1공학관 22221 +
    + 연락처 : 031-290-7959,{" "} + + { + e.preventDefault(); + window.location.href = "mailto:" + ["scg", "@", "scg.skku.ac.kr"].join(""); + }} + style={{ wordBreak: "break-all" }} + > + scg [at] scg.skku.ac.kr + + +

    +
    +
  2. +
  3. + 정보주체는 SCG의 서비스(또는 사업)를 이용하시면서 발생한 모든 개인정보보호 관련 문의, + 불만처리, 피해구제 등에 관한 사항을 개인정보 보호책임자 및 담당부서로 문의할 수 + 있습니다. SCG는 정보주체의 문의에 대해 지체없이 답변 및 처리해 드릴 것입니다. +
  4. +
+
+
+
+ ); +} diff --git a/src/components/common/Footer/Footer.tsx b/src/components/common/Footer/Footer.tsx index f55bdd7..927ffc3 100644 --- a/src/components/common/Footer/Footer.tsx +++ b/src/components/common/Footer/Footer.tsx @@ -30,9 +30,17 @@ export function Footer() {

Sungkyun Tech Open Party(S-TOP)

- 개인정보처리방침 + 개인정보처리방침
- 네티즌윤리규약 + 이용약관 +
+ + 네티즌윤리규약 +
diff --git a/src/components/common/GalleryPreview/GalleryPreview.tsx b/src/components/common/GalleryPreview/GalleryPreview.tsx index d8bf0af..5be711a 100644 --- a/src/components/common/GalleryPreview/GalleryPreview.tsx +++ b/src/components/common/GalleryPreview/GalleryPreview.tsx @@ -13,7 +13,6 @@ export interface Props { } export function GalleryPreview({ imgUrl, title, date, viewCount }: Props) { - function formatDate(date: Date) { const year = date.getFullYear(); const month = String(date.getMonth() + 1).padStart(2, "0"); // getMonth()는 0부터 시작하므로 +1 diff --git a/src/components/common/RegisterForm/registerForm.module.css b/src/components/common/RegisterForm/registerForm.module.css index 088518f..9353e6c 100644 --- a/src/components/common/RegisterForm/registerForm.module.css +++ b/src/components/common/RegisterForm/registerForm.module.css @@ -44,6 +44,13 @@ width: 300px; } +.link { + font-size: 14px; + text-decoration: underline; + margin-left: 8px; + vertical-align: middle; +} + /* Tablet Landscape */ @media screen and (max-width: 1280px) { .registerBox { diff --git a/src/components/common/RegisterForm/registerForm.tsx b/src/components/common/RegisterForm/registerForm.tsx index 7919978..07366c0 100644 --- a/src/components/common/RegisterForm/registerForm.tsx +++ b/src/components/common/RegisterForm/registerForm.tsx @@ -7,6 +7,7 @@ import { CommonAxios } from "@/utils/CommonAxios/CommonAxios"; import { useRouter } from "next/navigation"; // 추가 import React, { useState } from "react"; import classes from "./registerForm.module.css"; +import Link from "next/link"; const MEMBER_TYPES = ["학생", "교수/교직원", "기업관계자", "외부인"]; const SIGNUP_SOURCES = ["학과 게시판", "s-top 홍보자료", "학과 카톡방", "지인 소개", "기타"]; @@ -202,11 +203,17 @@ export function RegisterForm() {
- +
+ + 서비스 이용약관 +
- +
+ + 개인정보 처리방침 +

회원가입