# ⚡ Test Project: Module A — Speed Test ## 1. 과제 개요 (Project Overview) 본 과제는 웹 기술 전반에 걸친 실무 숙련도를 빠르고 정확하게 측정하는 **Speed Test** 형식의 평가입니다. 선수는 **A(Design)**, **B(Layout)**, **C(Frontend)**, **D(Backend)** 4개 분류에 걸쳐 총 20개의 독립 Task를 제한 시간 내에 완성해야 합니다. 각 Task는 서로 독립적이며, 순서에 상관없이 자유롭게 풀이할 수 있습니다. --- ## 2. 기술 스택 및 제약 조건 (Tech Stack & Constraints) | 분류 | 허용 기술 | 제약 사항 | | :--- | :--- | :--- | | **A. Design** | GIMP | Photoshop 등 타 편집 프로그램 사용 불가 | | **B. Layout** | HTML, CSS | JavaScript 사용 불가 | | **C. Frontend** | JavaScript (Vanilla) | 외부 라이브러리/프레임워크 사용 불가 | | **D. Backend** | PHP, MySQL | PDO 방식으로 DB 연결 | * 모든 Task의 결과물은 데스크톱 Chrome 브라우저 기준으로 평가합니다. * 각 Task의 결과물은 `/module_a/{task_id}/` 경로에 저장하십시오. (예: `/module_a/a1/`, `/module_a/b1/`) * Design Task 제출 시에는 GIMP 원본 파일(`.xcf`)도 함께 포함해야 합니다. --- ## 3. Task 목록 및 요구사항 (Tasks) ### 🎨 A. Design — GIMP 활용 능력 > **제공 파일**: A1(`source.png`), A2(`base.jpg`), A3(`photo.jpg`, `mask.png`) Task의 작업 디렉토리에 미리 배치되어 있습니다. A4, A5는 제공 파일이 없으며 선수가 직접 생성합니다. #### **A1. 레이어 합성 및 텍스트 배치** `Easy` GIMP에서 레이어 구조를 활용한 이미지를 제작하십시오. * 캔버스 크기: **800×400px**, 해상도: **72dpi** * **레이어 1**: `#2C3E50` 단색 배경을 채우십시오. * **레이어 2**: 제공된 이미지(`source.png`)를 불러와 캔버스 **중앙**에 배치하고 불투명도를 **70%**로 설정하십시오. * **레이어 3**: 텍스트 **"Hello, GIMP"** 를 흰색(`#FFFFFF`), 36pt로 추가하고 캔버스 좌측 상단 **(x: 20px, y: 20px)** 에 배치하십시오. * 모든 레이어를 병합(Flatten Image)하기 전에 `.xcf` 원본 파일로 먼저 저장하십시오. 이후 레이어를 병합하여 `result.png`로 내보내십시오. #### **A2. 선택 영역 및 레이어 합성** `Easy` GIMP의 선택 도구와 레이어를 활용하여 이미지에 도형 효과를 적용하십시오. * 제공된 이미지(`base.jpg`)를 배경 레이어로 여십시오. * **효과 1**: 새 레이어를 추가하고 이미지 좌측 상단 **(0, 0) ~ (200, 200)** 영역을 사각형 선택 도구로 선택한 뒤 `#E74C3C`으로 채우십시오. 이 레이어의 불투명도를 **60%**로 설정하십시오. * **효과 2**: 또 다른 새 레이어를 추가하고 이미지 **중앙**에 지름 **150px** 타원 선택 영역을 만드십시오. `Selection → Border` (한국어: 선택 → 경계선)에서 경계 두께를 **3px**로 설정한 뒤 `#FFFFFF`로 채우십시오. * `.xcf` 원본 파일로 먼저 저장한 뒤, 레이어를 병합(Flatten Image)하여 `result.jpg`로 내보내십시오. #### **A3. 색상 보정 및 레이어 마스크** `Normal` 제공된 이미지(`photo.jpg`)를 GIMP에서 색상 보정하고 레이어 마스크를 적용하십시오. * **색상 보정**: 색조-채도(Hue-Saturation) 도구로 채도(Saturation)를 **+40** 올리십시오. * **곡선 조정**: 곡선(Curves) 도구에서 밝은 영역 출력값을 **+20 이상**, 어두운 영역 출력값을 **-20 이하**로 조정하여 대비를 높이십시오. * **레이어 마스크**: 이미지 레이어에 레이어 마스크를 추가하고, 제공된 마스크 이미지(`mask.png`)를 해당 마스크 레이어에 붙여넣어 피사체 외 배경이 제거되도록 하십시오. * 완성본을 `result.png`로 내보내기 전에 `.xcf` 원본 파일로 먼저 저장하십시오. 내보낼 때 투명 배경이 유지되도록 PNG 형식을 사용하십시오. #### **A4. 텍스트 이펙트 및 발광 효과** `Normal` GIMP에서 텍스트에 발광(glow) 시각 효과를 적용하십시오. * 캔버스 크기: **600×200px**, 배경색: `#1A1A2E` * 텍스트 **"SPEED TEST"** 를 흰색(`#FFFFFF`), Bold, 60pt로 캔버스 중앙에 배치하십시오. * 텍스트 레이어를 복사하여 복사본 레이어를 텍스트 레이어 **아래**에 배치하십시오. * 복사본 레이어를 래스터화(Layer → Rasterize)한 뒤, 레이어 패널에서 해당 레이어의 모드(Mode)를 **`Color`**로 먼저 변경하십시오. 그 다음 전경색을 `#4A90D9`로 설정하고 `Edit → Fill with Foreground Color`를 실행하여 파란색이 적용되도록 하십시오. * 해당 복사본 레이어에 **가우시안 흐림(Gaussian Blur)** 효과를 반경 **8px**로 적용하여 외곽 발광 효과를 완성하십시오. * `.xcf` 원본 파일로 먼저 저장한 뒤 `result.png`로 내보내십시오. #### **A5. 텍스트 워프 및 필터 효과** `Hard` GIMP에서 텍스트를 래스터화하고 Distorts 필터를 조합하여 시각적 변형 효과를 구현하십시오. * 캔버스 크기: **800×300px**, 배경색: `#0D0D0D` * 텍스트 **"DISTORTION"** 을 흰색(`#FFFFFF`), Bold, 72pt로 캔버스 중앙에 배치하십시오. * 텍스트 레이어를 래스터화(Layer → Rasterize)하십시오. * 래스터화된 텍스트 레이어에 다음 두 가지 Distorts 필터를 순서대로 적용하십시오. * **Ripple**: Amplitude **8**, Wavelength **40**, 방향 Horizontal * **Whirl and Pinch**: Whirl angle **20**도, Pinch **0**, Radius **1.0** * 필터 적용이 완료된 텍스트 레이어를 복사하여 복사본에 **가우시안 흐림(Gaussian Blur)** 반경 **3px**를 적용하고, 복사본을 원본 텍스트 레이어 아래에 배치하여 잔상 효과를 구현하십시오. * `.xcf` 원본 파일로 먼저 저장한 뒤 `result.png`로 내보내십시오. --- ### 📐 B. Layout — HTML / CSS 전용 #### **B1. Flexbox 카드 레이아웃** `Easy` HTML과 CSS만을 사용하여 카드 목록 레이아웃을 구현하십시오. * **Flexbox**를 사용하여 카드를 한 줄에 **4개**씩 배치하십시오. (`flex-wrap: wrap` 사용) * 각 카드는 이미지 영역(`
`), 버튼(`