Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
115 changes: 115 additions & 0 deletions week04/keyword/keword.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
## 핵심 키워드

- ES

: javascript의 공식 표준 규격으로써 Js 문법과 동작 방식을 정의함.

국제 표준으로, Js의 기준이 되는 규칙이다.

- ES6
- ES6의 주요 변화 및 특징
- let, const 도입으로 var의 문제점(호이스팅, 스코프 문제)를 개선하고, 변수의 재할당 여부를 명확히 구분할 수 있게 됨.
- Arrow Function은 기존 function보다 간결한 문법을 제공하며, this 바인딩 방식이 다름. 일반 함수는 호출 방식에 따라 this가 동적으로 결정되지만, 화살표 함수는 선언 시점의 상위 스코프의 this를 그대로 사용함.
- import/ export (모듈시스템)으로 파일 간 코드 분리가 가능해져서 필요한 기능만 가져와서 사용할 수 있게 됨
- 백틱(``)과 ${}를 사용하여 문자열을 더 직관적으로 작성할 수 있음.
- Promise (비동기 처리)로 콜백 지옥 문제를 해결하고, 비동기 코드를 더 깔끔하게 작성할 수 있음.
- ES6를 중요시 하는 이유
- 가독성 향상 - 코드가 간결해지고 직관적으로 변함
- 유지보수 용이 - 스코프관리와 모듈화 등으로 코드 구조가 개선됨
- this 바인딩 문제 해결
- 비동기 처리 개선 - promise를 통해 콜백 지옥 해결
- 모듈화 지원 - import/ export를 통해 대규모 프로젝트에서 코드 관리가 용이함
- 현대 대부분의 node.js는 ES6문법을 기반으로 이루어져있음
- ES Module

: 파일 단위로 코드를 나누고, 필요한 기능만 가져와 사용하는 모듈 시스템

- import/ export 사용
- 실행 전에 구조 분석이 가능
- 비동기 로드 지원
- CommonJS와 비교해, 더 명확한 모듈 구조를 제공하고 의존성을 사전에 파악할 수 있어 유지보수와 확장에 유리함. 또한 코드 실행 전에 오류를 확인할 수 있어 안정성이 높고, 대규모 프로젝트에 적합한 방식.
- TypeScript

: JavaScrip의 상위 집합으로, 기존 JavaScript문법을 그대로 사용하면서 타입 시스템을 추가한 언어

- 컴파일 단계에서 타입 검사를 수행하여 오류를 미리 발견 가능
- 코드 안정성과 가독성 향상
- 대규모 프로젝트에서 유지보수에 유리
- 프로젝트 아키텍처
- 프로젝트 아키텍처가 중요한 이유
- 코드 구조를 체계적으로 관리할 수 있음
- 유지보수 및 확장이 쉬워짐
- 협업 시 역할 분리가 명확해짐
- Modular Monolith Architecture
- 하나의 서버에서 동작하지만, 기능별로 모듈을 나누는 구조
- 때문에 코드 탐색이 쉽고 팀 간 충돌이 감소함
- Service-Oriented Architecture(Service Layer Pattern)
- 역할에 따라 코드를 계층으로 나누는 구조
- 구성요소
- controller→ 요청/응답 처리
- Service→ 비즈니스 로직 처리
- Repository→ DB접근
- 역할 분리가 명확하고 유지보수 및 확장 용이
- MVC 패턴
- Model → 데이터 처리
- View → 사용자 화면
- Controller →요청 처리 및 흐름 제어
- 역할을 명확히 분리하는 전통적인 웹 아키텍처임
- 그 외 다른 프로젝트 구조
- Microservices Architecture-서비스를 여러 개로 분리하여 독립적으로 운영
- Layered Architecture-계층(Controller, Service, Repository) 중심 구조
- 비즈니스 로직

: 서비스의 핵심 기능과 규칙을 처리하는 코드로 보통 Service layer에서 처리됨

서비스의 규칙을 포함하므로 서비스의 핵심 기능을 담당한다.

- DTO

: 계층 간 데이터를 전달하기 위한 객체로, 데이터 구조 통일, 타입 검증, 유효성 검사를 함

→ 안정성 증가

→ 보안 강화

→ 코드 정리됨

과 같은 장점이 있다.

하지만 클래스를 따로 만들어야한다는 단점도 있음

## ✨ 위클리 스크럼 과제

---


1. 실습 중 자신이 만든 API 명세서 중 가장 마음에 들었던 엔드포인트를 하나만 소개해 주세요. 이유도 함께 말할 수 있으면 더 좋습니다.
-

