반응형
반응형
반응형

1. 시스템 프로그래밍이란?

시스템 프로그래밍은 컴퓨터 시스템을 활용하는 소프트웨어를 개발하는 것을 의미한다.

시스템의 범위는 하드웨어 + 운영체제로 구성된다.

시스템 프로그래밍의 특징은 Windows 같은 OS의 자체 기능을 최대한 활용.

시스템 프로그래밍은 모든 응용 프로그램에 포함되는 요소이다.

 

2. 컴퓨터 시스템의 주요 구성 요소

컴퓨터 시스템은 크게 아래와 같이 구성됨.

  • 컴퓨터 하드웨어 구조
    • CPU
    • 캐시
  • 운영체제(OS) 구조
    • 메인 메모리 -> 메모리 관리 기법
    • 하드디스크 -> 파일 I/O

 

3. 컴퓨터 하드웨어 구성

컴퓨터 하드웨어는 아래와 같은 구조로 이루어져 있다.

각 구성 요소의 역할은 다음과 같다.

  • CPU : 중앙처리장치. 컴퓨터 전체를 총괄하며, 연산이 이루어지는 핵심 장치.
  • 메인 메모리 : RAM. 프로그램 실행 방식을 이해하는 데 핵심적인 요소.
  • 입출력 버스 : 데이터 송/수신 경로.

 

4. CPU

CPU는 내부적으로 아래 4가지로 구성됨.

  • ALU (Arithmetic Logic Unit) : 실제 연산을 진행하는 장치.
  • 컨트롤 유닛 (Control Unit) : CPU 전체를 총괄.
  • 레지스터 : CPU 내부의 초고속 임시 저장 공간.
  • 버스 인터페이스 : 외부와 데이터를 주고받는 통로.

 

5. 클럭 신호 (Clock Pulse)

클럭 신호는 CPU를 비롯한 컴퓨터 각 요소의 동작 타이밍을 결정하는 신호.

클럭이 높아지면 연산 수가 늘어나지만, 동시에 발열도 증가해 시스템이 불안정해질 수 있음.

ex) 오버클럭 : 클럭을 강제로 높여 성능을 끌어올리는 방식. 발열과 불안정의 위험이 있음.

동기 요소들은 가장 낮은 클럭 속도에 맞춰 동기화해야 하며, 클럭이 너무 높으면 발열로 인해 시스템이 불안정해질 수 있음.

 

 

6. 프로그램 실행 과정

소스 코드가 실행 파일이 되기까지의 과정은 아래와 같음.

  • 전처리기 : #으로 시작하는 지시자(ex. #include)를 해석하고 치환 작업 수행.
  • 컴파일러 : 고급 언어(C, C++ 등)를 CPU가 이해할 수 있는 어셈블리어로 번역.
  • 어셈블러 : 어셈블리어를 바이너리 코드(0과 1)로 변환.
  • 링커 : 바이너리 코드와 라이브러리를 연결하여 최종 실행 파일 생성.

 

7. Stored Program Concept

프로그램은 실행 전에 메모리에 적재(Fetch) 된 후, CPU가 명령어를 하나씩 가져와 처리하는 방식으로 동작함.

CPU의 명령어 처리 과정은 아래 3단계로 이루어짐.

  1. Fetch : CPU가 메모리에서 명령어를 가져옴.
  2. Decode : 명령어를 해석하고 컨트롤 유닛이 제어 신호를 생성.
  3. Execution : ALU가 실제 연산을 수행.

이 과정이 반복되면서 프로그램이 실행됨.

 

 

 

8. 데이터 이동의 기반, 버스 시스템

버스는 CPU와 메모리, 입출력 장치 사이에서 데이터를 주고받는 통로.

버스는 역할에 따라 3가지로 나뉨.

  • 데이터 버스 : 실제 데이터를 이동시키는 버스.
  • 어드레스 버스 : 메모리 주소를 이동시키는 버스.
  • 컨트롤 버스 : 컨트롤 신호를 이동시키는 버스.

 

 

반응형
반응형

Mutex

멀티 스레드 환경에서는 여러 스레드가 같은 데이터를 동시에 접근할 수 있다.
이 경우 데이터 값이 예상과 다르게 변경되는 문제가 발생할 수 있다.

이러한 문제를 방지하기 위해 사용하는 것이 Mutex(Mutual Exclusion) 이다.

Mutex는 여러 스레드가 공유 자원에 접근할 때
한 번에 하나의 스레드만 접근하도록 제한하는 동기화 도구이다.

 

1. 멀티 스레드에서 발생하는 문제

멀티 스레드 환경에서는 다음과 같은 상황이 발생할 수 있다.

예를 들어 하나의 변수를 여러 스레드가 증가시키는 상황을 생각해보자.

 

counter = 0

