2024년 5월 7일에 마지막으로 수정되었습니다.
수정 내용: Nest.js 예제 코드 추가
요즘 틈틈이 서버를 개발해보고 있다. '프로덕트' 라는 단위의 산출물을 낼 때 거치게 되는 설계 - 개발 - 배포 - 유지보수 등등...
의 과정에서, 프론트엔드 개발자로 내 역할과 지식을 한정지었다가는 너무나 많은 기회와 재미난(!) 일들을 놓치게 되겠다는 생각이 들었다.
문제는 단순히 백엔드 프레임워크만 아는 것으로는 부족하다는 것이다.ㅎㅎ 당연하게도 예전에 들었던 데이터베이스개론 개념들을 끌어와야 하는 경우들을 슬슬 마주치고 있다. 데베개 강의를 다시 처음부터 끝까지 들을 수 있다면 좋겠지만 시간을 아끼기 위해 문제를 마주칠 때 마다 필요한 부분만 찾아본 뒤 간단히 정리해두는 편을 택했다.
결국 하고 싶은 말은 깊이 있는 깨달음을 목적으로 이 글을 쓰는 것이 아니라는 점이다.
🧐 이 글의 목적은 단순히 개념들을 요악하여 나열하는 데 있다.
name
, age
, gender
, height
, ... 등의 속성들이 모여 User
라는 Entity 를 구성한다.@Entity()
export class UserModel {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@Column()
age: number;
@Column()
height: number;
@Column()
gender: 'male' | 'female'
}
name
, age
, gender
, ... 라는 속성들이 개별적인 값으로 존재할 때에는 DB 상에서 명확한 의미를 갖지 않는다.name
string 이 어떤 의미를 갖는 값인지 알 수 없다.name
이 User
entity 를 이루는 속성일 때 비로소 DB 상에서 의미를 갖는다.name
string 은 'PK 로 구별되는 어떤 user 의 이름' 이라는 해석할 수 있게 된다.Entity === table
은 틀린 정의다.height
, gender
등 이름을 변경하는 것과 무관한 데이터들이 포함될 필요는 없다. interface UserNameDto {
id: number
name: string
}
...
@Patch('user/:id')
async PatchUserName = (
@Param('id') id: string
@Body('name') name: string,
): UserNameDto => {
...
return { id, name }
}