전체 글 29

[Real MySQL 8.0] 사용자 및 권한

mysql은 사용자의 접속 지점 (호스트 명 or ip 주소)도 계정의 일부가 됩니다. %는 모든 IP 또는 모든 호스트명을 의미합니다. 아래 두 계정은 서로 다른 비밀번호를 가지고 있는 다른 계정입니다. 'svc_id'@'%' 'svc_id'@'127.0.0.1' 만약 127.0.0.1 로 접속을 한다면 mysql은 아래 계정을 선택합니다. 권한이나 계정 정보에 대해 mysql은 범위가 가장 작은 것을 항상 먼저 선택하기 때문입니다. 그래서 이 경우에 '%'에 대한 계정의 비밀번호를 입력하면 비밀번호가 일치하지 않습니다. 계정 종류 시스템 계정: SYSTEM_USER 권한을 가짐, db 서버 관리자 - 계정 관리 - 다른 세션 또는 그 세션에서 실행 중인 쿼리 강제 종료 - 스토어드 프로그램 생성 시 ..

Database 2023.09.01

[Real MySQL 8.0] mysql 설치와 설정

docker compose 를 제외한 모든 내용은 Real MySQL 8.0 Chpater 2 를 읽고 정리하였습니다. 공부용 docker compose version: '3' services: real-mysql: image: mysql:8.0 ports: - '3311:3306' restart: always container_name: real-mysql # stdin_open과 tty를 true로 해야 컨테이너 안에서 터미널 실행이 가능하다. stdin_open: true tty: true environment: TZ: Asia/Seoul MYSQL_USER: user MYSQL_PASSWORD: user MYSQL_DATABASE: real-mysql MYSQL_ROOT_PASSWORD: root..

Database 2023.08.28

코틀린 스프링 - application.yml 여러개 사용하여 불변객체 만들기

코틀린 스프링을 한 번 체험해보고 싶어서 인프런 무료 강의를 수강했습니다. 인프런 강의 링크 [무료] [초급] 맛보자! 코틀린과 스프링으로 API 호출하기 - 인프런 | 강의 간단한 기능 구현을 통해 코틀린과 스프링 조합을 빠르게 훑어볼 수 있는 강의입니다., API를 호출하는 실습을 통해코프링을 가볍게 찍어 먹어 보세요! 🥄 [사진] 코틀린과 스프링 맛보기 🔍 요 www.inflearn.com 이 강의 중간에 카카오 다음 검색 API 사용하는부분이 있는데, KAKAO API KEY를 application.yml에 작성하고 @Value annotation 으로 가져와서 사용하는 것으로 설명이 나옵니다. Node.js 에서 .env 환경변수를 사용하는것처럼 application.yml 을 여러개의 파일로 ..

Spring 2023.08.16

[친절한 SQL 튜닝] NDV, 선택도 (Selectivity), 카디널리티 (Cardinality)

친절한 SQL 튜닝을 읽고 개념에 대해 정리합니다. NDV (Number of Distinct Value) 유일하게 구별되는 컬럼 값 종류의 개수 예1 ) 성별 컬럼은 남자, 여자 두종류의 값으로 이루어져 있으므로 NDV(성별) = 2 이다. 예2 ) A1 컬럼이 A, B, C, D, E 5종류의 값으로 이루어져 있다면 NDV(A1) = 5 이다. 선택도 (Selectivity) 전체 레코드 중에서 조건절에 의해 선택되는 레코드 비율 선택도 = 1 / NDV (where = 조건) 선택도 = 반환되는 레코드 수 / 전체 레코드 수 (일반적으로) 카디널리티 (Cardinality) 전체 레코드 중에서 조건절에 의해 선택되는 레코드 개수 (실제 predicate에 의해서 추출되는 row 수를 의미) 카디널리..

Database 2023.08.16

Data Structure - Stack [JavaScript]

