본문 바로가기

Computer Science19

네트워크 참고면접을 위한 CS 전공지식 노트 https://www.gilbut.co.kr/book/view?bookcode=BN003386 네트워크컴퓨터 등의 장치들이 통신 기술을 이용하여 구축하는 연결망을 지칭하는 용어 네트워크 기초네트워크란 노드와 링크가 서로 연결되어 있으며, 리소스를 공유하는 집합노드란 네트워크 장치, 링크란 유무선 연결 처리량, 지연 시간처리량(throughput)은 링크 내에서 성공적으로 전달된 데이터의 양. 보통 얼마큼의 트래픽을 처리했는지를 나타냄bps(bits per second)를 단위로 사용.트래픽은 특정 시점에 링크 내에 흐르는 데이터의 양지연 시간(latency)은 요청이 처리되는 시간 네트워크 토폴로지네트워크 토폴로지(network topology)란 노드와 링크가 배치되.. 2025. 4. 29.
디자인 패턴, 프로그래밍 패러다임 참고면접을 위한 CS 전공지식 노트: https://www.gilbut.co.kr/book/view?bookcode=BN003386 디자인 패턴, Design Pattern프로그램을 설계할 때 발생하는 특정 문제점을 해결하기 위한 특정 패턴 싱글톤 패턴, Singleton Pattern하나의 클래스는 하나의 인스턴스만 가지는 패턴하나의 클래스를 기반으로 단 하나의 인스턴스를 만들어 이를 기반한 로직을 만들 때 사용하나의 인스턴스를 다른 모듈들이 공유해 사용하기 때문에 인스턴스 생성 비용이 줄어들지만 의존성이 높아짐 싱글톤 패턴 단점TDD에서 사용하기 어려움TDD는 단위 테스트를 진행하는 데, 단위 테스트는 각자 독립적이어야 한다.하지만 싱글톤 패턴은 하나의 인스턴스를 가지므로 각 테스트마다 독립적인 인스.. 2025. 4. 27.
팀네이버 컨퍼런스 DAN 24, 20년된 Naver Cafe 서비스가 모듈화로 진화 하기 그후 1년 원문(안드로이드): https://tv.naver.com/v/67446433  네이버 카페 아키텍처사용했던 것: mvp현재: mvvm + clean architecture 모듈appsharedrepository, domain, utilmodelntt, apijava어노테이션 프로세스 2개UI 접근 방식데이터 바인딩, 버터나이프 아키텍처 목표오래된 기술 스택 버리기유지보수 어려움뷰 모델기능이 많아서 데이터 흐름 파악 어려움모범 사례일관된 설계로 코드 해석 쉽게 구글이 말하는 모듈화장점코드의 재사용성 증가기능별 코드 분리로 관리 용이성 향상독립적인 테스트 환경 제공전략UI, 도메인, 데이터 레이어제일 강조하고 싶은 거빌드 시간모듈화로 각각의 모듈 개별 빌드를 통해 빠른 결과 빌드를 언제 하나배포TDD개발빌드.. 2025. 2. 1.
객체 지향의 SOLID 원칙 원: Bob Martin SOLID Principles of Object Oriented and Agile Design(https://www.youtube.com/watch?v=TMuno5RZNeE)/* 영상에선 리스코프 치환 이야기하다 강의 종료 */ 우리는 나쁜 코드가 프로그램을 느리게 만든다는 것을 알고 있다.그렇다면 우리는 왜 프로그램을 느리게 만드는 나쁜 코드를 작성하는가?시간에 쫒겨서 나쁜 코드를 작성하게 된다.그렇다면 나쁜 코드란 무엇인가.나쁜 코드 -> 설명해줘야 함이게 무슨 코드지? 이걸 수정하면 어떤 일이 일어나는 거지? -> 나쁜 코드좋은 코드 -> 읽어보면 앎음, 그렇군. 이렇게 동작하는 건가? -> 좋은 코드경직성코드를 수정할 때, 일관성을 유지하기 위해 다른 코드를 대량으로 수정.. 2025. 1. 17.
Single source of truth 단일 진실 소스, Single source of truth 시스템 전체에서 일관된 데이터를 보장하기 위해 사용되는 하나의 데이터 원본이를 통해 데이터의 무결성과 일관성을 유지한다.예를 들어, SwiftUI에서 @State, @ObservedObject를 사용해 뷰와 데이터 모델 간의 일관성을 유지한다. import SwiftUIclass ViewModel: ObservableObject { @Published var text: String = "Hello, World!"}struct ContentView: View { @ObservedObject var viewModel = ViewModel() var body: some View { VStack { Tex.. 2024. 8. 22.
Glue logic 접착제 논리, Glue logic시스템의 여러 구성 요소를 연결하고 조정하는 역할을 하는 코드.이를 통해 서로 독립적인 구성 요소들이 함께 작동하도록 만든다.예를 들어, 여러 데이터 소스에서 데이터를 가져와 하나의 화면에 표시하는 SwiftUI 뷰가 있다. 2024. 8. 22.
JSON JSONJavaScript Object Notation(JSON)은 Javascript 객체 문법으로 구조화된 데이터를 표현하기 위한 문자 기반의 표준 포맷 JSON(JavaScript Object Notation)은 경량의 DATA-교환 형식이다.이 형식은 사람이 읽고 쓰기에 용이하며, 기계가 분석하고 생성함에도 용이하다.JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999의 일부에 토대를 두고 있다.JSON은 완벽하게 언어로부터 독립적이지만 C-family 언어C, C++, C#, Java, JavaScript, Perl, Python 그 외 다수의 프로그래머들에게 친숙한 관습을 사용하는 텍스트 형식이다.이러한 속.. 2024. 8. 16.
Client Server 모델 Client-Server, Client-Server model클라이언트-서버 모델은 리소스 또는 서비스 공급자인 서버와 서비스 요청자인 클라이언트 간 서비스 자원의 작업을 분리해 주는 분산 애플리케이션 구조이자 네트워크 아키텍처를 나타낸다.종종 클라이언트와 서버는 별도의 하드웨어에서 컴퓨터 네트워크를 통해 통신하지만, 클라이언트와 서버는 모두 같은 시스템에 상주할 수 있다.클라이언트-서버 모델을 사용하는 컴퓨터 응용 프로그램의 예로는 이메일, 네트워크 인쇄 및 월드 와이드 웹이 있습니다. 클라이언트 (Client)네트워크를 이용하여 서버(Server)측에 서비스 요청을 의뢰하는 측ex) 웹 브라우저, 데스크톱 프로그램, 모바일 앱, 다른 서버에 요청을 보내는 서버 등클라이언트는 보통 자원을 공유하지 않지.. 2024. 8. 16.
Echo Server Echo ServerEcho Server-Client는 클라이언트가 서버로 메시지를 전송하면, 서버는 동일한 메시지를 클라이언트에게 다시 전송하는 것  Server 작동 방식서버 소켓을 생성하고 특정 포트에 바인딩클라이언트의 연결을 기다린다.클라이언트와 연결되면, 데이터를 읽고 동일한 데이터를 클라이언트에게 다시 전송한다.연결 종료 Client 작동 방식서버의 IP 주소와 포트를 사용하여 소켓을 생성하고 서버에 연결서버에 메시지를 전송서버로부터 응답을 받는다.연결 종료 실행 방식EchoServer 실행EchoClient 실행서버에 메시지 전송서버 콘솔에서 클라이언트로부터 받은 메시지 확인하고, 클라이언트 콘솔에서 서버로부터 받은 응답을 확인 참고TCP Echo 서버와 클라이언트: Socket 통신 이해하기 2024. 8. 15.
패킷 통신, TCP 패킷 통신패킷 교환 (Packet Switching) 방식은 미리 이동 경로를 정하지 않고, 데이터를 패킷 (Packet)이라는 작은 단위로 나누어 다중 노드로 구성된 네트워크를 통해 전송하는 개념이다. 전송될 데이터는 네트워크를 통해 전송되기 전에 패킷으로 쪼개지고, 각 패킷에는 고유 번호가 지정되어 네트워크를 거쳐 최종 수신지에 도착했을 때, 번호 순서로 결합되어 데이터로 완성된다.각 패킷은 전송 당시 가장 효율적인 경로를 설정하여 최종 목적지까지 이동하게 된다.회선 교환 방식과 다르게 상황에 따라 매번 다른 경로로 갈 수 있도록 하여 효율성을 강조이게 가능하려면 출발지부터 목적지까지 가는 과정에서 거치는 모든 중간 노드들이 상황에 따라 이동 경로를 안내해야 한다.즉, 패킷을 수신한 중간 노드가 패킷.. 2024. 8. 14.
SQL, Database SQLSQL, Structured Query Language관계형 데이터베이스에 정보를 저장하고, 처리하기 위한 프로그래밍 언어이다.관계형 데이터베이스는 정보를 표 형식으로 저장하며, 행과 열은 다양한 데이터 속성과 데이터 값 간의 다양한 관계를 나타낸다.SQL 문을 사용하여 데이터베이스에서 정보를 저장, 업데이트, 제거, 검색할 수 있으며 혹은 데이터베이스 성능을 유지 관리하거나 최적화하는 데 SQL을 사용할 수 있다. SQL 명령개발자가 관계형 데이터베이스에 저장된 데이터를 조작하는 데 사용하는 특정 키워드 또는 SQL 문 DDL, 데이터 정의 언어데이터베이스 구조를 설계하는 SQL 명령DDL을 사용하여 비즈니스 요구 사항에 따라 데이터베이스 객체를 만들고 수정한다.예를 들어, CREATE 명령을 사.. 2024. 8. 12.
HTTP HTTP, HyperText Transfer Protocol은 W3 상에서 정보를 주고받을 수 있는 프로토콜이다. 주로 HTML 문서를 주고받는 데 쓰인다. 클라이언트와 서버 사이에 이루어지는 요청/응답 프로토콜로 예를 들어 클라이언트인 웹 브라우저가 HTTP를 통하여 서버로부터 웹페이지(HTML), 그림 등을 요청하면 서버는 이 요청에 응답하여 필요한 정보를 해당 사용자에게 전달하게 된다. 메시지요청 메시지: 요청 내용과 헤더 필드는 로 끝나야 한다. 즉, 캐리지 리턴과 라인피드가 와야 한다. 빈 줄은 로 구성되며 그 외 공백이 존재해선 안된다.요청 내용헤더빈 줄기타 메시지요청 메시지 요약표HTTP 메소드요청 Body응답 Body안전멱등(Idempotent)캐시 가능GET선택 사항예예예예HEAD선택 사.. 2024. 8. 12.
VCS, Git VCS소프트웨어 팀이 시간이 지남에 따라 소스 코드의 변경 사항을 관리하는 데 도움이 되는 소프트웨어 도구  CVCS, DVCS중앙 집중식 버전 관리 시스템, CVCS(Centralized Version Control System)프로젝트 파일이 서버 한 곳에만 위치해 있어 파일의 버전이 일관적이고 관리자는 서버의 파일만 신경 쓰면 되므로 관리하기 편하다. 커밋 시에는 수정사항이 바로 서버로 올라가게 된다. 분산 버전 관리 시스템, DVCS(Distributed Version Control System)프로젝트의 전체 파일이 참여자들의 각 컴퓨터와 서버에 분산되어 저장된다. 파일을 서버와 각 참여자들의 컴퓨터에 분산하여 저장할 수 있기 때문에 문제가 생길 시 다른 컴퓨터 혹은 서버의 파일을 통해 복구할 .. 2024. 8. 12.
결합도, 응집도 강한 결합, 느슨한 결합결합도  모듈과 모듈 간의 상호 결합 정도강한 결합어떤 객체를 다른 클래스에서 생성하여 사용하였을 때, 해당 객체에 변경을 가하면 해당 객체를 생성한 다른 클래스에서도 똑같이 변경을 해줘야 하는 상태느슨한 결합약한 결합은 강한 결합과 반대로 객체를 변경해도 다른 곳에 아무런 영향이 주지 않는 것  응집도응집도는 모듈에 포함된 내부 요소들이 하나의 책임/ 목적을 위해 연결되어 있는 연관된 정도       참고[설계 용어] 응집도(Cohesion)와 결합도(Coupling) 2024. 8. 12.
Observer 패턴, Publisher-Subscriber 패턴 Observer 패턴개념옵저버 패턴은 객체(subject)의 상태 변화를 관찰하는 관찰자들, 즉 옵저버들의 목록을 객체에 등록하여 상태 변화가 있을 때마다 메서드 등을 통해 객체가 직접 목록의 각 옵저버에게 통지하도록 하는 디자인 패턴. 분산 이벤트 핸들링 시스템을 구현하는 데 사용한다.  Publisher-Subscriber 패턴개념발행-구독 패턴은 비동기 메시징 패러다임이다.발신자의 메시지는 특별한 수신자가 정해져 있지 않다. But 정해진 범주에 따라, 각 범주에 대한 구독을 신청한 수신자에게 전달수신자는 발행자에 대한 지식이 없어도 원하는 메시지만을 수신 가능.다이나믹한 네트워크 토폴로지와 높은 확장성 허용  옵저버 패턴 vs 구독-발행 패턴     참고[WebFlux] publisher(발행) .. 2024. 8. 12.
Event Bus 패턴 Event Bus 이벤트 버스 패턴이란?확장성이 뛰어난 반응성 애플리케이션을 구현하기 위한 분산 비동기 아키텍처 패턴 이벤트 버스 패턴 개념이벤트를 비동기적으로 전달하고 처리네트워킹의 Bus Topology 동작 방식과 유사 이벤트 버스 패턴 장단점장점익명성에 비동기라는 점느슨한 결합(loose coupling), 관심가의 분리(separation of concerns) 원칙 유지하면서 컴포넌트 간 통신 가능개발 복잡도 간소화규모가 크고 고도로 분산화된 시스템에 효과적단점메모리 수요 증가구독자가 이벤트 데이터에 대한 권한이 없어도 모든 데이터를 복제따라서, 구독자 필터링을 통해 데이터 관리 해야 됨데이터 누락연결 오류나 기타 발생 가능한 결함은 신경 쓰지 않음구현 또는 메시지 큐 설루션의 설정을 통해 변.. 2024. 8. 12.
함수형 프로그래밍 불변성, 부작용 없는 변수순수 함수에서 말하는 불변성이란 “상태를 변경하지 않는 것”으로 메모리에 저장된 값을 변경하지 말라는 의미이다. (Swift에서 상수 let을 사용하여 불변성을 확립하는 것이 일반적이다.) 불변성의 장점불변성을 유지하는 것은 무분별한 상태의 변경을 막을 수 있으므로 코드의 안정성과 예측 가능성을 높여준다.불변성을 적극적으로 활용하면 코드의 유지 보수성과 확장성을 향상할 수 있다.상태의 변경을 추적하기 쉽다.  참조 투명성상태에 의존하지 않는 걸 의미하는 것으로 “어떤 임의의 시점”에 주어진 “어떤 임의의 입력”에 대해 동일한 결과를 요구하는 것(f(x) == f(x) // true)Date()와 같은 함수는 상태(날짜)에 의존하여 결과가 달라지므로 투명하지 않다.외부 상태에 의존.. 2024. 8. 12.
아이작의 번제로 알아보는 객체지향 프로그래밍 객체지향객체 지향 프로그래밍은 객체 지향적 설계를 통해 프로그램을 유연하고 변경에 용이하게 만드는 것이다.예를 들어, 컴퓨터 부품을 교체할 때 해당 부품만 교체하고 나머지는 건드리지 않아도 되는 것 소프트웨어를 설계할 때 객체 지향의 원리를 잘 적용해 둔 프로그램은 각각의 부품들이 각자 독립적인 역할을 가지기 때문에 코드의 변경을 최소화하고, 유지보수하는데 용이하다.나아가 코드의 재사용을 통해 반복을 최소화하고, 코드를 간결하게 표현할 수 있다. 또한 객체 지향 프로그래밍은 우리가 경험하는 세계를 프로그램 설계에 반영하기 위한 노력을 통해 발전해와서 인간 친화적이고 직관적인 코드 작성에 유리하다. 객체 지향 프로그래밍의 4가지 특징은 추상화, 상속, 다형성, 캡슐화로 객체 지향적 설계의 이점을 살릴 수 .. 2024. 8. 12.
프로세스 메모리 모델 프로세스 메모리프로세스는 일반적으로 Stack, Heap, Data, Text(Code) 영역으로 구성되어 있다.Stack: 함수 호출, 로컬 변수 등 임시 데이터가 저장되는 영역Heap: 코드에서 동적으로 생성되는 데이터가 저장되는 영역Data: 전역 변수 혹은 초기화된 데이터가 저장되는 영역Text: 컴파일된 소스 코드가 저장되는 영역  Stack 영역프로그램이 자동으로 사용하는 메모리 영역이다.함수 호출과 관계되는 지역 혹은 매개 변수가 저장되며 함수 호출 시 생성되고, 끝나면 반환된다.스택 크기는 각 프로세스마다 할당되지만 프로세스가 메모리에 로드 될 때 고정되어 런타임 시 스택 사이즈를 바꿀 수 없다.명령 실행 시 자동으로 증가 혹은 감소되기 때문에 보통 메모리의 마지막 번지에 지정된다. Hea.. 2024. 7. 22.