이 과제집은 오후 자기주도 시간(10:40–12:00, 13:00–16:30)에 여러분이 혼자 읽고 그대로 수행할 수 있도록 만든 문서예요. 매일 정해진 산출물이 있고, 16:30 멘토 리뷰 시간에 반드시 제출해요. 오전 강의에서 배운 내용을 오후에 손으로 직접 확인하는 것이 이번 주의 핵심이에요.
2주차 내내 매일 같은 리듬으로 움직여요. 시간을 몸에 익히면 과제에만 집중할 수 있어요.
규칙 하나만 기억해요: 과제가 일찍 끝나면 놀지 말고 예비 과제로 — 예비 과제도 평가에 반영돼요.
오전 강의 "코드베이스 구조 훑기"에서 본 폴더들을, 오후에는 직접 열어 보고 내 손으로 지도를 그려요.
처음 보는 프로젝트를 받아도 "어디에 무엇이 있는지" 10분 안에 파악하는 눈을 만들어요.
src/, src/components/, src/pages/, src/hooks/, src/api/, public/, node_modules/ 등. 각 폴더 안의 파일 2~3개를 실제로 열어 보고 "이 폴더의 역할"을 한 줄로 적어요. 추측이면 문장 끝에 (추측)이라고 표시해요.src/main/java/ 아래 패키지(controller, service, repository, domain/entity, config 등)와 src/main/resources/를 중심으로 폴더 10개를 골라 역할 한 줄을 적어요.[프로젝트 이름] ______________ (React / Spring Boot 중 하나) 폴더 트리 (10개 이상) ├─ 폴더명 ..................... 역할 한 줄: ______________________ │ └─ 대표 파일 1개: ______________ ├─ 폴더명 ..................... 역할 한 줄: ______________________ │ └─ 대표 파일 1개: ______________ ... (10개까지 반복) 공통점·차이점 (두 장을 다 그린 뒤 작성) - 공통점 1: ______________________ - 공통점 2: ______________________ - 차이점 1: ______________________ - 차이점 2: ______________________ 모르겠는 파일 질문 3개 1) 경로: ______________ / 질문: ______________________ 2) 경로: ______________ / 질문: ______________________ 3) 경로: ______________ / 질문: ______________________
아래 10문제를 새 파일 day1.js에 번호 주석과 함께 풀어요. 브라우저 콘솔이나 Node로 실행해 console.log 결과를 확인하고, 답은 외우지 말고 직접 실행해서 검증해요.
1. 변수 name에 자기 이름, age에 나이를 담고 "저는 OO이고 18살입니다" 형태로 출력하세요. (템플릿 문자열 ` ` 사용) 2. let과 const의 차이를 코드로 증명하세요. const로 선언한 변수에 재할당을 시도하고, 발생한 에러 메시지를 주석으로 남기세요. 3. 숫자 score가 90 이상이면 "A", 80 이상이면 "B", 그 외에는 "C"를 출력하는 if/else if/else를 작성하세요. score를 95, 82, 60으로 바꿔 3번 실행해 보세요. 4. 숫자 n이 짝수면 "짝수", 홀수면 "홀수"를 출력하세요. (% 연산자 사용) 5. for 반복문으로 1부터 10까지 출력하세요. 6. for 반복문으로 1부터 100까지의 합을 구해 출력하세요. (정답은 5050이 나와야 해요) 7. while 반복문으로 10부터 1까지 거꾸로 출력하세요. 8. 1부터 30까지 중 3의 배수만 출력하세요. (if와 % 조합) 9. 구구단 7단을 "7 x 1 = 7" 형태로 출력하세요. 10. 이중 for문으로 별 찍기: 1줄에 *, 2줄에 **, ... 5줄에 *****가 나오게 출력하세요.
16:30까지 제출할 것 — 팀 공유 폴더의 본인 이름 폴더에 올려요.
day1.js — 10문제 풀이, 문제 번호 주석 포함, 전부 실행돼야 해요프로젝트의 "명함"인 설정 파일을 읽고 이 프로젝트가 무엇으로 만들어졌는지 설명할 수 있게 돼요.
package.json을 열어요.scripts 항목의 명령어 각각이 무슨 일을 하는지 추측해서 한 줄씩 적어요. (예: dev, build, lint)dependencies에서 라이브러리 5개를 골라 이름을 검색해 보고, 각각의 용도를 한 줄로 적어요.pom.xml(또는 build.gradle)을 열어 같은 방식으로 의존성 5개의 용도를 적어요.메모 1장(스크립트 설명 + 라이브러리 10개 용도)을 본 과제 산출물과 함께 제출해요. 예비 과제도 평가에 반영돼요.
디자이너는 코드 대신 화면을 지도화해요. 이번 주 내내 우리 서비스 화면을 뒤져 "UI 인벤토리"를 만들고, 금요일에 개선 리포트로 완성해요. 오늘은 그 첫날, 색상이에요.
16:30까지:
오전 강의 "Network 탭 요청 흐름"에서 본 것을, 오후에는 우리 서비스에서 직접 잡아내요.
화면 뒤에서 오가는 요청과 응답을 스스로 관찰하고 "이 요청이 무슨 일을 하는지" 추론하는 힘을 길러요.
요청 #__ 이름(내가 붙인 별명): ______________
- 언제 발생? (무슨 버튼/화면): ______________________
- Method: GET / POST / PUT / DELETE 중 ______
- URL: ______________________
- 요청 데이터(Payload, 없으면 "없음"): ______________________
- 응답 상태 코드: ______
- 응답 데이터(핵심 필드 위주): ______________________
- 추측: 이 요청은 ______________________ 를 하는 것 같다.
- 근거: ______________________
(마지막에 한 번만) 실패 실험
- 실험 방법: ______________________
- 성공 시: 코드 ____ / 응답 ______________
- 실패 시: 코드 ____ / 응답 ______________
아침 자료구조 강의(배열·리스트)와 연결되는 문제예요. day2.js에 15문제를 모두 풀고 실행해서 확인해요.
공통 준비: const fruits = ["사과", "바나나", "포도"]; const nums = [3, 1, 4, 1, 5, 9, 2, 6];
1. fruits 배열 끝에 "딸기"를 추가하고(push) 배열 전체를 출력하세요.
2. fruits 배열의 마지막 요소를 제거하고(pop) 제거된 값과 남은 배열을 각각 출력하세요.
3. fruits 배열 맨 앞에 "귤"을 추가하세요(unshift). 맨 앞 요소를 제거하는 것(shift)도 해 보세요.
4. nums 배열의 길이(length)와 3번째 요소(인덱스 주의!)를 출력하세요.
5. nums에서 5가 몇 번째 인덱스에 있는지 indexOf로 찾아 출력하세요. 없는 값 100을 찾으면 무엇이 나오는지도 확인하세요.
6. nums 배열에 9가 포함되어 있는지 includes로 확인해 true/false를 출력하세요.
7. for문으로 nums의 모든 요소를 한 줄씩 출력하세요. 그다음 같은 일을 forEach로 다시 작성하세요.
8. nums의 모든 요소를 2배로 만든 새 배열을 map으로 만들어 출력하세요. (원본 nums는 그대로여야 해요 — 확인 출력 포함)
9. nums에서 4 이상인 요소만 남긴 새 배열을 filter로 만들어 출력하세요.
10. nums의 합계를 구하세요. 먼저 for문으로, 그다음 reduce로 두 번 구현하세요.
11. nums에서 가장 큰 값을 찾으세요. (반복문으로 직접 — Math.max 금지)
12. fruits 배열을 join으로 "사과, 바나나, 포도" 형태의 문자열로 만들어 출력하세요.
13. nums를 오름차순 정렬하세요. sort()만 쓰면 [1,1,2,3,4,5,6,9]가 안 나올 수 있어요 — 왜 그런지 주석으로 설명하고 올바르게 고치세요.
14. 학생 배열 const students = [{name:"김", score:85}, {name:"이", score:92}, {name:"박", score:78}] 에서 score가 80 이상인 학생의 name만 담긴 배열을 만드세요. (filter + map 조합)
15. nums에서 중복을 제거한 새 배열을 만드세요. 방법은 자유(반복문, includes, Set 등) — 어떤 방법을 왜 골랐는지 주석 한 줄을 남기세요.
16:30까지 제출할 것
day2.js — 배열 15문제 풀이 (문제 번호 주석 포함)자주 만나는 HTTP 상태 코드를 내 언어로 정리해 두면 앞으로 에러를 볼 때 당황하지 않아요.
200, 201, 301, 400, 401, 403, 404, 500.상태 코드 카드 8장(문서 1개로 정리)을 본 과제와 함께 제출해요.
개발자가 Network 탭을 보는 동안, 디자이너는 개발자도구의 Elements 탭으로 글자를 관찰해요. 같은 도구(F12)를 다른 각도로 쓰는 날이에요.
16:30까지:
오전 강의 "기능 읽기"에서 배운 추적법으로, 오후에는 기능 하나를 끝까지 해부해요. 월(구조)·화(요청)를 합치는 날이에요.
"버튼 클릭부터 응답까지" 한 기능의 전체 여정을 코드와 화면을 오가며 설명할 수 있게 돼요 — 이게 되면 코드 읽기의 절반은 끝난 거예요.
@GetMapping·@PostMapping의 경로 검색). 컨트롤러 → 서비스 → 리포지토리로 이어지는 호출을 따라가며 각 단계의 파일·줄·역할 한 줄을 기록해요. 모든 줄을 이해할 필요는 없어요 — 흐름의 연결만 잡으면 성공이에요.■ 기능 이름: ______________ (예: 로그인)
■ 한 줄 요약: 사용자가 ______ 하면 ______ 가 일어난다.
① 화면에서 관찰한 것
- 트리거(무엇을 눌렀나): ______________
- 화면 변화: ______________
- 발생한 요청: METHOD ______ URL ______________
- 응답(핵심만): ______________
② 프론트 코드
- 화면/버튼 담당 파일: ______________ (____ 줄 근처)
- 이 파일이 하는 일 한 줄: ______________
- API 호출 코드 위치: ______________ (____ 줄 근처)
③ 백엔드 코드
- 컨트롤러: ______________ (____ 줄) — 역할: ______________
- 서비스: ______________ (____ 줄) — 역할: ______________
- 리포지토리/DB 접근: ______________ (____ 줄) — 역할: ______________
④ 전체 흐름 한 문장
버튼 클릭 → __________ → __________ → __________ → 화면 갱신
⑤ ❓ 이해 못 한 지점 (최소 2개, 솔직하게)
1) ______________________
2) ______________________
아침 자료구조 강의(해시)와 연결돼요. 객체와 Map은 "이름표로 값을 찾는 구조"예요. day3.js에 10문제를 풀어요.
1. 자신을 표현하는 객체 me를 만드세요. name, age, school, hobby 4개 속성을 넣고 전체를 출력하세요.
2. me.hobby를 점 표기법으로, me["school"]을 대괄호 표기법으로 각각 출력하세요. 두 방식의 차이를 주석 한 줄로 적으세요.
3. me에 새 속성 goal(올해 목표)을 추가하고, age 속성을 delete로 삭제한 뒤 결과를 출력하세요.
4. Object.keys(me)와 Object.values(me)를 출력하고, 각각 무엇이 나오는지 주석으로 설명하세요.
5. for...in 반복문으로 me의 모든 "속성이름: 값"을 한 줄씩 출력하세요.
6. 메뉴판 객체 const menu = { 아메리카노: 4500, 라떼: 5000, 주스: 6000 } 에서 사용자가 고른 메뉴 이름(변수 pick)의 가격을 출력하세요. menu에 없는 메뉴면 "없는 메뉴입니다"를 출력하세요.
7. 문자열 "hello world"에서 각 글자가 몇 번 나오는지 세는 객체를 만드세요. (예: {h:1, e:1, l:3, ...}) 공백은 제외하세요.
8. new Map()으로 학번→이름 Map을 만들고 set으로 3명을 넣은 뒤, get으로 1명을 꺼내고 has로 존재 여부를 확인하세요. size도 출력하세요.
9. 7번을 객체 대신 Map으로 다시 구현하세요. 객체 버전과 Map 버전 중 어느 쪽이 편했는지 주석 한 줄로 적으세요.
10. 학생 배열 [{name:"김", team:"A"}, {name:"이", team:"B"}, {name:"박", team:"A"}] 를 팀별로 묶은 객체 {A:["김","박"], B:["이"]} 로 변환하세요.
16:30까지 제출할 것
day3.js — 객체·Map 10문제 풀이한 번 해 본 해부를 다른 기능에 반복하면 속도가 2배로 붙는 걸 스스로 느낄 수 있어요.
미니 보고서 1건(①+④만)과 소요 시간 비교 한 줄을 함께 제출해요.
개발자가 기능 하나를 세로로 깊게 파는 동안, 디자이너는 컴포넌트를 가로로 넓게 모아요. 오늘이 인벤토리 중 가장 손이 많이 가는 날이에요.
16:30까지:
오전 강의 "Git 실전(브랜치→PR)"의 흐름을, 오후에 연습 저장소에서 3번 반복해 몸에 새겨요.
실무 협업의 기본 사이클(브랜치→커밋→PR→리뷰)을 혼자서 처음부터 끝까지 3번 돌릴 수 있게 돼요.
git clone 주소 → cd 폴더명 순서예요.git switch -c fix/readme-오타-본인이름 으로 브랜치를 만들고, README에 심어 둔 오타를 찾아 고쳐요. git add → git commit -m "docs: README 오타 수정" → git push -u origin 브랜치명 → 저장소 웹 화면에서 PR 생성. PR 설명은 아래 양식대로 써요.git switch main → git pull) 새 브랜치 docs/주석-본인이름을 만들어요. 저장소의 utils.js에서 주석 없는 함수 2개를 골라 "무엇을 받아 무엇을 돌려주는지" 주석을 달고, 같은 사이클로 PR까지 만들어요.feat/함수-본인이름에서 utils.js에 아래 세 함수 중 2개를 골라 구현해요: ⓐ sum(arr) 배열의 합 반환 ⓑ maxNum(arr) 배열의 최댓값 반환 ⓒ countChar(str, ch) 문자열에서 특정 글자 개수 반환. console.log로 각각 2가지 입력을 실행해 결과 확인 후 PR까지 만들어요.## 무엇을 했나요? - (한 줄로: 예. README의 오타 3곳을 수정했습니다) ## 왜 했나요? - (예: 새로 온 사람이 문서를 읽을 때 헷갈리지 않도록) ## 확인한 방법 - (예: 수정한 함수를 console.log로 2가지 입력에 대해 실행해 확인) ## 리뷰어에게 - 특히 봐 주셨으면 하는 부분: ______________
16:30까지 제출할 것
좋은 커밋 메시지와 나쁜 커밋 메시지를 구별하는 눈을 만들어요.
1. "수정" 2. "asdf" 3. "버그 고침 + 새 기능 + 오타 수정 + 리팩토링" 4. "금요일 작업분" 5. "이제 진짜 됨" 6. "코드 추가"
고쳐 쓴 메시지 6개 + 문제점 6줄을 문서로 제출해요.
디자이너도 오전 Git 강의는 함께 들어요. 오후에는 개발자의 PR 대신, 월~수 인벤토리(색·글자·컴포넌트)를 증거 삼아 불일치를 잡아내요. 여유가 되면 개발자 연습 저장소에서 README 오타 수정 PR 1개에 도전해 보세요 — 디자이너가 PR을 만들 줄 알면 협업이 훨씬 부드러워져요.
16:30까지:
오전 회고·퀴즈에 이어, 오후에는 이번 주 전부(자료구조 + 코드 읽기)를 하나로 묶는 챌린지예요.
자료구조를 "외운 것"에서 "만들어 본 것"으로 바꾸고, 그것이 실제 서비스 어디에 살아 있는지 연결해요.
stack.js에 Stack 클래스를 만들어요. 내부 저장은 배열을 쓰되, 밖에서는 다음 4개 메서드만 쓰게 해요: push(값) 넣기 / pop() 맨 위 꺼내기(비었으면 undefined) / peek() 맨 위 확인만 / isEmpty() 비었는지 true·false.console.log로 검증해요. 빈 스택에서 pop하는 경우도 꼭 확인해요.queue.js에 Queue 클래스를 만들어요: enqueue(값) 뒤로 넣기 / dequeue() 앞에서 꺼내기 / front() 맨 앞 확인 / isEmpty(). "가", "나", "다"를 넣고 꺼내면 넣은 순서 그대로 나오는지 검증해요.[ ... ])이 실제로 보이는지 ⓒ 프론트 코드에서 그 목록을 그리는 map 호출을 찾을 수 있으면 파일·줄까지 기록해요. (ⓒ는 3개 중 1개만 성공해도 충분해요)1. 브라우저의 "뒤로 가기" 버튼 — 스택일까 큐일까? 이유는? 2. 프린터에 먼저 보낸 문서가 먼저 인쇄되는 대기열 — 스택일까 큐일까? 이유는? 3. 에디터의 Ctrl+Z(실행 취소) — 스택일까 큐일까? 이유는? 4. 고객센터 상담 대기 순번 — 스택일까 큐일까? 이유는? 5. 함수가 함수를 호출하고, 안쪽 함수가 끝나야 바깥 함수로 돌아오는 구조 — 스택일까 큐일까? 이유는?
16:30까지 제출할 것
stack.js + queue.js (검증용 console.log 포함, 전부 실행돼야 해요)내가 만든 자료구조를 "문제 풀이 도구"로 써 보는 첫 경험이에요.
isBalanced(str)를 만들어요. 문자열의 소괄호 ( )가 짝이 맞으면 true, 아니면 false를 반환해요.(를 만나면 push, )를 만나면 pop. pop할 게 없거나, 끝났는데 스택에 남아 있으면 false예요."(())" → true / "(()" → false / "())(" → false / "안녕(하세요)" → true / "" → true.balance.js(검증 5건 출력 포함)를 본 과제와 함께 제출해요.
디자이너의 주간 통합은 "리포트 완성"이에요. 월~목 인벤토리와 불일치 목록이 재료이고, 오늘은 그것을 남에게 보여줄 수 있는 한 편의 문서로 만들어요.
16:30까지:
멘토용 참고 표예요. 학생도 읽어 두면 "리뷰 때 무엇을 물어볼지" 미리 준비할 수 있어요.