라벨이 개발자인 게시물 표시

AWS Lambda로 Excel -> PDF 변환 기능 개발 후기

이미지
요즘엔 서버리스로 개발하는 회사에서 근무중이다. 쓸 수록 느끼지만 서버리스는 간단한 메시지 전달은 좋지만 점점 서비스가 커지면 느껴지는 제약들이 많다. 그 때는 정말 '아 이거 서버 놓고 하면 금방인데 ㅠㅠ' 하는 생각이 절로든다.. 거기다가 Amplify가 아직 성숙하지 않아서 (=버그가 많다) 버전업하면 갑자기 배포가 안되고 그러는 경우도 종종 있다. 아무튼 이번엔 서버리스 환경에서 (=AWS Lambda) 에서 PDF를 Excel로 변환하는 업무가 주어져서 많은 삽질 끝에 해내게 되었다. 즉 이 글은  AWS Lambda에서 Libreoffice를 이 용해 xlsx 파일을 pdf로 변환하는 기능을 구현하던 중 겪은 어려움과 주의사항 에 대해 기술한다. 실제 구현 방법은 아니고 겪은 Trouble이니 실제 구현을 기대한다면 미리 기대에 어긋난다고 이야기 하고 싶다. 문제 1.람다에서 Streaming으로 Response를 제공할 수 없다. 많은 사람들이 아마 API Gateway와 Lambda를 연동해서 사용할 것이다. 우리도 역시 그렇게 활용중인데 Lambda의 특징은 응답을 한번 보내면 종료된다는 것이다.  일반적으로 웹에서 파일을 다운로드 받을 때는 Streaming으로 받아서 현재 다운로드 되는 현황을 구경할 수 있는데 Lambda로는 그렇게 구현하는 방법을 찾지 못했다. 따라서 서버에서 컨버팅 작업을 모두 끝내고 파일이 생성되면 해당 파일의 Binary를 String으로 변환하고, 이 String을 Response의 Body에 담아 보내게 했다. Client는 받은 String을 다시 Binary로 변환해서 이를 다운로드 하게 만들었다. 당연히 파일의 수가 많아질수록 변환하는데 시간은 더 걸릴 것이다.  API Gateway를 잘 customize하면 Streaming도 대응할 수 있는 것 같은데 확실하지 않다. 그리고 중요한 것. Lambda에서 타임아웃을 길게 걸어놔도 Request를 받은 API Gateway...

실용주의 프로그래머 key takeaway for myself.

1장 깨진 창문을 그대로 두지말자. 깨진 창문에는 Not Implemented 혹은 Dummy data를 추가하는 방식으로 구현해둘 것. 카펫을 더럽히는 일(기존 코드를 바꾸는 작업)은 필요한 순간이 온다. 카펫을 더럽히기 싫어서 가던 곳으로 가지 말고 필요하다면 과감하게 바꿀 것. 적당히 괜찮은 것이 늦어지는 것보다 낫다. 약간의 버그를 감내하더라도 그걸 다듬는다고 망치지마라. 언제 멈춰야할지를 알자.어차피 완벽한 코드란 없다. 지식이란 투자 포트폴리오와 같다. 지식을 다각화하고 (한 분야의 외골수보다 다양한 분야로) 계속해서 투자(계속해서 공부할 것)하며 리턴과 리스크의 조정을 적절히 하고 (기술 배울 때 선택) 주기적으로 재점검 하자. - one new language per year - 기술서적을 분기마다 하나씩. (볼 것을 좀 정해두면 좋겠다) 소통도 분위기를 파악해가며 하자. 말을 하기 전에 미리 적절히 정리해놓을 것. 말할 타이밍을 잘 계산하고 말할 것. 2장 강력하게 Coupling 된 Task는 하나만 해도 다른 하나가 업데이트 되도록 자동화를 시켜두자. 테스트 코드가 문서에 따라 자동으로 만들어지는 사례가 있었다. 만약 문서와 코드의 관계가 깊게 coupling 된 관계라면 문서 혹은 코드를 업데이트할 때 이와 관련 된 작업 혹은 the other one도 똑같이 자동으로 업데이트 할 수 있도록 개선하자. 직교성(Orthogonality)은 중요하다. 프로그래밍에서 직교한다라는 말은 하나가 수정되어도 다른 것에 영향을 주지않는다는 의미로 Decoupled 상태라고 볼 수 있다. 회의에서 직교성을 살펴보는 방법도 재미있다. 어떤 주제로 회의를 하려고 할 때 불러야 하는 사람 수가 많아질수록 직교성이 낮다는 것을 의미한다. 잘못 된 객체지향 코드는 때때로 절차지향 코드보다도 더욱 더 스파게티 코드가 될 확률이 높다. 예광탄 코드를 먼저 쏘아올리자. POC(Proof Of Concept)와 비슷하지만 좀 더 큰 개념. 동일한 환경과 제약을 가진채 ...

방통대 컴퓨터과학과 2019-2학기 자료구조 수강 후기

