분류 전체보기

Googling/postgresql

[postgreSQL] 카운트 쿼리 쓸 때 알아두면 좋은 것 (null, limit)

1. 카운트 쿼리에 사용되는 데이터가 null 일 경우 건수에 포함되지 않는다. 이 점을 활용하여 (case when ~ then 1 else null end) 활용 필터링이 가능하다. count(1), count(*), count(column) 모두 실행계획과 실행시간이 동일하니, column 쓸 때만 null로 개수 빠지는지 확인만 하면 된다. --null 상관없이 전체 건수를 셈 SELECT count(*) FROM board; SELECT count(1) FROM board; --contents 중 null 인 데이터를 빼고 셈 SELECT count(title) FROM board; --contents 중 null 인 데이터를 빼고 중복 제거하여 셈 SELECT count(distinct tit..

Googling/javascript

[JavaScript] 오픈소스 활용 json 엑셀파일로 내보내기 (feat. SheetJs)

협업툴 서비스를 개발하면서, 업무 목록을 엑셀로 내려받을 수 없냐는 문의도 많았고, 어드민에서 각종 통계 데이터들을 수시로 엑셀로 내려받고 싶다는 니즈가 있었다. 서버 단에서 엑셀을 내려주는 모듈 같은게 있긴 했는데 쓰기가 매우 어렵고 뷰 화면을 따로 그려서 다운 받는 방식이라 간단하다고 느껴지지 않았다. 분명, json 데이터를 간단하게 excel로 다운받을 수 있는 오픈소스가 있을거라고 생각했다. 찾아보니 SheetJS라는 오픈소스는 엑셀과 관련한 엄청나게 많은 기능을 가진 javascript 오픈소스가 있었다. 하지만, json을 엑셀로 손쉽게 내려받을 수 있는 방법을 찾지 못했다. (2019년 상반기쯤 찾아봤을때 기준) 그래서 안에 있는 기능들을 활용하여 우리 팀이 쓰기 좋게 함수를 하나 만들어야..

Deep Dive Series/Image Resizing

[JavaScript] 이미지 리사이징, 이미지 용량 줄이기 (2) (feat. 어떤 기준으로 리사이징해야할까?)

이전 포스트 '[JavaScript] 이미지 리사이징, 이미지 용량 줄이기 (1) (feat. HTML5 canvas)'를 읽고 오시면 좋습니다! Canvas의 리사이징 5575 x 3923, 2.37MB 이미지가 있다고 가정해보겠습니다. 한 번 다운로드 시에는 무리가 없는 이미지 용량으로 보이지만 수십 번 이미지를 다운로드하게 되면 더 많은 리소스가 요구됩니다. 해당 리소스를 줄이기 위하여 이미지 리사이징을 시도해보겠습니다. Canvas는 가로, 세로 px를 정하고 그 위에 이미지를 그리는 방식이기 때문에 px 기준으로 이미지가 리사이징됩니다. 보통 최대 px를 기준으로 비례하여 이미지를 리사이징합니다. 예를 들어, 위 이미지를 최대 px 400px기준으로 이미지를 리사이징한다고 가정하고 코드를 작성해..

Googling/postgresql

[postgreSQL] 재귀쿼리 만들기 (Recursive) ( + 매우 주의해야하는 케이스 : 무한루프)

재귀쿼리를 쓸 경우가 종종 있는데 나같은 경우에는 조직도 트리와 폴더 트리에 사용해본 적이 있다. 간단하게 사용법을 설명하고 실제 케이스에서 엄청난 오류?를 만들어냈던 경험을 공유해보려고 한다. 0. 재귀쿼리를 테스트해보기 위한 사전 작업 조직도가 제일 무난할 것 같아 심플한 데이터를 준비해보았다. CREATE TABLE division ( division_code character varying(20) NOT NULL PRIMARY KEY, division_name character varying(20) NOT NULL, upper_division_code character varying(20) NOT NULL ); INSERT INTO division VALUES ('develop_division',..

Deep Dive Series/Paging

[페이징 톺아보기 0] Why, How, What is 'Paging'?

서비스를 운영하면서 게시판 페이징, 스크롤 페이징을 경험해보았고, 페이징을 심도있게 공부하면서 실질적인 성능과 유지보수에 관해 고민했던 내용을 백엔드 개발자의 입장으로서 두서없이 적어보려고 한다. 정답이 아니라 하나의 방법으로서... 0. 페이징을 하는 이유는? [why] 결론부터 말하면 페이징은 속도는 빠르게, 부하는 적게 하기 위해 지금 당장 필요한 데이터만 가져올 수 있도록 데이터를 분리하는 작업이다. 예를 들어, 10만 개의 게시물 데이터가 있다고 가정했을 때, 페이징 없이 10만 개의 데이터를 한 번에 가져온다 생각해보자. 먼저 DB에서 쿼리로 10만개의 데이터를 조회한다. 정렬과 필터조건, 조인 여부에 따라 시간은 천차만별이겠지만 행여 그러한 복잡한 로직이 없더라도 쿼리를 순식간에 실행해 10..

Retrospective

[개발자회고] #7. 2021 상반기 회고 ( feat. 3년 차 개발자 )

원래는 6개월마다 회고를 쓰려 해서 5월 말에 썼어야 했으나 상반기, 하반기로 하는 것이 깔끔할 것 같아서 상반기 회고를 적어본다. 입사한지는 만으로 2년 8개월쯤 되었다. 0년 차 개념이 조금씩 다들 다르긴 하지만 이 정도면 3년 차 개발자라 볼 수 있을 것 같다. 연봉협상 우리 회사는 매년 1월 연봉협상이 있다. 2번째 연봉협상에 앞서 1번째 연봉협상에는 하지 못했던 협상다운 협상을 해보고 싶었다. 금액을 두고 적네 많네 협상하는 것이 아닌 나의 1년간의 성과에 대해서 한 번 더 들여다봐주시고 그에 맞는 인상률을 고민해 봐주셨으면 하는 마음에 나를 어필할 자료를 공들여 만들고 인쇄해서 협상 면담 일을 기다렸다. 보통 개발 대장님과 면담, 대표님과 면담을 통해서 연봉이 결정되는데 이번에는 개발 대장님하..

Retrospective

[개발자회고] #6. 스타트업 입사 2주년 회고 ( feat. 파트장! )

입사한 지 만으로 2년이 되었다. 6개월, 12개월, 18개월째 되는 날에 회고록을 썼었고 이번에도 어김없이 회고록을 쓰려한다. 회사의 성장이 곧 개인의 성장 회사가 미친 듯이 성장하고 있다. 2년 전 입사 당시 10명이었던 팀원들이 현재 50여 명 가까이 되어간다. 6개월 전 회고록 쓸 때만 해도 28명이라 매우 많다고 적었는데 지금은 더더더 많아졌다. 회사의 매출도 승승장구하고 있고 회사의 미션도 나날이 많아지고 있다. 사람이 적을 때는 고민하지 않았던 효율화와 관리에 대한 문제도 계속 거론되고 있다. 팀 단위로 움직였던 조직도 팀원 수가 많아지고 일이 세분화되면서 본부-팀-파트라는 개념으로 바뀌었다. 그 속에서 나는 한 파트를 담당하는 파트장이 되었다. 다른 팀원들에게 선임 개발자라는 포지션에서 파..

Retrospective

[개발자회고] #5. 스타트업 입사 18개월 회고 ( feat. 주저리 )

입사한지 18개월이 되었다. 어쩌다보니 6개월마다 한번씩 회고록?을 쓰고 있다. 폭풍 입사당시 10명이었던 팀원들은 현재 28명이 되었다. (우연하게도 1개월에 1명씩 뽑은 격이네.ㅋ) 내가 두번째로 합류한 웹서버개발팀은 벌써 9명이 되었다. 좁은 코워킹 스페이스에서 넓은 사무실로 이사할때만 해도 '와, 진짜 사무실 너무 넓다.' 했었는데 지금은 그러한 사무실이 층을 나눠 두 개가 존재한다. 대기업 1곳에도 버거워하던 우리가 지금은 동시에 몇 곳을 작업하고 있는지 모르겠다. 여기 저기 스타트업 10억 투자, 20억 투자 받는 것을 보면서 남일인줄 알았는데 우리도 그러한 투자를 눈앞에 두고 있다. 그냥 난 일을 했을 뿐인데 회사가 폭풍성장하니까 뭔가 신기하다. (더더 잘 되서 상장 또는 유니콘이 되었으면 ..

날개단
'분류 전체보기' 카테고리의 글 목록 (6 Page)