Thread1 → counter++
Thread2 → counter++

이런 상황에서 두 개의 스레드가 동시에 실행이 된고 예상 출력 결과는

Counter = 2 이지만 Counter = 1이 될 수도 있다.

이러한 현상을 경쟁 상태(Race Condition) 이라고 한다.

 

 

2. Race Condition 발생 원리

counter++ 연산은 하나의 작업처럼 보이지만 실제로는 여러 단계로 이루어진다.

 

1. counter 값을 읽는다

             ㅣ
2. 값을 증가시킨다

             ㅣ
3. 다시 저장한다

 

두 스레드가 동시에 실행되면 다음과 같은 상황이 발생할 수 있다.

Thread1 → counter 읽기 : 0
Thread2 → counter 읽기 : 0
Thread1 → 1 저장
Thread2 → 1 저장

 

결과 : counter = 1

 

이처럼 여러 스레드가 동시에 같은 데이터를 수정하면 값이 꼬일 수 있다.

이 문제를 해결하기 위해 등장한 것이 Mutex 이다.

 

3. Mutex 개념

Mutex는 Mutual Exclusion (상호 배제) 의 약자이다.

즉 한 번에 하나의 스레드만 공유 자원에 접근 가능 하도록 하는 역할이다.

 

구조를 간단히 표현하면 다음과 같다.

Thread1 → lock
                   공유 데이터 접근
                   unlock

Thread2 → lock 대기

 

Mutex를 사용하면 순서로 실행되기 때문에 데이터 충돌이 발생하지 않는다.

 

4. Mutex 예제 코드

예제 코드는 C++ 로 작성하였다.

C++에서는 std::mutex 클래스를 통해 Mutex를 사용할 수 있다.

#include <iostream>
#include <thread>
#include <mutex>

using namespace std;

int counter = 0;
mutex mtx;

void Increase()
{
    for(int i = 0; i < 10000; i++)
    {
        mtx.lock();  // Mutex를 잠그는 함수 -> 이 시점부터 다른 스레드가 접근 못함.
        counter++;
        mtx.unlock();  // Mutex를 해제하는 함수 -> 이 시점부터 다른 스레드가 접근 가능해짐.
    }
}

int main()
{
    // 스레드 생성
    thread t1(Increase);
    thread t2(Increase);

    t1.join();
    t2.join();

    cout << "Counter : " << counter << endl;

    return 0;
}

 

반응형

'Computer Science' 카테고리의 다른 글

멀티 스레드 (Multi Thread)  (0) 2026.03.08
반응형



 

1. 프로세스와 스레드

멀티 스레드를 이해하기 위해 프로세스와 스레드의 차이를 명확하게 구분 지어야 한다.

 

  • 1.1. 프로세스 (Process)

프로세스는 실행중인 프로그램을 의미.

각 프로세스는 독립적인 메모리 공간을 갖음.

 

  • 1.2 스레드 (Thread)

스레드는 프로세스 내부에서 실행되는 작업 단위.

하나의 프로세스 안에서 여러개의 스레드가 존재하면 동시에 여러 작업을 처리할 수 있음.

 

 

2. 멀티 스레드란?

멀티 스레드는 하나의 프로그램 내부에서 여러 작업을 동시에 수행하는 기술.

 

일반적으로 프로그램은 하나의 작업 흐름으로 실행된다.

이것을 싱글 스레드라고 하는데, 이런 프로그램에서는 작업을 순차적으로 진행한다.

ex) task1 -> task2 -> task3

 

하지만 멀티 스레드를 사용하면 프로그램에서 여러 작업을 동시에 병렬 진행한다.

ex) task1 진행

      task2 진행

      task3 진행

      

 

3. 멀티 스레드 사용 이유

CPU는 여러 개의 코어를 가지고 있다.

멀티 스레드를 사용하면 여러 코어를 활용할 수 있기 때문에 처리 속도가 빨라질 수 있다. 

 

ex) 싱글 스레드

task1(1s) -> task2(1s) -> task3(1s) : 총 3초

 

ex) 멀티 스레드 

task1(1s)
task1(1s)       : 총 약 1초
task1(1s)

 

또한 프로그램 응답성을 향상 시킬 수 있다.

UI 프로그램에서 데이터 처리, 파일 저장, DB조회, 네트워크 통신 등의 작업이 오래 걸리면 순간적으로 

해당 작업이 진행되는 동안 프로그램이 멈춘 것 처럼 보일 수 있다.

이때 별도의 스레드에서 실행하면 프로그램이 부드럽게 동작한다.

 

 

4. 예제 코드

예제 코드는 C++로 작성하였다.

C++11부터는 std::thread 라이브러리를 제공한다. 하여 <thread>헤더 필요

 

  • 4.1. 기본 스레드 생성 예제
#include <iostream>
#include <thread>

