분류 전체보기 102

폰트시스템과 이모지

우리 게임에서는 아래와 같은 문장으로 이벤트를 진행하고 있다."🎁 선물이 도착했습니다"뭔가 선물할게 있으면 저런 뉘앙스의 문장으로 유저에게 메세지를 준다.저기서 선물상자 이미지는 그림이 아니라 글자이다. 이모지라는 것. 뭐 사실 요즘은 초등학생도 다 아는 내용이니 생략하고.이모지는 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 ..

JPA 에서는 int 를 써야하나요? integer 를 써야하나요?

제목에 대한 대답은 JPA 에서는 integer 를 써야한다가 나의 대답이다, 그것도 확고하게. JPA 에서는, 더 나아가서 Java 에서는 int 를 사용하면 안된다.Java에서 정수를 표현하는 방법은 두 가지가 있다. int와 Integer. 전자는 primitive type이고, 후자는 wrapper type 이라 부른다. 이 정도는 JPA를 쓰는 Java 개발자라면 당연히 알고 있는 내용일테니 더 길게 설명하진 않겠다. 중요한 건 이 차이가 JPA에서 매우 중요한 문제가 된다는 거다.RDBMS에서는 null이란 개념이 존재한다. RDBMS에서 null 은 값이 아직 할당 되지 않은 상태를 나타내는 표현이며, 이는 RDBMS 에서 매우 중요하다. 그런데 java 세상에서는 int, long, boo..