콘텐츠로 이동

최근 업데이트

[Computer Network] IPv6

Series: Computer Network

0. 컴퓨터 네트워크 개요

1. ARP protocol

2. IPv4

3. IPv6

1. 개요 — IPv6의 등장 배경과 필요성

IPv4는 32비트 주소 체계로 약 43억 개의 주소를 제공한다. 인터넷의 폭발적인 성장과 IoT 기기의 확산으로 이 주소 공간은 사실상 고갈되었고, CIDR이나 NAT 같은 기술로 수명을 연장해 왔지만 근본적인 해결책은 아니었다.

이 문제를 해결하기 위해 설계된 것이 IPv6(Internet Protocol version 6)이다. IPv6는 128비트 주소 체계를 사용하여 약 3.4×10³⁸개의 주소를 제공하며, 주소 공간 확장 외에도 헤더 단순화, 확장 헤더 체계, 자동 주소 설정 등 다양한 개선을 포함한다.

이 포스트는 기존 Computer Network 시리즈의 IPv4 포스트와 연결되는 내용이다. IPv4 헤더 구조를 먼저 살펴보고 오면 비교가 더 수월하다.


[Algorithm] 코딩테스트 준비를 위한 알고리즘 핵심 유형 정리(Python 예제 문제 풀이 포함)

개요

코딩테스트 문제는 무한히 다양해 보이지만, 실제로는 10여 가지 핵심 알고리즘 유형으로 대부분 분류할 수 있다. 유형을 미리 파악하고 있으면 새로운 문제를 보았을 때 접근 전략을 빠르게 세울 수 있다.

이 글에서는 코딩테스트에서 자주 출제되는 핵심 알고리즘 유형을 정리하고, 각 유형별로 프로그래머스와 LeetCode의 대표 문제를 풀어본다. 풀이는 모두 Python으로 작성하며, 코드 아래에 별도 설명을 붙인다.

이전 글 '[Computer Science] 코딩 테스트 준비 - 알고리즘 및 자료구조 기초'에서 배열, 스택, 큐, 트리 등 기초 자료구조를 다루었다. 이번 글은 그 후속편으로, 실전 문제 풀이에 필요한 알고리즘 유형에 집중하며 이 글만으로도 독립적으로 이해할 수 있도록 각 유형의 핵심 개념부터 설명한다.

생소하거나 헷갈리는 Python 문법들

이 포스팅은 생소한 프로그래밍 언어 문법 시리즈의 첫 번째 편(Python)이다. 이후 Java, C 편이 이어질 예정이다.

도입 — Python 문법의 '간결함' 뒤에 숨은 함정들

Python을 5년 가까이 다뤄오면서 처음 보는 문법이 있었다. 정보처리기사 실기 시험을 세 번 치르면서 Python, C, Java의 정확한 문법 공부가 절실했는데, 친구들과 대화하다가 for ~ else ~ 문법이라는 게 Python에 존재한다는 것을 알게 됐다. 5년 동안 Python을 다루면서도 한 번도 본 적이 없는 문법이었기에 아직도 모르는 게 있을 수 있다는 사실이 적잖이 충격이었다. 그래서 기본기부터 다시 다져보자는 마음으로 이 글을 작성하게 됐다.

thumbnail

나는 아직 Python 알못 이었던 것...

정보처리기사 실기처럼 인터프리터 없이 코드의 출력을 예측해야 하는 상황에서는, 문법의 정확한 동작을 모르면 답을 맞힐 수가 없다. 이 글에서는 Python 3.8~3.13 범위에서 자주 혼동되거나 생소한 문법들을 하나씩 짚어보며, 각 문법마다 "이 코드의 출력은?" 형태의 예제를 먼저 보여준 뒤 정답과 함께 왜 그런 결과가 나오는지 설명한다.


가변 기본 인자(Mutable Default Argument)의 함정

Q. 다음 코드의 출력은?

def append_to(element, target=[]):
    target.append(element)
    return target

print(append_to(1))
print(append_to(2))
print(append_to(3))
정답 보기

[Python] 백준 1436번 - 영화감독 숌

문제 개요

분류

브루트포스 알고리즘