using namespace std;

void PrintTask()
{
    for(int i = 0; i < 5; i++)
    {
        cout << "Worker Thread : " << i << endl;
    }
}

int main()
{
    // 스레드 생성
    thread worker(PrintTask);
	
    // 스레드가 끝날때까지 기다리는 함수
    worker.join();

    cout << "P/G End" << endl;

    return 0;
}

 

  • 4.2 여러 스레드 생성 예제
#include <iostream>
#include <thread>

using namespace std;

void TaskA()
{
    for(int i = 0; i < 5; i++)
    {
        cout << "Task A : " << i << endl;
    }
}

void TaskB()
{
    for(int i = 0; i < 5; i++)
    {
        cout << "Task B : " << i << endl;
    }
}

int main()
{
    thread t1(TaskA);
    thread t2(TaskB);

    t1.join();
    t2.join();

    cout << "P/G End" << endl;

    return 0;
}

 

반응형

'Computer Science' 카테고리의 다른 글

뮤텍스 (Mutex)  (0) 2026.03.08
반응형

 

 

 

 

★ 중요도 ★

A ->     출제 빈도 높음

B ->     

C ->    

 

 

1. DBMS

데이터베이스 관리 시스템의 약자로 데이터베이스를 관리해 주는 소프트웨어

 

-DBMS 필수 기능 3가지

  • 정의 기능 : 데이터의 타입, 구조에 대한 정의, 방식, 제약조건 명시 기능
  • 조작 기능 : 데이터 검색, 갱신, 삽입, 삭제 등을 위해 인터페이스 수단을 제공 하는 기능
  • 제어 기능 : 데이터의 무결성 보안, 권한 검사, 병행제어 제어 기능

 

2. 스키마

스키마는 데이터베이스의 구조와 제약조거너에 관한 전반적인 명세를 기술

  • 외부 스키마 : 사용자 or 응용프로그래머들가 각 개인입장에서 필요한 데이터베이스의 논리적 구조 정의
  • 개념 스키마 : DB의 전체적인 논리적 구조, 데이터를 종합한 조직 전체의 DB
  • 내부 스키마 : 물리적 저장장치에서 본 DB구조, 실제 저장 레코드 형식, 내부 레코드의 물리적 순서 등 나타냄

 

3. 데이터베이스 설계 순서

요구조건 분석 -> 개념적 설계 -> 논리적 설계 -> 물리적 설계 -> 구현

 

4. 개념적 설계  (현실 -> 추상적 개념)

현실 세계에 대한 인식을 추상적으로 표현하는 과정

 

5. 논리적 설계  (현실 자료 -> 논리적 구조)

현실 세계에서 발생하는 자료를 물리적 저장장치에 저장할 수 있도록 변환하기 위해 논리적 자료 구조로 변환 시키는 과정

 

6. 물리적 설계  (논리적 구조 data -> 물리적 구조 data)

논리적 설계에서 논리적 구조로 표현된 데이터를 디스크 등의 물리적 저장장치에 저장할 수 있는 물리적 구조의 데이터로 변환하는 과정

 

7. 데이터 모델

현실 세계의 정보들을 컴퓨터에 표현하기위해 단순화, 추상화 하여 체계적으로 표현한 개념적 모형

  • 구조 : 논리적으로 표현된 개체 타입들 간의 관계, 데이터 구조 및 정적 성질 표현
  • 연산 : DB에 저장된 실제 데이터를 처리하는 작업에 대한 명세로서 DB를 조작하는 기본 도구
  • 제약 조건 : DB에 저장될 수 있는 실제 데이터의 논리적인 제약 조건

8. E-R 다이어그램

  • 사각형 : 개체 타입
  • 마름모 : 관계타입
  • 타원 : 속성
  • 이중 타원 : 다중값 속성
  • 선 : 개체타입과 속성을 연결

9. 관계형 데이터베이스의 릴레이션 구조

릴레이션 구조

  • 릴레이션 인스턴스 : 데이터 개체를 구성하고 있는 속성들에 데이터 타입이 정의되어 구체적인 데이터 값을 가진 것
  • 튜플 : 릴레이션을 구성하는 각각의 행 (튜플 수 : 카디널리티 or 기수)
  • 속성 : DB를 구성하는 가장 작은 논리적 단위 (속성의 수 : 디그리 or 차수)
  • 도메인 : 하나의 애트리뷰트가 취할 수 있는 같은 타입의 원자값들의 집합 (ex : 성별 -> 남, 여)

10. 후보키

릴레이션을 구성하는 속성들 중에 튜플을 유일하게 식별하기 위한 속성들의 부분집합, 유일성과 최소성 모두 만족

  • 유일성 : 하나의 키 값으로 하나의 튜플만을 유일하게 식별할 수 있어야 함
  • 최소성  : 키를 구성하는 속성 하나를 제거하면 유일하게 식별할 수 없도록 꼭 필요한 속성으로 구성

