감사하게도 캠프 중 지금까지 공부했던 것 중 부족한 부분을 공부할 수 있는 시간을 주셨다. 안그래도 이해가 잘 가지 않는 부분을 적어놓고 주말중 복습을 진행할 예정이었는데, 이번 기회로 이 부분을 꼼꼼하게 채워나갈 수 있게 되었다.
지금 내가 부족한 부분이 인증, 인가 미들웨어, 오류 처리, 트렌젝션, 로그 정도로 크게 나눌 수 있을 것 같다. 인증, 인가 부분은 지속적으로 프로젝트를 진행하며 계속 한 부분이긴하지만, 팀프로젝트에서 어쩌다보니 내가 CRUD만 주구장창 맡게되면서 생각보다 이해도가 높지 않다. (대신 CRUD랑 데이터베이스쪽은 생각보다 마스터가 되어있다.) 과거 들었던 강의들을 다시 듣고 구현했던 코드들을 다시 보며 공부를 진행하고있다. 아직 이 부분은 정리할 정도로 깔끔하게 마무리된 것 같지 않아, 오늘 공부하며 작게 하나둘씩 궁금했던 부분은 해소했던 부분을 정리해보려 한다.
1. 스키마 관계설정에서 첫번째 키워드는?
model Users {
userId Int @id @default(autoincrement()) @map("userId")
email String @unique @map("email")
password String @map("password")
createdAt DateTime @default(now()) @map("createdAt")
updatedAt DateTime @updatedAt @map("updatedAt")
userInfos UserInfos? // 사용자(Users) 테이블과 사용자 정보(UserInfos) 테이블이 1:1 관계를 맺습니다.
@@map("Users")
}
model UserInfos {
userInfoId Int @id @default(autoincrement()) @map("userInfoId")
userId Int @unique @map("userId") // 사용자(Users) 테이블을 참조하는 외래키
name String @map("name")
age Int? @map("age")
gender String @map("gender")
profileImage String? @map("profileImage")
createdAt DateTime @default(now()) @map("createdAt")
updatedAt DateTime @updatedAt @map("updatedAt")
// Users 테이블과 관계를 설정합니다.
user Users @relation(fields: [userId], references: [userId], onDelete: Cascade)
@@map("UserInfos")
}
나름 데이터베이스, 스키마 쪽을 열심히 공부했다고 생각했는데, 항상 관계 설정하는 곳의 맨 앞쪽에 있는 키워드는 역할이 무엇인지 궁금했다. (UserInfos에 있는 관계설정의 맨 앞에 있는 'user') 튜터님들께서는 그냥 칭하는 것이라고했는데 나에게는 별로 와닿지 않은 설명이었다. 그래서 이번에 복습하면서 이 스키마가 나오길래 시간 여유도 있는김에 한번 찾아보았다.
Prisma 스키마에서 user
는 관계를 설정할 때 사용되는 특별한 키워드이다. user
는 UserInfos
모델에서 Users
모델과의 관계를 나타내는 역할을 한다.
여기서 user
는 다음과 같은 역할을 수행한다:
- 관계 설정:
@relation
데코레이터를 사용하여 데이터 모델 간의 관계를 설정할 때,user
는 해당 관계를 식별하는 이름이다. 이 이름을 사용하여UserInfos
모델에서Users
모델과의 관계를 정의합니다.
- 필드 매핑:
@relation(fields: [userId], references: [userId], onDelete: Cascade)
에서user
는UserInfos
모델의userId
필드가Users
모델의userId
와 연결됨을 나타낸다. 즉,UserInfos
테이블의userId
필드는Users
테이블의userId
를 외래 키로 참조하게 됩니다.
따라서 user
는 Prisma에서 데이터 모델 간의 관계를 설정할 때 사용되는 이름으로, 이를 통해 데이터베이스에서의 관계를 코드로 명확하게 정의하고 다룰 수 있다.
이번 팀프로젝트를 진행하며, 내가 사용한 connect에 명시된 부분이 바로 이부분이었다. 튜터님들 말씀처럼 그냥 명칭이 맞는데, 정확히 관계를 식별하는 이름이라고 알게되어 깔끔하게 정리 된 기분이다.
2. JavaScript 모듈을 통해 export시, default와 이름을 명시해주었을 때는 어떤점이 다를까?
과제를 진행하며, 수도 없이 import와 export를 진행했다. 나는 대체로 이름을 명시해주고 export를 해서 import 할 때도 그렇게 진행하였는데, 강의를 보면 default로 진행하는 경우가 많았다. 이 부분에 대해서는 아무도 말해주지 않아 이번기회에 찾아보았다.
export default
- 사용법: 모듈에서 한 번만 사용할 수 있다.
- 설명: 모듈에서 하나의 기능이나 객체를 기본적으로 내보낼 때 사용된다. 다른 파일에서 해당 모듈을 불러올 때는 기본으로 내보낸 객체를 바로 가져올 수 있다.
// ModuleA.js const someObject = { name: "John", age: 30 }; export default someObject;
// 다른 파일에서 ModuleA.js 불러오기 import someObject from './ModuleA.js'; console.log(someObject); // { name: "John", age: 30 }
- 예를 들어:
- 한 모듈에서 한 번만 사용:
export default
는 하나의 모듈에서 하나만 사용할 수 있으며, 기본적으로 내보내는 객체를 다른 파일에서 불러올 때는 해당 객체의 이름을 자유롭게 지정할 수 있습니다.
함수를 export default로 내보낸다면.
// ModuleA.js
export default function() {
console.log("This is a default function.");
}
- export default를 사용하여 함수나 객체를 내보낼 경우, import 구문에서는 기본으로 내보낸 항목을 가져올 때 이름을 직접 지정할 필요가 없다.
- 함수를 export default로 내보낼 때는 그 함수를 가져올 때 함수 이름을 자유롭게 지정할 수 있다.
- 객체를 export default로 내보낼 때는 그 객체를 가져올 때 객체 이름을 자유롭게 지정할 수 있다.
명시적인 이름을 지정해줄 때
- 사용법: 여러 개의 기능이나 객체를 내보낼 수 있다.
- 설명: 각 객체나 기능에 이름을 지정하여 외부에서 해당 이름으로 접근할 수 있다. 이 방식은 모듈에서 여러 개의 객체나 함수를 내보내고자 할 때 사용된다.
// ModuleB.js export const functionA = () => { /* ... */ }; export const functionB = () => { /* ... */ };
// 다른 파일에서 ModuleB.js 불러오기 import { functionA, functionB } from './ModuleB.js'; functionA(); functionB();
- 예를 들어:
- 여러 개 사용 가능: 명시적으로 이름을 지정해주면 한 모듈에서 여러 개의 객체나 함수를 내보낼 수 있다. 외부에서는 해당 이름들을 사용하여 접근할 수 있다.
요약
export default
는 한 모듈에서 하나의 객체나 기능을 기본적으로 내보낼 때 사용된다.- 명시적인 이름을 지정하여
export
할 경우 여러 개의 객체나 함수를 내보낼 수 있다.
따라서 모듈의 사용 목적에 따라 export default
와 명시적인 이름을 지정하여 export
하는 방식을 적절히 선택하여 사용할 수 있다.
내가 궁금했던 사용 상황과, import 할 때 어떻게 이름을 지정해야하는가에 대한 궁금증이 풀렸다.
아무래도 과제와 함께 급하게 진행하다보니 이러한 부분들을 놓치고 진행할 때가 많았는데 이번기회로 코드를 작성함에 대해 찝찝함이 사라지고 조금더 깔끔한 기분으로 할 수 있게된 것 같다.
'개발 기초 다지기' 카테고리의 다른 글
호이스팅과 클로져 (0) | 2024.06.27 |
---|---|
과제 리팩토링 (메뉴 원하는 카테고리 순서로 정렬) (0) | 2024.06.26 |
npm 글로벌 설치 오류 (0) | 2024.06.24 |
Prisma의 connect 기능 (0) | 2024.06.21 |
NOT FOUND 오류 핸들링 오류 (0) | 2024.06.21 |
댓글