프로젝트 주제 선정

냉장고 속 재료 관리

의약품 서비스

✔️대한민국 여행지 별 여행자톡방

주제 선정된 여행자톡방 ERD

 

회고 : 주제 선정할 때 예상과 다르게 모두 준비를 해오고

각자 선정한 소재가 참신해서 나중에 전부 해보고 싶을 정도로 선정하기 힘들었으며

또 생각보다 주제 선정하는 것으로 생각 외로 시간이 많이 소요되고 빠르게 지나갔다.

ERD DB 데이터모델링은 이론을 이해했어도 막상 실전에서 작성하려고 하니 쉽지가 않았다.

 

향후 계획 : DB 피드백 받아보고 역할 정해지면 어떻게 작업할지 대비하기

Supabase

 Supabase 실행 순서

  1. Supabase 계정 생성 및 로그인
  2. 새로운 프로젝트 만들기
  3. 설치 명령어 실행 
  4. Supabase 대시보드에서 SQL 쿼리 작성해서 테이블 생성

Supabase 서비스

  • Database : PostgreSQL 기반 데이터 베이스, 오픈소스 관계형 데이터베이스
  • Auth : 사용자 인증 및 관리, 사용자 로그인을 구현
  • Storage : 파일 저장 및 관리를 위한 서비스, 파일이나 문서 등 업로드하고 관리 가능

★ supabase 설치

  • 명령어설치시 env(환경변수) 파일 생성
  • $ npm install @supabase/ssr @supabase @supabase/supabase-js

https://supabase.com/docs/guides/getting-started/quickstarts/nextjs 공식문서 참고

★ next.js에서 route

일반적으로 파일, 페이지 라우트도 있지만 서버에서 실행되는 API 엔드포인트 역할도 있다.

  • 데이터베이스 통신: 사용자 정보 조회, 게시글 저장 등
  • 인증 처리: 로그인, 회원가입 등
  • 파일 업로드: 이미지나 문서 파일 업로드 처리
  • 외부 API 연동: 다른 서비스에서 데이터를 가져오거나 보내는 작업
  • 스트리밍 응답: 대용량 데이터를 효율적으로 처리

클린 아키텍처

  아키텍처 구조

  • 업무로직 : 시스템이나 프로그램이 어떻게 작동해야 하는지에 대한 규칙이나 절차
  • 객체지향 : 객체라는 작은 단위로 쪼개서 생각하고,
    이 객체들이 서로 상호작용하면서 프로그램을 만드는 방식(책임을 나눈다라고 생각하면 됀다.)

  서비스 계층 분리

  • DTO = 객체를 주고 받는 페이지
  • 페이지 : 사용자에게 보여지는 페이지
  • 서비스(*유즈케이스) : 업무로직에 해당한다. (좋아요, 예약 등..)
    *유즈케이스 : 서비스를 기능별로 파일로 쪼개준다.
    사용자가 요청하는 행위 (기능의 단위) 수정없이 추가와 제거가 용이하여 유지보수에 좋다.
  • 리포지토리 : 사용자가 요청한 것을 받아주는 CRUD에 해당한다.

  5대 최신 아키텍쳐

  • Hexagonal Architecture : 육각형 아키텍처, 내부 도메인 로직과 외부 시스템(데이터베이스, UI, API 등)을 분리해서,
    의존성을 역전시키는 구조
     
  • Onion Architecture  : 양파 아키텍처, 양파처럼 핵심 도메인을 중심에 두고,
    바깥쪽으로 인프라, UI, 데이터베이스 같은 외부 요소들이 계층적으로 둘러싸는 구조
  • Domain-Driven Design (DDD) or Domain Centric Architecture :
    도메인(비즈니스 영역) 모델을 중심으로 설계하는 방법론이자 아키텍처
  • Vertical Slice Architecture : 기능 단위(수직 슬라이스)로 애플리케이션을 나누는 방식
  • Clean Architecture : 로버트 C. 마틴 아키텍처로,
    의존성 규칙에 따라 안쪽(비즈니스 규칙)과 바깥쪽(외부 인터페이스)을 엄격히 분리,
    유지보수성과 테스트 용이성이 극대화된 설계 방식

 

  클린 아키텍쳐