11. 기본키

후보키 중에서 특별히 선정된 주키, 중복값 가질 수 없음, 유일하게 구별할 수 있는 속성, NULL값 X

 

12. 대체키 (보조키)

후보키가 둘 이상일 때, 기본키를 제외한 나머지 후보키

 

13. 슈퍼키

한 릴레이션 내에 있는 속성들의 집합으로 구성된 키

 

14. 외래키

다른 릴레이션의 기본키를 참조하는 속성 or 속성 집합

 

15. 무결성 

DB에 저장된 데이터 값과 현실세계의 실제 값이 일치하는 정확성

  • 개체 무결성 : 기본키를 구성하는 어떤 속성도 NULL이나 중복값을 가질 수 없다는 규정
  • 참조 무결성 : 외래키 값은 NULL이거나 참조 릴레이션의 기본키 값과 동일 해야함

16. 관계대수

원하는 정보와 그 정보를 검색하기 위해서 어떻게 유도하는가를 기술하는 절차적 언어, 피연산자와 연산 결과 모두 릴레이션

 

17. 순수 관계 연산자

  • Select : 선택 조건을 만족하는 튜플의 부분집합을 구하여 새로운 릴레이션을 만드는 연산 , 수평연산, (시그마)로 표시
  • Project : 속성값만을 추출하여 새로운 릴레이션을 만드는 연산, 수직연산, (파이)로 표시
  • Join : 공통 속성을 중신으로 두 릴레이션을 하나로 합쳐 새로운 릴레이션 만드는 연산, 결과 : 교차곱
  • Division : X ) Y인 R(X)와 S(Y)가 있을 때, R의 속성이  S의 속성값을 모두 가진 튜플에서 S가 가진 속성을 제외한 속성만을 구하는 연산

 

 

 

18. 일반 집합 연산자

  • 합집합 : 두 릴레이션에 존재하는 튜플의 합집합 구하는 연산 , 합집합의 카디널리티는 두 릴레이션 카디널리티 합보다 다 크지 않음
  • 교집합 : 두 릴레이션에 존재하는 튜플의 교집합을 구하는 연산, 교집합의 카디널리티는 적은 릴레이션의 카디널리티 보다 크지 않음
  • 차집합 : 두 릴레이션에 존재하는 튜플의 차집합을 구하는 연산,
  • 교차곱 : 튜플들의 순서쌍을 구하는 연산, 두 릴레이션의 카디널리티를 곱한 값과 같다.

 

 

반응형
반응형

 

 

1. 이더캣(EtherCat)이란

EtherCAT(Ethernet for Control Automation Technology)은 BECKHOFF에서 개발한 실시간 이더넷 기반 산업용 네트워크 프로토콜이다.
PLC(Programmable Logic Controller), 서보 드라이브, 센서, I/O 모듈 등의 실시간 제어에 최적화되어 있다.

 

 

 

 

2. 이더캣(EtherCat)의 주요 특징

① 고속 데이터 전송

  • 표준 이더넷 프레임을 수정하여 초고속 실시간 통신을 지원
  • 마이크로초(μs) 단위의 응답 속도, ns(나노초) 단위의 동기화
  • 1000개 이상의 I/O 포인트를 30μs 이내에 처리 가능

 

처리 효율성 (이더넷 프레임 가공 방식)

  • 일반적인 이더넷 방식과 다르게 각 노드(I/O 모듈, 서보 드라이브)가 프레임을 수신하면서 데이터 변경 후 전달
  • "Processing on the fly" 방식 → 별도의 처리 지연 없음

 

마스터-슬레이브 구조

  • 마스터(PC, PLC 등)가 모든 슬레이브(I/O, 서보 드라이브 등)에 데이터를 전송
  • 슬레이브는 데이터를 수정하고 즉시 전달, 별도의 요청 없이 응답 가능
    (일반적인 이더넷 프로토콜과 다른 점)

 

네트워크 토폴로지 유연성

  • 라인(직렬), 스타, 트리, 링형 구조 지원
  • 다양한 산업 환경에 맞춰 네트워크 구성 가능

 

⑤ 표준 이더넷 하드웨어 사용 가능

  • 별도의 전용 컨트롤러 없이 일반적인 이더넷 카드(NIC)로 EtherCAT 구현 가능
  • 추가적인 전용 스위치 필요 없음

 

⑥ 실시간성 (Distributed Clocks 기능 지원)

  • EtherCAT 네트워크 내 모든 슬레이브는 마이크로초(ns) 단위로 동기화 가능
  • 분산 클록을 활용하여 모션 컨트롤, 로봇, CNC 등 정밀 동기화 필요한 환경에서 사용됨

 

 

 

 

 