후입선출 Last In First Out class Stack { storage size constructor() { this.storage = {} this.size = 0 } push(data) { this.storage[++this.size] = data } pop() { if (this.size < 1) { console.error(`stack이 비어있습니다. - size: ${this.size}`) return null } const result = this.storage[this.size] delete this.storage[this.size--] return result } top() { if (this.size < 1) { console.error(`stack이 비어있습니다. - size:..

[express.js] 아주 간단한 express.js, singleton, typescript, prisma+mysql, mongoose+mongodb, oop

최근 엘리스 SW 5기 수강생 두분께 무료 수업을 진행해드리고 있는데, 블로그에도 글을 올리면 좋겠다 싶어서 포스팅하게 됐습니다. 정말 기초적인 수준의 singleton과 oop를 typescript와 express를 이용하여 구현해보았습니다. singleton 아이디어는 회사 선임분께서 작성하신 코드에서 영감을 받았습니다. 또한, typescript를 사용하여 간단하게 oop를 구현하였으며, 3 layered architecture임에도 불구하고 추상화를 통해 각 계층에 대한 정보 외에는 모르게 설계하였습니다. (시간 관계상 service에만 적용) 그래서 repository layer에서 prisma와 mongoose 어떤것을 사용하여도 service layer 에서는 영향이 없습니다. 우선 mysq..

객체지향의 사실과 오해 - 조영호

https://product.kyobobook.co.kr/detail/S000001628109 객체지향의 사실과 오해 | 조영호 - 교보문고 객체지향의 사실과 오해 | 객체지향에 대한 선입견을 버려라!『객체지향의 사실과 오해』는 객체지향이란 무엇인가라는 원론적면서도 다소 위험한 질문에 답하기 위해 쓰여진 책이다. 안타깝 product.kyobobook.co.kr 객체지향의 사실과 오해 (역할, 책임, 협력 관점에서 본 객체지향) 책을 완독했습니다. 이 책은 5월 11일부터 출퇴근길에 읽기 시작했고, 오늘 6월 12일에 마지막장을 읽었습니다. 엘리스 부트캠프를 하며 친해지게 된 코치님께서 오브젝트 책과 함께 선물을 해주셨습니다. 오브젝트 책의 존재는 알고 있었는데, 객체지향의 사실과 오해 부터 읽으면 된다..

도서 2023.06.12

한권으로 끝내는 네트워크 기초 - 오키타 토시야

한권으로 끝내는 네트워크 기초를 다 읽었습니다. 총 228페이지 이며, 대부분은 출퇴근할때 읽었고 나머지는 집에서 읽었습니다. 비전공 백엔드 개발자 이기때문에 cs지식이 많이 부족하다고 느꼈고, 처음부터 너무 본격적인 책을 읽기 보다는 기본적인 흐름을 먼저 아는것이 중요하다고 생각했습니다. 그래서 찾아보다가 교보문고와 yes24에서 봤을 때 평도 좋고 최신 책이라서 (22년 5월 초판발행) 구매했습니다. 우선 전체적인 평은 저같은 비전공자에게 매우 좋은 책이라고 말할 수 있겠습니다. 단순히 암기용으로 OSI 7계층, TCP/IP, HTTP 등을 외우는 것과 달리 이 기술이 왜 생겨났는지, 어떻게 사용되고 있는지를 설명해줍니다. 또한, 저자는 일본인이지만, 김성훈님께서 책을 옮겨주시면서 한국에서 사용되고 ..

도서 2023.04.20

MongoDB에서 bulkWrite updateOne upsert를 할 때 filter: _id 주의점

MongoDB에서 bulkWrite updateOne upsert에 대한 문법은 다음과 같습니다. 참고: 공식문서 const bulk = [ { updateOne: { filter: {}, update: { $set: {}, $push: {}, ... }, upsert: true } } ] db.collection.bulkWrite(bulk) 여기서 filter에 ObjectId, 즉 _id를 제외한 다른 필드를 넣는것은 문제될 게 없습니다. 하지만 _id로 필터링을 하면 문제가 생깁니다. _id를 갖는 document가 없으면, 새로운 ObjectId를 갖는 document를 insert 하는 것이 아니라, 지정한 _id를 갖는 document를 insert합니다. 다음은 세가지 예시 코드입니다. co..

Database 2023.03.28