클린 아키텍처 구조 이미지

  클린아키텍처 4계층

도메인(Domain) 비즈니스 핵심 로직과 규칙이 담긴 곳
어플리케이션(Application) 도메인 객체를 활용해 실제 유스케이스(Use Case)를 구현하는 계층, 업무 로직에 해당(리뷰, 주문, 채팅 등..)
인터페이스 어댑터(Interface Adapters) 도메인과 어플리케이션 계층을 외부 시스템과 연결(Next.js에서 route가 해당)
인프라스트럭쳐(Infrastructure) 실제 외부 시스템과 직접 통신하는 계층이며 데이터베이스, 파일 시스템, 네트워크, 외부 API 등과 연결되는 구체적인 구현체

 

  • 의존성 규칙(Dependency Injection, DI ) : 필요한 객체를 직접 만들지 않고 외부에서 주입받는 방법
  • 제어반전 (IOC) : 일반적인 객체의 흐름은 순차적이다.(위의 이미지에서 가장 바깥쪽으로 부터 A>B>C>D)
    하지만 객체를 만들고 관리하는 제어권이 역전되어 의존성을 주입해야하는 경우
    [A>B>C>(의존 주입)>D]이지만 실질적으로 순차적으로 흐르며
    클린아키텍쳐 4계층으로 보면 아래 표에 해당한다.
A : 인프라스트럭쳐
B : 인터페이스 어댑터
C : 어플리케이션
D : 도메인
의존 주입 : 레포지토리 

 

 

회고 : 클린 아키텍처의 계층은 어느정도 이해가 되었으나

역제어나 의존성 주입같은 경우는 자료만으로는 이해가 어려워서

프로젝트하면서 실습으로 천천히 이해해야할 필요가 있다.

그리고 용어와 뜻이 있을 때, 그 안에서도 다른 어려운 단어가 있고

이해하기 위해 쉽게 풀어내는 과정이 쉽지 않았다.

DB

★ 데이터베이스의 특징

데이터베이스는 공통적으로 사용하기에 직접적으로 쓸 수 없는 특징이 있다.

직접적으로 사용하는 경우는 관리하는 목적으로 사용

간접적으로는 일반 사용자가 애플리케이션(웹, 앱 등)을 통해 데이터베이스의 기능을 이용

 

★ 데이터 모델

  • 계층형 : 데이터가 트리 구조, 부모-자식 관계를 지님
  • 네트워크형 : 계층형 모델의 한계를 극복,그래프 구조를 사용
  • 객체지향형 : 객체 지향 프로그래밍(OOP) 개념을 데이터베이스에 적용
  • 관계형 : 가장 많이 쓰고 있는 모델, 테이블(표) 형태로 저장하고 관리

데이터 참조

  1. 부모 테이블의 기본 키: 부모 테이블은 각 행을 고유하게 식별할 수 있는 기본 키(Primary Key)를 가지고 있다.
  2. 자식 테이블의 외래 키: 자식 테이블은 부모 테이블의 기본 키 값을 저장하는 외래 키(Foreign Key) 컬럼을 가지고 있다.
  3. 참조: 자식 테이블의 외래 키는 부모 테이블의 특정 행을 가리키면서, 해당 행의 데이터를 참조하게 돼.

★ 정규화 +

정규화란? (링크 참고)

https://ysh0129.tistory.com/99

 

멋사 부트캠프 프론트엔드 플러스 5기 - Next.js & DB (7일차)

Next.js ★ “use client” => 브라우저(클라이언트)에서 실행, 해당 코드를 미 적용 시 노드에서 실행(서버)에서 실행 노드에서 사용하는 이유 > 서버사이드 랜더링을 하기 위해서 > 구글에서 웹이 노

ysh0129.tistory.com

 

제 1 정규화(원자값= 한개의 값)

 

유형과 장단점

구문자 : 한 컬럼 안에 여러 값을 콤마(,) 같은 구분자로 이어서 저장