3. 비교

특징 EtherCAT PROFIBUS Modbus TCP
속도 초고속 (수백 μs) 중간 (ms) 느림 (수십 ms)
통신 방식 마스터-슬레이브 마스터-슬레이브 클라이언트-서버
동기화 방식 Distributed Clocks (μs 단위) 중간 정도 없음
구성 유연성 매우 유연함 제한적 제한적
하드웨어 요구사항 일반 이더넷 카드 사용 가능 전용 컨트롤러 필요 일반 TCP/IP
데이터 처리량 대량의 I/O 데이터 처리 가능 적음 적음 

 

 

EtherCAT은 속도, 실시간성, 처리량 측면에서 압도적인 성능을 제공하며, 자동화 및 모션 컨트롤 분야에서 널리 사용됨.

 

 

 

 

 

4. EtherCAT 통신의 핵심 개념

① 프레임 내 데이터 즉시 처리

  • therCAT 노드(I/O, 서보 드라이브 등)는 데이터를 받자마자 즉시 처리 후 다음 노드로 전달
  • 기존 방식은 데이터 수신 → 응답 순으로 처리하지만, EtherCAT은 데이터 프레임을 수정 후 전달
  • 1개의 프레임으로 여러 노드가 동시에 데이터 처리 가능

 

② Distributed Clocks (분산 클럭)

  • 각 슬레이브 노드는 마스터와 μs 단위로 동기화
  • 정밀한 모션 컨트롤이 필요한 로봇, CNC 머신에 최적
  • 슬레이브마다 개별 클럭을 가지며, 자동으로 보정

 

③ 네트워크 토폴로지 (Topology)

EtherCAT Ring Topology network

 

EtherCAT은 다양한 방식으로 네트워크 구성이 가능

  • 라인(Serial)
  • 스타(Star)
  • 트리(Tree)
  • 링(Ring, 중복 방지 가능)

 

 

 

5. EtherCAT이 사용되는 대표적인 산업 분야

① 산업 자동화 (PLC, I/O 모듈, 센서 제어)

② 로봇 및 모션 컨트롤 (다관절 로봇, CNC, 서보 모터 제어)

③ 반도체 제조 장비

④ 자동차 생산 라인 및 테스트 장비

 

 

 

 

 