자료구조 2019-2학기 수강 교수: 정광식 교수님 꽤 만족스러운 강의였습니다. 저는 경영학과 출신에 프로그래밍 학원도 안 가고 독학으로 개발자가 된 케이스라 기본기가 많이 부족한 상태였는데요. (물론 지금도 어렵습니다) 인터넷에서  '비전공자들의 발목을 잡는 것은 결국엔 기본기' 라는 이야기를 많이 보곤 했었고 이에 압박감을 느껴 기본기 중 기본기라고 불리는 자료구조를 고민없이 수강했습니다. 일단 방통대 자료구조 강의는 2019년에 새로 촬영이 된 것 같습니다. 정광식 교수님의 예전 강의도 같이 볼 수 있어서 2016년 버전 강의를 1개 정도 아주 짧게 들었는데 개인적으로는 2019년에 새로 촬영하신게 더 좋았습니다. 2016년 버전은 책 내용 설명, 코드 설명이 위주였던 것 같은데 2019년 버전은 책과 코드보다는 개념과 흐름(?) 같은 것을 좀 더 짚어주신 거 같습니다. 교수님 본인도 강의 중간중간 이번에는 예전보다 본인이 좀 더 하고 싶은 이야기를 많이 하려고 한다고 하셨었구요. 그래서인지 강의하다가 텐션이 막 오르실 때가 보입니다. 부담스러운 정도는 아니구요. 집중해서 들을 수 있는 느낌이라 저처럼 책 읽어주는 남자 스타일을 싫어하는 학생들은 좋아할 것 같습니다 . 강의는 다루는 자료구조에 대한 대략적인 설명과 삽입, 삭제, 탐색을 하는 경우에 동작방식, 그리고 거기서 파생되어 나온 자료구조를 설명하는 식으로 강의하십니다. 강의 목차는 자료구조 별로 나누어져 있기 때문에 끊어서 듣기 좋습니다. 예를들면 1장 배열, 2장 연결리스트, 3장 트리 뭐 이런식으로 되어 있는거죠. 시험 난이도는 평이합니다. 많은 분들이 책, 워크북이 필수이고 거기에 나오는 연습문제 무조건 풀어야 셤 잘보는 것 처럼 이야기 하시는데 저는 돈 아까워서 책, 워크북 다 안 샀습니다. 왠지 방통대에서 판매하는 책들은 왠지 사기가 싫어서;; 책 없어도 충분히 가능합니다. 기출문제 잘 푸시고 강의만 잘 들으셔도 A+급 성적...

Python의 Interning (Integer와 String)

1. Integer Optimization a = 10 b = 10 를 선언했다고 가정하자. 분명히 integer는 primitive type 자료형이라 call by value로 동작해서 두 개의 id값이 달라야 할 것 같다. 그런데.. hex(id(a)) == hex(id(b)) # True가 출력된다. 어째서 True일까? Python은 자주 사용하는 integer는 global scope에 미리 등록해두고 싱글톤처럼 사용한다. (범위는 -5 ~ 256까지) 그래서 위 범위 내에서는 언제나 싱글톤처럼 동작하고 257부터는 객체 주소값이 달라지게 된다. 2. String optimization 파이썬은 자주 사용하는 Immutable한 객체는 인터닝한다. # 인터닝이란, 자주 사용하는 객체의 재사용을 빠르게 하기 위해 시스템 상에 상수처럼 등록해놓는 것을 의미한다. 컴파일 시점에 변수명, 클래스명, 함수명은 인터닝 된다. 또한 강제로 sys.intern() 메소드를 사용하여 인터닝 할 객체를 강제 지정할 수 있다. 문자열의 경우엔 20자 미만의 공백을 포함하지 않는 문자열을 자동으로 인터닝한다.

경영학과 출신의 어중간 했던 PM이 신입 개발자로서 3곳의 면접을 보았다.

퇴사한지 어언 3개월하고도 1주일 째. 지난주 금요일부터 이번 한 주는 신입 개발자로서 면접을 무려 3곳이나! 진행했다. So Lucky! 깔끔한 이력서와 이력서에 녹여 낸 열정이 유효했던 것 같다. 그 후기를 공유한다. 1번 회사 위치 : 판교 회사/업종 : 비 파견 SI 면접 후기 : 제대로 된 첫 번째 회사 면접이었다. (구로의 파견 SI 업체는 워낙 별로였기에 아예 안 한 셈으로 친다) 일단 내 간단한 소개를 했고, 기술면접보다는 그냥 기술 질의응답 과 같은 느낌으로 면접이 진행 되었다. REST 방식에 대해 아는지? REST API로 개발할 수 있는지?등 기술과 관련 된 사항은 심도 있진 않게 약 10분 정도는 진행했던 것 같다. 나는 멘토님의 가르침을 받은터라 그걸 면접 때 잘 녹여서 이야기 했고 "현업에 계신 분한테 들어서 그런지 그래도 어느정도 알고는 계시네요" 라는 평을 들었다. 멘토님께 또 한 번 마음 속으로 Thank you를 외쳤다. 전반적으로 받은 느낌은.. 다른 SI와 다르게 인격체로 존중은 해주되 다른 어떤 것보다 지금 투입한다면 써먹을 수 있을지 검증하는 것 같은 느낌이었다. 아무래도 SI이다 보니 오래 같이 갈 사람을 뽑는다기 보다는 현재 당장 필요한 업무를 처리할 수 있는가를 위주로 봤던 느낌이었다. 좋았던 점은 만약 입사한다면 어느 파트로 가고 싶냐고 물어봤던 것이다. 프론트엔드? or 백엔드? 나는 백엔드라고 답했고 가능하냐고 물었더니 입사가 된다면 내 바람대로 할 수 있을 것이라고 답변 받았다. 재밌는 건 연봉 얘기가 나오지 않은 상태에서는 "늦어도 워킹데이로 2일 이내로 결과를 곧 알려주겠다" 라고 입장을 통보 받았었는데, 연봉 얘기가 나오니 상황이 역전 된 것이었다. 회사 내규에 따른다고 하지만, 어느정도인지 알아야 나도 판단할 수 있기에 좀 더 물어봤고 결국 답변을 들었다. 그 얘기가 끝나니 면접관이 역으로 나에게 "채용은 제가 ...