전체 글 82

[컴퓨터네트워크/Computer Network] 소켓 프로그래밍이란?

이번 글에서는 Application Layer에서 이루어지는 소켓 프로그래밍(Socket Programming)에 대해서 알아보고자 한다.소켓을 이용하여 커뮤니케이션 하는 클라이언트와 서버 애플리케이션을 어떻게 만들 수 있는지에 대해 집중적으로 공부하고자 한다. Socket (소켓)소켓이란 애플리케이션 프로세스와 end-end transport 프로토콜 사이의 문(door)이다.즉, 네트워크상에서 프로세스 간 데이터를 주고받기 위한 실제적인 창구(해당 글에서는 door라고 함)라고 볼 수 있다. Socket programming소켓 프로그래밍에는 두 가지 유형이 있다.TCP : 신뢰할 수 있는 바이트 스트림(byte stream) 지향UDP : 신뢰할 수 없는 데이터그램(datagram)응용 예시:1...

CS/Computer Network 2026.04.12

[소프트웨어공학/Software Engineering] 객체지향과 인터페이스

지난 글에서는 다형성에 대해 예제 코드와 함께 알아보았다.이번에는 객체지향에 관한 마지막 내용을 정리해보고자 한다. 객체지향의 장점1. 비용 절감재사용 가능한 컴포넌트를 활용하여 개발 시간 감소2. 소프트웨어 품질 향상캡슐화 + 다형성 을 통한 높은 모듈화시스템 간 결합도 감소3. 유지보수 용이성변경이 필요한 부분이 제한된다.확장과 수정이 쉽다.4. 설계와 구현의 연결성분석 → 설계 → 코드로 자연스럽게 이어진다.Abstract Class vs. InterfacePure Virtual Functionvirtual int getSalary() const = 0;구현이 없는 함수반드시 subclass에서 구현해야 함Abstract Class (C++)하나 이상의 pure virtual function 포함객..

[소프트웨어공학/Software Engineering] Polymorphism 다형성

