환경변수
- 운영체제나 소프트웨어에서 참조하는 변수로, 프로그램 동작에 영향을 주는 값들을 저장한다.
💻 dotenv
- .env 파일에 키=값 형식으로 환경변수를 정의
- 보안에 민감한 정보를 코드에서 분리할 수 있다!
- 보안상 중요한 정보를 포함하므로 .gitignore에 추가하여 버전 관리에서 제외해야 한다.
Sequelize
- Node.js에서 사용하는 ORM(Object-Relational Mapping)라이브러리
- 개발자가 SQL 쿼리를 직접 작성하지 않고도 Javascript 객체를 통해 데이터베이스와 상호 작용할 수 있다!
💻 모델 정의
Sequelize.define(param1, param2, param3);
// param1: 모델(테이블) 이름 설정
// param2: 컬럼 정의
// param3: 모델 옵션 정의
💻 컬럼 정의
- type: 데이터 타입 (예: DataTypes.STRING, DataTypes.INTEGER)
- allowNull: null 값 허용 여부 (기본값: true)
- primaryKey: 기본 키 설정 (기본값: false)
- autoIncrement: 자동 증가 설정 (INTEGER 타입에서 사용 가능)
- unique: 고유값 설정
- defaultValue: 기본값 설정
- field: 실제 데이터베이스 컬럼명 지정
더보기
const GameModel = (sequelize, DataTypes) => {
return sequelize.define(
"game",
{
game_id: {
type: DataTypes.INTEGER,
primaryKey: true,
allowNull: false,
autoIncrement: true,
},
date: {
type: DataTypes.DATE,
allowNull: false,
},
location: {
type: DataTypes.STRING(63),
allowNull: false,
},
},
{
freezeTableName: true,
}
);
};
module.exports = GameModel;
Database 응용
💻 JOIN 종류
- INNER JOIN: 공통된 값만을 가진 행 반환
- LEFT JOIN: 왼쪽 테이블 모든 행을 포함하고, 오른쪽 테이블에서 일치하는 행을 결합
- RIGHT JOIN: 오른쪽 테이블의 모든 결과가 포함되고, 왼쪽 테이블에서 일치하는 행을 결합 (없으면 NULL 값이 채워진다)
- FULL JOIN: 양쪽 테이블의 모든 레코드가 결과에 포함. 일치하지 않는 레코드는 NULL 값으로 채워진다. 중복은 제거된다.
SELECT 조회할 필드 FROM 테이블 명 INNER JOIN 조인할 테이블 명 ON 일치해야할 필드
#########################
-- JOIN: 두 테이블을 묶어서 하나의 테이블로 만듦
-- INNER JOIN
-- 1. INNER JOIN과 ON 사용
SELECT * FROM customer INNER JOIN orderlist ON customer.id=orderlist.customer_id;
-- 2. WHERE로 INNER JOIN 사용
SELECT * FROM customer, orderlist WHERE customer.id=orderlist.customer_id;
-- 3. INNER JOIN과 ON 사용, WHERE 조회 조건 추가
SELECT * FROM customer INNER JOIN orderlist ON customer.id=orderlist.customer_id WHERE quantity >=5;
-- 4. WHERE로 INNER JOIN, 조회 조건 추가
SELECT * FROM customer, orderlist WHERE customer.id=orderlist.customer_id AND quantity >=5;
-- 5. 특정 컬럼 조회
SELECT orderlist.id, customer.id, customer.name, orderlist.product_name, orderlist.quantity
FROM orderlist, customer WHERE customer.id=orderlist.customer_id;
-- 6. 테이블에 별침 지어서 접근(AS)
SELECT c.id, o.customer_id, c.name, o.product_name, o.quantity
FROM customer as c, orderlist as o
WHERE c.id=o.customer_id;
-- ## [LEFT OUTER JOIN, RIGHT OUTER JOIN]
SELECT* FROM orderlist LEFT OUTER JOIN customer ON orderlist.customer_id=customer.id;
SELECT* FROM orderlist RIGHT OUTER JOIN customer ON orderlist.customer_id=customer.id;
-- ## NATURAL JOIN
SELECT * FROM orderlist NATURAL JOIN customer;
-- 같은 column이 없어서 안됨
💻 Relationship
- 일대일 (1:1) 관계: 한 테이블의 레코드가 다른 테이블의 레코드 하나와 정확히 연결
- 일대다 (1:N) 관계: 한 테이블의 레코드가 다른 테이블의 여러 레코드와 연결
- 다대다 (N:M) 관계: 양쪽 테이블의 여러 레코드가 서로 연결
// 1) Player:Profile = 1:1 관계
PlayerModel.hasOne(ProfileModel, {
onDelete: "CASCADE",
onUpdate: "CASCADE",
foreignKey: "player_id",
});
ProfileModel.belongsTo(ProfileModel, {
foreignKey: "player_id", // 내가 정해주는 이름
});
// 2) Team:Player = 1:N 관계
TeamModel.hasMany(PlayerModel, {
foreignKey: "teamid", // 내가 정해주는 이름
sourceKey: "team_id", // 실제로 참조할 이름
});
PlayerModel.belongsTo(TeamModel, {
foreignKey: "teamid",
targetKey: "team_id", // 실제로 참조할 이름
// 실제 team model의 컬럼명과 일치해야 함
// models/Team.js의 primary Key
});
// 3) Team:Game = N:N 관계
// 중개 테이블 TeamGameModel을 활용해야 함
TeamModel.belongsToMany(GameModel, {
through: TeamGameModel,
foreignKey: "team_id", // 내가 정해주는 이름 for team model
});
GameModel.belongsToMany(TeamModel, {
through: TeamGameModel,
foreignKey: "game_id", // 내가 정해주는 이름
});
'SeSAC x CodingOn 웹 취업 부트캠프' 카테고리의 다른 글
[새싹/코딩온] 풀스택 웹 개발자 취업 부트캠프 7주차 (2): JWT, 비밀번호 암호화 (1) | 2025.01.05 |
---|---|
[새싹/코딩온] 풀스택 웹 개발자 취업 부트캠프 7주차 (1): Cookie & Session (0) | 2025.01.04 |
[새싹/코딩온] 풀스택 웹 개발자 취업 부트캠프 6주차 (1): MVC 패턴, MySQL 연결 (0) | 2025.01.04 |
[새싹/코딩온] 풀스택 웹 개발자 취업 부트캠프 5주차 (2): Multer, Database (1) | 2025.01.02 |
[새싹/코딩온] 풀스택 웹 개발자 취업 부트캠프 5주차 (1): 동적 폼 전송 (0) | 2024.12.12 |