분류 전체보기

· 생각정리
의미 없는 시간 속밥을 먹고 나면 괜히 멍하니 누워 있게 된다.해야 할 일은 머릿속에 가득하지만, 이상하게 몸이 안 움직인다.이번 주에는 그런 내 모습이 못내 게을러 보여서,문득 '이렇게 시간을 낭비해도 되나?' 싶은 생각이 들었다. 가만히 떠올려보면,내가 진짜로 행복했던 순간들은언제나 좋아하는 것들, 그리고 사람들과 함께의미 없이 시간을 낭비했던 그 시간들이었다. 극한의 효율을 좇으며, 매일을 낭비 없이 살아야 한다는 강박 속에서개발에 몰두하고 일에 쫓기며 살아갈 때는 묘하게 마음이 메말라 있었다. 하루하루를 버티며, “시간을 헛되이 쓰면 안 돼,” 스스로를 다그쳤지만 되돌아보면 오히려 동료들과 커피챗을 나누던 짧은 틈이나예고 없이 번개로 마신 술 한 잔 같은 순간들이 더 충만했다. 그 시간들은 단지 ..
· 생각정리
씨앗, 동료 그리고 리더2025년 1월 6일,데이터센터 모니터링 회사로 이직했다.새로운 회사, 새로운 시작 그리고 새로운 도전. 첫 출근을 앞둔 아침,문득 발걸음이 무거웠다.“잘할 수 있을까?”“이 선택이 내 인생에 어떤 결과를 가져다줄까?” 긴장과 설렘, 두려움과 기대가 교차했다.익숙한 환경을 떠나는 일은 언제나 어렵다.하지만 그 두려움은, 어쩌면 설렘의 다른 이름이었을지도 모른다.방향이 같으니까.“개발자로서의 성장”은 누군가 만들어주는 것이 아니다. 스스로 걸어가는 길이다. “성장”은 실력을 쌓는 것이고, “개발”은 그 실력으로 가치를 만들어내는 일이다.방향이 같기에 나는 이 회사가 나아가기 위한 씨앗이 될 것이고, 함께 걷는 동료가 될 것이다.그리고 언젠가는, 주니어를 이끄는 따뜻한 시니어 개발자,..
· 회고
나는 휴네시온이 좋았다.내 명함이 나오고새로운 사옥으로 이전을 하면서신사옥 입주 기념식을 함께 축하했다.처음으로 세미나도 열어보고입사 동기들과 회식도 즐겼다.가끔은 바람도 쐬러 나오고동료들과 취미로 클라이밍도 했다.유튜브 촬영에도 나왔고가을 명랑 운동회도 하면서어쩌다보니 MVP도 했다.본부 워크샵을 즐겼고팀장님이 썰어주신 회를 먹으며마시멜로를 굽다가낭만을 즐겼다.나는 이제 퇴사를 한다.나는 휴네시온이 진심으로 좋았다.새로운 시작휴네시온 연구소 1본부 개발2팀 홍 사원입니다.휴네시온에서의 여정을 마무리하게 되었습니다.2024년 5월 2일에 입사하여 약 7개월이라는 짧은 기간이었지만, 휴네시온은 제 인생에서 특별한 전환점이 되어 주었습니다.입사 초기, 김영환 부사장님께서 해주셨던 말씀이 아직도 기억에 남습니..
SELECT (REPEATABLE-READ;반복 읽기)MySQL 서버에서 select 구문은 기본적으로 '잠금 없는 일관된 읽기'를 지원한다. 이는 격리 수준에 따라 레코드 버전이 달라지는데, commit-read 격리 수준에서는 가장 최근에 커밋된 데이터를 반환하지만 repeatable-read 수준에서는 트랜잭션이 시작된 시점의 데이터를 반환한다. 즉 repeatable-read 격리 수준에서는 select 문장이 하나의 트랜잭션에 내에서 여러 번 실행되어도 항상 동일한 결과를 반환한다.Tip)'잠금 없는 일관된 읽기;Non-Locking Consistent Read(MVCC)'는 테이블의 레코드를 읽을 때 대상 레코드에 대해 잠금을 거지 않고도 일관된 데이터 읽기를 지원하는 것을 의미. 예를 들어 ..
MySQL에서는 인덱스가 있음에도 불구하고 인덱스를 사용하지 못하고 Table Full-Scan으로 처리되는 경우가 있다. 어떤 경우가 있는지 살펴보자. 쿼리에서 컬럼이 가공되는 경우쿼리에서 컬럼이 가공되는 경우에는 해당 컬럼에 인덱스가 존재해도 인덱스를 사용하지 못하게 된다. 이는 인덱스가 컬럼의 원본 값을 기반으로 구성되어 있는데 수행된 연산 결과가 인덱스 데이터로 인덱싱되어 있지 않기 때문이다.-- 컬럼의 산술 연산 select * from exam_tab where id + 10 < 100 -- 함수의 인자로 직접 사용 select * from exam_tab where MOD(id, 2) = 0 -- 자동 형변환 select * from exam_tab where exam_string_col =..
UUID와 B-Tree 인덱스와의 관계UUID는 버전과 관계 없이 모두 랜덤한 값을 생성한다. 물론 UUID 버전 1에선 짧은 시간 동안 단조 증가하는 값을 생성하지만 7분 간격으로 리셋되기 때문에 계속 랜던한 값이 생성된다. 그리고 UUID는 128비트, 즉 16바이트 이진값으로 구성되어 있지만 일반적으로 가독성을 위해 16진수 문자열로 변환하여 DBMS에 저장하는 편이다. 결과적으로 16진수 문자열을 저장하기 위해 char(32) 혹은 binary(16) 타입을 사용하고 있는 것이다.Tip)국제인터넷 표준화 기구인 IETF에서 정식 표준으로 채택된 UUID는 5개의 버전이 있다. 그 중 버전 1과 버전 4를 자주 쓴다고 한다. 그래서 1과 4 버전의 특징만 간단하게 말하자면 UUID 1 버전은 Tim..
PreparedStatementPrepared statement는 orm 도구에서 많이 사용되는 것으로 binding query라고도 불린다. 이는 하기와 같이 값이 바인딩 되는 변수에 물음표를 사용해서 SQL 문장을 작성하고 prepare 단계를 먼저 수행한 후 변수의 값을 바인딩해서 쿼리를 실행하는 형태이다.pstmt = connection.prepareStatement( "select * from exam_tab where id = ?");pstmt.setInt(1, 1234);rs = pstmt.executeQuery(); 이처럼 prepared statement를 사용하여 쿼리를 작성하는 경우 빠르고 간단하게 sql injection 방지 처리를 구현할 수 있다. 그리고 쿼리 파싱 비용을 줄인..
LEFT JOIN을 사용하였지만 INNER JOIN?제목 그대로 left join을 사용하였지만 inner join이 동작한 것처럼 결과가 반환되는 경우가 있다. 예를 들어, user table과 coupon table이 있다고 가정해보자. 이때 user table과 coupon table은 하기와 같은 user_coupone table이란 매핑 테이블로 연관 지어져 있다.create table user_coupone ( user_id int not null, coupon_id int not null, ... primary key (user_id, coupon_id) key idx_coupon_id (coupon_id)); 이때 user table의 데이터 건수는 약 10,000 rows이고..
홍도산
'분류 전체보기' 카테고리의 글 목록