전체 글 386

Q. 파이썬에서 객체에 새로운 속성이 임의로 추가되지 않도록 하고 싶다면?

A. pydantic을 사용하면 된다. from pydantic import BaseModel class Person(BaseModel): name: str = '' gender: str = '' if __name__ == '__main__': john = Person() john.age = 23 print(john.age) pydantic을 사용하면 아래처럼 에러가 난다. john.age = 23 File "pydantic/main.py", line 357, in pydantic.main.BaseModel.__setattr__ ValueError: "Person" object has no field "age" 같은 코드에서 pydantic BaseModel만 제거하면 잘 출력된다. 파이썬 객체의 경우 ..

Q. 파이썬으로 개발할 때 타입 힌트type hints를 쓰면 좋은 점은?

A. 개발자 실수로 인한 오류가 확 줄어든다! 파이썬은 동적 타입 언어Dynamically Typed Language 그때 그때 알아서 타입이 바뀌는 걸 동적 타입 언어라고 한다. 정적 타입 언어Statically Typed Language인 C나 자바는 변수를 선언할 때 타입부터 선언해야 한다. 하지만 파이썬은 동적 타입 언어니까 변수를 선언할 때 타입을 선언하지 않는다. message = "Hello World!" print(message) message = 7 print(message) 위처럼 그냥 변수 = 문자열 하면 해당 변수에는 문자열이 담긴다. 그 다음에 숫자를 변수에 저장해도 전혀 문제 없이 잘 작동한다. 웹 개발 때 많이 쓰는 자바스크립트도 동적 타입 언어다. 동적 타입 언어 문제 알아서..

Q. 우분투 서버에 비밀번호 없이 id_rsa 키로 ssh 접속하는 방법은?

A. id_rsa.pub 파일을 열어서 내용을 서버의 authorized_keys에 등록하면 된다.  먼저 id_rsa 키부터 만들자 macOS 맥 사용자거나 리눅스를 쓴다면 터미널을 실행한다. $ ssh-keygen 명령어를 실행한다.실행하면 아래 이미지처럼 진행된다. passphrase 암호구문을 등록해도 되고 안 해도 된다. 보안을 한단계 더 강화하고 싶다면 암호구문을 등록하자.  $ cd .ssh$ ls.ssh 디렉터리가 생겨 있다. 거기 들어가서 ls를 치면 id_rsa, id_rsa.pub 두 파일이 생긴다.  id_rsa.pub이 공개키이고 그냥 id_rsa 비밀키이다. 이름 그대로 공개키 암호시스템 중 하나인 RSA 암호화 기법을 쓰고 있는 것이다. RSA 암호화 기법이 궁금하다면 위키를 ..

Q. 코파일럿copilot 쓰면 좋은 점은?

A. 모르는 것 검색할 시간을 아낄 수 있습니다! 코파일럿 신청하고 잊고 지내다가 이제 가능한 것을 알게 되었습니다. 그래서 설치하고 써보는데, 처음에는 자기 멋대로 추천해주니 거슬렸는데, 계속 쓰니 편하네요. 오늘 파이썬 코드를 짜다가 객체의 클래스명을 어떻게 얻지 찾게 되었습니다. 한참 찾다가, 이거 혹시 자동으로 되나 싶어서 한번 쳐봤습니다. 아래처럼 대충 영어로 함수명을 만들면 자동으로 코드를 찾아줍니다! 아래는 파이참에서 실행한 예이고, VSCode에서도 잘 됩니다. 탭 키만 누르면 끝! 주석도 적다보면 적당한 표현을 자동으로 만들어줍니다. AI 시대를 맞아서 자동 완성이 진일보한 느낌이 들더군요. 실제 검색해보면 저 자동 완성 코드와 똑같은 코드를 스택오버플로우에서 찾을 수 있었습니다. 이제 ..

frisby.js로 REST API 서버 테스트 하기

frisby.js란? "Frisby makes REST API testing easy, fast, and fun." - frisby.js 소개에서 "Frisby는 REST API 테스트를 쉽고, 빠르고 재미있게 만든다." REST API 테스트용 라이브러리다. 어떤 언어로 되어 있나? 자바스크립트 기반이고, 테스트를 실행하기 위해서 Jest를 사용한다. 테스트 코드 자체가 반복적이기 때문에 엄청 높은 수준의 자바스크립트 지식을 필요로 하지는 않는다. 자바 기반 스프링부트나 파이썬 기반 장고 등 다른 언어로 API 서버를 개발해도 쉽게 frisby.js로 테스트 코드를 짤 수 있다. 언제 사용하는가? API 서버를 테스트할 때 사용한다. Postman 같은 API 테스트 플랫폼과 같은 용도다. 장점은 코드..

