해시에 대한 개념보다는 C로 해시를 구현하고, data type에 자유롭게 사용할 수 있도록 구현적 측면에서 해시를 다루고자 한다. key-value pair를 구조체에서 별도로 명시하지 않고, entry에 다른 구조체를 포인팅함으로써 더 많은 자료를 다룰 수 있도록 구현하였다. Hash? 해시는 위의 그림과 같이, key 값을 생성하는 `해시 함수(hash function)`를 통해 배열에 어떤 값이 있는지 즉각적을 찾을 수 있는 자료구조이다. 트리의 경우 한쪽으로 탐색을 하여 범위를 좁혀가면서 탐색을 한다. 하지만 해시의 경우 해시 함수를 통해, 찾고자 하는 값의 key를 즉각적으로 알 수 있으므로 탐색에 매우 효율적인 자료구조이다. 하지만 해시에서도 문제점은 있다. `충돌(Collision)`이 발..
요즘 들어, 기술 관련된 글보다는 회고록을 더 많이 쓰는 것 같다.😅 요즘도 열심히 공부를 게을리하고 있다는 증거가 아닐까? 얼마 안 되는 초기 자금을 가지고 자취방을 구하는 좌충우돌에 대해 다루고 휑한 원룸에 사람답게 살기 위한 주옥같은 아이템들을 정리해두고, 나중에도 이사를 하거나 방을 구할 때 나 스스로 참고가 되도록 상세히 써보고자 한다. 전세 vs 월세 월세는 나의 돈을 계속해서 소모하는 것이므로, 처음부터 전세를 구하면 좋다. 하지만 11월 출근을 시작으로 친구 집에 눌러앉아 있던 터라 시간이 오래 걸리는 전세를 바로 구하는 것보다는 월세 30을 구하여 1년은 `240만 원 정도의 손해`를 보고 월세를 구하고자 하였다. 또한 나에게는 여윳돈이 `300만 원` 밖에 없기도 하여, 전세를 구하는데..
사이트에 따라, 로그인을 하기 위해 팝업 창에서 로그인 정보를 입력하는 케이스들이 있다. 따라서 현재 드라이버에서 팝업창으로 접근하기 위한 방법과 이를 적용하면, 쉽게 컨트롤할 수 있다. 구현 하기 from selenium import webdriver class DefaultTest: def __init__(self, address: str): self.options = webdriver.ChromeOptions() # skip ssl self.options.add_argument("--ignore-certificate-errors") self.driver = webdriver.Chrome(chrome_options=self.options) self.address = address def teardow..
일반적인 크롤링을 위한 작업에서는 안전하지 않음 페이지가 발생할 일이 없겠지만, 웹 테스트 시에는 발생할 수 있다. 따라서 안전하지 않음 페이지를 스킵하는 방법을 다루고자 한다. 구현 하기 from selenium import webdriver class DefaultTest: def __init__(self, address: str): self.options = webdriver.ChromeOptions() # skip ssl self.options.add_argument("--ignore-certificate-errors") self.driver = webdriver.Chrome(chrome_options=self.options) self.address = address def teardown(sel..
셀레니움은 웹 크롤링을 하거나, 작업을 자동화하기 위해 자주 쓰이곤 한다. 또한, 이 기능을 활용하여 구현한 웹의 테스트 케이스를 자동으로 실행 가능하도록 만들 수 있다. 이를 위해 파이썬으로 셀레니움을 사용하기 위한 방법에 대해 정리하고자 한다. 설치 1. selenium 파이썬의 경우 `pip`가 있으므로 간단하게 설치할 수 있다. 설치 환경은 Pycharm을 사용하고 `venv`를 사용하는 프로젝트를 기준으로 설명하고자 한다. Pycharm 하단에 `Terminal`을 클릭 한 후에, `pip install selenium`을 입력하면 간단히 설치할 수 있다. 2. web-driver 각자 사용하고자 하는 웹에 따라, 웹 드라이버 파일을 프로젝트 폴더 내에 위치시켜야 한다. 또한 웹 드라이버와 현재..
인생은 경험이라는 말과 같이, 취업 준비 또한 경험이 만들어 내는 결과 같다. 더 좋은 기업, 더 좋은 연봉, 더 좋은 복지를 바라기 전에 신입 개발자로서 실무에 필요한 경험들을 쌓아가는 것이 좋다고 생각하고, 나는 안랩 최종 합격을 끝으로 취업 활동을 멈추었다. 상반기와 달라진 점이 있다면 서류 합격률이 올라갔다는 것과, 어떤 식으로 나의 경험을 녹여내면 좋은지에 대한 감이 생겼다는 것이다. 나중에 이 글을 보는 나에게도 도움이 되고, 다른 누군가에게도 도움이 되지 않을까라는 생각을 하며 회고해보고자 한다. 서류 작성, 어떤 기업을 통과했나? 상반기 결과는? 상반기에 서류 작성을 할 때는 마음이 급하기에 기업이 원하는 자소서보다는 얼기설기 말을 맞추어 작성하기 급급하였던 것 같다. 누가 봐도 자소서를 ..
Switch 앞서 작성한 글에서 허브는 `Collision Domain`을 나눌 수 없어, 하나의 포트에서 메시지를 보낼 경우 다른 포트는 지연된다고 설명하였다. 하지만 이와 달리 스위치는 각 포트 별로 Collision Domain을 나눈다. 즉, 포트 별로 통신을 수행할 수 A허브에서 발생하는 지연이 발생하지 않는다. Collision Domain을 위한 기능 Learning 테이블을 이용하여, 각 `Collision Domain`에 어떤 `MAC addr`이 있는지에 대한 정보를 저장한다. 이는 장비의 제원에 따라 테이블 크기가 다르다. Flooding 테이블에 존재하지 않는 `MAC addr`일 경우, 모든 포트로 전송해 일치하는 목적지를 찾도록 한다. Forwarding `MAC addr`이 테..
네트워크를 배운 지 시간이 꽤 흘렀다. 허브, 브리지, 스위치, 라우터와 같은 장비들을 두루 뭉실하게 알고 있어 각 장비에 대해 명확히 정리하고 이해해보고자 한다. Hub 허브는 간단히 말하면, `디바이스와 디바이스를 네트워크로 연결해주는 장비`이다. 허브는 `멀티포트 리피터(Multiport Repeater)`의 기능을 수행하여, 서로 다른 디바이스를 네트워크로 연결할 수 있다. `멀티포트 리피터`는 단어의 의미를 하나씩 생각하면 이해하기 쉽다. 멀티 포트 : 허브 자체에 다수의 포트가 존재한다. 리피터 : 다른 디바이스들로 부터 받은 신호들을 증폭시킨다. 즉, 허브는 `멀티 포트`를 통해 각기 다른 디바이스 들을 물리적으로 연결할 수 있으며, `리피터`를 통해 받은 신호들을 증폭시켜주는 역할을 하는 ..