전체 글 103

mysql Public Key Retrieval is not allowed

운영중이던 서버가 정기점검 이후 mysql8 db에 붙지 못하는 장애가 발생했다. 정기점검에서 was 호스트와 db 호스트 둘다 인프라 작업으로 리눅스 커널업데이트가 있었는데, 커널업데이트란 단어에 매몰되어서 이슈 해결에 혼선이 있었다. 그 과정을 기록해본다.시스템에 문제가 있는 것 같다는 이슈가 전달되었다. 확인해보니 아래의 에러로그와 함께 was 프로세스가 죽었다 살았다 죽었다 살았다를 반복하고 있었다.2026-05-30 22:25:12.368 INFO 1842182 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 49999 (http)2026-05-30 22:25:12.592 INFO 1..

트러블슈팅 2026.06.01

폰트시스템과 이모지

우리 게임에서는 아래와 같은 문장으로 이벤트를 진행하고 있다."🎁 선물이 도착했습니다"뭔가 선물할게 있으면 저런 뉘앙스의 문장으로 유저에게 메세지를 준다.저기서 선물상자 이미지는 그림이 아니라 글자이다. 이모지라는 것. 뭐 사실 요즘은 초등학생도 다 아는 내용이니 생략하고.이모지는 mysql 의 utf8mb3 인코딩(콜레이션)에서 문제를 겪으면서 처음 알게 되었다. 아마 이 때가 2020년 언저리 였던 것으로 기억하는데, 근 5년이 지나서 이모지에 대한 글을 쓰게 된 이유는 뜬금없이 쓰게 되었다. 오늘 문득 java8 에서 sysout 으로 이모지를 출력해보니 잘 나오길래 이게 놀라웠기 때문이다.왜냐면 이모지는 utf8 인코딩 체계의 글자이고, 인코딩이란 어떠한 약속이자 규약이다. 그렇다면 이 규약이 ..

카테고리 없음 2025.11.04

리모트 (사무실 따위는 필요없어)

https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=50265443 리모트 | 제이슨 프리드 & 데이빗 하이네마이어 한슨집 또는 사무실이 아닌 어디서나 일하고 싶어하는 직장인들이 원격근무를 할 때 맞닥뜨리는 도전과 미처 생각지도 못했던 장점들, 더 많은 회사들이 원격근무를 도입해야 하는 이유와 도입했을www.aladin.co.kr 이 책의 내용을 요약하자면, 리차드 브랜슨의 말을 빌려 이렇게 표현할 수 있다.삼십 년 후 사람들은 발전된 기술 덕분에 옛날에 사무실이란 것이 왜 존재했는지 궁금해할 것이다.– 리차드 브랜슨, 버진 그룹 창업자이 책의 주제는 제목 처럼 "원격근무, remote " 를 다루는 책이지만, 원격근무에 대한 이야기 보다는 관점을 뒤집어 사무실 근..

Topic/독서 2025.09.14

죽을 때 까지 코딩하며 사는 법

https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=268921028 죽을 때까지 코딩하며 사는 법 | 사람과 프로그래머 10 | 홍전일코로나19를 기점으로 개발자 수요는 폭발적으로 증가했다. 앞으로는 개발자 연령 상한이 높아지고 재택 업무의 비중 또한 코로나19 이전과는 비교할 수 없을 정도로 늘어날 것이다. 점점 평생 코www.aladin.co.kr 나는 직업이 개발자다. 코딩으로 밥을 벌어먹고 산다. 그러니 이 책 제목은 내 업과 직접적으로 맞닿아 있어 외면하기가 어려웠다. 이 책은 개발자 에세이에 가까운 책이다. 대부분의 개발자 에세이는 ‘개발자를 갈아넣는다고 프로젝트가 성공하는 건 아니다’라는 식의 한탄과 푸념이 주를 이루는데, 이 책은 다른 결을 가지고 ..

Topic/독서 2025.09.14

장승수, 공부가 가장 쉬웠어요