장점 : 테이블 수, 칼럼이 늘어나지 않음, join연산자 불 필요

단점 : 조작 어려움, 유지보수 어려움

 

컬럼수 늘리기 : 컬럼을 여러 개 만드는 방식

장점 : 테이블 수 변화 없음, Join연산자 불 필요

단점 : 컬럼 수가 늘어나서 용량이 늘고 속도가 느려진다.

 

자식테이블 : 새로운 테이블(하위 자식 테이블)로 분리하고, 부모 테이블과 외래 키로 연결하는 방식

장점 : 확장성, 효율적 검색, 조작

단점 : 테이블 수가 늘어날수록 Join연산자 남발

 

제 2 정규화(부분적 함수 종속을 제거)

(함수 종속 = 키로 식별되는 속성)

 

Key : 중복 없는 고유의 행, 종속된 관계를 찾는 수단

 

식별관계 : 부모 테이블의 기본키(Primary Key, PK)가 자식 테이블의 기본키 일부로 포함되는 관계

 

Key의 종류

기본키 : 후보키 중에서 선택된 대표 키. 유일성, 최소성, 그리고 NULL 값을 허용하지 않는다는 특징을 지님

후보키 : 유일하게 식별할 수 있는 최소한의 속성 집합

대체키 : 주키 대신 서브로 사용되는 키

대리키 : 테이블에는 없었다가 추가되는 식별자 키 (비식별관계)

슈퍼키 : 유일하게 식별할 수 있는 하나 이상의 속성(컬럼)들의 집합

(회원번호 경우 랜덤값으로 지정)

외래키 : 특정 컬럼(들)이 다른 테이블의 기본 키(Primary Key)를 참조하는 키

 

제 3 정규화(이행적 함수 종속을 제거)

(이행적 함수 종속 = 전이적 관계, 두번 거쳐서 참조되는 속성)

 

비식별관계 : 부모 테이블의 기본키가 자식 테이블의 기본키를 구성하는 데 참여하지 않는다

 

BCNF 정규화

제 3 정규화 이후 진행, 모든 결정자[속성(컬럼)의 값이 다른 속성의 값을 유일하게 결정]가 후보키가 되도록 테이블 분해

[결정자: 속성(컬럼)의 값이 다른 속성의 값을 유일하게 결정 ]

 

ex) 학생과 이메일이 있을 때,

이메일을 바꾸기 위해서 학생을 찾아야한다 여기서 학생은 결정자에 해당한다.

 

제 4 정규화

다치 종속 제거

다치 종속 : 한 속성이 복수의 값을 가질 때, 다른 속성과 곱 형태로 속성이 증식 현상

 

제 5 정규화

조인 종속성 제거를 목표

테이블을 더 이상 무손실 분해할 수 없을 때 만족

 

 

DB입력은 Supabase에서 ERD는 draw.io에서
draw.io에서 ERD 설계시 한글로 먼저 테이블을 만들어보고 복제해서 영문으로 수정해준다.

데이터의 타입은 AI로 뽑아내고

Supabase에서 new table에 각 해당하는  속성 값과 타입을 입력한다. 

 

 

회고 : 정규화에 대해서는 자격증 공부로 접해본 내용이였지만,

여전히 많이 헷갈리는 내용이였다.

프로젝트 진행하면서 많이 부딪히고 경험 쌓는 생각으로 하자 

Next.js

  “use client”

=> 브라우저(클라이언트)에서 실행, 해당 코드를 미 적용 시 노드에서 실행(서버)에서 실행

 

노드에서 사용하는 이유 > 서버사이드 랜더링을 하기 위해서 > 구글에서 웹이 노출하기 위해서

 

★ image

이미지 태그를 사용할 시 너비와 높이를 지정해야 하는 이유 : 레이아웃 시프트가 발생한다.

레이아웃 시프트: 웹 페이지가 로드되는 동안 기존에 있던 콘텐츠가 갑자기 위치를 바꾸거나 밀려나는 현상

 

대부분의 이미지는 퍼블릭 폴더에 둔다(경우에 따라서 따로 빼올 수도 있다.)

 

