New
-
Mac OS 업데이트 후, NPM install시 gyp 오류날 경우
Mac OS를 업데이트 이후 (BigSur) 로 npm install 이 정상적으로 작동안될 수가 있습니다. 보통 아래와 같은 에러 메세지가 발생할때인데요. gyp: No Xcode or CLT version detected! gyp ERR! configure error gyp ERR! stack Error: `gyp` failed with exit code: 1 이럴 경우 node-gyp 를 글로벌/로컬을 다 지우고 다시 설치하는 방법도 있겠지만, X-code 를 재설치하는 것이 가장 편하고 빠르게 되는 방법이라 추천드립니다...
2021.04.23
-
MySQL IN절을 통한 성능 개선 방법
잘 사용되진 않는 범위 조건 중에 IN 이 있습니다. 일반적으로 BETWEEN , LIKE , <> 에 비해서는 하나씩 모든 Key를 입력해야 되기 때문에 애플리케이션에서 작업양이 추가되어 선호되진 않는데요. 이 IN 절을 통해 여러 성능 개선들이 가능해서 생각보다 활용하기에 따라 많은 성능 개선을 이룰 수 있습니다. 이번 시간에는 IN 을 통한 2가지 개선 방법을 소개 드리겠습니다. 0. 소개 MySQL의 IN 절은 UNION으로 처리됩니다. 즉..
2021.04.22
-
2. 우아한형제들 부검 - 어디로 가는지
이전 글에서 이어집니다. 이 글은 사내 블로그에는 기재되지 않았습니다. 4. 앞으로의 계획 여기까지 읽으신 분들이라면 "그래서 도대체 어딜가는데?" 라고 궁금해하실텐데요. 일단 서두에서 말씀드린 것처럼 2가지 조건의 교집합인 회사인데요. Seed 단계의 작은 스타트업 제가 좋아하는 비지니스모델 여기서 제가 좋아하는 비지니스 모델에 대해서 조금 설명이 필요합니다. 저는 2016년부터 개발자의 커리어/교육/채용에 대해..
2021.04.19
-
특정 포트 Process 종료하기
간혹 IntelliJ를 사용하다가 JVM 프로세스를 종료하였음에도, 포트가 그대로 잡혀있는 경우가 종종 있는데요. IntelliJ까지 종료하여도 해당 포트가 계속 잡혀 있어서 프로젝트를 재실행이 안되는 경우가 있습니다. *************************** APPLICATION FAILED TO START *************************** Description: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that'..
2021.04.18
-
1. 우아한형제들 부검 - 왜 떠나는지
이 글은 사내 기술 블로그에도 동일하게 올라갔습니다. 안녕하세요 (구) 배달의민족 정산시스템팀 개발자, (현) 유튜브 크리에이터 이동욱입니다. 제가 2021년 4월 19일(월) 퇴사를 합니다. 퇴사에 대한 이야기를 개인적으로 운영하는 유튜브 채널에 부검 발표를 했는데요. (배달의민족 개발자 퇴사썰 - 부검 발표 시작합니다.) 이 영상을 보시고 기술 블로그에 진심이신 분의 연락을 받고, 이렇게 글로 옮기게 되었습니다. 퇴사..
2021.04.17
-
EntityQL로 OneToMany (1:N) Bulk Insert 구현하기
지난 시간에는 EntityQL 환경을 적용해보았습니다. 간단한 예제로 단일 Entity의 Bulk Insert를 보여드렸는데요. 이번 시간에는 OneToMany 환경에서 어떻게 Bulk Insert를 구현할지 알아보겠습니다. 1. 해결책 EntityQL이 전환해주는 Querydsl-SQL은 JPA 기반이 아닙니다. 그래서 OneToMany와 같은 연관관계 Insert/Update 등은 JdbcTemplate처럼 직접 구현을 해야하는데요. 원래 JdbcTemplate으로 작성하던 코드를 단순히 정적..
2021.04.12
-
JPA 사용시 @Embedded 주의사항
간혹 JPA의 @Embedded 를 잘못사용하는 경우를 보게 됩니다. 이번 시간에는 @Embedded 를 사용하면서 주의해야할 점을 알아보겠습니다. 꼭 @Embedded 만의 문제는 아니며, Entity 내부에 객체형 필드가 선언되어 있으면 주의할 필요가 있습니다. 문제 상황 예를 들어서 다음과 같은 Entity 가 있습니다. @Getter @NoArgsConstructor @Entity public class Pay { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) privat..
2021.04.03
-
(MySQL) Auto Increment에서 TypeSafe Bulk Insert 진행하기 (feat.EntityQL, JPA)
여러 글에서 언급하고 있지만, JPA환경에서 키 생성 전략을 Auto Increment로 할 경우 BulkInsert가 지원되지 않습니다. Spring Batch Item Writer 성능 비교 MySQL 환경의 스프링부트에 하이버네이트 배치 설정 해보기 그래서 수십만 ~ 수백만건의 Entity 를 insert 할 때는, 항상 JdbcTemplate 를 이용하여 Insert합치기 구문을 이용한 BulkInsert 처리를 하는데요. 이 방식은 기존 JPA와 Querydsl 을 이용한 Typesafe 방식을..
2021.03.28
-
주식과 연봉
호돌맨과 찍은 유튜브 영상에서 다 하지 못한 말인데 생각도 좀 정리할겸해서 작성하게 되었다. 일단 난 주린이고, 연봉 결정권자도 아니라서 지극히 개인적인 생각이다. 최근 들어 주식을 하다보니 주식의 매수가격과 직장인의 연봉 책정이 비슷한 것 같다는 생각을 하게 됐다. 2021.03.12 기준 네이버는 (액면분할해서) 주당 38만원이다. 1년전에 13만원이였던걸 생각하면 38만원에 도저히 살 수 없을것 같은데도, 사는 사람들..
2021.03.15
-
Mac에서 개발 환경 (IntelliJ 기반) 꾸미기
현 회사에 오면서 처음으로 Mac을 경험하면서 윈도우보다는 훨씬 다양한 기능과 앱들을 찾아보고 경험했습니다. 다양한 앱들 덕분에 IntelliJ IDEA에서 사용하는 여러 단축키들이 충돌나서 대채제 혹은 단축키 변경등을 하기도 했는데요. 다양한 앱들을 모르는 분들도 계시고, IntelliJ 와 단축키가 충돌나서 단축키를 못쓰시는 분들에 대한 이야기도 듣게 되어 정리하게 되었습니다. 터미널과 도커 등의 개발 환경은 이미 subic..
2021.03.10
-
VSCode에서 정규표현식(Regex)로 원하는 문자열 치환하기
아스키독 (adoc) 혹은 마크다운 (md) 파일을 작성하다보면 정규표현식을 통해 특정 패턴의 문자들 중 일부만 교체 해야할 때가 종종 있습니다. 이를테면 다음과 같은 경우인데요. 아래와 같은 화면에서 (숫자) 로 되어진 부분들을 <숫자> 로 변경이 필요하다고 하겠습니다. (즉, 괄호안 숫자는 그대로 두고, 괄호 () 만 태그 <> 로 교체하는 것입니다.) 현재 찾고자 하는 패턴을 정규표현식으로 간단하게 표현하면 \([0-9]\) 가..
2021.02.18
-
Slack webhook 으로 Upsource 코드 리뷰 알람 받기 (멀티 슬랙 채널)
현재 Upsource는 Slack과의 통합 (Integration)을 지원하지 않습니다. Integration with slack is not working via webhook 그래서 어쩔 수 없이 Slack의 웹훅을 통해 직접 연동을 구현해야하는데요. 여기서 문제는, Upsource는 웹훅 URL 호출만 지원합니다. 보시는것처럼 URL 호출값만 넣을 수 있습니다. 즉, Upsource의 메세지를 파싱해서 Slack 웹훅 포맷에 맞게 JSON을 만들어 보내는 등의 로직이 있는 형태를 사용할 수가..
2021.02.01
-
Slack Webhook API 생성하기
요즘 대부분의 개발도구들은 Slack과의 통합 (Integration)을 지원하지만, 여전히 미지원 하는 도구들도 많습니다. 이런 미지원 도구들을 Slack에 연동할때 Slack Webhook을 사용합니다. 저도 종종 사용하고, 앞으로도 자주 사용할 것 같아 정리 합니다. 1. Webhook 생성 먼저 본인의 슬랙 서비스를 실행해서 웹훅으로 알람을 받을 채널로 이동합니다. 채널의 화면 상단을 보시면 느낌표 ( ! ) 가 보이실텐데요. 해당 채널에 대..
2021.01.31
-
Spring Batch JpaCursorItemReader 도입되다.
Spring Batch 4.3이 릴리즈 되면서 JpaCursorItemReader 가 도입되었습니다. (Spring Batch 4.3 release notes) 그 전 버전까지 (~4.2.x)는 JpaCursorItemReader가 없었음을 의미하는데요. HibernateCursorItemReader는 존재하는데, 왜 JpaCursorItemReader는 여태 없었던 것이지? 라고 의문이 들 수 있습니다. 이는 JPA 스펙 때문인데, JPA 2.1 전까지는 데이터 스트리밍이 가능한 스펙이 별도로 없었습니다. 그래서 Hibernate..
2021.01.25
-
Spring Batch 파티셔닝 (Partitioning) 활용하기
지난 시간에 소개 드린 멀티쓰레드 Step과 더불어 파티셔닝 (Partitioning)은 Spring Batch의 대표적인 Scalling 기능입니다. 서비스에 적재된 데이터가 적을 경우에는 Spring Batch의 기본 기능들만 사용해도 큰 문제가 없으나, 일정 규모 이상이 되면 (ex: 매일 수백만 row가 추가되는 상황에서의 일일 집계) 서버를 Scalling (Up or Out) 하듯이 배치 애플리케이션 역시 확장이 필요합니다. 이런 문제를 고려해서 Spring Batc..
2021.01.20