2023/03

해석 기법이란? 고급 언어로 작성된 프로그램을 바로 실행하는 장점이 있다 인터프리터는 프로그램을 한 줄씩 실행하며, 소스 코드를 즉시 실행 코드로 변환하고 실행하는 방식을 사용합니다. 인터프리터는 컴파일 과정을 거치지 않기 때문에, 코드 생성과 최적화 단계를 합친 것처럼 보일 수 있습니다. 하지만 인터프리터는 소스 코드를 한 번에 분석하고 최적화하지 않고, 실행 시간에 소스 코드를 직접 해석하여 실행합니다. 즉 번역 된 결과를 중간 코드나 기계어로 저장하지 않고 바로 실행하는 것입니다 인터프리터의 장점은 다음과 같습니다: 개발 과정이 빠르고 쉽습니다 컴파일 과정이 없기 때문에 수정 후 바로 실행해 볼 수 있어 개발이 더 빠르게 진행됩니다. 플랫폼 독립적입니다 인터프리터는 소스 코드를 실행 시간에 해석하므..
컴파일 기법이란 고급 언어로 작성된 프로그램을 바로 실행 할 수 있는 프로그램으로 변환하는 방식이다 소스 코드로 작성해 놓은 것을 컴퓨터가 알아들을 수 있는 언어로 바꾸는 과정 컴퓨터는 바이너리 즉 기계어만 이해한다 소스 코드를 목적 프로그램으로 변경 시켜야 한다 번역이 완료되면 빠르게 실행 시킬 수 있는 장점이 있다 컴파일 단계 어휘 분석(lexical analysis) 원시 프로그램을 토큰 단위로 자르고, 토큰과 관련된 정보를 구문 분석 단계로 전달 한다. 구문 분석(syntax analysis) 어휘 분석 단계에서 전달 받은 토큰들이 문법적으로 옳은지 검사 오류가 없다면 파스 트리라 불리는 구조를 생성한다 중간 코드 생성 단계 중간 코드 소스 코드를 기계어로 번역하기 전, 번역기가 이해가 쉬운 추상..
최장 프리픽스 매칭 (Longest Prefix Matching) with CIDR 최장 프리픽스 매칭 (Longest Prefix Matching)란 최장 프리픽스 매칭(Longest Prefix Matching)은 IP 라우팅에서 많이 사용되는 알고리즘 중 하나입니다. IP 라우팅에서, 최장 프리픽스 매칭은 패킷의 목적지 IP 주소를 라우팅 테이블의 엔트리와 비교하여 가장 긴 공통된 접두어(prefix)를 찾아내는 것입니다. 이를 통해 패킷이 어떤 경로로 전달되어야 하는지 결정할 수 있습니다. 최장 프리픽스 매칭은 라우터가 목적지 주소를 가장 효율적으로 찾아내기 위해 역할을 합니다. 최장 프리픽스 매칭 사용 방법 예를 들어, 라우팅 테이블에는 다음과 같은 엔트리들이 있다고 가정해봅시다. 10.0.0...
NAT Traversal(네트워크 주소 변환 순회) NAT Traversal은 네트워크 주소 변환(NAT)을 사용하는 네트워크에서 직접적인 통신을 가능하게 하는 기술입니다. NAT는 프라이빗 IP 주소를 사용하는 내부 네트워크와 공인 IP 주소를 사용하는 외부 네트워크를 연결하는데 사용됩니다. 하지만 NAT를 사용하는 네트워크에서는 직접적인 통신이 어려운 경우가 있습니다. 이러한 제약을 극복하기 위해 NAT Traversal은 다양한 기술들을 사용하여 네트워크 주소 변환(NAT)을 통과하여 직접적인 통신이 가능하게 합니다. 우리 NAT가 무슨 문제가 있다는거야!?! NAT(Network Address Translation)은 내부 네트워크에서 프라이빗 IP 주소를 사용하여 인터넷 접속합니다. 이 때 NA..
학교 공지 사항 자동화를 해보자 - 5 Intro. Github Action… 완전 혜자다 Github Action은 깃허브에서 제공하는 CI/CD 등의 자동화를 위해 지원하는 기능이다. 나의 경우, Crontab 용도로 사용 할 것이다. 기존에 구글 클라우드 등에서 스크립트를 계속 돌며, 시간을 체크 했는데 자원 낭비라 생각이 들어, Github Action Crontab을 생각했다 지금 만들고 있는 간단한 스크립트 위주의 봇 경우 깃허브 액션으로 돌리면 클라우드 비용도 안들고 괜찮은 듯하다 진행 방법 1. 레퍼지터리에 .github/workflows 생성 .github/workflows 디렉터리를 생성하고 auto.yml로 파일을 생성한다. 2. auto.yml 내용 채우기 name: Auto Pos..
학교 공지 사항 자동화를 해보자 - 4 Intro. 이제 메일로 전송해보자! 이메일에 담을 내용은 이제 모두 준비가 되었다! smtp와 email 라이브러리를 사용하면 파이썬으로 구글 이메일을 전송 할 수 있다. 주의 해야 할 점은 구글 기준으로 앱 비밀번호를 생성해서 넣어야 한다. 일반 비밀번호를 입력하면 에러가 발생한다 또 신경 썼던게 있다면, 환경 변수로 내 개인 정보를 감춘 것이다. 나중에 github action을 쓸 때도 마찬가지고, 개인 정보를 추상화하는 것은 기본이기에 os.environ을 사용해서 개인 정보를 숨겼다 아래 코드를 보면 알 수 있지만, 보내는 사람,받는 사람, 제목 등을 입력 할 수 있다. 앞서 말한 앱 비밀번호만 유의하자 예외 처리는 메일 발송 과정에서 전송 실패 등의 이..
학교 공지 사항 자동화를 해보자 - 3 Intro. 사업단 공지 데이터 추출을 해보자 앞선 학과 공지와 같이 리스트 형태로 공지를 뿌리고 있음을 확인 할 수 있다. 보다보니 게시판 형태라 이런 패턴으로 데이터를 뿌리는 것은 당연하다 역시나 개발자 도구를 켜서 CSS 셀렉터를 추출해서, 리스트의 위치를 특정해야 한다 html 코드를 보니 역시나 tr로 뿌리고 있다. 대신 td 태그 내의 내용물이 조금씩 다르다 학과 공지 사항에서 데이터를 추출한 것과 비슷한 맥락으로 코드를 짜면 될거 같다 코드 import requests import re from bs4 import BeautifulSoup from datetime import datetime url = 'https://www.sojoong.kr/www/..
학교 공지 사항 자동화를 해보자 - 2 Intro. 학과 공지 사항에서 데이터 추출 해보자 위와 같이 리스트 형태로 공지를 뿌리고 있음을 확인했다. 먼저 개발자 도구를 켜서 CSS 셀렉터를 추출해서, 리스트의 위치를 특정해야 한다 tr 태그 내에 notice 클래스 안에 공지들이 들어 있음을 볼 수 있다 오른쪽 마우스 클릭을 해서 css 셀렉터를 추출한다 코드 import requests import re from bs4 import BeautifulSoup from datetime import datetime # 웹페이지에서 데이터를 가져올 URL url = 'https://sw.jnu.ac.kr/sw/8250/subview.do' today = str(datetime.now().date()) toda..
학교 공지 사항 자동화를 해보자 - 1 Intro. 왜 자동화를 해야 할까? 장학금이나 기타 학교에서 진행하는 프로그램들은 내게 무조건 이득이 된다. 4년 짧게 다니는 대학 생활인데 최대한 많이 얻어가야 하지 않겠나 내 하루 일과 중 하나는 학과 공지 사항을 확인하는 것이다. 아침에 연구실에 오면 직장인이 메일 보는 것처럼 뚤래뚤래 공지사항이 뜬게 있는지 보는거다 게다가 선착순이나 경쟁률 있는 것은 언제 뜰지 모르니 가끔 틈 날 때마다 들어가는데, 매우 귀찮은 일이다. 들어가야지 생각하고 들어가서 확인하는 것 자체가 에너지 낭비이다. 나의 경우, 메일에 기술 블로그와 뉴스를 구독하고 있다. 그렇다면, 학과 주요 공지사항들도 내게 메일로 보내면 되지 않을까?! 프로그래머니까 프로그래머답게 해결해보자 로직 ..
순수 함수란 무엇인가 순수 함수는 입력값에 대해 항상 동일한 출력값을 반환하는 함수를 말합니다. 이러한 함수는 입력값 외에 다른 상태나 외부 환경에 의존하지 않기 때문에, 여러 스레드에서 동시에 호출해도 안전합니다. 또한 순수 함수는 입력값을 변경하지 않고, 항상 새로운 값을 반환하기 때문에 불변 데이터 구조와도 잘 맞습니다. 함수형 언어가 병렬성에서 이점을 가지는 이유 함수형 언어에서는 병렬성(parallelism)을 위해 순수 함수(pure function)와 불변 데이터 구조(immutable data structure)를 사용합니다. 함수형 언어에서는 상태 변이(state mutation)를 피하고 불변성(immutability)을 지향하기 때문에, 일반적으로 뮤텍스(mutex)와 같은 동시성 제..
berom
'2023/03 글 목록 (3 Page)