본문 바로가기

분류 전체보기769

[C++] gdb이용하여 thread 분석하기 C++ 프로그래밍을 하면서 디버깅은 어떻게 해야 할까요? 윈도우에서는 Visual Studio 라는 IDE를 통해 수월하게 디버깅이 가능하지만, 리눅스에서는 그렇지 않습니다. 리눅스 터미널에서는 디버깅 시 GDB를 주로 이용하며, 오늘은 GDB 를 이용한 Thread 를 분석방법에 대해 알아보려고 합니다. 기초적인 사용방법에 대해서는 본문 끝에 링크를 달아두었으니 이전 포스팅을 참고 부탁드리겠습니다. GDB GDB 는 GNU 프로젝트 디버거 입니다. GDB는 프로그램이 어떻게 동작하는지 분석할 수 있도록 도와줍니다. GDB 사용 전 이 점은 반드시 숙지하고 있어야 하는 부분이 있는데요, 바로 빌드 시 별도 옵션을 추가해야 하는 점 입니다. C, C++ 코드를 빌드하면서 추후 gdb로 디버깅이 필요하다면 .. 2024. 3. 2.
읽으면서 배우는 소프트웨어 - MSA(Micro Service Architecture) Micro Service Architecture Micro service architecture(이하 MSA)는 소프트웨어 설계 유형 중 하나입니다. 독립된 서비스의 조합으로 하나의 어플리케이션을 개발하는 설계로서 클라우드와 컨테이너의 발전과 함께 애플리케이션 개발에 널리 사용되고 있습니다. 장점 Micro Service Architecture는 배포와 확장성이 용이하다는 점이 가장 큰 장점입니다. 서비스가 독립적으로 수행되기 때문에 지속적인 변경에 의한 어플리케이션 영향이 적으며, 변경용이성 확보는 요구사항 변경에 대응을 빠르게 합니다. 급변하는 사용자 요구에 쉽게 대응할 수 있다는 점은 설계적인 관점에서 상당한 장점이 될 수 있습니다. 또한, 확장성을 통해 Availability와 Performanc.. 2024. 3. 1.
[makefile 활용] makefile로 코드빌드 하기 사진: Unsplash의Ilya Pavlov 리눅스 환경에서 프로젝트를 진행하는 경우 makefile 을 작성하는 경험을 하게됩니다. 직접 작성하지 않더라도 한번 쯤 사용하게 되지요. 오늘은 makefile에 대한 개념을 설명하고 어떻게 활용할 수 있는지 알려드리겠습니다. makefile 소프트웨어 프로젝트를 빌드하고 컴파일하는 데 사용되는 스크립트 파일 Makefile은 주로 C, C++, 그리고 다른 컴파일 가능한 프로그래밍 언어의 프로젝트에서 자주 사용됩니다. Makefile은 프로젝트의 의존성과 빌드 규칙을 정의하여 빌드 프로세스를 자동화합니다. gcc 또는 g++ 을 이용한 빌드를 구성할 때 각종 옵션들을 makefile에 정의함으로써 개발자의 실수를 방지하고 기능을 자동화 가능합니다. Make.. 2024. 2. 26.
비전공자를 위한 프로그래밍 개념 - 프로세스와 스레드 사진: Unsplash의Ilya Pavlov 오늘은 프로그래밍을 시작하기 위한 기초개념인 프로세스와 스레드에 대한 설명입니다. 컴퓨터 과학 또는 공학 전공자라면 운영체제 시간에 공룡책을 보면서 접했을 개념입니다만, 분명 그런 경험없이 코드를 작성한다거나, 운영업무를 도맡아 하시는 분들도 있을 것이라고 생각이 됩니다. 실제로 제 주변에서 많이 보고 있구요. 요즘은 정말 다양한 분야의 사람들이 코딩을 공부하여 업무를 수행하다 보니 업무에 필요한 핵심 내용 외에는 놓치는 것들이 있는 것 같아 제가 아는 내용들을 최대한 풀어보려고 합니다. 인터넷 검색하면 동일한 내용들이 너무나 많지만, 더 잘 설명해 보려는 노력을 하면 저도 배우는 점이 있을 것 같다는 생각에 포스팅을 하게 되었습니다. 프로세스 프로세스를 한마.. 2024. 2. 24.
알아두면 회사에서 인정받는 리눅스 명령어, ls ls 파일 리스트를 출력해 주는 명령어 입니다. 리눅스에서 개발을 하는 저는 매일 사용하는 명령어 이고, 이 명령어 없이는 개발이 불가능 하다고 봐도 무방할 것 같습니다. ls의 활용 ls 명령을 사용하면 현재 디렉토리의 파일 리스트가 출력됩니다. 각종 옵션을 이용하여 필요한 작업을 수행할 수 있으며, 빈번하게 사용하는 예시를 보시고 어떻게 사용되는지 감을 잡으시기 바랍니다. 현재디렉토리 파일 조회 warehouse@warehouse-VirtualBox:~/Desktop$ ls a.out test.cc 원하는 경로의 파일리스트 조회 warehouse@warehouse-VirtualBox:~/Desktop$ ls ~/ Desktop Documents Downloads Music Pictures Public.. 2024. 2. 19.
리눅스에서 C++ 프로그래밍을 위한 gcc, g++ 의 개념과 활용 리눅스에서 C++ 코드를 작성하고 이를 바이너리로 만들기 위해서는 gcc 또는 g++ 이 필요하다. 오늘은 이 도구들의 개념에 대해 알아보고, 어떻게 사용하는지 알아보고자 한다. 전공자라면 학교에서 자연스럽게 접할 수 있는 부분이지만, 요즘같이 여러 분야에서 프로그래밍을 접하는 환경에서는 다소 생소할 수 있는 개념이라고 생각해서 포스팅을 쓰게 되었다. gcc 개념 : GNU OS의 컴파일러를 시작으로 시작 된 GNU Compiler Collection 지원 언어 : C, C++, Objective-C, Fortran, Ada, Go, D gcc는 컴파일러이다. 리처드 스톨먼에 의해 만들어 진 자유소프트웨어 재단에서 발현된 GNU 프로젝트의 일환으로 정말 널리 사용되는 컴파일러이다. 리눅스 환경에서 C로 .. 2024. 2. 18.
[Architectural Style] Data flow architecture 개념요약과 유형 DATA FLOW ARCHITECTURE 데이터플로우 아키텍쳐는 입력되는 정보를 계속 변경해 나가는 설계기법이다. 데이터플로우 패턴은 상당히 명백하며, 프로세스 간 다른 상호작용이 없다. 주요 구성요소 데이터플로우 아키텍쳐의 주요 구성요소는 두가지 입니다. 1. Component(Data Transformer) - 입력을 바탕으로 출력을 생성합니다. 2. Connector(Data Channel) - I/O stream, I/O files, buffer 등으로 구현되며, 데이터가 흘러가는 연결을 의미합니다. Data flow system의 유형 일반적으로 데이터는 제멋대로 흘러가지만, 우리는 선형으로 흘러가는 데이터흐름을 가진 시스템 또는 단순한 구조에 주로 관심을 갖습니다. 대표적인 data flow .. 2024. 2. 1.
[Architectural style] Data-centered architecture의 개념과 유형 Data-Centered Architecture Data-centered architecture 는 모든 주변 Software component들과 공유하는 중앙집중형 데이터 저장소를 갖는 설계 스타일이다. Data-Centric Architecture로도 불리운다. Data-centered architecture에서 각 client components 는 서로 직접 메시지를 전달하지 않고, Data store를 통해 통신을 수행한다. 특정 client 간 데이터 송-수신이 필요한 경우 별도의 Data store 추가 구성도 가능하다. 주요 구성요소 Data-centered architecture는 크게 두가지 구성 요소를 갖는다. 1. Data store 2. Data client Data-center.. 2024. 1. 31.
품질속성 만족을 위한 잘 알려진 설계전술, Tactic의 개념과 종류 안녕하세요 warehouse 입니다. 오늘은 품질속성을 만족하기 위한 기술인 Tactic 에 대한 포스팅을 작성하였습니다. Tactic Software architecture tactic 에 대해 정의를 내리자면 아래와 설명할 수 있습니다. Software architecture tactics are specific design decisions or techniques employed to address and achieve quality attributes, such as performance, scalability, maintainability, and security, in a software system. 즉, Tactic은 필요한 품질속성을 만족하기 위해 사용하는 설계적 기술이라고 볼 수 있겠.. 2024. 1. 27.
모든 기업들이 주목하는 기술 LLM(Large Language Model) 의 개념 안녕하세요 warehouse입니다. 요즘 OpenAI CEO 샘 올트먼의 방한으로 큰 이슈가 되고 있습니다. 이렇게 화제가 되는 이유는 아무래도 OpenAI 의 Chat GPT 때문이 아닐까 생각됩니다. 오늘은 ChatGPT와 그 기반기술인 LLM(Large Language Model) 에 대해서 짧게나마 리서치한 내용을 적어보려고 합니다. LLM(Large Language Model) "Large Language Model"은 대화형 인공지능 모델 중 하나를 나타냅니다. 이러한 모델은 많은 텍스트 데이터를 학습하여 다양한 자연어 처리 작업을 수행할 수 있으며 Open AI에서 제공하는 GPT (Generative Pre-trained Transformer) 시리즈는 이러한 대표적인 모델 중 하나입니다... 2024. 1. 27.
[Go programming] 함수를 선언하고 값 반환하기 Go 언어에서 함수를 구성하는 요소는 크게 네가지 입니다. 1. 이름 2. 파라미터 목록 3. 결과목록 4. 본문 코드 내에서 위 요소들은 아래와 같은 형태를 띄게 됩니다. func 함수명 (파라미터 목록) (결과목록) { 본문 } 각 요소에 대해 간단히 설명하고 예제를 구현해 보려 합니다. 이름 이름은 함수의 이름을 의미합니다. 구현하는 함수를 호출할 때 어떤 이름으로 호출될지를 결정합니다. 프로그래밍을 하면서 변수의 이름과 함수의 이름은 다른 개발자가 이해하기 쉽게 직관적으로 작성될 수 있도록 노력이 필요합니다. 파라미터 목록 파라미터 목록은 함수 파라미터의 이름과 타입을 지정합니다. 이 인자는 호출하는 곳에서 전달하는 값이나 인자를 받는 지역변수를 의미합니다. 결과목록 결과목록은 함수가 반환하는 값.. 2023. 11. 12.
go programming - 가변인자 함수로 min/max 구하기 오늘은 연습삼아 가변함수를 이용하여 인자 값 중 최소 값, 최대 값을 구하는 코드를 구현해 보았습니다. 내용은 다음과 같습니다. package main import ( "fmt" ) func minMax(args ...int) (int, int) { min := 0 max := 0 for i := 0; i < len(args); i = i + 1 { if args[i] = max { max = args[i] } } return min, max } func main() { min, max := minMax(1, 22, 3, 5, 0) fmt.Printf("min:%d / max:%d\n", min, max) } 가변인자 함수 minMax 를 만들어 주고 ... 표현을 이용하여 int type 의 변수들을 .. 2023. 7. 30.
Go programming 복합 타입 - 슬라이스 에 대하여 Go programming 복합 타입 - 배열 에 대하여 오늘은 go 언어의 복합 타입에 대해 포스팅을 남깁니다. 복합타입 기본타입을 다양한 방법으로 결합하여 생성한 타입 복합타입의 유형 복합타입의 유형은 배열, 슬라이스, 맵, 구조체 이렇게 4가 armin.tistory.com 이전 글에 이어서 오늘은 슬라이스에 대해 설명합니다. 슬라이스 슬라이스는 모든 원소가 같은 타입인 가변길이 시퀀스입니다. 슬라이스 타입은 원소가 T 타입인 경우 []T 태로 정의하며, 이는 크기가 없는 배열 타입처럼 보이기도 합니다 슬라이스 타입의 선언과 활용 e := []int{1, 2, 3} fmt.Println(e) 출력 [1 2 3] 특징 1. 모든 원소의 타입이 같고, 길이가 가변적 입니다. 2. 슬라이스는 배열과 달리.. 2023. 7. 29.
Go programming 복합 타입 - 배열 에 대하여 오늘은 go 언어의 복합 타입에 대해 포스팅을 남깁니다. 복합타입 기본타입을 다양한 방법으로 결합하여 생성한 타입 복합타입의 유형 복합타입의 유형은 배열, 슬라이스, 맵, 구조체 이렇게 4가지가 있습니다. 특징 복합타입 유형 별 특징은 다음과 같습니다. 다양한 특징이 있지만 상세한 특징은 각 타입별 설명에 정리 합니다. 고정크기 배열, 구조체는 집합타입으로 크기가 고정되어 있습니다. 지정 된 사이즈 이상의 데이터를 할당이 불가능합니다. 동적크기 슬라이스, 맵은 동적 데이터 구조입니다. 값을 추가할 때 마다 커질 수 있습니다. 간단한 특징은 이정도로 설명하고 타입별 세부특징을 알아보겠습니다. 배열 배열은 0개 이상으로 이뤄진 고정길이 시퀀스 입니다. 지정된 특정 타입으로만 원소를 이루고 있으며, 길이를 고.. 2023. 7. 29.
go programming - byte array 숫자에 콤마를 붙이는 방법 오늘은 go programming 연습삼아 아래의 예제 코드를 만들어 보았습니다. string 이 아닌 byte array 에 숫자를 할당해 두고 1,000 단위로 콤마를 붙여주는 코드입니다. package main import "fmt" func comma(s []byte) []byte { rByteArray := make([]byte, len(s)+len(s)/3) j := 0 for i := 0; i < len(s); i++ { if i != 0 && i%3 == 0 { rByteArray[j] = ',' j = j + 1 rByteArray[j] = s[i] j = j + 1 continue } rByteArray[j] = s[i] j = j + 1 } return rByteArray } func.. 2023. 7. 23.