Next.js 공식문서에서 Linking and Navigating

Link를 사용하면 페이지가 새로고침되지 않는다. *프리패치 기능

 

*프리패치(Prefetch) : 링크를 클릭하기 전에 해당 페이지의 리소스를 미리 다운로드

 


DB

 데이터 유형

관리데이터 : 수정이 필요한 데이터

로그데이터 : 삭제와 수정이 필요 없는 데이터 (빅데이터가 이에 해당한다.)

 

★ 데이터를 사용하는 이유

사용자의 행위(결제내역,진료내역,주문내역 등..)들을 기록이나 저장

말과 글을 분석하기 보다는 행동과 조회로 분석한다.

 

★  데이터 모델링 과정

  • 개념적 구조 : 사용자 입장에서 어떤 데이터로 이루어져 있는가?
  • 논리적 구조 : 데이터들을 테이블 형태로 만들며 어떻게 상호관계하는 구조를 만들며 표현할 것인가?
  • 물리적 구조 : 데이터들을 어디에 저장하고 보관할 것인가?

시스템 ?

둘 이상 (각 역할자가 존재) 의 여러 구성 요소들이 서로 연결되어 상호작용하는 집합체(소프트웨어, 하드웨어 등...)

 

E-R 데이터 모델링

E-R 데이터 모델링 기호와 의미

예로 식당을 들었을 때, 주체가 되는 개체(엔티티) 즉 손님, 요리사, 웨이터가 되는 것이고

무언가를 하는 행위 혹은 절차를 관계(릴레이션) 결제,주문,메뉴등록 등이 해당하며,

속성은 관계, 행위 안에 포함하고 있는 걸 말한다. 결제에는 결제일자, 주문한 메뉴에 대한 금액, 결제 수단에 해당한다.

개체와 관계에 따라 1:1, 1:N, N:N이 존재한다. 

 

 

정규화

데이터를 중복없이 간단하고 효율적으로 관리하는 방법

 

제1정규화 : 속성 값이 더 이상 쪼갤 수 없는 원자값(한칸에 한 개의 값)

 

ex) A : 숫자,문자 / B : 문자 (X)
      A : 숫자 / A : 문자 / B : 문자 (O)

 

제2정규화 : 완전 함수 종속,

기본키의 일부에만 종속되는 속성(컬럼)을 제거

한 개의 테이블을 관계에 따라서 두 개 이상으로 분리

 

ex) 적용 전 => 학번, 과목코드, 성적, 담당교수(학교 테이블)

      적용 후 => 학번, 과목코드, 성적 (수강 테이블)
                        과목코드, 담당교수 (과목정보 테이블)

 

제3정규화 : 이행적 종속(A->B, B->C가 성립할 때 A->C가 성립) 제거

기본키가 아닌 속성이 다른 기본키가 아닌 속성을 결정

 

ex) 적용 전 => 학번, 학생이름, 학과명, 학과 사무실 위치(학교 테이블)

      적용 후 => 학번, 학생이름 , 학과명 (학생 테이블)
                        학과명 , 학과 사무실 위치 (학과정보 테이블)

 

 

 

 

회고 : Next.js는 공식문서를 한번 훑어보자 무의식적으로 쓰고 보는 것과

흐름을 알고 난 후에 보는 것과 체감이 많이 다르다. 

먼저 올바른 DB를 만들기 위해서는 시스템이라는 설계도를 마인드맵처럼 생각하고

개체와 관계에 연결 경우를 고려해서 데이터의 테이블을 만들어야 할 필요가 있다.

 

Next.js를 써야하는 이유

리액트는 라이브러리 형태이며 순수 프론트엔드만 가능하지만

Next는 리액트 기반으로 이루어진 프레임 워크이며 풀스택 작업이 가능하다.

 

새 프로젝트 생성 방법

  • 공식 홈페이지 및 링크 참고할 것

 

