전체 글 236

공유 폴더 고급 설정 - 액세스 할 수 없는 경우 대처법

실무에서 서버 이중화 설정 시 공유 폴더를 설정하여 사용하는데, Active 서버 Standby 서버 역할이 변경될 때, 공유 폴더에 액세스 불가 현상이 있을 수 있습니다. 아래 내용을 참고하여 문제를 해결할수도 있습니다. 공유 폴더에 관한 마지막 시간입니다. 기본적으로 네트워크에 액세스 할 수 없는 경우는 권한 지정이 잘못되어서 나오는 경우가 대부분 입니다. 위에 공유 폴더 설정 방법에서 1번글과 3번글을 참고 하시면 거의 대부분 해결이 됩니다. 하지만 간혹 사용하다 보면 권한 설정도 제대로 되어있고 한데, 접속이 안되는 경우가 발생 할 수 있습니다. 그럴 땐 지푸라기라도 잡는 심정으로 좀 더 깊고 세세한 설정의 영역으로 들어가 봅시다. 제대로 공유 폴더 설정을 마쳤다면 이 글의 내용은 읽지 않아도 되..

Windows 2023.12.11

정규 표현식 변환 시 유용한 사이트

정규 표현식은 특정 패턴을 표현하는데 사용되며, 텍스트 처리, 검색, 추출, 치환 등 다양한 작업에 유용합니다. 정규 표현식(Regular Expression)을 작성하고 테스트하는 데 도움이 될만한 사이트입니다. 사용자가 정규 표현식을 만들고 테스트할 수 있는 편리한 환경을 제공합니다. 사이트를 방문하면 정규 표현식을 입력할 수 있는 창이 나타나며, 입력한 표현식이 문자열과 어떻게 매칭되는지 실시간으로 확인할 수 있습니다. 또한, 여러 옵션과 예제를 제공하여 사용자가 정규 표현식을 더욱 쉽게 이해하고 활용할 수 있도록 도와줍니다. 사이트 링크 : https://regexr.com/

프로그래밍 2023.11.17

[클린코드] 10,11장 정리