PDF를 텍스트로 바꿔주는 pdfminer.six, pypdf2, pdfplumber 비교해보기

여기 2030년 자율주행 서비스 일상화, 미래 모빌리티 선도국가 도약란 국토교통부의 보도자료가 있다. 보도자료는 보통 PDF와 HWP 파일로 공개된다. 이 중 PDF를 텍스트로 변경해보고 싶다. 많이 쓰는 것 중심으로 테스트를 해봤다. pypdf2, pdfminer.six, pdfplumber 3개다. 위 pdf 중 두 번째 쪽은 아래와 같다. 아래 PDF를 텍스트로 변경해봤다. pypdf2 2쪽을 하고 싶었으니 아래처럼 index는 1이 된다. from PyPDF2 import PdfReader FILE_PATH = "220609(석간)_강남에서_자율주행_택시_달린다(첨단자동차과).pdf" INDEX_OF_PAGE = 1 def text_to_txt_file(text, file_name): with o..

"나무를 자를 여섯 시간을 준다면, ..." 당신은 어떻게 할 것인가?

당신은 어떻게 할 것인가? 여기서 주어진 도구는 도끼다. 1. 바로 도끼로 나무를 잘라본다. 2. 도끼로 나무를 어떻게 자르는지 유튜브를 검색한다. 3. 나무 잘 자르는 친구한테 물어본다. 등 방법이 있을 거 같다. 링컨은 이렇게 말했다고 한다. "나에게 나무를 자를 여섯 시간을 준다면, 나는 먼저 네 시간을 도끼를 날카롭게 하는 데에 쓰겠다." "Give me six hours to chop down a tree and I will spend the first four sharpening the axe." 출처: 위키인용집 링컨 링컨이 진짜로 말했는지 찾아보려고 했는데 찾아도 잘 나오지는 않는다. 링컨이 말했다고 믿자. 링컨은 나무 좀 잘라본 거 같다. 일단 친구를 찾거나 하지는 않았다. 일단 자르는 ..

왜 성장한 기업에 초창기 멤버는 안 남아 있을까?

가장 큰 원인은 기업의 성장 속도를 초창기 멤버가 쫓아가지 못하기 때문이다. 초기 스타트업 상황 초기 스타트업은 사람 구하기가 어렵다. 워낙 사람 구하기가 어렵다보니 대표가 원하는 수준의 인재를 구할 수 없다. 그래서 좀 미흡하더라도 채용을 하게 된다. 당신이 구직 중일 때 직원 5명도 안 되는 회사에 가고 싶은지 생각해보라. 이제 갓 대학을 졸업한 신입 입장에서는 배울 게 없는 곳, 체계가 안 잡힌 곳으로 느껴질 것이고, 경력직 입장에서는 내가 모든 걸 다 책임져야 하는 곳으로 느껴질 것이다. 그렇게 작은 회사임에도 미래가 밝지도 않은데 입사를 결정한 경우에는 거기 말고 다른데가 모두 떨어졌거나 당장 돈이 급하거나 등 사정이 있기 때문일 것이다. 성장, 투자 초창기 멤버들이 의기투합하고 시장 상황이 나..

나보다 더 개발을 잘 하는 친구가 입사했다면 어떻게 대할까?

나보다 더 개발을 잘 하는 친구의 의미 내가 다니고 있는 기업이 성장하고 있다는 뜻이다. 능력 있는 친구들은 미래가 밝지 않은 기업에 굳이 지원하지 않는다. 잠시 들어왔다가 금방 나간다. 능력 있는 친구를 원하는 기업은 많으니까. 나보다 잘 하는 친구는 나한테 좋은 일일까? 안 좋은 일일까? 기존에 사내에서 대우와 인정을 받았다면 안 좋은 일일 수도 있다. 이제 그 자리를 넘겨 줘야 하니까. 사람의 능력은 숨기기 어렵다. 특히 개발은 더더욱. 개발 능력의 차이는 너무나 쉽게 드러난다. 여기서 선택의 기로에 서게 된다. 선택1. 나보다 잘 하는 친구를 돕지 않기 그 친구한테 정보를 안 알려주는 거다. 알려줘서 쉽게 할 수 있는 것도 일부러 돌아가게 만드는 거다. 그럼 그 친구는 개발 능력은 뛰어 나지만 상..

잡담은 권장할만한 일일까? 권장할만하다면 그 이유는?

