TIL - 21.09.01 πŸ‘¨β€πŸ’»

μ„±ν›ˆΒ·2021λ…„ 9μ›” 2일
0

TIL

λͺ©λ‘ 보기
54/59
post-thumbnail

TIL - 21.09.01 πŸ‘¨β€πŸ’»

MWC Model View Controller

일련의 μ†Œν”„νŠΈμ›¨μ–΄κ°€ λŒμ•„κ°€λŠ” λ°©μ‹μ˜ λ‹€μžμΈ νŒ¨ν„΄

κΈ°λŠ₯을이 λ‚˜λˆ„μ–΄ μ Έμžˆλ‹€λŠ” νŠΉμ§•μ΄ μžˆλ‹€.

μ½”λ“œ 가독성, μœ μ§€λ³΄μˆ˜μ„±μ΄ 쒋아진닀.

MVC νŒ¨ν„΄μ„ μ΄μš©ν•˜λŠ” ν”„λ ˆμž„μ›Œν¬

루비 온 레일즈, μ΅μŠ€ν”„λ ˆμŠ€, μž₯κ³ , ν”ŒλΌμŠ€ν¬ λ“±λ“±

Model

데이터λ₯Ό κ΄€λ¦¬ν•œλ‹€.

데이터 λ² μ΄μŠ€μ™€ μ—°κ²°λ˜μ–΄ μžˆκ±°λ‚˜, λͺ¨λΈ μžμ²΄κ°€ 데이터λ₯Ό 가지고 μžˆμ–΄μ„œ μ»¨νŠΈλ‘€λŸ¬μ™€ μƒν˜Έμž‘μš©ν•œλ‹€.

View

μœ μ €κ°€ λ³΄λŠ” 화면을 κ΅¬μ„±ν•˜λŠ” μ—­ν• , μ–΄λ– ν•œ 데이터λ₯Ό λ°›μœΌλ©΄ κ·Έκ±Έ κ·ΈλŒ€λ‘œ 좜λ ₯ν•˜λŠ” 역할을 ν•œλ‹€.

μ»¨νŠΈλ‘€λŸ¬μ™€ μƒν˜Έμž‘μš©ν•œλ‹€.

Controller

ν΄λΌμ΄μ–ΈνŠΈλ‘œ λΆ€ν„° μ•‘μ…˜μ— λŒ€ν•œ 인풋 값을 λ°›λŠ”λ‹€.

인풋 값을 ν† λŒ€λ‘œ λͺ¨λΈκ³Ό μƒν˜Έμž‘μš©ν•΄μ„œ ν•„μš”ν•œ 데이터λ₯Ό λ°›μ•„μ™€μ„œ λ·°κ°€ 좜λ ₯ν•  수 있게 κ°€κ³΅ν•œ ν›„ 뷰와 μƒν˜Έμž‘μš©ν•œλ‹€.

μ›Ήμ—μ„œμ˜ MVC νŒ¨ν„΄μ˜ μˆ˜λ„μ½”λ“œμ΄λ‹€.

제일 μƒλ‹¨μ˜ URI둜 μš”μ²­μ΄ λœλ‹€λ©΄,

제일 처음 λΌμš°ν„°μ—μ„œ 아이디λ₯Ό νŒŒλΌλ―Έν„°λ‘œ λ°›μ•„ User.getProfile(id)κ°€ μ‹€ν–‰λœλ‹€.

그럼 컨트둀러 역할을 ν•˜λŠ” User 클래슀의 getProfile ν•¨μˆ˜κ°€ μ‹€ν–‰λ˜κ²Œ λ˜λŠ”λ°, μ΄λ ‡κ²Œ 되면 UserModelμ΄λΌλŠ” 클래슀의 getProfile() ν•¨μˆ˜λ₯Ό μ‹€ν–‰μ‹œμΌœ κ·Έ λ°˜ν™˜ 값을 ν”„λ‘œν•„μ΄λΌλŠ” λ³€μˆ˜μ— ν• λ‹Ήν•œλ‹€.

UserModel 클래슀의 getProfile ν•¨μˆ˜μ˜ 경우 쿼리문을 μ΄μš©ν•΄ 데이터 λ² μ΄μŠ€μ™€ μƒν˜Έμž‘μš©ν•˜κ³  κ·Έ κ²°κ³Ό 값을 λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜μ΄λ‹€.

μ΄λ ‡κ²Œ UserModel의 getProfile ν•¨μˆ˜κ°€ μ‹€ν–‰λ˜λ©΄ 값이 User 클래슀의 λ³€μˆ˜μ— ν• λ‹Ήλ˜κ³  그게 users/profile 의 디렉토리에 μžˆλŠ” νŒŒμΌμ— μ „λ‹¬λ˜κ³  그것을 λ·° 역할을 ν•˜λŠ” 파일이 전달 받은 데이터λ₯Ό λ™μ μœΌλ‘œ 좜λ ₯ν•˜κ²Œ λœλ‹€.

