| En

Go 패키지 네이밍 규칙

이 글은 Go 공식 블로그의 “Package Names"와 Go 코드 리뷰 코멘트, 표준 라이브러리 설계 사례를 참고하여 작성했다. Go 패키지 설계 철학 Go의 패키지 시스템은 다른 언어들과 비교하여 독특한 철학을 가지고 있으며, 이는 Go 언어의 설계 원칙인 단순성(Simplicity)과 명확성(Clarity)을 반영한다. Go는 Java처럼 복잡한 패키지 계층 구조나 C++의 네임스페이스 시스템을 채택하지 않았으며, 대신 패키지 경로(Package Path)와 패키지 이름(Package Name)을 분리하여 간결하면서도 표현력 있는 코드를 작성할 수 있도록 설계되었다. Go의 패키지 컨벤션은 디렉토리 구조나 아키텍처 패턴에 대한 엄격한 규칙을 강제하지 않으며, 이는 Go 팀이 의도적으로 선택한 설계 철학이다. Rob Pike와 Ken Thompson을 비롯한 Go 언어 창시자들은 프로그래머에게 유연성을 제공하면서도 명확한 가이드라인을 제시하는 접근 방식을 선호했으며, 이러한 철학은 표준 라이브러리의 패키지 구조에서 실제로 확인할 수 있다. Go의 패키지 컨벤션은 다음과 같은 핵심 원칙들을 중심으로 구성되어 있다. ...

2025년 2월 15일 · 7 분 · 1280 단어 · In-Jun

GitOps 배포 전략 Push vs Pull

GitOps는 Git을 단일 진실 공급원(Single Source of Truth)으로 사용하여 인프라와 애플리케이션의 선언적 상태를 관리하고 자동으로 배포하는 운영 방법론으로, 2017년 Weaveworks의 CEO인 Alexis Richardson이 처음으로 이 용어를 제안하면서 클라우드 네이티브 커뮤니티에 소개되었다. GitOps는 개발자들에게 익숙한 Git 워크플로우(Pull Request, 코드 리뷰, 브랜치 전략 등)를 인프라 운영 영역으로 확장한 것으로, Kubernetes와 같은 선언적 인프라 플랫폼과 결합하여 현대적인 DevOps 실천 방법의 핵심 패러다임으로 자리잡았다. GitOps의 탄생과 핵심 원칙 GitOps란? 모든 인프라 구성과 애플리케이션 설정을 Git 저장소에 선언적으로 정의하고, 이 저장소를 단일 진실 공급원으로 사용하여 실제 시스템 상태를 자동으로 동기화하는 운영 방법론이다. ...

2025년 2월 14일 · 7 분 · 1430 단어 · In-Jun

우분투 OpenSSH 서버 실행

SSH(Secure Shell)는 네트워크 상에서 다른 컴퓨터에 안전하게 접속하여 명령을 실행하고 파일을 전송할 수 있게 해주는 암호화된 네트워크 프로토콜로, 1995년 핀란드 헬싱키 공과대학의 Tatu Ylönen이 텔넷(Telnet)과 rsh(remote shell)의 보안 취약점을 해결하기 위해 개발했으며, 현재는 OpenSSH가 사실상의 표준 구현체로 자리잡아 전 세계 서버 관리의 핵심 도구로 사용되고 있다. Ubuntu에서 SSH 서버를 설치하고 설정하면 로컬 네트워크뿐만 아니라 인터넷을 통해서도 서버에 원격으로 접속하여 관리할 수 있으며, 이 글에서는 OpenSSH 서버의 설치부터 보안 설정까지 전체 과정을 단계별로 설명한다. ...

2024년 8월 14일 · 6 분 · 1170 단어 · In-Jun

우분투 24.04 LTS 고정 IP 설정

고정 IP(Static IP) 주소는 DHCP 서버로부터 동적으로 할당받는 대신 네트워크 관리자가 수동으로 지정하는 IP 주소로, 서버 운영, 원격 접속, 네트워크 서비스 호스팅 등 IP 주소가 변경되지 않아야 하는 환경에서 필수적으로 사용된다. Ubuntu 24.04 LTS에서는 Netplan을 기본 네트워크 구성 도구로 사용하며, NetworkManager를 통한 nmcli와 nmtui 인터페이스도 지원하여 사용자가 선호하는 방식으로 네트워크를 설정할 수 있다. 고정 IP의 필요성 DHCP vs 고정 IP DHCP(Dynamic Host Configuration Protocol)는 네트워크에 연결된 장치에 자동으로 IP 주소를 할당하는 프로토콜로 클라이언트 장치에 편리하지만, 서버나 네트워크 장비는 IP 주소가 변경되면 서비스 연결이 끊어지므로 고정 IP가 필수적이다. ...

2024년 8월 10일 · 5 분 · 971 단어 · In-Jun

OAuth 2.0 프론트엔드와 백엔드 역할

OAuth 2.0은 2012년 IETF(Internet Engineering Task Force)가 RFC 6749로 표준화한 인가(Authorization) 프레임워크로, 사용자가 자신의 자격 증명(비밀번호)을 제3자 애플리케이션에 노출하지 않으면서도 해당 애플리케이션에 자신의 리소스에 대한 제한된 접근 권한을 부여할 수 있도록 설계되었으며, 현재 Google, Facebook, GitHub, Twitter 등 대부분의 주요 인터넷 서비스에서 소셜 로그인과 API 인가의 표준으로 채택되어 사용되고 있다. OAuth의 탄생 배경 OAuth가 해결하는 문제 OAuth 이전에는 사용자가 제3자 애플리케이션에 자신의 아이디와 비밀번호를 직접 제공해야 했는데, 이는 심각한 보안 위험을 초래했다. 사용자는 어떤 애플리케이션이 자신의 자격 증명을 안전하게 관리하는지 알 수 없었고, 접근 권한을 세밀하게 제어하거나 언제든지 철회할 수 있는 방법도 없었다. ...