→ 미션 성공 처리 API (PATCH /api/v1/missions/{memberMissionId}/success)입니다. 사용자의 행동을 실제로 상태 변화로 반영하는 기능이라는 점이 맘에 듭니다. `memberMissionId`를 통해 특정 미션을 명확하게 식별하고, 상태를 `COMPLETED`로 변경하는 구조가 잘 설계된 점이라고 느껴집니다.

1. API 명세서를 작성할 때, 어떤 부분을 가장 먼저 고민하나요?
(예: URL 구조, 응답 형식, HTTP 메서드, 등)
-

가장 먼저 고민한 부분은 URL 구조와 HTTP 메서드 선택입니다.

1. 명세서를 작성하면서 “협업을 생각했을 때 이건 꼭 적어야겠구나” 하고 느낀 포인트가 있었나요?
-

팀원 분의 명세서를 보며 오류 처리에 대한 명확한 정의가 필요하다는 점을 느꼈습니다.

단순히 정상적인 요청과 응답만 작성하는 것이 아니라, 어떤 상황에서 어떤 에러가 발생하는지, 그리고 어떤 형태로 응답이 오는지까지 명확하게 작성해야 다른 팀원이 API를 사용할 때 혼동을 줄일 수 있다고 생각했습니다.

## 🧩 요약 정리


이번 주차에서는 avaScript의 표준인 ES와 ES6 문법을 기반으로, 모듈 시스템과 타입 시스템, 그리고 백엔드 프로젝트 구조에 대해 학습하였다.

ES6에서는 let, const, 화살표 함수, 모듈 시스템(import/export) 등의 문법이 도입되어 코드의 가독성과 유지보수성이 향상되었다. 특히 ES Module을 통해 파일 단위로 코드를 분리하고 의존성을 관리할 수 있어, 대규모 프로젝트에서 효율적인 코드 관리가 가능해진다.

또한 TypeScript는 JavaScript에 타입 시스템을 추가하여, 개발 단계에서 오류를 사전에 검출할 수 있도록 하며 코드의 안정성을 높여준다. 이를 통해 런타임 오류를 줄이고, 코드의 예측 가능성을 높일 수 있다.

프로젝트 구조에서는 Modular Monolith Architecture와 Service Layer Pattern을 중심으로, 기능별(모듈)과 역할별(계층)로 코드를 분리하는 방식을 학습하였다. 이를 통해 코드의 책임이 명확해지고, 유지보수와 확장이 용이해진다.

요청 처리 흐름은 Controller → Service → Repository 구조로 이루어지며, 각 계층은 요청 처리, 비즈니스 로직 수행, 데이터 접근이라는 역할을 담당한다.
47 changes: 47 additions & 0 deletions week04/mission/mission.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# 미션 기록

---

## 1. DB 생성 및 테이블 생성

### 진행 과정

- MySQL Workbench를 실행하여 로컬 DB에 접속하였다.
- `CREATE DATABASE umc;`를 통해 데이터베이스를 생성하였다.
<img width="970" height="1284" alt="image (9)" src="https://github.com/user-attachments/assets/1fdd2a4d-cc5c-4ae8-b13a-e6f6087559f0" />

- `USE umc;`를 통해 사용할 DB를 선택하였다.
- users, missions 테이블을 생성하였다.
- `SHOW TABLES;` 명령어로 테이블 생성 여부를 확인하였다.

---

### DB 생성 결과
<img width="1776" height="1410" alt="image (10)" src="https://github.com/user-attachments/assets/52c785ac-4d20-494c-87d4-743ef0489ae8" />



---

## 2. GitHub 설정

### 진행 과정

- GitHub에 새로운 저장소(umc_node)를 생성하였다.
<img width="856" height="336" alt="image (13)" src="https://github.com/user-attachments/assets/997cb07e-54a4-4fcd-bd68-780e491b246c" />

- VS Code에서 `git init`을 통해 Git 저장소를 초기화하였다.
- README.md 파일을 생성하고 main 브랜치에 커밋하였다.
<img width="1152" height="776" alt="image (11)" src="https://github.com/user-attachments/assets/ca0151c4-ee12-4c7e-84ab-33b2fe9f00bc" />

- `feature/chapter-04` 브랜치를 생성하여 프로젝트 코드를 업로드하였다.
<img width="2100" height="1468" alt="image (12)" src="https://github.com/user-attachments/assets/41df9a1f-5ce3-45f6-8520-1871f1885c77" />

---

### GitHub 링크

https://github.com/minji-jeong516/umc_node

---

Loading