key 란? key는 database에서 조건에 만족하는 튜플을 찾거나 순서대로 정렬을 할 때 튜플을 구분하는 기준이 되는 속성을 말합니다. 키의 종류에는 후보키, 기본키, 대체키, 슈퍼키, 외래키 등이 있습니다. 1) 기본키 Primary Key 흔히 PK라고도 불리며 기본키는 후보키 중에서 선정된 주(Main) 키로 중복된 값을 가질 수 없습니다. 즉 한 테이블에서 특정 튜플(row = 행)을 유일하게 구별할 수 있는 것입니다. 기본키는 기본적으로 Null값을 받아올 수 없습니다. 왜냐하면 기본키는 유일성*과 최소성*을 가지고 있어 튜플을 식별해야 하기 때문에 null값이 올 수 없는 것입니다. 2. 외래키 Foreign Key FK라 불리며 다른 테이블의 기본키를 참조하는 속성이나 속성들의 집합을 ..
분류 전체보기
데이터베이스란? 데이터베이스는 데이터를 효율적으로 관리하기 위한 집합체를 말하고 DB라고도 합니다. 이는 데이터를 구조화하여 관리함으로써 데이터의 중복을 막을 수 있고, 효율적이고 빠른 데이터 연산처리를 가능하게 합니다. DBMS란? 데이터베이스를 운영하고 관리하는 시스템(DataBase Management System)으로 데이터베이스를 사용할 수 있는데요. RDBMS란? Relational DataBase Management System의 약자로 관계형 데이터베이스 관리 시스템입니다. 이 RDBMS는 RDB, 즉 관계형 데이터 모델로 모든 데이터를 테이블 형태로 하여 표현을 하는데요. 이 테이블간의 관계를 타나내기 위해 외래키(Foreign Key)를 사용하는데 외래키를 이용해서 테이블 간 JOIN을..
오늘 수업 내용📚 실습에 Router 적용하기 Map객체 → DB로 ERD 구성해 보기 ERD에 따른 코드 수정 (기존 프로젝트 posts) 오늘 수업으로 인해 코드수정을 하게 되었습니다. 기초코드부터 찬찬히 작성하여 조금씩 디벨롭해 가는 방향으로 수업을 진행 중인데 제가 스스로 짠 코드를 강사님의 조건에 맞게 코드를 수정을 하는 부분에 있어서 누락이 된 부분, 참고하면 좋을 부분들을 정리하면서 하느라 조금 시간이 걸렸습니다. 일단 강사님과 코드를 짜면서 달랐던 부분은 db.size를 확인하는 작업에서 차이가 났습니다. 저는 아무래도 db는 당연히 있다라고 생각을 한 것 같은데 허를 찔린 기분이 들었고 db.size를 추가하는 작업을 했습니다. 저는 if 중점 최대한 지양하려고 하는 편이라 early r..
지금까지 미니프로젝트에서 data를 database Schema를 만드는 게 아니라 Map 객체를 이용해서 사용을 했었는데요. 본격적으로 시작하기 앞서서 database를 만들 때 참고할 ERD를 짜보려고 합니다. 테이블은 두 가지로 만들 건데요. 첫 번째로 user 테이블, 두 번째로 channel 테이블을 만들어볼 예정입니다. 1) USER TABLE 필요 데이터 : 회원번호, 회원아이디, 회원비밀번호, 회원이름 이때 회원번호는 고유번호로 PK, 회원아이디도 단 하나의 아이디여야 하기 때문에 UQ, 로 설정을 하려 합니다. 회원번호(PK) 아이디(UQ) 비밀번호 이름 1 testId1 1234 테스터1 2 testId2 9876 테스터2 2) CHANNEL TABLE 필요데이터 : 채널번호, 채널주인..
그동안 user와 channel을 각각의 파일에서 작업을 하고 확인을 진행하였는데요. 이제 router를 이용하여 router 관리를 해보려합니다. 폴더구조 정리 기존에 루트 폴더에 있던 channels.js와 users.js를 routes폴더 안에 넣고, 서버구동에 사용하는 app.js를 생성하였습니다. root ├─ app.js └─ routes ├─ channels.js └─ users.js 이제 router로 관리를 하기 위해서 channels와 users 파일을 모듈로 만드는 작업을 해보려 합니다. 기존 channels와 users 파일 //기존의 app을 router로 변경 const app = express(); → const router = express.Router(); app.get(경..
express의 가장 큰 장점인 routing은 Request가 왔을 때 원하는 경로에 따라 적절한 방향으로 경로를 안내해 주는 것을 말합니다. 쉽게 말해서 URI와 method에 맞는 콜백함수를 어떤 걸 호출할지 알려주는 것을 의미합니다. router는 어떻게 이용하는 걸까요? express의 router를 사용하기 위해 필요한 파일 및 폴더 /routes /router.js /app.js router를 사용하기 위해서는 기본적으로 서버 구동을 시킬 app.js와, routes 폴더가 필요합니다. app.js에서는 전반적인 서버 설정 관련 코드들이 있다면 routes 폴더에는 여러 router파일들이 모여있는 것을 말하는데요. 이때 이 router.js는 특정 기능끼리 묶어서 사용하는 경우가 많습니다...
DB를 이용하여 채널 전체 조회하기 유효성 검사 body("user_id").notEmpty().withMessage("user_id를 입력해주세요") .isInt().withMessage("user_id 데이터가 잘못입력되었습니다.") 채널 전체 조회 이미 유효성 검사를 통해서 user_id 값이 undefined로 넘어오는것이 아니기 때문에 해당 부분을 if(data.length === 0)으로 조건을 넘겼고, 해당 조건이 일치할경우는 user_id값을 갖고있는 채널이 존재하지 않다는 뜻이기 때문에 notFoundChannel함수를 사용하였습니다. const { user_id } = req.body; try { const select_sql = "select * from channels where u..
오늘 수업 내용 📚 미니 프로젝트 로그인 : 예외처리 Object.key 채널 API 설계 채널 생성, 채널 개별 조회, 채널 개별 삭제, 채널 개별 수정, 채널 전체 조회 오늘은 어제에 이어서 미니 프로젝트를 통해서 실전 코드 작성을 해보았습니다. API 설계부터 설계에 맞는 API 작성을 하였는데요. 아무래도 제가 작성하는 방식과 강사님이 하는 방식이 다르다 보니 그 부분에 있어서 조금 혼란스러웠던 게 있었던 것 같습니다. 예를 들어서 로그인할 때 강사님은 let hasUser = false; let loginUser = {}; db.forEach((user,id)=>{ if(user.userId === userId){ hasUser = true; loginUser = user } }) if(hasU..
DB를 이용하여 채널 개별 수정하기 유효성 검사 채널 개별 수정의 경우에는 param을 통해 채널번호를 받고, body값으로는 title과 description을 받지만 description은 필수항목이 아니기 때문에 유효성검사에서는 제외하였습니다. param("id").notEmpty().withMessage("채널번호가 없습니다."), body("title").notEmpty().withMessage("제목을 입력하세요"), 채널 개별 수정 let { id } = req.params; id = parseInt(id); const { title, description } = req.body; const update_sql ="update channels set title = ? , description..