했던것들

했던것들/MySQL

Error Code: 1175. safe update mode 해제 SQL문

DELETE, UPDATE를 할 때 id를 참조하여 바꾸지 않으면 1175 에러가 난다. Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column. To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnect. 언제나 키 컬럼을 참조해서 row를 변경, 삭제할 수 있다면 좋을 것이지만, 간단한 테스트나 연습의 경우에는 그러기가 좀 곤란하다 그럴때는 safe mode를 해제해주면 된다. set sql_safe_updates=0;

했던것들/MySQL

일대다(one to many) 관계 연습

다이어그램 회원가입시 customers 페이지에 개인정보가 저장된다. (id가 고유하게 존재한다.) orders는 회원이 물건을 구매할 시 row가 생성되는 테이블이다. (id가 고유하게 존재한다.) orders의 개별 id는 고유하지만, 회원 정보가 있어야만 물건을 구매할 수 있으므로, orders의 customer_id는 customers의 id를 외래키로 참조한다. 하나의 회원이 여러개의 orders row를 가질 수 있으므로, 이는 일대 다 관계에 해당한다. SQL문 // customers 테이블 생성 CREATE TABLE customers ( id INT AUTO_INCREMENT, first_name VARCHAR(50) NOT NULL, last_name VARCHAR(50) NOT NUL..

했던것들/MySQL

Error Code: 1093. You can't specify target table 'people' for update in FROM clause

문제 DELETE나 UPDATE 사용할 때, 메인 쿼리에서 만들어낸 서브쿼리를 직접적으로 참조하면 에러가 발생한다. DELETE FROM people WHERE name = (SELECT name FROM people WHERE name = 'PJY' LIMIT 1); 위의 SQL에서 에러가 발생했다. 해결 1. DELETE나 UPDATE 사용 시 서브쿼리를 사용하지 않는 방법 DELETE FROM people WHERE name = 'PJY' LIMIT 1; 서브쿼리를 사용하지 않는 편이 성능상으로나 쿼리 가독성으로나 더 좋은 방법이다. (+ LIMIT 거는 이유) 한번에 너무 많은 ROW를 삭제하면 데이터베이스에 부하가 가해지므로, 다른 트랜잭션이 처리되지 않아 데드락이 걸릴 수 있다. 이를 방지하기..

했던것들/알게된 것들

MySQL 테이블 설정 및 자료형 정리 (명령 프롬프트 & 워크벤치)

테이블 설정하기 전에 스키마(데이터베이스)가 설정되었다고 가정하고 진행한다. 명령프롬프트로 테이블 설정 스키마에 접근한다. 여기에서 스키마명은 nodejs 이다. TABLE을 만든다. CREATE TABLE 테이블명 으로 TABLE 생성을 선언한다. CREATE TABLE 테이블명 ( ) 에서 괄호 내부에 있는 내용들은 데이터베이스의 각 컬럼에 대한 정보를 설정하는 것이다. 괄호 바깥에 있는 내용들은 테이블에 대한 설정에 관한 것이다. 테이블의 소개, 기본 캐릭터셋, 데이터베이스 엔진등을 설정할 수 있다. 위의 프롬프트에서 볼 수 있듯이, id부터 created_at까지는 컬럼에 대한 설정이다. 해당 테이블에 대한 설정도 존재하는데, 일단 컬럼에 대한 설정부터 알아보자. 컬럼에 대한 설정 INT는 정수를..

했던것들/알게된 것들

MySQL 명령 프롬프트로 접속

MySQL을 명령프롬프트로 실행시키기 위해 MySQL이 설치된 폴더 > bin 으로 이동한다. 명령프롬프트에 접속했으면 mysql -h localhost -u root -p 를 입력하고 엔터를 친다. Enter password가 나왔다면 그대로 패스워드를 입력하고 엔터를 친다. mysql -h localhost -u root -p 에서 -h는 호스트명을, -u는 유저명을, -p는 비밀번호를 사용하겠다는 뜻이다. 호스트명은 localhost이니 MySQL에서 개방한 포트에 따라 localhost:8080/ 과 같은 형식으로 세팅될 것이고, 유저명은 root를 사용했으며, -p를 통해 비밀번호를 입력하고 접속할 수 있게 되었다.

했던것들/알게된 것들

MySQL 설치 및 설정