★ Next.js 폴더구조

  • 코드를 메인에 해당하는 app 디렉터리
  • 코드를 정적으로 보여주는 public 디렉터리
  • 페이지 폴더
    • 폴더 명은 곧 url를 의미한다. but page.tsx가 없으면 url에 해당하지 않는다.
  • 컴포넌트 폴더
    • 바깥에 두는 방법 : 컴포넌트를 한 곳에 모아둠, 다른 앱에서도 적용 시키기 용이함
    • 페이지 안에 두는 방법 : 컴포넌트를 해당 페이지에 적용 되어있다는 것을 알기 쉬움
    • 적용방법 : 컴포넌트를 layout.tsx에 삽입
  • 페이지 명은 소문자 컴포넌트 명은 파스칼로 명시할 것

 

★ Next.js에서 css적용

  • 컴포넌트 폴더 안에 컴포넌트명.module.css로 설정 후 코드 삽입
  • 해당 컴포넌트에 들어가서 경로를 불러오기
    • import "./header.css"; <= 기존에 불러오는 방법
     

1. styles 객체에서 필요한 스타일을 꺼내 쓰는 방식
2. 구조 분해 할당으로 스타일을 변수로 꺼내쓰기

  • style.css = 기본적으로 모든 파일이 공통적으로 받는 스타일시트
  • module.css = 특정 파일에만 적용 시키는 스타일시트

★ 레이아웃 중첩 : 페이지마다 다르게 디자인 해야 하는 경우에 활용

layout.tsx가 2개인 상황 : 부모(app) 레이아웃의 {children} 안에 자식 레이아웃이나 페이지가 들어가는 구조 이미지에는 부모는 RootLLayout에 자식은 admin에 있는 해당하고 admin이 부모면 안에 있는 layout에서 {children}은 사용자가 요청한 페이지

 

 

 

회고 : Next.js를 한번 개인적으로 사용한 적은 있었으나, 무작정 내 것으로 만드는 것보다

수업을 들으면서 과정을 이해하니 프레임워크에 대해 더 쉽게 이해할 수 있었다.

그리고 레이아웃 중첩은 어렵게 느껴지나 익숙해지면 많이 사용하게 될거같다.

타입 스크립트를 사용해야 하는 이유

기존 자바스크립트에 타입을 명시하기 위해 변수에 형식을 지정

타입스크립트는 자바스크립트와 달리데이터 타입을 추론하는 능력이 있다.

 

타입스크립트 타입 종류

  • Primitive types : 기본적으로 쓰이는 타입(Number, String, …)

     ⇒ 변수 변수명 : 변수타입

 

  • Object types : 객체{} 안에 있는 여러 값에 타입을 지정

     { 이름, 나이 } ⇒ {name:string, age:number}

 

  • Special types : 특정 데이터 타입을 가르키지 않음, 코드의 유연성을 높이거나 특정한 상황일 때 사용(any,unknown ...

     Unknown의 경우에는 뒤에 if조건문을 걸거나 as (별칭)으로 결과를 출력한다. 

 

  • Union types : 변수의 타입이 둘 이상인 경우 

     => 변수 변수명 : 변수타입1 | 변수타입2

 

  • Literal types : 변수 타입을 특정한 값으로 설정, 타입이 곧 변수 값(정해진 숫자는 리터럴에 해당)
type Fruit = "apple"; // Fruit 타입은 오직 "apple" 값만 가진다.

let myFruit: Fruit = "apple"; // 정상 출력
// let yourFruit: Fruit = "banana"; //"banana"는 Fruit의 타입에 없으므로 에러

     =>고유의 값이 있을 때, 값을 따로 부여할 때 ex) 고객번호, 프로세스 

     변수명 : 타입(변수값) = 변수값

 

  • Enum types : 관련된 특정한 값을 “집합” (상수는 쓸 수 없고, 상수를 문자화, 숫자를 포함하고 있다.)
enum Day {
    MONDAY, // 0
    TUESDAY, // 1
    WEDNESDAY, // 2
    THURSDAY, // 3
    FRIDAY, // 4
    SATURDAY, // 5
    SUNDAY // 6
}

let today: Day = Day.MONDAY;
console.log(today); // 0 (기본적으로 숫자가 할당)

   => 조직, 집합에 해당 할 때 ex) 반, 부서

 

  • Interface types : 상속을 의미하며, 객체와 객체를 연결해주는 타입