내 느낌인지 모르겠지만 보통 CEO, CTO, COO 등 C레벨은 기업 내 구성원인 직원들의 잡담을 그렇게 좋아하지 않는 거 같다. 하라는 일은 안 하고 쓸데없는 이야기나 한다고 생각하기 쉬운 거 같다. 잡담은 권장할만한 일일까? 권장하는 수준을 넘어서 꼭 필요한 일이다. 잡담이 없는 회사라면? 정말 일만 하는 회사라면 역설적으로 일이 잘 안 되는 현상이 발생한다. 잡담은 윤활유 기업을 자동차라고 친다면 잡담은 윤활유 같은 기능을 한다. 각 부속(서로 다른 팀)끼리 마찰을 줄여주고 더 부드럽게 나갈 수 있게 해준다. 밥도 먹고, 별 거 아닌 얘기도 잡담 시간에 한다면 서로 오해할 일도 줄어든다. 자주 안 만날수록 오해가 생기기 쉽다. 또 서로에 대해서 어느 정도 알고 친해져야 서로 쉽게 의견도 낼 수 있..

Q. 아나콘다 설치 없이 주피터 노트북 실행시키는 방법은?

A. pip install notebook으로 설치, jupyter notebook 실행하면 된다. 주피터 노트북만 필요하다면 굳이 아나콘다까지 설치할 필요가 없다. 맥의 경우에는 아래처럼 하면 된다. $ mkdir notebook $ cd notebook $ python3 -m venv venv $ source ./venv/bin/activate $ pip install notebook $ jupyter notebook 위 예시는 가상환경 만드는 것부터 적어본 것이고, 그냥 pip install notebook부터 해도 된다. 주피터 노트북이 잘 실행되는 걸 볼 수 있다. 노트북 화면이 보인다. 실행해보자. 정상적으로 뜨는 것을 볼 수 있다. 이렇게 했을 때 장점은 각 프로젝트마다 팩키지 관리를 할 수..

Q. 파이썬에서 데이터를 객체로 맵핑하는 방법은?

A. 여러가지 방법으로 가능하다. 기본 __init__을 활용할 수도 있고, dataclasses, pydantic 등을 활용해서 할 수도 있다. 데이터를 받아서 데이터 모델 클래스의 객체object로 맵핑mapping하는 경우는 정말 많이 필요하다. 그렇지 않으면 일일이 변수로 만들거나 딕셔너리로 접근해야 하는데 너무 번거롭기 때문이다. 데이터를 객체로 만들어주는 팩키지나 라이브러리를 보통 객체 맵퍼 Object Mapper라고 부른다. 예를 들면 자바의 Jackson 같은 경우다. 파이썬에서는 어떻게 객체 맵핑을 할 수 있을까. 1. 가장 기본적인 방법 __init__ 을 활용하는 방법이다. class User: def __init__(self, name, phone, birthday): self.n..

손흥민존, 나에게는 OOO존이 있을까?

축구선수 손흥민한테는 손흥민존이 있다. 그 존은 손흥민이 아버지 손웅정과 훈련을 통해서 만들어낸 존이다. 손흥민 존은 바로 여기다. 페널티 박스 양쪽 코너 지역. 손흥민존은 어떤 영역일까수비수 입장에서 굉장히 애매한 위치다. 골대와 가깝지 않으니 슛을 하라고 놔둬도 실점 가능성이 낮은 지역이다. 달려가서 막을 경우 상대 공격수가 자신을 제칠 경우 바로 실점 가능성이 굉장히 높아지는 지역이다. 적극적으로 다가가서 압박 수비를 하기에는 애매하다. 따라서 수비수와 공격수 사이에는 공간이 생긴다. 다른 지역보다는 공간이 꽤 생기니 공격수 입장에서는 자신의 리듬대로 슛을 하기 좋다. 하지만 골대까지 멀어 득점 가능성이 굉장히 낮다. 골키퍼 입장에서는 애매한 구역일 수 있다. 공격수가 슛을 하지만 골대 안까지 정확..

SI(System Integration)란? SI업체란?

SI란? SI를 찾아보면 시스템 통합이라고 나온다. 아래는 위키백과 설명이다. "시스템 통합(system integration)은 사용자들의 요구에 따라 하드웨어·소프트웨어·네트워크 등 유형의 제품과 컨설팅·시스템 설계 및 유지보수 등 무형 서비스 기술을 통합, 의뢰자의 전산 및 경영환경에 맞는 종합전산해결책을 제공하는 전문정보처리 시스템 사업을 말한다." SI업체란? 그렇다면 SI업체는 무엇을 뜻할까? 기업체의 요구에 따라 소프트웨어 제품을 납품하는 업체라고 보면 된다. 잡코리아에 나온 SI 설명을 살펴보자. "SI는 요약하자면 ‘시스템을 구축하는 업무’라고 정리할 수 있습니다. 과거에는 전산시스템을 구축할 때 기업에서 자체적으로 시스템을 구축했습니다. 하지만 전산시스템이 복잡해지고 전문성이 필요해짐에..