Type and Networking Config Type 설정에서 이 DB가 사용될 환경을 선택할 수 있다. 개발자 컴퓨터라면 DB에 메모리가 최소한만 할당될 것이고, 서버라던가 DB전용 서버라면 메모리가 많이 할당될 것이다. 따라서 개인 실습 환경의 경우에는 Development Computer를 선택해주자. Connectivity에서는 어떤 통신이나 파이프라인으로 DB를 연결할지를 설정할 수 있다. 개인 실습 환경의 경우에는 TCP/IP 포트 통신을 그대로 사용해주자. Authentication Method 위에는 SHA-256이라는 강력한 암호화를 사용하는 인증이고, 아래는 레거시 암호화를 사용하는 버전이다. SHA-256은 MySQL에서는 8버전 이상만이 호환되므로, MySQL을 처음 사용하는 사..

했던것들/알게된 것들

개선사항1에 대한 셀프 피드백

백엔드와 기획쪽과 협업할 일이 오늘도 역시나 생겼다. 어제는 말로만 내 의견을 전달하려다보니 많이 버벅였었는데 오늘은 이미지파일을 메신저로 먼저 전달하고 종이에 로직을 그려가서 자리에서 설명했다. 다행히도 말이 덜 꼬였고 내 의견도 잘 피력했다. 질문할 때 확실한 용어를 사용하는 것은 의도적인 노력이 필요할 것 같다. 변수명이 인간 친화적인 언어는 아니라 발음하기 많이 어려운데... 살짝 기계적으로 인지하고 말하는 것도 도움이 되지 않을까 싶다. 에러 처리를 잘 했다. 금액에 천단위로 쉼표 처리를 할 때, toLocaleString 메서드를 사용했는데 number 자료형이 아닌 것에 사용하면 에러가 난다는 것을 미리 인지하고 타입을 잘 걸러내서 오류 없이 동작하는 코드를 만들었다.

했던것들/알게된 것들

변수명을 잘 짓자

내가 변수명을 짓는데 약하다는 것을 알게 되었다. 미국인이 내 변수명을 보았을 때도 확실하게 의미 전달이 될 수 있도록 하는 것이 베스트일 것이다. 하지만 어중간한 영어를 구사하는 코리안으로써는 그 작업이 쉽지만은 않다. 지금은 급하면 급한대로 변수명을 대충 짓는 습관이 있어서 변수명이 중구난방으로 나오는 경우가 많은데, 앞으로는 변수명을 간단하게 짓더라도 구글 번역기나 챗지피티에게 한번 물어보고 컨펌(?)을 받아봐야겠다. 어제 수정한 변수명 (조금 쪽팔리다...) 월 예약이 있는지에 대한 변수 isMonthBook -> isMonthlyBook 월예약 환급금이 유효한지에 대한 변수 isValidCancelCost -> isValidRefund 월단위 환급금에 대한 변수 monthBookCancelCos..

했던것들/알게된 것들

개선사항1

기획이나 백엔드에 협조를 구할때는 말로만 하지말고 그림같은 시각적 자료를 통해 내 의견을 피력해보자. - 오늘 기획에 업무 협조를 요청했을 때, 말로만 내 의견을 납득시키려고 하니 힘들었다. 메신저 등을 통해 간단한 시각 자료(스크린샷도 좋다)를 준비해보자. 무언가 질문을 할때는 용어를 확실하게 사용하자. - 에러처리와 예외처리는 다른 말이다. 확실하게 말하려는 버릇을 들여야 확실하게 말할 수 있게 될 것 같다. template 등 직접적으로 렌더링되는 부분에는 array[0], array[1]과 같이 하드코딩하지 말자. (예외처리를 잘하자) 만약 어레이에 엘리먼트가 없게 된다면? 앱은 터질지도 모른다. 코드를 안전하게 짜려면 예외처리를 확실히 해야하고, 사소한 부분에서 신경써야 할 것이다.

했던것들/알게된 것들

public과 경로 / window.location 객체

vue/cli나 cra 등으로 작업 완료 후 빌드했을 때, public 폴더 내부에 있는 파일들의 경로가 내가 의도한 바와 달라질 수 있음을 주의하자. 나의 경우에는 로컬환경에서는 의도대로 잘 동작하다가, 배포 후 주소가 예기치 않게 동작하는 이슈가 발생했다. public을 사용할때는 경로를 항상 주의하자. 브라우저의 window.location 객체는 현재 브라우저의 경로에 관한 다양한 프로퍼티와 메서드들이 있다. window.location.href 프로퍼티로 새로운 페이지로 이동할 수 있고, 현 주소를 참조할 수도 있다. window.location.replace 메서드로는 페이지 자체를 전환할 수 있다. 이 외에도 브라우저 경로에 관한 많은 기능들이 location 객체에 존재한다.

2DC
'했던것들' 카테고리의 글 목록