오블완
-
byte는 왜 사용하나요? (java, golang)Back-End/Language 2024. 11. 19. 22:06
Java와 Golang 모두에서 byte 데이터를 자주 사용합니다. 다만 두 언어의 설계 철학과 활용 사례에 따라 byte의 사용 빈도와 방식이 조금 다릅니다. 이를 간략히 정리하겠습니다.Java에서 byte 사용Java는 byte를 많이 사용하는 언어 중 하나입니다. 이는 주로 Java의 저수준 I/O 처리, 네트워크 통신, 데이터 직렬화와 같은 작업에서 필요하기 때문입니다.주요 사용 사례1. 파일 입출력Java의 InputStream과 OutputStream은 데이터를 byte 단위로 처리합니다.텍스트 데이터뿐만 아니라 이미지, 영상, 바이너리 파일을 처리할 때도 필수적입니다.FileInputStream fis = new FileInputStream("example.txt");byte[] buffer..
-
golang: godoc 철학과 사용방법Back-End/Golang 2024. 11. 18. 22:27
Go 언어는 문서화를 매우 중요하게 생각합니다. 좋은 문서는 소프트웨어를 더 접근 가능하고 유지보수하기 쉽게 만들어줍니다. 이를 위해 Go는 코드와 문서를 밀접하게 연계시키는 도구인 godoc을 제공합니다. 이번 글에서는 godoc의 철학과 사용 방법, 그리고 예시를 통해 godoc에 대해 자세히 알아보겠습니다.godoc의 철학godoc의 핵심 철학은 문서는 코드와 함께 발전해야 한다는 것입니다. 이를 위해 godoc은 Go 소스 코드와 그 주석을 파싱하여 HTML이나 텍스트 형식의 문서를 생성합니다. 이러한 접근 방식은 다음과 같은 장점을 제공합니다:코드와 문서의 일치성: 문서가 코드와 동일한 저장소에 있기 때문에, 코드 변경 시 문서도 함께 업데이트됩니다.간단한 주석 규칙: 특별한 문법이나 마크업 없..
-
자료구조: 그래프(Graph)Algorithm & Data Structure/DataStructure 2024. 11. 17. 21:24
1. 그래프란 무엇인가?그래프는 정점(Vertex)과 간선(Edge)으로 구성된 데이터 구조입니다. 각 정점은 데이터를 나타내며, 간선은 정점 간의 관계 또는 연결을 나타냅니다. 그래프는 네트워크 구조를 표현하는 데 매우 적합합니다. 예를 들어, 소셜 네트워크, 도로 지도, 인터넷의 링크 구조 등이 있습니다.그래프의 구성 요소정점(Vertex):데이터를 저장하는 노드입니다.예: 도시, 사람, 웹 페이지 등.간선(Edge):정점 간의 관계를 나타냅니다.방향이 있는 경우 유방향(Directed), 없는 경우 무방향(Undirected)입니다.가중치(Weight):간선에 추가 정보(예: 거리, 비용)를 저장하는 값입니다.2. 그래프의 종류무방향 그래프(Undirected Graph):간선에 방향이 없습니다.예..
-
golang: 고언어의 철학(Clear is better than clever)Back-End/Golang 2024. 11. 16. 22:17
"Clear is better than clever"("명확성은 영리함보다 우수하다)는 Go 언어의 설계 철학 중 하나로, 코드의 가독성과 명확성을 우선시해야 한다는 원칙을 뜻합니다. 이는 Go 언어 설계자들이 Go 언어의 단순하고 직관적인 사용성을 강조하면서, 복잡하거나 지나치게 "영리한" 코드 작성을 피하자는 철학입니다.세부 설명Clear (명확성):코드를 읽는 사람이 쉽게 이해할 수 있는 코드를 작성하는 것을 지향합니다.코드가 직관적이어야 팀원이나 후임자가 코드를 읽고 수정하거나 유지보수하기 쉽습니다."이 코드는 무엇을 하는지 바로 알 수 있는가?"를 기준으로 작성.Clever (영리함):지나치게 복잡하거나 고도의 기술적인 구현(트릭)을 사용한 코드.한 번에 많은 일을 처리하거나, 너무 축약된 표현..
-
리눅스(Linux) 용량 확인Computer Science/Linux 2024. 11. 15. 14:26
리눅스에서 디스크 용량을 확인하고 원인을 파악하는 방법은 여러 가지가 있습니다. 특히 로그로 인해 용량이 가득 차는 경우가 많으므로, 특정 위치를 빠르게 찾아 정리하거나 관리하는 것이 중요합니다. 아래 다양한 방법을 정리했습니다.1. 기본 디스크 사용량 확인 (df)df 명령어를 사용하면 디스크 사용량을 간단하게 확인할 수 있습니다.사용법df -h-h 옵션: 사람이 읽기 쉬운 형식(human-readable)으로 출력.주요 출력 필드:Filesystem: 파일 시스템 이름.Used: 사용된 용량.Available: 남은 용량.Mounted on: 마운트된 위치.예시Filesystem Size Used Avail Use% Mounted on/dev/sda1 50G 45G 5G ..
-
시스템 디자인: 소셜 네트워킹 서비스(SNS) - 고수준 설계(3)Computer Science 2024. 11. 14. 20:59
3. 고수준 설계 (High-Level Design) 시스템 디자인의 다음 단계는 요구 사항과 용량 추정을 바탕으로 고수준 설계(High-Level Design)를 수립하는 것입니다. 이 단계에서는 시스템의 전체적인 아키텍처를 정의하고, 주요 구성 요소와 그들 간의 상호 작용을 명확히 합니다. 특히 대규모의 소셜 네트워킹 서비스(SNS)를 설계할 때는 확장성, 가용성, 성능 등을 고려한 견고한 아키텍처가 필수적입니다.3.1 아키텍처 개요고수준 설계에서는 시스템의 주요 구성 요소와 그들 간의 관계를 파악하기 위해 전체 아키텍처 다이어그램을 작성합니다. 아래는 주요 구성 요소를 포함한 SNS 시스템의 고수준 아키텍처입니다.주요 구성 요소:클라이언트 애플리케이션웹 브라우저모바일 앱 (iOS, Android)로..
-
시스템 디자인: 소셜 네트워킹 서비스(SNS) - 용량 추정 및 확장성 고려(2)Computer Science 2024. 11. 13. 22:29
2. 용량 추정 및 확장성 고려 (Capacity Estimation and Scalability Considerations)시스템 디자인에서 용량 추정(Capacity Estimation)은 매우 중요한 단계입니다. 이는 시스템이 현재와 미래에 처리해야 할 데이터 및 트래픽의 양을 예측하고, 이에 따라 적절한 아키텍처와 인프라를 설계하는 데 필수적입니다. 특히 소셜 네트워킹 서비스(SNS)와 같이 대규모 사용자와 방대한 데이터를 다루는 시스템에서는 정확한 용량 추정이 시스템의 성능과 안정성을 보장하는 핵심 요소입니다.2.1 사용자 및 트래픽 예상2.1.1 일일 활성 사용자 수 (Daily Active Users, DAU)예상 DAU: 1,000,000명시스템을 설계할 때, 일일 활성 사용자 수(DAU)..
-
시스템 디자인: 소셜 네트워킹 서비스(SNS) - 요구 사항 명확화(1)Computer Science 2024. 11. 12. 21:35
(1) 요구 사항 명확화 (Requirement Clarification)시스템 디자인의 첫 단계는 요구 사항을 명확히 정의하는 것입니다. 이는 시스템이 어떤 기능을 제공해야 하는지, 그리고 어떤 품질 기준을 만족해야 하는지를 명확히 함으로써 이후의 설계 및 개발 과정을 효과적으로 이끌 수 있게 합니다. 특히 소셜 네트워킹 서비스(SNS)와 같이 복잡한 시스템에서는 요구 사항을 세밀하게 분석하는 것이 중요합니다.이번 섹션에서는 SNS 시스템의 기능적 요구 사항과 비기능적 요구 사항을 상세히 살펴보겠습니다.기능적 요구 사항 (Functional Requirements)기능적 요구 사항은 시스템이 제공해야 하는 구체적인 기능과 서비스를 의미합니다. 아래는 SNS에서 제공해야 할 주요 기능들을 상세하게 분류한..