기타 Etcs 2022.06.01

도커로 mysql 컨테이너 만들어서 로컬 개발환경을 구축하기

API 서버 등 백엔드 개발을 하게 되면 데이터베이스가 필수다. 당연히 로컬에 mysql을 설치한다. 이때 설치하는 방법은 여러가지다. 그냥 mysql 사이트에 가서 내려받고 설치해도 되고, macOS 사용자라면 brew로 설치하기도 한다. 단일 사용자라면 괜찮지만, 한 컴퓨터를 여러 사람이 쓰거나 서로 다른 용도로 쓸 경우 문제가 발생한다. 도커Docker가 유용한 상황: 멀티 유저 예를 들어 개인 계정은 A, 회사 업무용 계정은 B라고 하자. A 계정에서 mysql을 brew로 설치했다. B 계정에서 brew로 뭔가 추가로 설치하려면 권한 설정 이슈가 빈번하게 발생한다. 또 서로 다른 계정인데도 데이터베이스도 함께 쓰게 된다. 물론 brew를 멀티 유저로서 문제 없게 쓰는 방법도 있지만 좀 번거롭다...

개발자 유형 프로젝트 3. 개발자 유형별 특성 찾아보기

개발자 유형을 아래 6가지로 나눠봤다. - 탐정: 버그와 오류 원인을 잘 찾아내는 개발자 - 해적: 다른 기업의 기술 블로그만 보고도 그대로 구현해내는 개발자 - 천재: 알고리즘 개선 등을 통해서 10~20배가 아니라 최소 100배 이상의 개선을 이끌어내는 개발자 - 공장: 꾸준한 속도로 비슷한 것을 빨리 구현해 내는 개발자 - 위키 또는 스택오버플로우: 자신이 맞딱뜨린 문제와 해결책을 정리해서 공유하는 개발자 - 허브: 커뮤니케이션 의사소통 능력이 뛰어나 타팀과 협업할 때 시너지 효과를 내는 개발자 각 유형에 가까운 특성을 찾아보자. 일단 생각나는대로 적고 생각날 때마다 보충하자. 탐정 - 버그나 오류의 원인 찾는 것을 좋아한다. - 주변 개발자들이 오류를 잘 찾는다고 한다. - 디버깅을 잘하고 좋아한..

개발자 유형 프로젝트 2. 직업흥미유형

국립과천과학관에 갔다가 직업흥미유형이란 것을 보게 되었다. 간단히 질문에 답하면 직업흥미유형을 알려주는 식이다. 별다른 근거가 없이 만든 건가 싶어서 찾아보니 청소년 직업흥미검사로 워크넷에도 있다. 워크넷 설명에 따르면 "일반흥미유형이란 미국의 심리학자인 John Holland의 직업성격유형 이론에 근거하여 여러분 개인의 흥미를 6가지 유형으로 구분하여 측정한 것"이라고 한다. MBTI는 어떤 질문에 대한 답변을 통해서 서로 상반된 두 특성 중 어떤 것과 가까운지 보는 형태라면 직업흥미검사는 그렇지는 않았다. 그냥 "과학 실험을 좋아한다"에 "예"라고 답하면 탐구형에 점수를 얻는 식이었다. 모든 질문에 예라고 답한다면 6가지 유형의 점수가 모두 높게 나올 수도 있는 식이었다. 개발자유형 검사를 만든다면 ..

일터가 우리 삶에서 차지하는 비중은 어느 정도일까

우리 모두는 엄청나다는 것을 알고 있다. 하지만 정말 얼마나 엄청날까? 1년동안 우리는 얼마나 일터에 있을까? 보통 하루 8시간을 일한다. 점심시간 포함하면 일터에서 보내는 시간이 하루 9시간. 주 5일 일할 경우 9시간 * 5일 = 45시간. 1년은 52주. 1년에 주어진 유급휴가는 15일. -3주 법정공휴일은 15일 -3주 = 46주 46주 * 45시간 = 2,070시간 대략 2천시간이다. 아웃라이어 책 덕분에 유명해진 1만시간의 법칙의 1만시간에 도달하는데 5년이면 충분하다. 1년을 시간으로 계산하면 하루는 24시간 * 365일 = 8760시간이다. 이 중 일터가 차지하는 시간은 대략 23.6%다. 평균 출퇴근 시간을 1시간 반이라고 가정할 경우 3시간은 길에서 보낸다. 평일의 경우 24시간 중 -..