전체 글
-
[ORACLE] SELECT가 너무 느리다면 일단 이걸 확인해보기IT/코딩히스토리_DB 2025. 1. 20. 23:35
데이터를 주고 받는 경우가 많아서 매월, 당월에 발생한 데이터를 추출한다.그런데 데이터가 너무 많이 쌓여서 SELECT가 10분이 넘어도 끝나지 않았다.보통 쿼리 실행계획을 EXPLAIN PLAN을 통해서 확인을 한다는데 해당 쿼리가 다른 DB에서 링크로 여러 테이블을 가져와 조인하는 등 복잡해서 실행계획을 보는게 더 힘들었다.그래서 안에 있는 쿼리부터 차근차근 확인해봤다. 보통 이럴때 약간만 수정해도 쿼리 속도가 현저하게 빨라졌던 경험이 있어서이번에도 똑같이 진행해봤는데10분이 넘어도 실행안되던게 1분안에 결과문이 나왔다. 이런 경우는 아래 3가지를 확인한다.1) IN 사용을 되도록 안하기2) 서브쿼리가 꼭필요한가? 데이터가 많다면 되도록 JOIN을 활용하기3) 인덱스가 없는 경우 전체 행이 작은 테이..
-
[MyBatis] SqlSessionTemplate, 메퍼 인터페이스IT/코딩히스토리_BE 2025. 1. 15. 23:28
Spring에서 mybatis와 mybatis-spring을 사용할때 SqlSessionTemplate을 사용한다. SqlSessionTemplateMyBatis-Spring에서 제공하는 클래스로,Spring 환경에서 SqlSession을 안전하고 효과적으로 사용할 수 있도록 래핑한 구현체Spring의 트랜잭션 관리와 MyBatis를 통합하여, 스레드 안전성과 자원 관리를 자동화한다. 즉, sqlSessionFactory에서 하던SqlSession의 열기와 닫기 작업을자동 처리하여 자원 누수 방지. 개발자가 close()를 호출할 필요가 없다. (SqlSessionTemplate만 호출해서 실행하면 된다)(또 SqlSessionTemplate은 다중 스레드 환경에서 안전하게 사용할 수 있도록 설계되어..
-
[MyBatis] SqlSession, SqlSessionFactory, SqlSessionTemplateIT/코딩히스토리_BE 2025. 1. 12. 23:53
마이바티스는 자바 기반의 SQL 매퍼 프레임워크라고했다. SQL문을 실행해주고 리턴을 받아야 하는데 이때 마이바티스는 SqlSession이라는 객체를 통해서 이를 진행한다. SqlSession이란?MyBatis에서 제공하는 주요 인터페이스로, 데이터베이스와의 연결(Session)을 관리하며 SQL 쿼리 실행, 트랜잭션 관리, 매퍼 호출 등의 역할을 담당MyBatis의 SqlSession은 JDBC의 Connection 객체를 내부적으로 사용하며, 이를 통해 개발자가 SQL 실행과 결과 매핑을 쉽게 처리할 수 있도록 도와준다. 즉, SqlSession은 JDBC의 Connection 객체와 같이SQL을 실행하고 결과를 반환받는 그릇이라고 생각하면 된다. SqlSession 자체도 열고 닫고를 SQL실행마..
-
[MyBatis] MyBatis?IT/코딩히스토리_BE 2025. 1. 12. 16:20
마이바티스는 개발자가 지정한 SQL, 저장프로시저 그리고 몇가지 고급 매핑을 지원하는 퍼시스턴스 프레임워크이다.JDBC로 처리하는 상당부분의 코드와 파라미터 설정및 결과 매핑을 대신해준다. 마이바티스는 데이터베이스 레코드에 원시타입과 Map 인터페이스 그리고 자바 POJO 를 설정해서 매핑하기 위해 XML과 애노테이션을 사용할 수 있다. (마이바티스3 문서: https://mybatis.org/mybatis-3/ko/index.html) 위에 설명은 마이바티스3 문서에서 나온 마이바티스에 대한 설명인데 한마디로 마이바티스라는 프레임워크를 사용하면 JDBC에서 사용했던 불편함을 개선할 수 있는 것이다. 즉, MyBatis는 자바 기반의 SQL 매퍼 프레임워크로, 개발자가 데이터베이스와 상호작용할 때 SQL..
-
[React js] state, useRef(), 로컬변수IT/코딩히스토리_FE 2024. 12. 20. 18:29
리액트에서는 변수를 사용할때 useState를 이용해 상태 관리와 리랜더링을 할 수 있다. 하지만 해당 변수의 값변경이 리랜더링이 필요없을 때는 useState를 이용하는건 불필요하다.특정 이벤트가 동작했을 때 useEffect()를 타도록 개발을 하고 있었다. 그렇기 때문에 의존성 배열에 useState를 통한 변수를 넣을지 , useRef()를 통한 변수를 넣을지 고민하다가문득 로컬변수와 useRef()의 차이점에 대해 정리가 명확하게 되지 않았다. 우선 useRef()는 useState처럼 값이 변경됐을때 리랜더링을 발생시키지 않지만, 동일하게 값을 유지하고 관리할 수 있는 리액트 훅이다.그렇다면 로컬 변수 또한 값이 변경됐을 때 리랜더링을 발생시키지 않는데, 그럼 어떤 상황에서 뭘 써야할까? 차이..
-
[자바스크립트] parseFloat() 사용시 주의사항IT/코딩히스토리_FE 2024. 12. 20. 18:29
parseFloat()는 자바스크립트의 전역 함수로,문자열을 부동소수점 수(float)로 변환하는 역할을 한다.즉, 주어진 문자열에서 숫자로 변환할 수 있는 부분을 파싱하고, 이를 반환한다. [작동방식] 문자열의 앞쪽부터 숫자를 인식(공백은 무시되지만, 숫자가 아닌 문자가 나오면 파싱을 중단합니다.)변환 가능한 숫자를 부동소수점 형태로 반환변환할 수 없는 문자열은 NaN을 반환 즉, parseFloat(string) 일시만일 '400,000' 의 값이 들어가게 된다면 결과 값은 400이 나온다, ','은 숫자가 아닌 문자기 때문에 파싱을 중단하기 때문이다. 때문에 자릿수 구분이 있는 숫자(금액) 같은 것을 parseFloat에 사용하려면 value = String(value).replace(/,/g,..
-
[코딩전에 보자] 개발팀이 갖춰야할 역량IT/소프트웨어 관련 지식 2024. 1. 26. 00:06
* 해당 내용은 김익환, 전규현 님이 지은 '소프트웨어 개발의 모든 것'에 나와있는 내용을 기준으로 작성하였습니다. 좋은 소프트웨어란 뭘까? 많은 조건들이 있겠지만 몇가지 뽑아보자 1) 유지보수가 용이해야한다. 2) 설계가 간결하고 명료해서 설계대로 만들어졌다. 3) 다른 팀원의 합류에 무리가 없다. 4) 표준이 있어서 관리가 용이하다. 5) 확장성과 유연성을 가지고 있다. 6) 버그 혹은 변경사항을 기록하고 공유 가능해야한다. 등등 지금 바로 떠올려도 많은 것들이 떠오른다. 책 '소프트웨어 개발의 모든 것'에서는 소프트웨어 프로젝트 팀이 갖춰야할 역량에 대해 다음과 같은 20가지를 말한다. 전사적으로 소스코드 관리 시스템을 딱 하나만 사용해야 한다.(SVN, GIT 등등) 모든 소스코드 및 개발문서는 ..
-
[코딩전에 보자] 개발에 필요한 기반 시스템IT/소프트웨어 관련 지식 2024. 1. 26. 00:06
기반 시스템(Infrastructure System)은 소프트웨어를 개발하는데 필요하거나 도움이 되는 시스템이다. 필요한 기반 시스템과 꼭 필요한 것은 아니지만 있으면 도움이 될만한 기반 시스템을 정리해 보겠다. 본격적인 개발을 들어가기 전에 이러한 사항들을 고려해보는게 좋을 것 같다. 필요한 기반시스템 소스코드 관리 시스템 흔히들 형상관리 시스템이라고 한다. 개발 생상성에 도움을 준다. (진척도 및 공유) 보관 및 백업 기능 수정이력이 남아서 문제시 원인 파악이 확실하다. (개발 과정의 투명성을 보장) 여러 버전의 개발을 할 수 있다. (기능을 분리해서 개발 가능하도록 해준다.) 문제시 손쉬운 복구 (빌드/복구가 미리 숙달되어 있어야 한다.) 대표적으로 중앙 관리식으로는 SVN , 분산 관리로는 GIT..