6. 예제 코드 - 간단한 I/O 제어(C#)

① Input 읽기

/// <summary>
/// 특정 디지털 입력 값을 읽어오는 함수
/// </summary>
/// <param name="inputNumber">읽고자 하는 입력 신호 번호</param>
/// <returns>입력 신호 상태 (true = ON, false = OFF)</returns>
public bool GetInput(int inputNumber)
{
    short byteAddr = (short)(inputNumber / 8);  // 입력 신호를 바이트 주소로 변환
    short bitPos = (short)(inputNumber % 8);    // 해당 바이트 내 특정 비트 위치

    byte recvData = new byte();
    int result = Wmxapi.wmxIo.GetInBit((short)(InputAddr + byteAddr), bitPos, ref recvData);

    if (result == 0) return ((recvData) > 0);  // 1이면 true, 0이면 false 반환
    else throw new Exception(WMX3ApiCLR.WMX3Api.ErrorToString(result)); // 예외 처리
}

 

✔ EtherCAT의 비트 단위 입력 신호 처리 방식을 보여줌
✔ I/O 주소를 바이트 단위로 변환하고 특정 비트만 읽음
✔ EtherCAT의 빠른 신호 감지와 예외 처리를 수행

 

 

 Output 읽기

/// <summary>
/// 특정 디지털 출력을 설정하는 함수
/// </summary>
/// <param name="outputNumber">출력 번호</param>
/// <param name="state">출력 상태 (true = ON, false = OFF)</param>
/// <returns>설정 성공 여부</returns>
public bool SetOutput(int outputNumber, bool state)
{
    short byteAddr = (short)(outputNumber / 8);  // 출력 신호를 바이트 주소로 변환
    short bitPos = (short)(outputNumber % 8);    // 해당 바이트 내 특정 비트 위치

    int retryCount = 0;

    Retry:
    int result = Wmxapi.wmxIo.SetOutBit((short)(OutputAddr + byteAddr), bitPos, Convert.ToByte(state));

    if (result == 0)
    {
        if (Convert.ToBoolean(GetOutput(outputNumber)) != state) // 설정 확인
        {
            retryCount++;
            if (retryCount > 5) throw new Exception("Failed to set output."); // 5회 이상 실패 시 예외 발생
            goto Retry;
        }
        return true;
    }
    else
    {
        System.Threading.Thread.Sleep(10);  // 재시도 대기
    }

    return false;
}

 

✔ EtherCAT의 실시간 출력 제어 방식을 보여줌
✔ 출력 실패 시 5번까지 재시도하여 안정적인 신호 전송
✔ 비트 단위로 I/O 설정하여 빠른 응답 제공

 

 

 

 

 

반응형
반응형

 

★ 중요도 ★

A ->     출제 빈도 높음

B ->     

C ->    

 

 

1. 소프트웨어 생명 주기

소프트웨어를 개발하기 위한 설계, 운용, 유지보수 등의 과정을 각 단계별로 나눈 것. 활동 결과에 대한 산출물.

 

2. 나선형 모형

나선을 따라 돌듯이 여러 번의 소프트웨어 개발 과정을 거쳐 점진적으로 완벽한 최종 소프트 웨어를 개발하는 모형 (보헴 제안)

순서 : 계획수립 -> 위험 분석 -> 개발 및 검증 -> 고객 평가

 

3. 폭포수 모형

가장 오래되고 가장 폭넓게 사용된 전통적인 소프트웨어 생명주기 모형,

이전 단계로 돌아갈 수 X, 각 단계를 확실히 매듭짓고 다음 단계를 진행

 

4. 애자일 모형

민첩한, 기민한 이라는 의미로, 시제품을 끊임없이 제작하며  유연하게 대응 할 수 있도록 주기를 반복하며 개발하는 모형

 

5. 애자일 개발 4가지 핵심 가치

  • 프로세스와 도구보다는 개인과 상호작용에 중점
  • 방대한 문서보다는 실행되는 SW에 중점
  • 계약 협상보다는 고객과의 협업
  • 계획 보다는 변화에 대응

 

6. 소프트웨어 공학

소프트웨어의 위기를 극복하기 위한 방안으로 연구된 학문

 

7. 스크럼 개발 프로세스

  • 스프린트 계획 회의 : 이번 스프린트에서 수행할 작업을 대상으로 단기 일정을 수립하는 회의
  • 스프린트 : 실제 개발 작업을 진행하는 과정으로 2~4주 기간 내 진행
  • 일일 스크럼 회의 : 매일 진행 상황을 점검 회의
  • 스프린트 검토 회의 : 부분 또는 전체 완성 제품이 요구사항에 부합하는지 테스팅 회의
  • 스프린트 회고 : 규칙 준수 여부 및 개선할 점을 확인 및 기록

 

8. XP

수시로 발생하는 고객의 요구사항에 유연하게 대응하기 위해 고객의 참여와 개발 과정의 반복을 극대화하여 개발 생산성을 향상시키는 방법.

XP의 핵심 가치 5가지 : 

  • 의사소통
  • 단순성
  • 용기
  • 존중
  • 피드백

 

9. XP의 주요 실천 방법

  • 짝 프로그래밍 : 다른 사람과 함께 프로그래밍을 수행하여 책임을 공동으로 나눔
  • 공동 코드 소유 : 개발 코드에 대한 권한, 책임을 공동 소유
  • 테스트 주도 개발 : 코드 작성 전 테스트 케이스를 먼저 작성하여 무엇을 해야할지 정확히 파악
  • 전체 팀 : 모든 구성원은 각자 역할이 있고 책임을 가져야 함
  • 계속적인 통합 : 모듈 단위로 나눠 개발된 코드들을 지속적으로 통합
  • 리팩토링 : 기능 변경 없이 시스템을 재구성 -> 프로그램을 이해하기 쉽게 수정하여 빠르게 개발
  • 소규모 릴리즈 : 릴리즈 기간을 짧게 반복하여 고객의 요구 변화에 신속히 대응

 

10. 데이터 베이스 관리 시스템 (DBMS)

사용자와 데이터베이스 사이에서 사용자의 요구에 따라 정보를 생성해주고 관리해주는 소프트웨어

요구사항 식별 시 고려사항 :

  • 가용성
  • 성능
  • 기술 지원
  • 상호 호환성
  • 구축 비용

 

11. 기능 요구사항

시스템이 무엇을 하는지 어떤 기능을 하는지 관련된 요구사항

 

12. 비기능 요구사항

품질이나 제약사항과 관련된 요구사항 (보안, 성능 ...)

 

13. 요구사항 명세 기법

  • 정형 명세 기법 : 수학적 기반
  • 비정형 명세 기법 : 일반 명사, 동사 자연어 기반

 

14. 요구사항 개발 프로세스

요구사항을 체계적으로 도출 분석 구조화 활동

개발 순서 : 도출 -> 분석 -> 명세 -> 확인

 

15. 요구사항 분석

개발 대상에 대한 사용자의 요구사항을 이해하고 문서화 하는 활동

 

16. 자료 흐름도 DFD

자료의 흐름 및 변환 과정과 기능을 도형 중심으로 기술

자료흐름 그래프, 버블 차트 ..

 

17. 자료흐름도의 구성 요소

  • 프로세스
  • 자료 흐름
  • 자료 저장소
  • 단말

 

18. 자료 사전 DD

자료 흐름도에 있는 자료를 더 자세히 정의하고 기록한 것

데이터의 데이터, 메타 데이터 ..

  •  = : 자료 정의
  •  + : 자료 연결
  •  () : 자료 생략
  •  [] : 자료 선택 
  •  {} : 자료 반복
  •  ** : 자료의 설명 (주석)

 

19. SADT

SoftTech 사에서 개발 시스템 정의, 소프트웨어 요구사항 분석, 시스템 소프트웨어 설계를 위한 도구

 

20. HIPO (Hierarchy Input Process Output)

설계, 문서화 기법으로 시스템 실행 과정인 입력 처리 출력의 기능을 표현한 것

하향식 소프트웨어 개발을 위한 문서화 도구

 

21. UML (Unified Modeling Language)

시스템 개발 과정에서 의사소통이 원활하게 이루어지도록 표준화한 대표적인 객체지향 모델링 언어

구성 요소 :

  • 사물
  • 관계
  • 다이어그램

 

22. 연관 관계

두 개 이상의 사물이 서로 관련되어 있는 관계

 

23. 집합 관계

하나의 사물이 다른 사물에 포함되어 있는 관계

 

24. 포함 관계

포함하는 사물의 변화가 포함되는 사물에게 영향을 미치는 관계

 

25. 일반화 관계

하나의 사물이 다른 사물에 비해 더 일반적이거나 구체적인 관계

 

26. 의존 관계

한 사물의 명세가 바뀌면 다른 사물에 영향을 주며, 서로에게 영향을 주는 짧은 시간 동안만 연관을 유지하는 관계

등급이 높으면 할인율 적용, 낮으면 적용X

 

27. 실체화 관계

사물이 할 수 있거나 해야하는 기능으로, 서로에게 그룹화 할 수 있는 관계, 행위로 그룹

한 객체가 다른 객체에게 오퍼레이션을 수행할 수 있도록 지정하는 의미적 관계 

 

28. 다이어그램

사물과 관계를 도형으로 표현한 것

 

29. 구조적 다이어그램의 종류

  • 클래스 다이어그램
  • 객체 다이어그램 : 럼바우 기법에서 객체 모델링에 활용
  • 컴포넌트 다이어그램
  • 배치 다이어그램
  • 복합체 구조 다이어그램
  • 패키지 다이어그램

 

30. 행위 다이어그램의 종류

  • 유스케이스 다이어그램 (사용자Actor와 사용사례UseCase로 구성)
  • 순차 다이어그램
  • 커뮤니케이션 다이어그램
  • 상태 다이어그램 : 럼바우 기법에서 동적 모델링에 활용
  • 활동 다이어그램
  • 상호작용 개요 다이어그램
  • 타이밍 다이어그램

 

31. 스테레오 타입

UML에서 표현하는 기본 기능 외에 추가적인 기능을 표현하는 것

<<기술>>

반응형
반응형

 

 

 

1. 주요 기능

1. 데이터 저장

 

2.체크박스 기능

 

3. 달력 사용

 

4. chat-GPT api 상담 서비스

 

2. 구조 (XML 파일)

 

   1. activity_main.xml

LinearLayout 으로 정렬되어 있고, 메인 액티비티로 위에 앱바에는 목록과 로고가 있다.

그 아래에는 오늘의 목표 텍스트박스와 배경이미지를 넣었고, 그 아래의 +,-버튼을 누르게 되면 목표를 추가 할 수 있도록 자바 파일에 정의했다.

 

   2. activity_calendar.xml

가장위에는 toolbarxml파일을 불러와 앱바를 넣었고, 캘린더가 있고, 그 아래에는 캘린더의 날짜를 불러온다, 그 아래에는 날짜에 기입된 일정들을 출력한다. 데이터가 있으면 수정, 삭제 버튼이 뜨고, 데이터가 없다면 저장 버튼이 보인다.

 

   3. activity_diet_management.xml

가장위에는 toolbarxml파일을 불러와 앱바를 넣었고, 식단관리 액티비티로 마찬가지로 +,-버튼을 사용하여 시간, 식단, 양을 입력하여 체크박스로 달성을 관리할 수 있다.

 

   4. activity_exercise_management.xml

가장위에는 toolbarxml파일을 불러와 앱바를 넣었고, 운동관리 액티비티로, 마찬가지로 +,-버튼을 사용하여 운동, 세트수, 횟수를 입력하여 체크박스로 운동 달성을 관리할 수 있다.

 

   5. activity_consultation.xml

가장위에는 toolbarxml파일을 불러와 앱바를 넣었고, 가운데 공간에는 항목을 고르고 추천 버튼을 누를 시 chat-GPT의 추천 답변이 보인다.

 

   6. toolbar.xml

앱바를 정의해둔 것으로 가져다 쓰인다.

 

3. 구조 (JAVA 파일)

 

   1. MainActivity.java

메인 화면의 자바 파일로 일단 왼쪽 상단의 목록 버튼을 누르면 4가지 목록이 보이도록 리스트를 만들어 주었고, 누르면 보이게, 다시 누르면 보이지 않도록 구현하였다, 또한 +,-버튼을 누르면 오늘의 목표를 추가addNewGoal() 하고, 뒤에 있는 항목을 삭제removeLastGoal() 할 수 있도록 구현하였다. 또한 saveGoals()로 데이터를 저장할 수 있도록 하였고, 저장된 데이터를 loadGoals()로 불러오게 하였다.

 

   2. Calender.java

두번째 액티비티의 자바 파일로 캘린더의 날짜를 불러와 텍스트 박스로 년, , 일로 나누어 출력하게 하였고, 해당 날짜에 일정을 기입하여 데이터가 저장되어 보일 수 있도록 구현하였다. 또한, 이미 데이터가 있으면 수정, 삭제 버튼이 보이도록 하였다.

또한 데이터가 저장되도록 만들었다.

 

   3. DietManagementActivity.java

일단 +,-버튼을 눌러 식단을 추가, 수정, 삭제를 할 수 있고, 체크박스도 구현을 하였다. save할 때 데이터를 저장시키고 remove를 하면 저장되었던 것이 삭제시키고 저장을 한다. 데이터가 저장되기 때문에 프로그램이 종료되어도 유지된다.

 

   4. ExerciseManagementActivity.java

일단 +,-버튼을 눌러 운동, 세트, 횟수를 추가, 수정, 삭제를 할 수 있고, 체크박스도 구현을 하였다. 물론 save할 때 데이터를 저장시키고 remove를 하면 저장되었던 것이 삭제시키고 저장을 한다. 데이터를 로드할 때는 loadExercises()함수로 로드를 시킨다. 데이터가 저장되기 때문에 프로그램이 종료되어도 유지된다.

 

   5. ConsultationActivity.java + network 패키지 + model 패키지

network는 주로 GPT api를 연결시켜 받아오는 역할을 하고, 그 받아온 메시지를 model 패키지에서 처리하도록 구현하였다. ConsultationActivity.java에서는 전체적으로 api를 연결시킬 때 필요한 api key를 넘겨주어 연결을 시키고 받아온 값을 화면에 띄우도록 해두었다. 또한 항목을 고를 수 있도록 구현하였다.

 

 

4.  어플 화면 이미지

   1. 메인 화면

오늘의 대표적인 목표를 정해두고 추가하고 삭제하며 목표를 달성 할때마다 체크박스에 표시하도록 해두었고, 데이터가 저장되도록 구현.

 

   2. 위에 메뉴목록 버튼을 누르면 메뉴가 나열된다.

 

   3. 캘린더 액티비티

날짜마다 눌러서 일정을 기록할 수 있다.

 

   4. 내용에 일정을 치고 저장버튼을 누르면 ->

 

   5. 데이터가 저장이 된다.

 

   6. 식단관리 액티비티

오늘의 식단을 시간, 식단, g수까지 기입하며 추가 삭제하여 식단관리를 할 수 있고, 이루면 체크박스에 표시 할 수도 있다.

 

   7. 운동 관리 액티비티

식단관리와 비슷하고, 운동종목, 세트수, 횟수를 추가 삭제하여 관리할 수 있다.

 

   8. 운동 상담 액티비티(Chat-GPT api사용)

목록에 있는 부위를 선택하고 운동 추천을 누르면 chatGPT 에게 질문이 들어가 GPT가 해당운동 부위 추천을 해주게된다.

항상 다른 답을 해준다.

 

   9. 운동 상담 액티비티(Chat-GPT api사용) - 질문 화면

GPT에게 어깨운동을 물어본 화면이다.

 

 

5. 어플 코드 깃허브 링크

ChannyJIN/HealthManagerApp

반응형

'안드로이드' 카테고리의 다른 글

던전 게임 어플 (3)  (1) 2025.01.05
던전 게임 어플 (2)  (1) 2025.01.05
던전 게임 어플 (1)  (3) 2025.01.05
반응형

1. 게임 실행 영상

동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.

 

 

2.  코드 링크

코드는 아래 깃허브에 링크에 있다.

ChannyJIN/DungeonGame: Dungeon Game

반응형

'안드로이드' 카테고리의 다른 글

ChatGPT api를 활용한 헬스 관리 어플  (7) 2025.01.05
던전 게임 어플 (2)  (1) 2025.01.05
던전 게임 어플 (1)  (3) 2025.01.05

+ Recent posts