지난 글에서 밝혔던 바와 같이 이번 시간에는 polymorphism에 대해서 알아보려고 한다. Polymorphism다형성이라고 하며, 하난의 메시지에 대해 서로 다른 객체가 서로 다른 방식으로 응답할 수 있는 기능이다.메시지를 보내는 객체는 어느 객체가 받을지 알 필요가 없다.one interface, multiple implementations연산 오버라이딩(상속) + 동적 바인딩 을 통해 구현된다.클래스 차원의 encapsulation(캡슐화)를 구현한 구조이다.superclass가 subclass들을 encapsulation 한다.메시지를 보내는 객체는 그 component 중에서 superclass의 interface만 알고 있으면 된다.내부의 상속 구조에 대해 전혀 알 필요가 없다. (누가 누..

[소프트웨어공학/Software Engineering] 객체 지향이란?

이번 글에서는 객체지향의 개념에 대해서 정리하고자 한다.객체지향의 개념에는 Abstraction(추상화), Encapsulation(캡슐화), Inheritance(상속), Polymorphism(다형성) 이 있다, 다형성 같은 경우는 예시 코드와 함께 다음 글에서 살펴보도록 하자. 객체 지향의 등장 배경 및 목적SW modulization (소프트웨어 모듈화)HW의 부품처럼 SW도 모듈화해서 각 모듈이 서로 독립적으로 동작하도록 설계하였다.개발과정전체 기능을 모듈 단위로 분해 → 각 모듈의 인터페이스 정의 → 각 모듈 독립적 개발 → 통합서로 간의 의존성을 획기적으로 감소시킨다.재사용, 유지보수 및 코드 분석이 용이하다.여기서 말하는 module(모듈)은 SW 설계에서 독립적인 기능 및 개발 단위를 말..

[프로그래밍 언어론/Programming Language] flex & bison 으로 파서 만들기

프로그래밍 언어를 처리하는 과정에서 가장 중요한 단계 중 하나는 입력을 분석하는 것이다.이때 입력을 의미 있는 단위로 나누고, 문법에 맞게 해석하는 과정이 필요하다.이벌 글에서는 flex와 bison을 활용한 파서 생성 과정을 단계별로 정리해보고자 한다. 1. flex란 무엇인가?flex는 어휘 분석기(Lexical Analyzer)를 생성하는 도구이다.즉, 입력 문자열을 읽어서 다음과 같은 과정을 수행한다.문자열을 lexeme(어휘 단위)로 분해각 lexeme을 토큰(token)으로 변환예를 들어:input: a = b + 3 → 토큰 단위로 분해ID(a), ASSIGN, ID(b), PLUS, NUMBER(3) 이 과정이 바로 lexical analysis이다. 2. flex 파일 구조 (.l)fle..

[소프트웨어공학/Software Engineering] 애자일 소프트웨어 개발

이번 글에서는 애자일 소프트웨어 개발에 대해서 정리하고자 한다. 우선 다루는 주제는 아래와 같다.Agile development (애자일 개발)Extreme Programming (XP)Aglie vs. Plan-driven올바른 소프트웨어 프로세스 모델 선택애자일 개발배경소프트웨어 프로세스의 과도한 오버헤드에 대한 불만이 있었다.목표과도한 재작업 없이 변화하는 요구사항에 빠르게 대응하여 시스템 전달 시간을 줄이는 것을 목표로 둔다.아래는 Plan-driven과 Agile development 방식에 대한 도식화 그림이다.Agile 개발특징점진적 개발여러 버전/증분으로 개발소규모.빈번한 릴리즈반복적 접근고객 참여팀과의 지속적 협업문서화로 프로세스 오버헤드 감소적용성소규모, 한 장소에 모인 팀맞춤형 개발에..

[소프트웨어공학/Software Engineering] 소프트웨어 프로세스 (2)

이번 글에서는 지난 글에 이어서 프로세스 활동, 소프트웨어 명세, 소프트웨어 설계 및 구현 등에 대해 알아보자. 프로세스 활동기본 프로세스 활동Specification (명세)Design and implementation (설계 및 구현)Validation (Testing) (검증)Evolution (Maintenance) (진화)각 개발 프로세스마다 조작 방식이 다르다.waterfall model (폭포수 모델) : 순차적 조직incremental development (점진적 개발) : 활동이 상호 교차됨Software specification (소프트웨어 명세)시스템이 제공해야 할 서비스와 시스템 운영 및 개발의 제약 조건을 정립하는 과정이다.Requirements engineering proces..

[소프트웨어공학/Software Engineering] 소프트웨어 프로세스 (1)

지난 글에 이어서 소프트웨어 프로세스에 대해서 알아보자. The software process (소프트웨어 프로세스)소프트웨어 프로세스란 소프트웨어에서 시스템을 개발하는 데 필요한 구조화된 활동의 집합이다.다양한 소프트웨어 프로세스가 존재하지만 모두 아래의 내용을 포함하고 있다.Specification (명세)Design and Implementation (Development) (설계 및 구현)Validation (Testing) (검증)Evolution (Maintenance) (진화)소프트웨어 프로세스 모델특정 관점에서 본 프로세스의 표현으로 볼 수 있다.Plan-driven and agile processes (계획 주도 및 애자일 프로세스)Plan-driven processes모든 활동이 사전에..

[소프트웨어공학/Software Engineering] 소프트웨어란?

이번 글에서는 소프트웨어에 대해서 알아보고자 한다. 소프트웨어는 아래의 세 가지를 포함한다.computer programs (컴퓨터 프로그램)system documentation (시스템 문서)user documentation (사용자 문서)소프트웨어 제품은 다음과 같이 나뉜다.Generic (범용 소프트웨어)누구나 구매할 수 있도록 개발된 소프트웨어예) Excel, Word, CAD 소프트웨어 등Customized (맞춤형 소프트웨어)특정 고객의 요구에 맞게 개발된 소프트웨어예) 전자상거래 소프트웨어, 실시간 운송 추적 소프트웨어 등소프트웨어 명세는 범용 소프트웨어 개발자가, 맞춤형 소프트웨어는 고객이 결정한다.(Generic+Customized)예) ERP 소프트웨어그렇다면 소프트웨어 공학이란 무엇일..

[Tableau/태블로] 덤벨 차트 실습하기

이번 글에서는 태블로로 덤벨 차트 만드는 것을 실습해보고자 한다. 실습 하기에 앞서, 덤벨 차트가 무엇인지 알아보자. 덤벨 차트란 두 시점 또는 두 집단 간 값의 차이(Gap)를 시각적으로 표현하는 차트이다.덤벨 차트는 아래의 두 가지 특징을 가지고 있다.양 끝의 원(Circle)과 이를 연결하는 선(Line)으로 구성막대그래프보다 변화량 비교에 효과적덤벨 차트는 언제 사용하면 좋을까? 보통전년 대비 매출 변화정책 시행 전/후 비교남녀 수치 비교지역별 목표 대비 실적 차이 분석에 사용된다. 사용할 데이터는 apartment_final.csv 이며, 덤벨 차트를 만들어보기 위해 임의로 생성된 파일임을 밝힌다. 1. 파일 불러오기먼저 태블로에 csv 파일을 불러온다. 2. 기본 축 구성하기 행(Rows) ..

CS/Data Analysis 2026.03.04