https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=459988 공부가 가장 쉬웠어요 | 장승수막노동꾼 청년의 서울대학교 수석 합격기. 고교시절은 싸움꾼으로, 졸업 후에는 오락실 홀맨, 신문배달, 물수건 배달 등을 하며 살았던 저자가 서울대에 수석으로 합격하기까지 이야기를 담았www.aladin.co.kr 세이노가 추천한 도서 목록에 있길래 가볍게 구매해서 읽어봤다. 출간 당시에 워낙 많이 풀렸던 책인지, 지금은 중고가가 500원도 안 하더길래 부담 없이 샀다.책의 목차는 크게 3개로 나뉘어 볼 수 있다. 실제로 목차가 그렇게 구분된 것은 아니지만 첫번째는 저자가 서울대에 합격한 과정을 다룬 내용이고, 이어지는 부분은 유년 시절을 다루며, 막바지에는 자신의 공부 비..

Topic/독서 2025.09.12

Spring 트랜잭션과 db커넥션 생애주기

기본적으로 DataSource 커넥션은 @Transactional이 선언된 메서드가 호출될 때 획득되고, 메서드 실행이 끝나서 트랜잭션이 commit 또는 rollback 되면 커넥션도 반환된다. 그래서 일반적으로는 트랜잭션의 생애주기와 커넥션의 생애주기가 동일하게 간다고 봐도 무관하다.하지만 경계가 명확히 다른 두 트랜잭션이더라도, 같은 스레드 안에서 동일한 트랜잭션 매니저를 사용하고 전파 속성의 기본값( Propagation.REQUIRED)을 사용중이라면 상황이 달라진다. 이 경우 두 트랜잭션은 분명히 각각 커밋이 되더라도, 이미 ThreadLocal에 바인딩된 커넥션이 있다면 새로 열지 않고 커넥션을 그대로 재사용한다. 나는 이를 모른 체로 디버깅을 하다가 datasource.getConnecti..

TEXT 컬럼은 무조건 피해야할까?

예전에 TEXT vs LONG TEXT 에 대해서 다루고(https://glqdlt.tistory.com/504), varchar 로 한글 65355 개를 입력할수 있는지를 다룬 적(https://glqdlt.tistory.com/509)이 있다. 이 때 vs text 에 대한 내용도 살짝 다루었었는데, 오늘은 이를 주제로 다루어볼까 한다.어떠한 게임 서비스든 웹 서비스든 최초 진입점에 노출되는 공지 사항, 배너 같은 것들이 있을테고, 여기에 사용되는 이미지가 있긴 마련일테다. 이 이미지의 주소를 mysql 테이블에 저장해야한다면, VARCHAR 컬럼을 써야할지 TEXT 컬럼을 써야할지가 고민이 들 수 있다.이에 대해서는 관습적으로 '어쩔 수 없을 때 TEXT 컬럼을 써라' 라는 대답이 주를 이룬다. 청..

JPA 와 커버링인덱스

JPA 를 쓰면 사실 인덱스가 필요없다. 이건 또 무슨 헛소리일까, 7월의 무더위를 먹어버린 탓일까? 자 한번 내 얘기를 들어보시라.이 주장은 커버링인덱스와 관련이 있다. 커버링인덱스는 어떠한 쿼리보다도 가장 빠르게 응답 할수있는 현상을 말한다. 커버링인덱스는 select 쿼리의 결과 필드가 쿼리에 쓰인 인덱스인 경우에 커버링인덱스가 발동한다. 아래의 쿼리를 보자.select t.col1, t.col2 from tb_table as t where t.col1 = ? and t.col2 =?이 쿼리의 대상 tb_table 에는 복합인덱스 col1 과 col2 가 있다. 이 쿼리의 반환 결과는 col1 과 col2 만 반환한다. 이 경우에 커버링인덱스가 발동한다. 커버링인덱스는 mysql explain 실행..

스칼라 서브쿼리는 최악이다

서브쿼리의 결과가 정확히 1행 1열이라면, 이를 스칼라 서브쿼리(Scalar Subquery) 라고 부른다. 스칼라 서브쿼리는 이러한 단일 값을 SELECT 절, WHERE 절, HAVING 절 등에서 필드처럼 사용할 수 있는 서브쿼리를 의미한다. A scalar subquery is a simple operand, and you can use it almost anywhere a single column value or literal is legal, and you can expect it to have those characteristics that all operands have: a data type, a length, an indication that it can be NULL, and so ..