interface User {
  name: string;
  age: number;
}

let user1: User = {
  name: "김철수",
  age: 30
};
// 정상 출력


// 인터페이스의 속성과 객체 내 속성의 타입을 지키지 않으면 에러 발생 
let user2: User = {
  name: "이영희"
 };
// 에러 = age 속성이 없음

let user3: User = {
  name: "박지민",
  age: "스물다섯" 
 };
 // 에러 = age 타입이 number가 아닌 string

 

  • Generics types : 내가 타입을 임의로 설정하고 지정한다. 보통은 <T>로 설정
function print<T>(value: T): void {
  console.log(`출력 결과는 ${value} 입니다.`);
}

print<string>("Hello World"); // Hello World
print<number>(42); // 42

 

★ 비동기 함수의 타입스크립트

function welcome():string {
return "Hello World";
}

async function welcome(): Promise<string> {
return "Hello World";
}

// async 비동기 경우에는 Promise<타입>이 들어가야한다.

 

그 외에도 유틸리티 타입, 인덱스 타입, 타입 가드가 있다.

 

 

 

회고 : GPT나 Cursor AI 등 인공지능에게 질문하고,

원하는 답을 얻기 위해서는 기본적인 개념과 용도를 알고 질문하자

 인터페이스에 대해 제대로 짚고 가기 위해 객체지향에 대해서 설명을 들었으나

부족함이 느껴져서 해당 부분에 대해서 한번 더 복습할 필요가 있다.

동기 & 비동기

동기식

  • 순차적으로 줄 세우는 식으로 진행

비동기식

  • 딜레이를 줄이기 위해서 정해진 순서 없이 동시에 진행(작업 동작이 둘 이상인 경우)

동기 (Synchronous) 비동기 (Asynchronous)

진행 순서대로, 작업 완료까지 대기 작업 시작 후 바로 다음 작업 진행, 완료 시 알림
대기 작업 완료까지 대기 (Blocking) 작업 완료까지 대기하지 않음 (Non-blocking)
효율 오래 걸리는 작업 시 비효율적 여러 작업 동시 처리 가능, 효율적
복잡성 단순 결과 처리 방식이 복잡할 수 있음

 

동기식의 두가지 상황

  • 순서를 기다리면서 처리
  • 수신을 기다렸다가 처리(비동기 화를 위해 콜백과 이벤트 사용) ⇒ 지금의 자바스크립트가 진행하는 방식

 

비동기식이 요구하는 상황 1

: 다중작업(멀티태스킹, 멀티프로세스) 환경과 single CPU(순서)

  • 멀티태스킹 : 여러개의 작업을 진행

     프로세스는 고유의 아이디를 지니며 자체적으로 생성한다.

     그래서 프로그램은 한 개이지만 여러 창을 띄울 수 있는 이유

 

     CPU는 한개인데 여러 개의 프로세스가 동시에 동작하는 것인가?

     ⇒ 운영체제가 시분할을 통한 동시 실행을 지원

 

  • 스레드의 개념 이해하기

     스레드 => 실행의 단위
     장점 : 빠른 *ContextSwiching

 

     백그라운드(비동기식) 작업의 필요성과 자식 프로세스

     동기식으로 처리하기에는 너무 오래 걸리기에 비동기 식으로 처리하지만

     *Context에 부담을 준다.

 

     *Context(문맥) : 프로세스가 진행하다가 시간이 끝나면 책갈피 하는 역할

     *ContextSwiching(문맥교환) : 여러 작업을 왔다 갔다 하면서 처리(병렬 처리하기 위해서 탄생)

 

메인스레드는 프로세서 안에 있거나 스레드들의 상단에 해당한다.

 

비동기 식이 요구되는 상황 2

: 두 엔드포인트 간의 통신이 필요한 경우(수신)

  • 비동기화 시키기 위한 방법 : 동기식에 버퍼를 적용시키거나 Callback을 사용

Callback & Promise