2024년 8월 3일 · 6 분 · 1129 단어 · In-Jun

네트워크 스위치 종류와 선택

네트워크 스위치는 1990년대 초 이더넷 네트워크의 성능 한계를 극복하기 위해 등장한 장비로, 기존 허브가 모든 포트로 데이터를 브로드캐스트하는 방식의 비효율성을 해결하고 목적지 MAC 주소를 기반으로 프레임을 선택적으로 전달하는 기능을 제공하여 현대 네트워크 인프라의 핵심 구성요소가 되었다. OSI(Open Systems Interconnection) 7계층 모델에서 스위치는 작동하는 계층에 따라 L1부터 L7까지 다양한 종류로 분류되며, 각 계층의 스위치는 해당 계층의 프로토콜 정보를 분석하여 트래픽을 처리하는 고유한 특성과 용도를 가진다. 네트워크 스위치의 역사적 발전 스위치 기술의 탄생 배경 ...

2024년 8월 1일 · 7 분 · 1482 단어 · In-Jun

Pull Request 리뷰 모범 사례

PR(Pull Request) 리뷰는 팀의 코드 품질을 향상시키고 개발자 간 지식을 공유하며 잠재적 버그를 사전에 방지하는 협업의 핵심 활동으로, 2008년 GitHub가 Pull Request 기능을 도입한 이후 오픈소스 프로젝트와 기업 개발 환경에서 표준적인 코드 통합 방식으로 자리잡았다. PR 리뷰는 단순히 코드의 오류를 찾는 과정을 넘어 팀원들이 서로의 코드를 이해하고, 일관된 코드베이스를 유지하며, 집단 지성을 통해 더 나은 설계 결정을 내릴 수 있게 해주는 소프트웨어 개발의 필수적인 품질 관리 활동이다. 코드 리뷰의 역사와 PR 리뷰의 발전 코드 리뷰란? ...

2024년 7월 31일 · 8 분 · 1546 단어 · In-Jun

Kubernetes에서 Helm 사용하기

Helm은 Kubernetes 애플리케이션의 패키징, 배포, 버전 관리를 위한 패키지 관리자로, 2015년 Deis(현재 Microsoft)에서 처음 개발되어 2018년 CNCF(Cloud Native Computing Foundation)에 합류했으며, 현재 Kubernetes 생태계에서 가장 널리 사용되는 배포 도구로 자리잡았다. Helm은 Linux의 apt나 yum, macOS의 Homebrew와 유사한 역할을 Kubernetes에서 수행하며, 복잡한 Kubernetes 매니페스트 파일들을 Chart라는 패키지 형태로 묶어 한 번의 명령으로 설치, 업그레이드, 롤백할 수 있게 하고, 환경별 설정 관리와 의존성 처리를 자동화하여 애플리케이션 배포의 복잡성을 크게 줄여준다. Helm 개요 Helm이란? ...

2024년 7월 28일 · 6 분 · 1244 단어 · In-Jun

우분투 24.04 쿠버네티스 단일 노드 클러스터 설치

쿠버네티스(Kubernetes)는 2014년 Google이 오픈소스로 공개한 컨테이너 오케스트레이션 플랫폼으로, 현재 CNCF(Cloud Native Computing Foundation)에서 관리하며 컨테이너화된 애플리케이션의 배포, 확장, 관리를 자동화하는 데 사실상의 표준으로 자리잡았다. 프로덕션 환경에서는 고가용성을 위해 다중 노드 클러스터를 구성하지만, 개발, 테스트, 학습 목적으로는 단일 노드 클러스터도 충분히 활용할 수 있으며 이 글에서는 Ubuntu 24.04 LTS에서 kubeadm을 사용하여 단일 노드 쿠버네티스 클러스터를 구축하는 전체 과정을 다룬다. 쿠버네티스 아키텍처 개요 쿠버네티스 클러스터 구성요소 쿠버네티스 클러스터는 컨트롤 플레인(Control Plane)과 워커 노드(Worker Node)로 구성되며, 컨트롤 플레인은 클러스터의 상태를 관리하고 워커 노드는 실제 컨테이너 워크로드를 실행한다. ...

2024년 7월 27일 · 5 분 · 953 단어 · In-Jun

Git Stash로 변경사항 임시 저장하기

Git Stash의 개념과 역사 Git stash는 2007년 Git 1.5.3 버전에서 처음 도입된 기능으로, Working Directory의 변경 사항(수정된 tracked 파일과 staged 상태의 변경)을 커밋하지 않고 스택(stack) 구조의 임시 저장소에 저장했다가 나중에 다시 적용할 수 있는 메커니즘이며, 작업 중인 브랜치에서 급하게 다른 브랜치로 전환해야 하거나 원격 저장소의 변경 사항을 가져와야 할 때 현재 진행 중인 작업을 커밋하기에는 애매한 상태일 경우 유용하게 사용된다. 커밋하지 않은 변경 사항이 있는 상태에서 브랜치를 전환하려고 하면 Git은 다음과 같은 에러 메시지를 표시하며 전환을 거부하는데, 이는 현재 Working Directory의 변경 사항이 체크아웃하려는 브랜치의 파일과 충돌할 수 있기 때문이다. ...

2024년 7월 26일 · 4 분 · 768 단어 · In-Jun
[email protected]