다시 시작 Tap to restart 384

Q. NGINX에서 CORS(Cross-Origin Resource Sharing)처리할 경우 설정 방법은?

A. 요청 메소드 OPTIONS에 대한 설정을 추가하면 된다. CORS 관련 확인을 위해서 사전요청preflight이 발생한다. 이 사전요청은 OPTIONS 요청 메소드로 이루어진다. 그래서 NGINX에서 OPTIONS 요청 메소드 처리를 추가하면 된다. server { ... location / { if ($request_method = 'OPTIONS') { add_header 'Access-Control-Allow-Origin' $http_origin; add_header 'Access-Control-Allow-Methods' 'GET, POST, PATCH, DELETE, OPTIONS'; add_header 'Access-Control-Allow-Credentials' 'true'; add_he..

출처까지 알려줘서 유용한 개발자를 위한 AI 검색엔진! phind.com

phind.com 첫화면The AI search engine for developers. 개발자를 위한 검색엔진. 이란 소개 문구가 보입니다. 실제 사용 예CORS preflight이 무엇인지 물었습니다. 아래 예처럼 생성 답변과 오른쪽에는 생성 답변을 만드는데 사용된 출처가 나타납니다. 생성 답변 끝에 [0] [1] 등을 누르면 새 창으로 출처 링크로 접속합니다. CORS preflight이란? 으로 물어도 영어로 답변이 나옵니다. CORS 사전요청이란 으로 질문하니 한국어로 답변을 얻을 수 있었습니다. 한국어도 지원되는 것을 알 수 있습니다. chatGPT처럼 질문에 따라 코드 예시도 제시해줍니다. 아래 예는 CORS preflight nginx setting이라고 질의한 결과입니다. phind.co..

Q. CORS(Cross-Origin Resource Sharing) 사전요청preflight을 하지 않는 경우는?

A. 브라우저는 다음 조건을 모두 충족하는 요청일 경우에는 CORS 사전요청을 하지 않는다. 1. 메소드Method가 GET, HEAD, POST 중 하나이면서 2. 헤더Headers에 유저 에이전트User Agent가 자동으로 설정한 헤더(User-Agent, Connection)만 있거나, Accept, Accpet-Language, Content-Language만 있거나 Content-Type은 application/x-www-form-urlencoded, multipart/form-data, text/plain 중 하나이거나 조합인 경우다. 더 자세한 설명은 아래 출처를 참고하자. 출처: MDN: Cross-Origin Resource Sharing (CORS) 예를 들어서 요청 메소드를 POST..

Q. CORS(Cross-Origin Resource Sharing)이란?

A. 보통 '교차 출처 리소스 공유'로 번역되며, 브라우저로 웹 애플리케이션에 접속했을 때 리소스(이미지, JSON 등)가 자신의 출처(Origin)와 다름에도 가져오는 경우를 뜻한다. 여기서 출처(Origin)는 도메인, 프로토콜, 포트를 뜻한다. 도메인, 프로토콜, 포트 중 하나라도 다르면 출처가 다른 것이다. 브라우저가 CORS 허용 여부를 확인하며, 확인된 경우 출처가 다른 곳에서 리소스를 가져와서 보여준다. 허용되지 않은 경우는 CORS 에러가 발생한다. 어디서 이슈가 발생할까? 브라우저에서만 발생한다. 브라우저가 CORS 허용 여부를 확인하기 때문이다. Android 앱이나 iOS 앱과는 관계 없다. 언제 이슈가 발생할까? 예를 들어 https://www.taptorestart.com 에 브라..

Q. 메타버스Metaverse의 어원은?

A. 1992년 출간된 닐 스티븐슨의 공상과학 소설 ‘스노 크래시’에서 meta와 universe의 합성어로 처음 사용되었다. 소설 속에서 메타버스가 등장한 부분을 살펴보자. 양쪽 눈에 보이는 모습에 약간의 차이를 두면 그림은 입체적으로 보인다. 1초에 그림을 72번씩 바꿔 주면 그림은 실제로 움직이는 효과를 낸다. 움직이는 입체 그림을 가로 2000픽셀 크기로 보여 주면 사람의 눈이 인식할 수 있는 최대치에 도달한다. 그리고 작은 이어폰을 통해 스트레오 디지털 사운드를 들려주면 움직이는 입체 화면은 완벽히 실제와 같은 배경음을 갖게 된다. 그러니까 히로는 전혀 다른 곳에 존재하는 셈이다. 그는 고글과 이어폰을 통해 컴퓨터가 만들어 낸 전혀 다른 세계에 있다. 이런 가상의 장소를 전문 용어로 ‘메타버스’..

기타 Etcs 2023.04.11

Q. 두 창을 띄워서 한쪽에서 수정 작업 중인데 삭제한다면 어떻게 처리하는 게 좋을까?

A. 알림을 띄우는 게 좋다. 그래야 다른 작업자가 무슨 일을 했는지 알 수 있기 때문이다. 구글 드라이브 예test란 글을 작성했다.다른 창에서 삭제를 했다.바로 알림이 떴다. 티스토리 예두창을 띄우고 카테고리 관리 쪽으로 들어갔다. 테스트 카테고리를 추가했다.테스트를 수정 중이고 다른 창에서는 카테고리를 삭제했다. 변경사항 저장을 눌렀다.수정 확인 버튼을 눌렀는데 해당 카테고리가 사라졌다. 알림은 없었다.

Q. staticmethod와 classmethod 데코레이터decorator의 차이는?

A. staticmethod는 클래스에 접근이 안 되고, classmethod는 접근이 된다. 메소드 위에 두 데코레이터를 사용할 경우 객체 생성 없이 바로 메소드를 사용할 수 있다. 예제쉽게 이해할 수 있는 예는 아래와 같다.class Calculator: PI = 3.141592 def sum(self, num1, num2): return num1 + num2 @staticmethod def static_sum(num1, num2): return num1 + num2 def get_circle_area(self, radius): return radius * radius * self.PI @classmethod def class_get_circle_area(cls, radius): return radi..

Q. ER Model, Entity-Relationship Model에서 Relationship의 의미는?

A. 부모 자식, 친구 등 흔히 말하는 관계다. 데이터베이스를 공부할 때 헷갈리게 만드는 원인이다. ER Model에서 Relationship은 진짜 관계다. 관계형 데이터베이스 Relational Database에서 Relation은 수학 용어다. 둘 다 한국어로는 관계라 더 헷갈린다. 영어로는 약간 차이가 있다. ER Model은 relationship이고, Relational Database에서는 relation이다. 그래서 관계형 데이터베이스에서는 관계라고 하지 않고 릴레이션이라고 영어 발음 그대로 적는 경우도 많다. ER Model 원 논문, The Entity-Relationship Model — Toward a Unified View of Data Peter Pin-Shan Chen이 쓴 원..

Q. 관계형 데이터베이스Relational Database에서 관계Relation는 어디서 나온 말일까?

A. 수학의 집합론에서 나온 말이다.부모 자식 사이의 관계, 사돈 관계 등 일반적인 관계를 뜻하는 '관계'에서 나온 것이 아니다. 관계형 데이터베이스의 시초, 에드가 커에드가 F. 커(Edgar Frank "Ted" Codd)는 관계형 데이터베이스의 아버지라고 불린다. 그 이유는 첫 상업용 관계형 데이터베이스 시스템인 오라클 데이터베이스Oracle Database가 바로 에드가 커의 논문의 영향을 받아 만들어졌기 때문이다. It was at this time that Ed Oates introduced Miner and Ellison to a paper by E. F. Codd on the relational model for database management. 번역: 이때 에드 오츠는 마이너와 엘리슨..

규모가 큰 개발조직의 발전을 위해서는 체계적인 안건 상정 및 논의 절차가 필요하지 않을까?

팀원 수와 피자 두 판Jeff Bezos instituted a rule: every internal team should be small enough that it can be fed with two pizzas. 번역: 제프 베조스는 규칙을 제정했다: 모든 내부 팀은 두 개의 피자로 충분히 먹을 수 있을 정도로 작아야 한다. 출처: The two-pizza rule and the secret of Amazon's success, Alex Hern, TheGuardian.com, 2018. 4. 24.제프 베조스의 규칙은 한 사람이 보통 2조각 정도 먹는다면 결국 한 팀은 8명 이내여야 한다는 뜻이다. 8명을 넘어서면 토론이 쉽지 않아 의사소통 시간과 비용이 급격히 커지기 때문이다. 8명을 넘어선 큰 ..

Q. 파이썬 팩키지 pika로 래빗엠큐RabbitMQ로 접속할 때 나타나는 에러는?

A. 연결 설정 오류로 StreamLostError: ('Transport indicated EOF',) 등 에러가 발생한다. 래빗엠큐 AMQP 기본 port는 5672다. 그런데 엉뚱한 port를 입력한다면? import pika connection = pika.BlockingConnection( pika.ConnectionParameters(host='localhost', port=3306)) channel = connection.channel() channel.queue_declare(queue='hello') channel.basic_publish(exchange='', routing_key='hello', body='Hello World!') print(" [x] Sent 'Hello World..

Q. 래빗엠큐RabbitMQ에서 ack의 의미는?

A. acknowledgment 확인, 인지란 뜻이다. 아래 출처를 보면 ack(nowledgement)란 표현을 볼 수 있다. 발음은 애크라고 읽는 것 같다. In order to make sure a message is never lost, RabbitMQ supports message acknowledgments. An ack(nowledgement) is sent back by the consumer to tell RabbitMQ that a particular message had been received, processed and that RabbitMQ is free to delete it. 출처: Message acknowledgment 파이썬 pika 팩키지를 활용할 경우 auto_ack..

Q. 파이썬으로 래빗엠큐RabbitMQ 메시지를 보내고 받고 싶다면?

A. pika 팩키지를 활용하면 된다. RabbitMQ 공식 홈페이지에 pika 튜토리얼이 있다. 튜토리얼 그대로 따라하면 쉽게 테스트를 해볼 수 있다. 도커로 RabbitMQ 실행하기 /Users/taptorestart 부분은 여러분의 경로로 수정하면 된다. 참고: rabbitmq dockerhub docker run --name rabbitmq \ -p 5672:5672 \ -p 15672:15672 \ -v /Users/taptorestart/rabbitmq:/var/lib/rabbitmq \ -d rabbitmq:3.11.10-management 이 때 중요한 것은 -p 5672:5672도 적어줘야 한다는 점이다. 실행했으면 접속하자. http://localhost:15672/ 로 접속하고 id,..

무료 플랫폼은 뭘로 돈을 벌까?

광고와 거래다. 광고를 해주고 수수료를 받고, 시장을 만들어서 거래를 주선하고 수수료를 받거나 물건을 직접 판다. 사람이 많이 모이는 곳 사람이 많이 모이는 곳은 정보를 널리 알리기에, 곧 광고를 하기에 좋다. 사람이 많이 모이니 당연히 물건을 사고 팔기에도 좋다. 그런 곳을 소유하고 있다면 광고를 하고 싶은 사람들과 물건을 팔고 싶은 사람들이 연락을 해온다. 그 사람들에게 광고를 할 수 있는 공간이나 물건을 사고 팔 수 있는 공간을 내주고 돈을 받을 수 있다. 출퇴근 때 이용하게 되는 지하철을 생각해보자. 지하철에는 광고가 붙어 있고, 역 안에는 가게들이 있다. 불꽃축제, 벚꽃축제 등 많은 사람들이 모일 것으로 예상되는 날이 되면 어김없이 물건을 팔려는 노점상들이 축제 장소 근처에 몰려드는 것도 마찬가..

Q. 래빗엠큐RabbitMQ를 종료하고 재시작하면 큐에 쌓여 있던 메시지가 사라질까?

A. Durability 설정이 durable이고, Delivery mode가 persistent 라면 메시지가 남아 있다. RabbitMQ 실행 우선 RabbitMQ를 실행하자. 도커를 사용한다면 아래 명령어로 쉽게 RabbitMQ를 실행할 수 있다. /Users/taptorestart 부분은 여러분의 경로로 수정하면 된다. 참고: rabbitmq dockerhub docker run --name rabbitmq \ -p 5672:5672 \ -p 15672:15672 \ -v /Users/taptorestart/rabbitmq:/var/lib/rabbitmq \ -d rabbitmq:3.11.10-management 실행했으면 접속하자. http://localhost:15672/ 로 접속하고 id, ..

"측정할 수 없다면 관리할 수 없다."라고 피터 드러커는 말한 적이 없다고?

드러커가 했다고 하는 그 말KPI(핵심성과지표)와 평가에 관한 HR 담당자의 설명을 듣다가 눈에 띄는 문장이 있었다. "측정할 수 없다면 관리할 수 없다." - 피터 드러커 피터 드러커. 경영학의 아버지라고 불리기도 하는 그 분이다. 실제 검색해보면 비슷한 문장을 인용한 칼럼들을 쉽게 찾을 수 있었다. 서평 / 성과지표의 배신, 김태완, 물류신문, 2022. 6. 15. [ET단상]'Plan-Do-See'의 오류, 류승범, 전자신문, 2022. 8. 23. 등 모두 피터 드러커가 말했다고 피터 드러커를 인용하고 있다. 예를 들면 피터 드러커는 “측정할 수 없다면 관리할 수 없고, 관리할 수 없으면 개선할 수도 없다”라고 말했다. ... 출처: [ET단상]'Plan-Do-See'의 오류, 류승범, 전자신문..

Q. 깃허브 풀리퀘스PullRequest 때 테스트를 자동화하는 방법은?

A. 깃허브GitHub 워크플로우workflows를 활용하면 쉽게 테스트를 자동화할 수 있다. pytest를 실행하는 예 깃허브 저장소에 .github 폴더를 만들고 그 아래 workflows를 만든다. 그리고 아래 내용을 담은 yml 파일을 만든다. 이름은 아무 거나 가능하다. tests.yml로 만들자. name: Test on: pull_request: branches: - main jobs: build: runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v3 - uses: actions/setup-python@v4 with: python-version: '3.6' - run: | python -m pip install --upgrade pip pyth..

Q. JetBrains의 제품(IntelliJ, WebStorm 등) 개인 라이선스나, 커뮤니티 에디션으로 회사에서 상업용 제품을 개발해도 될까?

A. 가능하다. 문제 없다. 공식 사이트에 답변을 보자. 개인용 라이선스를 회사와 집에서 사용할 수 있나요? 네, 개인용 라이선스는 회사에서도, 집에서도 사용할 수 있습니다. 회사 프로젝트뿐만 아니라 개인 프로젝트에서도 사용할 수 있습니다. JetBrains EULA에서는 이를 제한하지 않습니다. 개인용 라이선스를 상업적 개발 작업에 사용할 수 있나요? 네, 개인용 라이선스를 모든 종류의 개발 작업에서 사용할 수 있습니다. 단, 본인의 개인용 라이선스를 사용해야 하며 다른 이들과 공유하면 안 됩니다. 또한 회사에서 개인용 라이선스를 대신 결제하거나 상환하거나 어떤 방식으로든 자금을 지원하면 안됩니다. 개인용 라이선스를 회사에서 쓰는 것은 괜찮으나, 회사가 개인용 라이선스 자금을 지원하면 안 된다. 이 문..

개발 Dev 2023.02.19