강결합 코드를 의존성 주입 기법(DI)을 사용하여 결합도를 낮춰보는 예제이다. CollectDataActor가 DeleteFileService에 의존성을 가지고 있다. 이로인해서 CollectDataActor클래스는 DeleteFileService클래스에 강하게 결합되어 있고, 테스트나 변경사항에 취약할 수 있다. public class CollectDataService { private readonly DeleteFileService _deleteFileService; public CollectDataService(...) { _deleteFileService = new DeleteFileService(); } public List CollectDatas(CollectRecipe collectRecip..

프로그래밍 2023.11.01

[클린코드] 11장 시스템

시스템 시스템 생성과 사용은 분리하라 의존성 주입 의존성 주입(DI)는 제어 역전(IoC)기법을 의존성 관리에 적용한 메커니즘 제어 역전에서는 한 객체가 맡은 보조 책임을 새로운 객체에게 전적으로 넘긴다. 특수 컨테이너(DI 컨테이너)를 사용할 수 있다. DI컨테이너는 필요한 객체의 인스턴스를 만든 후 생성자 인수나 설정 메서드를 사용해 의존성을 설정한다.

프로그래밍 2023.10.29

[클린코드] 10장 클래스

클래스 캡슐화 같은 패키지 안에서 테스트 코드가 함수를 호출하거나 변수를 사용해야 한다면, 함수, 변수를 protected로 선언하거나 패키지 전체로 공개한다. 클래스는 작아야한다. 클래스는 얼마나 작아야하는가? SRP(Single Responsibility Principle)원칙에 따를만큼 작아야한다. SRP란 단일책임원칙이라 하며, `하나의 클래스는 하나의 기능 담당하여 하나의 책임을 수행하는데 집중되어야 있어야 한다`는 원칙 시스템은 개발기간이 늘어날수록 논리가 많아지고, 복잡성이 증가한다. 복잡한 시스템을 다루려면, 체계적으로 정리가 돼야한다. 만능클래스 한개보다, 작은클래스(SRP원칙에 따른 클래스) 여러개로 이뤄진 시스템이 바람직하다. 응집도 응집도가 높다: 클래스에 속한 메서드와 변수가 서로..

프로그래밍 2023.10.29

[클린코드] 6,7장 정리

자료구조 vs 객체 객체는 추상화 뒤로 자료를 숨기고, 자료를 다루는 함수만 공개한다. 자료구조는 자료를 그대로 공개하고, 함수는 다루지 않는다. 새로운 자료 타입이 필요한 경우, 객체가 적합하다. 새로운 함수가 필요한 경우, 절차적인 코드와 자료 구조가 적합하다. 추상화 변수를 private으로 선언하더라도 조회함수(get), 설정함수(set)을 제공한다면 구현을 외부로 노출시키는 셈이다. 구현을 감추려면 추상화가 필요하다. 사용자가 구현을 모르는 상태로 자료를 조작할 수 있어야한다. 아래 코드는 개인적으로 추상화가 잘됐다고 생각한 코드 부분이다. python 모델 판정을 위한 인터페이스와 구현체 클래스이다. 아래와 같은 코드는 다른 모델과의 교체 및 확장이 쉬워지며 코드의 유지 보수가 용이해진다고 생..

프로그래밍 2023.10.18

[클린코드] 7장 오류 처리

7장 오류처리 오류 코드보다 예외처리 함수를 호출한 즉시 오류를 확인하는 경우 코드가 복잡해진다. Try-Catch-Finally문 부터 작성하라 try블록에 들어가는 코드를 실행하면 어느 시점에서든 실행이 중단된 후 catch블록으로 넘어갈 수 있다. 예외에 의미를 제공하라 오류 메시지에 정보를 담아 예외와 함께 던진다면, 실패한 원인을 쉽게 파악할 수 있다. 호출자를 고려해 예외 클래스를 정의하라 호출하는 라이브러리 API를 감싸면 예외 유형 하나를 반환하면 된다. API를 감싸면 의존성이 줄어든다. null을 반환,전달하지 마라 null을 반환하는 코드는 일거리가 많아지고, 호출자에게 문제를 떠넘기게 된다. null확인 코드가 많아진다. null로 인한 오류가 발생할 수 있다. 정상적으로 null ..

프로그래밍 2023.10.15

[클린코드] 6장 객체와 자료구조

6장 객체와 자료 구조 자료 추상화 인터페이스는 자료구조를 명백하게 표현한다. 변수를 private으로 선언하더라도 조회함수(get), 설정함수(set)을 제공한다면 구현을 외부로 노출시키는 셈이다. 구현을 감추려면 추상화가 필요하다. 추상 인터페이스를 제공해 사용자가 구현을 몰른 채 자료를 조작할 수 있어야, 진정한 의미의 클래스이다. 자료/객체 비대칭 객체는 추상화 뒤로 자료를 숨기고, 자료를 다루는 함수만 공개한다. 자료구조는 자료를 그대로 공개하고, 함수는 다루지 않는다. 새로운 자료 타입이 필요한 경우, 클래스와 객체 지향 기법이 적합하다. 새로운 함수가 필요한 경우, 절차적인 코드와 자료 구조가 적합하다. 디미터 법칙 디미터 법칙이란, 모듈은 자신이 조작하는 객체의 속사정을 몰라야한다는 법칙기..

프로그래밍 2023.10.15

[C#] 게터,세터,프로퍼티

게터(Getter), 세터(Setter), 그리고 프로퍼티(Property)은 C#에서 데이터 캡슐화 및 정보 은폐를 지원하는 중요한 개념입니다. 이들은 클래스 내의 멤버 변수(필드)를 조작하고 접근하는 방법을 제어하는 데 사용됩니다. 게터(Getter): 게터는 클래스 내의 프라이빗 필드(private field)의 값을 읽어오는 역할을 합니다. 게터 메서드는 "get" 키워드를 사용하여 정의하며 값을 반환하는 코드 블록으로 이루어집니다. 게터를 사용하여 외부 코드에서 필드 값을 읽을 수 있습니다. private int myField; public int GetMyField() { return myField; } 세터(Setter): 세터는 클래스 내의 프라이빗 필드의 값을 변경하는 역할을 합니다. 세..

프로그래밍/C# 2023.10.15

[Python] csv파일 읽은 후 list생성하기

python에서 csv파일을 읽은 후 list생성해봅시다csv 파일 내용csv 읽은 후 리스트 생성 및 특정 값을 출력해봅시다. csv파일 label class 0 100 1 101 2 102 3 103 4 104 0 200 1 201 2 202 3 203 4 204 5 205 6 206 7 207 8 208 9 209 10 210data type 정의 후 2번째 값 출력 import csv class DataEntry: def __init__(self, step_oh_name, step_oh, gt_name, gt_label, class_id): self.step_oh_name = step_oh_name self.step_oh = step_oh self.gt_name = gt_name self.gt_l..

[Windows] 특정 포트 사용중인 프로세스 죽이기

Windows에서 특정 포트를 사용 중인 프로세스를 종료하는 명령어를 실행하려면 다음 단계를 따를 수 있습니다. 특정 포트 사용 중인 프로세스 확인: 먼저 특정 포트를 사용 중인 프로세스를 확인해야 합니다. 이를 확인하기 위해 다음 명령어를 사용합니다. netstat -ano | findstr :포트번호여기서 "포트번호"에는 종료하려는 포트 번호를 입력하십시오. 예를 들어 포트 80을 종료하려면 다음과 같이 입력할 수 있습니다. netstat -ano | findstr :80이 명령어는 해당 포트를 사용 중인 프로세스의 PID (Process ID)를 나열합니다. PID를 사용하여 프로세스 종료: 확인한 PID를 사용하여 프로세스를 종료할 수 있습니다. 다음 명령어를 사용합니다. taskkill /F /..

Windows 2023.09.18

[RabbitMQ] 스트림

RabbitMQ Stream https://github.com/rabbitmq/rabbitmq-stream-dotnet-client docs : https://rabbitmq.github.io/rabbitmq-stream-dotnet-client/stable/htmlsingle/index.html RabbitMQ Stream .Net Client는 RabbitMQ Stream Plugin과 통신하기 위한 .Net 라이브러리입니다. Stream 장점 Large fan-outs 여러 애플리케이션이 동일한 메시지를 읽어야 할 때 유용합니다. 기존의 큐를 사용하면 각 애플리케이션마다 큐를 선언하고 각각에게 동일한 메시지의 복사본을 전달해야 합니다. Stream은 여러 소비자가 동일한 큐에서 동일한 메시지를 비파..

[RabbitMQ] 클러스터 구성하기 - Linux

RabbitMQ 클러스터 구축하기 - Linux 1. RabbitMQ 설치 모든 노드에 RabbitMQ, Erlang을 설치합니다. 2. RabbitMQ 서버 구성 각 노드의 RabbitMQ 서버 구성을 위해 해당 노드에 접속합니다. rabbitmq.config 파일을 열고 노드 이름, Erlang Cookie 및 클러스터링 구성을 추가합니다. Docker Images mirero@ADC40-TEST-03:~$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE rabbitmq 3-management 87d31604e8cf 5 weeks ago 275MB Docker Container 실행 (RabbitMQ 서버 시작) Node 3개 구성합니다. 각 Node는 ho..