Callback : 함수를 나중에 호출 해주는 것 Callback 안에 Callback이 적용되어 콜백지옥이 발생하는 것을 유의

Promise : Callback 이 중첩되어 콜백지옥이 발생하고 복잡해져서 나온 것이며, 중첩을 막아주고 동기화 시켜준다.

 

Node의 기본 API

Promises API

CallBack API

Synchromous API

Module

Node.js에서는 스크립트 수준에서 모듈고립된 영역(isolated Scope)가 없었고

자바스크립트에 모듈을 부여하기 위해 노력을 함

탄생한 것이 Common.js와 ES6 Module이다.

 

Common.js와 ES6 Module 비교

특징 Common.js ES6 Module
문법  require, module.exports, exports import, export
주요 사용처 Node.js(서버사이드) Node.js(최신버전), 브라우저,
프론트엔드 프레임워크
내보내기 단일 객체 내보내기 (module.exports) 다중 객체 내보내기 (export)

 

 

 

실습내용 요약 :

되도록 node 대신 npm으로 실행하자 실행 시 node 파일명.js 입력하지 말고

npm init > package.json에서 scripts내에

“(실행시킬 이름/보통 dev)” : “node (파일명).js” 등록

> 터미널에서 명령어로 npm run (실행시킬 이름) 입력

 

npm 뒤에 바로 적어도 실행 되는 경우 : start,stop,restart,build

그 외에는 npm run을 사용

 

 

회고 : 작업 관리자에서 종료를 시키기 위해서 프로세스와 스레드를 알게 모르게 이용하고 있었고,

프로세스 내에서 스레드로 동시에 프로그램이 실행되는지 것에 알게 되었으며,

그 동안 암기 식으로 잘못 된 공부방식을 해온 대신

지금이라도 동작원리를 이해하며 공부할 필요가 있다.

MVC/Flux 개요

MVC(Model-View-Controller)

1970년대에 나온 구조, 경우에 따라 MVP, MVVM 구조도 있다.

  • 바인딩 : 어떤 구성 요소의 실제 값이나 속성을 결정짓는 과정
  • Model = 바인딩에 사용된 변수
  • View = 사용자가 직접 보고 상호작용하는 영역
  • Controller = 모델이랑 뷰 사이에서 데이터 흐름을 조절

MVC구조 / MVP구조 / MVVM구조

 

AngularJS & Angular2 의 학습 분량 차이

 

공통 학습 내용

  • JavaScript & DOM

차이점

  • AngularJS : AngularJS
  • Angular2 : TypeScript / Node.js etc..

Vue.js에서의 MVC패턴

methods 위에 있는 영역은 model

methods 안에 있는 함수는 controller

하단 css셀렉터에 있는 것은 view

 

Flux

페이스북에서 개발

데이터 흐름이 너무 복잡해지고 디버깅하기 어려워지는 문제 발생으로 인해서

단순화와 데이터 변화의 예측을 위해서 탄생

Flux 구조

Action: 변화 발생하는 객체(버튼 클릭, 값 변화 등..)

Dispatcher : Action을 받아서 Store로 보내주는 허브(동기화 과정)

Store: Action의 상태(데이터)를 가지고 있고 관리하는 곳

View: 사용자 인터페이스 부분

 

동기 & 비동기

 

동기식

  • 순차적으로 줄 세우는 식으로 진행

비동기식

  • 딜레이를 줄이기 위해서 정해진 순서 없이 동시에 진행(작업 동작이 둘 이상인 경우)

동기 (Synchronous) 비동기 (Asynchronous)

진행 순서대로, 작업 완료까지 대기 작업 시작 후 바로 다음 작업 진행, 완료 시 알림
대기 작업 완료까지 대기 (Blocking) 작업 완료까지 대기하지 않음 (Non-blocking)
효율 오래 걸리는 작업 시 비효율적 여러 작업 동시 처리 가능, 효율적
복잡성 단순 결과 처리 방식이 복잡할 수 있음

 

회고 : 구조 패턴에 대해 디테일하게 알게 된 날이 되었다. 프로젝트 수행 시 고려 할 것

+ Recent posts