전체 글 131

[TypeORM] Embedded Entity의 Column 이름 지정하기

TypeORM에는 Embedded Entity라는 개념이 있다. 여러 개의 엔티티에서 중복되는 컬럼들이 있을 때 이를 묶어서 별도의 엔티티(Embedded Entity)로 뽑아 내고, 뽑아낸 엔티티를 사용하고자 하는 엔티티에서 컬럼으로 선언하면 Embedded Entity에 선언된 컬럼들이 쭉 포함된다. 모두싸인 앱에는 User테이블과 InactiveUser라는 테이블이 있고, 두 테이블에는 모두 surveyXXXX 라는 필드들이 있다. 설문조사한 내용을 기록한 것인데, Inactive 상태로 바뀔 때 User 테이블에서 삭제하고 InactiveUser 테이블로 데이터를 복사한다. 이렇게 중복된 컬럼들을 Survey라는 Embedded Entity로 분리했다. Survey.ts export class S..

Tips/Database, ORM 2020.05.12

액셀로 전달받은 데이터를 테이블에 저장하기

모두싸인은 GetSiteControl이라는 도구를 적극 사용한다. 회사 내에서는 '겟사콘'이라고 부르고 있다. 한 예로 이렇게 생겼다. 개발자가 아닌 운영 직군의 사람도 간단 설정 메뉴를 통해 다양한 형식의 팝업을 띄울 수 있다. 큰 기능 배포를 위해 홈페이지 상단에 배포 일정을 띄울 때도 사용한다. 따로 개발 리소스를 투입하지 않고 꽤 괜찮은 UI를 가진 화면을 뚝딱 만들어 낼 수 있는 좋은 도구다. 모두싸인에 처음 가입하고 간단한 설문조사를 하면 1달 동안 프리미엄 요금제로 무료 사용할 수 있도록 해 준다. 그런데 이 때 입력 받는 항목에 전화번호가 없어서 영업에 잘 활용하지 못했다. 도입하고 싶다고 먼저 연락을 했던 고객에게도 메일로만 회신을 해야 해서 대응이 느린 경우도 있다. 그래서 이번에 설문..

today.log 2020.05.12

딜리버리히어로 코리아 면접후기 - 백엔드

부끄러운 글을 써보려 한다. 딜리버리히어로 코리아(이하 딜코)로 이직을 준비하면서 겪은 일이다. 취업이나 이직을 준비중이신 분들에게 도움이 되었으면 좋겠다. 딜코는 독일계 푸드딜리버리 회사의 국내 자회사다. 최근 국내 음식배달 업계의 1위인 배달의 민족을 만든 우아한 형제들과의 합병건으로 언론의 관심을 모았다. 현재 업계 2, 3위인 요기요와 배달통 서비스를 운영하고 있다. 어느날 딜코 인사담당자가 링크드인으로 백엔드 채용에 관심있으면 지원하라고 연락이 왔다. 처음엔 지원 요구사항인 백엔드 3년 이상에 해당되지도 않는데 왜 연락이 왔을까라는 생각이 들었다. 당시 여기저기 면접을 보러 다니던 차였는데 유명한 서비스를 운영하고 있고, 나름 탄탄한 회사여서 관심이 갔다. 특히 백엔드를 django로 개발하고 ..

개발자 Life 2020.03.19

Q보이스 개발경험

이 글은 2013년 5월 29일에 작성한 것입니다. 작성 당시 그리고 지금까지도 회사 뒷담화까지 섞여 있는 글을 블로그에 자신있게 공개하기가 꺼려졌기 때문입니다. LG전자 구성원들이 좀더 열린 마음과 다양성을 가지게 되기를 바랍니다. 개발자로 살아오면서 개인적으로 사용자들과 주위 조직의 사람들로 부터 가장 관심을 많이 받은 제품인 Q보이스를 개발한 이야기를 해 보려 한다. Q보이스는 LG전자에서 처음으로 서버를 다운시킨 사고(?)가 일어나기도 했으니 그동안 가장 성공한 앱이라고 할 수 있다. 팀 구성 Siri가 세상에 나왔다. 역시 애플에서 만든 앱답게 획기적이다. 사람들의 입에 오르내리며 왜 우리는 이런 걸 진작 만들 생각을 못할까라는 자조적인 말이 나온다. 경쟁사에서는 유사 앱을 준비한다는 소문이 들..

개발자 Life 2020.03.19

[MacOS] Python 버전 변경 - MacPorts & python_select

Mac OS의 기본 python 명령어는 python 2.x로 매핑되어 되어 있습니다. 회사에서 쓰는 버전이 3.x 인데 매번 python3 명령어를 쓰려니 귀찮습니다. 이럴 경우 python_select를 이용해서 python 버전을 변경하는 방법이 있어 소개합니다. 참고로 저는 Mojave 10.14.1를 사용하고 있습니다. 참고 사이트) https://superuser.com/questions/35256/how-can-i-change-the-default-python-version-on-snow-leopard 먼저 MacPorts를 설치합니다. https://www.macports.org/install.php 에서 자신의 맥과 맞는 버전을 찾아 설치합니다. 상세한 설명은 생략합니다. 터미널을 띄우고..

Tips/잡다구리 2018.11.17

Lambda를 이용한 Lazy Initialization

Functional Programming in Java 8 책의 6장에 Lambda를 이용하여 Lazy Initialization을 하는 방법이 나온다.이 예제는 Heavy 객체의 생성을 Supplier 인터페이스를 이용해서 사용할 시점까지 지연시키는 예제다.하지만 이 예제는 Heavy 클래스가 아닌 또 다른 heavy한 객체를 생성해야 할 때 매번 해당 클래스에 대한 HeavyInstanceHolder 클래스를 만들어 주어햐 하는 단점이 있다. Jake라는 분이 이를 해결한 방법 Blog로 정리해 놓았다. 요점은 Heavy 클래스를 Lazy로 생성하는 부분을 T 형 타입으로 받아서 처리하면 된다. 그런데 synchronized 키워드를 붙여 thread-safe 하게 처리한 부분이 좀 이상해서 gith..

Tips/Java 2016.09.02

Files.find를 이용하여 디렉토리 내 모든 파일 리스트 출력하기

Files 클래스에는 Java 8에서 추가된 find라는 메소드가 있다.Funtional Programmin in Java 8 책의 3장에 ListSubDir.java 예제가 있는데, 해당 디렉토리의 하부 디렉토리까지만 가져오므로 완전한 예가 아니다.find를 이용해서 어떤 디렉토리에 존재하는 모든 파일을 가져오도록 Stream API를 이용하여 작성해 보자.Path start = Paths.get(".");int maxDepth = 5; // Integer.MAX_VALUE로 하면 모든 파일을 가져올 수 있다Files.find(start, maxDepth, (path, attr) -> true) .forEach(System.out::println);만약 어떤 특정 파일 속성을 가지는 파일만 가져오고 싶..

Tips/Java 2016.09.01