ORM Object-Relational Mapping

κ΄€κ³„ν˜• 데이터 λ² μ΄μŠ€μ— μžˆλŠ” 데이터λ₯Ό js의 클래슀, 객체처럼 λ‹€λ£° 수 있게 ν•΄μ£ΌλŠ” μ€‘κ³„μž 역할을 ν•œλ‹€.

Sequelize

ν”„λ‘œλ―ΈμŠ€λ₯Ό μ§€μ›ν•˜λŠ” λ…Έλ“œjs ORM

Sequelize μ˜ˆμ‹œ μ½”λ“œ

new Sequelize둜 데이터 베이슀λ₯Ό μ—°κ²°ν•œλ‹€.

첫번째 μΈμžλŠ” DBλͺ…, 두,μ„Έλ²ˆμ§Έ μΈμžλŠ” μœ μ € 아이디, λΉ„λ°€λ²ˆν˜Έμ΄λ‹€.

μ‹œν€„λΌμ΄μ¦ˆλŠ” μ—…λ°μ΄ν‹°λ“œμ—£ ν¬λ¦¬μ—μ΄ν‹°λ“œμ—£, 아이디 μžλ™μœΌλ‘œ 생성해쀀닀.

.sync()λŠ” μœ μ €μ™€ 데이터λ₯Ό μΌμΉ˜μ‹œν‚€λŠ” 과정이닀.

Sequelize의 쑰인 ν…Œμ΄λΈ”

1:1 의 κ΄€κ³„μ—μ„œλŠ” HasOne , BelongsTo 둜 ν‘œκΈ°λœλ‹€.

Sequelize의 νŠΈλžœμ μ…˜

기본적인 Sequelize λͺ…λ Ήμ–΄

npx sequelize-cli init

빈 ν”„λ‘œμ νŠΈλ₯Ό λ§Œλ“œλŠ” λͺ…λ Ήμ–΄. λ‹€μŒ 4개의 디렉토리가 ν˜•μ„±λœλ‹€.

  • config - CLIκ°€ μ–΄λ–»κ²Œ 데이터 λ² μ΄μŠ€μ™€ μ—°κ²°λ˜λŠ”μ§€ μ„€μ •ν•˜λŠ” μ»¨ν”½νŒŒμΌμ΄ μžˆλŠ” 디렉토리
  • models - μƒμ„±ν•œ ν”„λ‘œμ νŠΈμ˜ λͺ¨λ“  λͺ¨λΈμ΄ μ €μž₯λ˜λŠ” 디렉토리
  • migrations - λͺ¨λ“  λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ 파일이 μ €μž₯λ˜λŠ” 디렉토리
  • seeders - λͺ¨λ“  μ‹œλ“œ νŒŒμΌλ“€μ„ μ €μž₯λ˜λŠ” 디렉토리

npx sequelize-cli model:generate --name λͺ¨λΈμ΄λ¦„ --attributes 컬럼1:string, 컬럼2:integer

λͺ¨λΈμ„ μƒμ„±ν•˜λŠ” λͺ…λ Ήμ–΄.

  • name - λͺ¨λΈμ˜ 이름을 μž‘μ„±ν•˜λŠ” κ³³,
  • attributes - λͺ¨λΈμ˜ μΉΌλŸΌμ„ λͺ…κΈ°ν•˜κ³  ν•΄λ‹Ή 칼럼의 속성을 λͺ…κΈ°ν•œ 리슀트
    • ν•΄λ‹Ή μ •λ³΄λŠ” models λ””λ ‰ν† λ¦¬μ˜ λͺ¨λΈμ΄λ¦„.js νŒŒμΌμ— μ €μž₯되며, κΈ°λ³Έ κ°’(defaultValues), 널 ν—ˆμš© 유무(allowNull) 등을 ν•΄λ‹Ή νŒŒμΌμ—μ„œ 지정해쀄 수 μžˆλ‹€.

npx sequelize-cli db:migrate

λ§ˆμ΄κ·Έλ ˆμ΄μ…˜μ„ μ‹€ν–‰μ‹œν‚€λŠ” λͺ…λ Ήμ–΄

μŠ€ν‚€λ§ˆμ— 변경이 μƒκΈ°κ±°λ‚˜ λ‚΄μš©μ΄ λ°”λ€”λ•Œ ν•΄λ‹Ή λͺ…λ Ήμ–΄λ₯Ό λ‹€μ‹œ μ‹€ν–‰ν•΄μ€˜μ•Όν•œλ‹€.

profile
μ–΄λ–»κ²Œ 이걸 ν’€μ–΄λ‚Ό 수 μžˆμ„κΉŒ

0개의 λŒ“κΈ€