728x90

전체 글 331

[친절한 SQL 튜닝 스터디] 1장. SQL 처리 과정과 I/O - 실행계획

구조적, 집합적, 선언적 질의 언어 SQL은 원하는 결과집합을 구조적, 집합적으로 선언하지만, 그 결과집합을 만드는 과정은 절차적일 수밖에 없다. 즉, 프로시저가 필요한데, 그런 프로시저를 만들어 내는 DBMS 내부 엔진이 바로 SQL 옵티마이저다. 옵티마이저가 프로그래밍을 대신해 주는 셈이다. DBMS 내부에서 프로시저를 작성하고 컴파일해서 실행 가능한 상태로 만드는 전과정을 'SQL 최적화' 라고 한다. SQL 최적화 SQL 파싱 - 사용자로부터 SQL을 전달받으면 가장 먼저 SQL 파서(Parser)가 파싱을 진행한다. SQL 파싱을 요약하면 아래와 같다. 파싱 트리 생성 : SQL 문을 이루는 개별 구성요소를 분석해서 파싱 트리 생성 Syntax 체크 : 문법적 오류가 없는지 확인. 예를 들어, ..

Java Office365 SMTP 메일발송 실패

javax.mail.AuthenticationFailedException 에러를 발생하며 메일발송이 실패 javax.mail.Session의 setDebug(true)로 디버깅 결과 421 4.7.66 TLS 1.0 and 1.1 are not supported. Please upgrade/update your client to support TLS 1.2. Visit https://aka.ms/smtp_auth_tls. We intend to make a final announcement when we are ready to make the change to disable TLS1.0 and TLS1.1 for SMTP AUTH for the regular endpoint. 를 확인할 수 있다. 따라서..

JAVA 2023.10.23

I Like Myself - 브라이언 트레이시(황금부엉이) 책 정리

시도하라. 소득을 두배로 만들기위해서는 생각을 바꾸라. 시작은 결심하고 이를 목표로 만드는 것. 가장 중요한 것은 자신이다. 얼마나 스스로를 중요하게 생각하는가, 좋게 생각하게 되는 가에 따라 달라진다. 그러면 타인도 좋아하고, 자신의 건강도 좋아지고, 가족관계도 좋아진다. "I like my self" 10, 20, 40번 이나..란 말을 계속하라. 혼자 있을때.. 자긍심(self esteem) 은 구멍난 타이어와 같다. 계속 주입해야 한다. 우리는 감정에 따라 결정하지만 논리로서 정당화하려고 한다. 좋은 사람이 되면 사회의 모든 문제가 해결된다. 스스로의 인생에 책임을 져라.. 그것이 사장이 된다는 의미다. 적극적이 되어서, 문제를 해결하려고 노력하라. 누구도 나보다 낫거나 똑똑한 사람은 없다. 성적..

좋은글 2023.10.21

[펌]하버드 교수가 말하는 '걱정 없애는 5가지 방법'

‘왜 하필 내가 그때 그랬을까.’ ‘내일 이러면 큰일인데…’ 이런 생각이 머릿 속을 휘저을 때가 있다. 잠자리에 들어 불을 끄고 나면 홀연히 떠오르는 민망한 기억과 심장이 내려앉는 걱정들. 마구 이불킥을 내찰수록 오히려 머리에는 더 착 감기는 골칫덩이. 이런 불쾌한 기억과 걱정은 ‘난 보잘 것 없는 인간’이란 생각이 드는 자괴감도 동시에 데려와 결국 영혼이 탈탈 털리기 일쑤다. 걱정과 불쾌한 생각들을 정리하는 방법을 소개한다. 현대 과학과 수천년전 내려온 지혜가 만나 내놓은 방법이다. 그러니 제목에 낚였다고 생각하지 말아주길. 하버드의대 임상심리학과 교수인 로널드 시걸가 제안한 다섯가지 방법이다. ‘마음 챙김’을 통해 걱정을 없애고 현실에 집중하는 방식이다. 1. 당신과 당신의 생각은 다르다 지금 바로 ..

좋은글 2023.10.14

Error getting access token for service account 오류 해결

원인 : 스프링 부트 스케쥴러와 트랙잭션을 따로 동작시키면 Error getting access token for service account 오류가 발생 @Service @Transactional class NotiService { private val pushInfoJpaRepo: PushInfoJpaRepo, ) { val log = KotlinLogging.logger {} fun sendPush(repeatedPushResults: List?) { val pushReservedInfo = PushReservedInfo() if (repeatedPushResults != null) { for (repeatedPushResult in repeatedPushResults) { if (userNtcnS..

FCM 2023.10.12

배열 선언 및 초기화(initialization)

배열(Array) 이란? 배열(Array)이란 선형 자료구조(Data Structure)중 하나로, 동일한 타입의 연관된 데이터를 메모리에 연속적으로 저장하여 하나의 변수에 묶어서 관리하기 위한 자료 구조입니다. 가장 기본적인 자료구조인 만큼 C,Java,Python등 거의 모든 언어에 구현되어 있습니다. 배열의 길이는 최초 선언한 값으로 고정되며 위와 같이 인덱스(Index)를 통해 데이터에 접근 할 수 있습니다. 배열(Array) 선언 및 초기화 배열을 선언할때 참조변수만 먼저 선언하여 크기 및 값을 이후에 초기화 하는 것도 가능하고 최초 선언시 부터 배열의 크기 및 값을 할당해 주는 것도 가능합니다. 아래는 여러가지 방법으로 배열을 선언하고 초기화 하는 예제입니다. //크기 할당 & 초기화 없이 배..

JAVA 2023.09.24

Field ‘...’ doesn’t have a default value 오류 해결 방안

어느날 잘되던 API를 체크해보았는데 빌드는 되었지만 런타임 500 오류가 발생하였다. 오류 메시지를 보니 Field '…' doesn't have a default value 라는 메시지를 찾을 수 있었다. 소스코드를 점검해보니 이상이 없었고, 검색해보니 열(컬럼)에 기본값이 따로 지정되지 않았는데 그 열의 값을 뚜렷하게 지정하지 않는 채로 INSERT나 UPDATE 등으로 자료를 넣으면 오류가 발생할 수 있다고 한다. 위 경우는 해당 테이블의 PK에 auto increment 속성이 해제되어 있었고 이를 추가하여 해결할 수 있었다. -- auto increment alter table aaa modify bbb bigint auto_increment; PK에 자동증가 설정 추가 후, API 가 정상동..

Database 2023.08.31

(@Scheduled 관련) 스케쥴러 관련 메소드안에 JPA 저장하는 메서드가 같이 있을 경우 저장이 안되는 오류

스케쥴러 메소드안에 JPA 저장하는 메서드가 같이 있을 경우, 저장이 안되는 오류가 발생하였다. 스케쥴러가 돌면서 JPA의 프록시에 있는 값에 영향을 준다(프록시 초기화)고 한다. 또한, 트랜잭션 매니저가 @EnableTransactionManagement를 통해 DataSourceTransactionManager로 구성된 경우, 하이버네이트의 begin() 메소드가 AbstractTransactionImpl을 부르지 않는다고 한다. 해결 → @Scheduled 클래스와 @Transacional이 있는 xxService를 분리하여 해결한다. //예제 class schedule { @Schedule go() { service.call(); } } @Transactional class xxService { ..

Spring 2023.08.24
728x90