문제 설명

666은 종말을 나타내는 수라고 한다. 따라서, 많은 블록버스터 영화에서는 666이 들어간 제목을 많이 사용한다. 영화감독 숌은 세상의 종말 이라는 시리즈 영화의 감독이다. 조지 루카스는 스타워즈를 만들 때, 스타워즈 1, 스타워즈 2, 스타워즈 3, 스타워즈 4, 스타워즈 5, 스타워즈 6과 같이 이름을 지었고, 피터 잭슨은 반지의 제왕을 만들 때, 반지의 제왕 1, 반지의 제왕 2, 반지의 제왕 3과 같이 영화 제목을 지었다. 하지만 숌은 자신이 조지 루카스와 피터 잭슨을 뛰어넘는다는 것을 보여주기 위해서 영화 제목을 좀 다르게 만들기로 했다.

종말의 수란 어떤 수에 6이 적어도 3개 이상 연속으로 들어가는 수를 말한다. 제일 작은 종말의 수는 666이고, 그 다음으로 큰 수는 1666, 2666, 3666, .... 이다. 따라서, 숌은 첫 번째 영화의 제목은 "세상의 종말 666", 두 번째 영화의 제목은 "세상의 종말 1666"와 같이 이름을 지을 것이다. 일반화해서 생각하면, N번째 영화의 제목은 세상의 종말 (N번째로 작은 종말의 수) 와 같다.

숌이 만든 N번째 영화의 제목에 들어간 수를 출력하는 프로그램을 작성하시오. 숌은 이 시리즈를 항상 차례대로 만들고, 다른 영화는 만들지 않는다.

입력

첫째 줄에 N이 주어진다. N은 10,000보다 작거나 같은 자연수이다.

출력

첫째 줄에 N번째 영화의 제목에 들어간 수를 출력한다.

풀이

[Project] FastAPI-fastkit 개발기

2025년 3월 1일, 내가 만든 오픈소스 프로젝트 FastAPI-fastkit의 버전 1.0.0 릴리즈를 진행했다. 이 포스팅을 작성하는 26년 1월 현재는 버전 1.2.0이 배포되어 있는 상태이고 pypi 패키지 다운로드 횟수 12k를 달성한 프로젝트가 되었다.

now

프로젝트 저장소 링크 : https://github.com/bnbong/FastAPI-fastkit

이 프로젝트는 FastAPI 프로젝트를 쉽게 시작할 수 있도록 돕는 프로젝트이다. 일종의 boilerplate 기능이 포함되어 있고 CLI 명령어로 쉽게 FastAPI 프로젝트를 확장, 추가, 관리 할 수 있도록 만들었다.

프로젝트 탄생 배경

24년 여름 인턴을 끝내고 난 후, 나와 관심사가 맞는 인턴 동기 친구와 함께 클라우드 관련 오픈소스에 기여를 해보기로 마음을 먹었다.

특히 OpenStack의 기여를 하고 싶어서 OpenStack의 여러 오픈소스 (ironic, nova, neutron 등)을 탐색하면서 공부를 해보았는데, 프로젝트 규모가 너무 크다보니 개개인이 공부해서 부족하거나 문제 있는 부분을 고쳐서 기여하는건 굉장히 굉장히 어려운 일이라는 것을 알게 되었다.

그래서 우리는 방향성을 조금 수정해서 OpenStack에 국한하는 것이 아닌 내가 관심 있는 분야의 오픈소스에 기여를 해보는 것으로 방향을 잡았다.


그렇게 새로운 방향성으로 여러 오픈소스를 탐색하던 와중, 나는 내가 이전부터 지금까지 자주 애용하는 Backend 프레임워크인 FastAPI의 버전 업데이트 노트를 발견하게 되었다.

해당 업데이트 노트는 버전 0.111.0 노트인데, 이 노트에서 확인할 수 있던 특이사항 중 하나는 새로운 패키지인 'fastapi-cli' 가 추가되었다는 것이었다.

버전 노트와 관련 커뮤니티 반응을 보건데, 이 라이브러리는 FastAPI 개발자 tiangolo가 독단으로 추가한 라이브러리로 보였다.