전체 글(86)
-
upsert query에서 발생한 문제점
[환경] Mysql5.7(InnoDB), Python [상황] upsert 쿼리에서 id(auto_increment)컬럼이 순차적이 아닌 건너 뛰면서 저장되고 있는 현상이였습니다. [원인] InnoDB에서 auto_increment 열은 각각의 트랜잭션에서 순차적으로 증가되며, 각 트랜잭션에서 할당된 auto_increment 값은 InnoDB의 메모리 버퍼에 저장되어, 나중에 디스크에 쓰여질 때까지 버퍼링 된다는 개념이 있습니다. 제 나름대로 정리를 하면 쿼리를 실행하기전 이미 auto_increment값이 각 각의 트랜잭션마다 할당 되어져 있다고 보입니다. 그렇기 때문에 만약 id가 1로 insert로 할려다가 이미 해당 row가 있다고 가정하면 update를 실행 후 그 다음 row를 실행하면 id..
2023.04.19 -
where , having 특징
where - 집계 함수(group)가 적용되기 이전에 해당하는 레코드들을 선택합니다. having - 그룹화된 결과에 대한 필터링을 수행합니다. group by와 무조건 같이 써야합니다. 즉 그룹화 된 결과에 대해서만 조건문이 적용 가능합니다. [예시] // 올바른 sql SELECT department, AVG(salary) AS avg_salary FROM employees GROUP BY department HAVING AVG(salary) >= 55000 ORDER BY avg_salary DESC; // 잘못된 sql SELECT department, AVG(salary) AS avg_salary FROM employees where AVG(salary) >= 55000 GROUP BY dep..
2023.04.19 -
Mysql now(), curdate() 차이
now() 함수는 현재 시간과 날짜를 "년-월-일 시:분:초" 형식으로 반환합니다. curdate() 함수는 현재 날짜 정보만 "년-월-일" 형식으로 반환합니다.
2023.04.19 -
Chrome, Firefox 차이 in selenium
[환경] mac m1칩에서 docker container로 ubuntu18.04 환경을 구축 [목적] container로 구축한 ubuntu18.04로 selenium을 실행 [참고] 이미 window10 환경에서는 ubuntu container에서 chrome, chromedriver를 설치 후 정상으로 selenium을 실행한 것을 확인했습니다. [에러] 이상하게 같은 소스에 같은 container였지만 mac m1에서만 Selenium: WebDriverException:Chrome failed to start: crashed as google-chrome is no longer running so ChromeDriver is assuming that Chrome has crashed과 같은 에러가..
2023.04.19 -
라라벨 서비스컨테이너와 서비스프로바이더 with DIP
서비스컨테이너(serviceContainer)란 객체를 생성하고 의존성 주입을 처리하는데 사용되는 라라벨의 기본 구성 요소입니다. 서비스 컨테이너는 라라벨 어플리케이션의 모든 객체를 인스턴스화하고 필요한 객체 간의 의존성을 자동으로 해결합니다. 이러한 기능을 수행하기 위해, 서비스 컨테이너는 객체의 클래스 이름과 생성 방법 등의 정보를 가지고 있습니다. 서비스프로바이더(serviceProvider)란 서비스 컨테이너에게 객체 생성 및 등록을 수행하는 역할을 합니다. 즉, 서비스 프로바이더는 라라벨 어플리케이션에 필요한 서비스들을 등록하고, 서비스 컨테이너가 이를 인스턴스화하고 의존성 주입을 처리할 수 있도록 지원합니다. 서비스 프로바이더는 서비스 컨테이너의 동작을 제어하는 데 사용되는 라라벨의 확장 기능..
2023.03.17 -
라라벨 가바지 컬렉션 처리
가바지 컬렉션(garbage collection : GC)은 메모리 관리 기법 중의 하나로, 프로그램이 동적으로 할당했던 메모리 영역 중에서 필요없게 된 영역을 해제하는 기능을 말합니다. 라라벨은 PHP 언어를 기반으로 하며, PHP는 자체적으로 가비지 컬렉션을 처리합니다. 따라서, 라라벨에서 가비지 컬렉션을 처리하는 방법은 PHP 자체의 가비지 컬렉션 방식과 동일합니다. PHP의 가비지 컬렉션은 참조 카운트(reference counting)와 Zend Memory Manager를 기반으로 작동합니다. PHP에서는 참조하는 변수가 없을 때 메모리를 자동으로 해제하는데, 이를 참조 카운트 방식이라고 합니다. 또한, PHP의 Zend Memory Manager는 작은 크기의 객체에 대한 메모리 관리를 효율..
2023.03.17