인코딩을 UTF-8로 변환 (권장)

한글이 잘 보인다면, 다음 명령으로 UTF-8로 변환 저장:

iconv -f euc-kr -t utf-8 ReadQFutureData.c -o ReadQFutureData_utf8.c

그리고 새로 만든 파일로 작업하세요:

mv ReadQFutureData_utf8.c ReadQFutureData.c

이후 vim에서 열면 한글이 제대로 보입니다:

vim ReadQFutureData.c

적용모습)



질문)
window pc와 ubuntu pc 각각 pc를 서로 랜케이블로 연결해서 통신하려면?

답변)

Windows PC와 Ubuntu PC를 직접 랜 케이블로 연결하여 통신하려면, 다음과 같은 절차를 따르면 됩니다.


✅ 1. 케이블 확인

  • 크로스 케이블 (Cross Cable) 또는
  • Auto-MDI/MDIX 지원 랜포트가 있으면 일반 랜 케이블 (Straight Cable) 도 사용 가능

대부분의 최신 PC는 Auto-MDI/MDIX를 지원하므로 일반 랜 케이블로도 직접 연결 가능


✅ 2. 양쪽 PC에 고정 IP 설정

🔵 Windows PC 설정 방법

  1. 제어판 > 네트워크 및 공유 센터 > 어댑터 설정 변경
  2. 연결된 이더넷 어댑터 우클릭 > 속성
  3. 인터넷 프로토콜 버전 4 (TCP/IPv4) 선택 후 속성
  4. 다음과 같이 고정 IP 설정:
  5. nginx
    복사편집
    IP 주소: 192.168.1.10 서브넷 마스크: 255.255.255.0 게이트웨이: 비워도 됨
  6. 확인 → 확인 → 닫기

🔴 Ubuntu PC 설정 방법

방법 A: GUI (Ubuntu Desktop 기준)

  1. Settings > Network > Wired
  2. 톱니바퀴 아이콘 클릭
  3. IPv4 탭 선택
  4. Method를 Manual로 변경
  5. 다음과 같이 입력:
  6. makefile
    복사편집
    Address: 192.168.1.20 Netmask: 255.255.255.0 Gateway: 비워도 됨
  7. 저장 후 연결 다시 시작

방법 B: CLI (Ubuntu Server 또는 터미널)

/etc/netplan/01-netcfg.yaml 또는 /etc/netplan/*.yaml 파일 편집:

network: version: 2 ethernets: enp2s0: dhcp4: no addresses: - 192.168.1.20/24

적용:

sudo netplan apply

enp2s0는 실제 사용 중인 인터페이스 이름으로 변경 (예: eth0, ens33 등 ip a로 확인)


✅ 3. 통신 확인

Ping 테스트

  • Windows에서:
  • nginx
     
    ping 192.168.1.20
  • Ubuntu에서:
  • nginx
     
    ping 192.168.1.10

파일 공유나 ssh 등도 사용 가능

  • Windows ↔ Ubuntu 간 파일 전송은 scp, ftp, samba 등 활용
  • ssh를 통해 원격 접속도 가능

✅ 추가 팁

  • 방화벽이나 보안 프로그램이 로컬 연결을 차단하지 않도록 예외 설정
  • 양쪽 PC에서 같은 서브넷(예: 192.168.1.0/24)으로 맞추는 것이 중요
  • 인터넷 없이 내부 통신만 하는 것이므로, 게이트웨이나 DNS는 설정하지 않아도 됩니다

질문)
종목정보가 파생을 합치면, 만개가 넘어가는데, 세마포어를 활용시에 더 복잡해지는 느낌입니다. lock_flag를 사용해서 코딩하는게 낫지 않을까요?

답변)

종목 수가 10,000개 이상이 된다면, 말씀하신 것처럼 세마포어 방식은 시스템적으로나 구현 측면에서 꽤 무겁고 복잡해질 수 있습니다.


✅ 간단한 결론부터

네, 이런 상황에서는 lock_flag 방식이 더 적절하고 효율적입니다.
특히 데이터 충돌 위험이 낮거나, 충돌이 발생하더라도 치명적이지 않다면 세마포어는 오버엔지니어링일 수 있습니다.


✅ 비교: 세마포어 vs lock_flag

항목System V 세마포어lock_flag 방식
동기화 정확성 커널 수준 동기화 → 매우 강력 사용자 수준 플래그 → race 가능
구현 복잡도 semget, semctl, semop 필요, 키 관리 필요 단순한 if, set
리소스 사용 세마포어 객체 최대 개수(기본 128~512) 제한 있음 메모리만 사용
속도 상대적으로 느림 (커널 트랩 발생) 빠름 (메모리만 접근)
적용 대상 충돌 가능성이 높거나, 다중 프로세스에서 반드시 동기화해야 하는 경우 충돌이 드물거나 처리 순서에 민감하지 않은 경우
 

✅ 현실 적용 시 고려 기준

질문lock_flag가 적합한 경우
데이터 충돌 가능성이 얼마나 되나요? 낮음 (예: 체결 데이터는 주기적으로 갱신되고, 읽기만 많음)
데이터 접근자는 단일 프로세스인가요? 예 (또는 적은 수의 컨트롤된 프로세스)
충돌이 발생해도 복구 가능한가요? 예 (예: 다음 틱에 다시 수신 가능)
성능이 중요한가요? 매우 중요함 (매우 많은 종목을 빠르게 처리해야 함)
 

✅ 대안: "가벼운 스핀락" 형태의 lock_flag 개선안

만약 lock_flag를 좀 더 정교하게 쓰고 싶다면:

c
복사편집
while (__sync_lock_test_and_set(&ksejongp->lock_flag, 1)) { // busy wait 또는 usleep(1); } // → 작업 수행 ... __sync_lock_release(&ksejongp->lock_flag);

이런 식으로 간단한 atomic spinlock으로도 처리할 수 있습니다.
단, lock_flag는 volatile int 또는 char가 되어야 하고, GCC 내장 함수 등을 활용해야 합니다.


✅ 결론

10,000개 이상의 종목이라면:

  • 세마포어는 리소스/성능/복잡도 측면에서 비효율
  • lock_flag 방식이 현실적이고 관리가 쉬움
  • 필요하다면 lock_flag에 atomic 연산만 약간 추가해도 동기화 수준은 충분함

✅ 권장 방향

현재 구조 유지하면서, lock_flag + 필요 시 atomic 연산을 통한 가벼운 동기화 → 가장 실용적

질문)
명령 프롬프트 (관리자 권한)에서 아래 명령으로 현재 라우팅 테이블을 확인:(route print)

답변)

공유기 LAN과 Wi-Fi에 동시에 연결된 상태의 route print 결과를 보면, 인터넷 속도가 느려지는 원인이 분명히 드러납니다.


✅ 현재 네트워크 상태 분석

📌 기본 경로 (0.0.0.0)가 두 개 존재합니다:

네트워크 대상게이트웨이인터페이스메트릭
0.0.0.0 192.168.199.86 192.168.199.49 → 유선 LAN (Ubuntu) 55 (❌ 문제)
0.0.0.0 192.168.0.1 192.168.0.3 → Wi-Fi (인터넷) 35 (✅ 정답)
 

문제 요약:

  • LAN(공유기)를 통해 연결된 Ubuntu 네트워크가 우선순위 높게 잡혀 있음 (메트릭 55 < 35).
  • 따라서 Windows는 기본적으로 Ubuntu 쪽으로 인터넷 요청을 시도, 하지만 Ubuntu에는 인터넷이 없으므로 연결 지연 발생.

✅ 해결 방법: 잘못된 기본 경로 제거 또는 우선순위 조정

🛠️ 방법 1: 잘못된 기본 경로 제거

명령 프롬프트 (관리자 권한)에서 다음 실행:

 

route delete 0.0.0.0 if 9
  • if 9은 인터페이스 목록에서 유선 LAN (Ubuntu 연결된 NIC)의 번호입니다.
  • Realtek PCIe GbE Family Controller가 interface 9임

➡️ 이렇게 하면 기본 게이트웨이가 Wi-Fi만 남아 인터넷 경로가 명확해집니다.


🛠️ 방법 2: Ethernet 어댑터에 기본 게이트웨이 제거 (영구 설정)

  1. ncpa.cpl 실행
  2. "이더넷" (Ubuntu 연결된 인터페이스) 우클릭 → 속성
  3. 인터넷 프로토콜 버전 4 (TCP/IPv4) 선택 → 속성
  4. 기본 게이트웨이 항목을 비움
    • IP 주소: 192.168.199.x
    • 서브넷 마스크: 255.255.255.0
    • 기본 게이트웨이: 없음

➡️ 이러면 Windows는 Ubuntu 쪽으로 인터넷을 시도하지 않게 됨


💡 보충 팁: 우선순위(메트릭) 수동 설정

  • Wi-Fi 인터페이스에 메트릭 값을 10 이하로 낮게,
  • Ethernet 인터페이스에는 50 이상으로 높게 설정하면 자동으로 우선순위가 잡힙니다.

(이미 설명드린 인터페이스 메트릭 수동 설정 방식 참조)


✅ 정리

항목내용
문제 Windows가 인터넷을 Ubuntu 연결 LAN으로 보내려고 해서 느려짐
원인 기본 게이트웨이(0.0.0.0)가 두 개 존재하고, 잘못된 경로가 우선됨
해결 route delete 0.0.0.0 if 9 또는 Ethernet에서 기본 게이트웨이 제거
보완 Wi-Fi 우선순위(메트릭 낮게), Ethernet은 높게 조정

질문)
windows pc 한대와 ubuntu pc한대를 공유기에 각각 연결해서 서로 telnet 연결을 이용중입니다. 인터넷을 하기위해서 windows에 와이파이연결을 했는데 평소보다 느리다면, 어떤 조치를 하면 인터넷을 빠르게 할수 있을까요?

답변)

Windows PC에서 인터넷을 하기 위해 Wi-Fi에 연결했는데, Ubuntu PC와 Telnet으로 연결된 상태에서 인터넷 속도가 느려졌다면, 다음과 같은 문제 가능성과 해결책을 점검해보세요.


✅ 원인 요약

  1. Windows가 여러 네트워크를 동시에 사용 중 (공유기 LAN + Wi-Fi)
  2. 라우팅 우선순위(Network Metric) 때문에 인터넷이 LAN으로 빠져나가려다 실패
  3. DNS 설정 또는 충돌
  4. Wi-Fi 신호 세기 자체가 약함

✅ 1. 네트워크 우선순위 확인 및 수정

Windows는 여러 네트워크가 동시에 연결되면 우선순위(metric) 에 따라 어느 경로로 트래픽을 보낼지 결정합니다.

🛠️ 조치 방법: Wi-Fi 네트워크 우선순위 높이기

  1. Windows 검색 → ncpa.cpl → 네트워크 연결 창 열기
  2. Wi-Fi 어댑터 → 우클릭 → 속성
  3. 인터넷 프로토콜 버전 4(TCP/IPv4) → 선택 후 속성
  4. 하단의 고급 클릭
  5. 자동 메트릭 체크 해제인터페이스 메트릭 값을 입력:
    • Wi-Fi에 낮은 숫자 입력 (예: 10) → 높은 우선순위
    • 이더넷(LAN)은 높은 숫자 (예: 50) 로 설정

✅ 2. 기본 게이트웨이 설정 확인

공유기에 LAN으로 연결된 Ubuntu 쪽은 인터넷이 없으므로, Windows가 그쪽을 인터넷으로 착각하면 안 됩니다.

🔧 조치 방법:

  1. ncpa.cpl → Ethernet 어댑터 (Ubuntu 연결된 LAN) → 속성
  2. 인터넷 프로토콜 버전 4(TCP/IPv4) → 속성
  3. 기본 게이트웨이 항목이 비어 있는지 확인
    • 비어 있지 않다면 지워야 함
    • 기본 게이트웨이가 있으면 인터넷 라우팅 시도하게 되어 느려짐

✅ 3. 라우팅 테이블 수동 정리 (고급)

명령 프롬프트 (관리자 권한)에서 아래 명령으로 현재 라우팅 테이블을 확인:

cmd
복사편집
route print
  • Wi-Fi 쪽 경로가 0.0.0.0 (기본 경로)로 우선 적용되는지 확인
  • 만약 Ethernet 쪽이 먼저라면 다음 명령으로 삭제:
c
복사편집
route delete 0.0.0.0 IF [인터페이스 번호]

(인터페이스 번호는 route print 명령으로 확인 가능)


✅ 4. DNS 서버 수동 설정

속도가 느려지는 원인이 DNS 지연이라면 DNS 서버를 빠른 걸로 고정하면 효과가 있습니다.

추천 DNS

  • Google DNS: 8.8.8.8, 8.8.4.4
  • Cloudflare DNS: 1.1.1.1, 1.0.0.1

설정 방법

  1. ncpa.cpl → Wi-Fi 어댑터 → 속성
  2. TCP/IPv4 → 속성
  3. 하단의 DNS 서버 수동 설정:
yaml
복사편집
기본 DNS: 8.8.8.8 보조 DNS: 8.8.4.4

✅ 5. Wi-Fi 품질 점검

  • 공유기와의 거리, 장애물, 채널 간섭 등의 원인도 확인하세요.
  • Wi-Fi 분석기 앱(휴대폰)이나 Windows의 netsh wlan show interfaces 명령으로 신호 세기 확인 가능

✅ 요약 조치 순서

단계조치 내용
1 Ethernet (Ubuntu 연결된 LAN)에 기본 게이트웨이 제거
2 Wi-Fi 어댑터에 낮은 인터페이스 메트릭 설정
3 DNS 서버를 Google/Cloudflare로 변경
4 Wi-Fi 신호 품질 확인 및 공유기 위치 조정
5 (고급) route print로 라우팅 테이블 정리
 

원하시면 현재 네트워크 상태 캡처(ipconfig, route print)해 주시면 분석도 도와드릴 수 있습니다.

✅ 1. Microsoft 패키지 저장소 등록 (정확하게 해야 함)

wget https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb

예: Ubuntu 22.04인 경우, 자동으로 https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb 를 받습니다.


✅ 2. APT 업데이트

 
sudo apt update

저장소 등록 후 꼭 apt update 를 다시 해줘야 새로운 패키지를 인식합니다.


✅ 3. 필수 구성 요소 설치

bash
복사편집
sudo apt install -y apt-transport-https

✅ 4. dotnet SDK 설치 (예: .NET 8 SDK)

bash
복사편집
sudo apt install -y dotnet-sdk-8.0

만약 .NET 7이 필요하면 dotnet-sdk-7.0으로 바꾸면 됩니다.


🔍 설치 확인

bash
복사편집
dotnet --version

예:

복사편집
8.0.100

Ubuntu에서는 /sys/devices/system/cpu/cpu*/cpufreq/scaling_max_freq 설정이 재부팅 시 초기화되는 것이 정상입니다, 이는 이 파일이 커널이 제공하는 가상 파일이며, 시스템이 부팅할 때 CPU 드라이버/전원 정책(govener) 에 따라 다시 설정되기 때문입니다.

Windows처럼 설정을 영구 적용하려면 다음 중 하나의 방법을 사용하시면 됩니다.


✅ 방법 1: systemd 서비스로 자동 적용 (추천)

1. 아래 명령어를 실행할 스크립트 생성

vi /usr/local/bin/set_max_cpu_freq.sh

스크립트 내용:

 
#!/bin/bash
# 90% of 2900000kHz = 2610000kHz

for cpu in /sys/devices/system/cpu/cpu[0-9]*/cpufreq/scaling_max_freq; do
    echo 2610000 > $cpu
done

2. 실행 권한 부여

chmod +x /usr/local/bin/set_max_cpu_freq.sh

3. systemd 서비스 생성

vi /etc/systemd/system/setcpufreq.service

다음 내용 입력:

 
[Unit]
Description=Set CPU max frequency to 90%
After=multi-user.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/set_max_cpu_freq.sh
RemainAfterExit=true

[Install]
WantedBy=multi-user.target

4. 서비스 등록 및 활성화

 
systemctl daemon-reexec sudo systemctl daemon-reload sudo systemctl enable setcpufreq.service

부팅할 때 자동으로 설정되며, 즉시 적용하려면 다음도 실행하세요:

systemctl start setcpufreq.service

✅ 방법 2: crontab에 등록 (대안)

 
crontab -e

맨 아래에 다음 추가:

@reboot for cpu in /sys/devices/system/cpu/cpu[0-9]*/cpufreq/scaling_max_freq; do echo 2610000 > $cpu; done

하지만 @reboot 시점에는 /sys/ 디렉토리가 아직 완전히 초기화되지 않았을 수 있으므로 systemd 방식이 더 안정적입니다.


✅ 방법 3: cpufrequtils 설정 파일 이용 (시스템에 따라 지원 여부 다름)

 
sudo apt install cpufrequtils
 
sudo nano /etc/default/cpufrequtils

내용:

ENABLE="true" GOVERNOR="ondemand" MAX_SPEED="2610000" MIN_SPEED="800000"

시스템에 따라 /etc/init.d/cpufrequtils 가 없을 수도 있고, 최신 Ubuntu에서는 systemd 방식이 더 일반적입니다.


✅ 요약

방법유지 여부안정성난이도
systemd 서비스 등록 ✅ 영구 유지 ✅ 안정적 중간
crontab @reboot ⚠️ 불안정 가능성 쉬움
cpufrequtils ✅ 영구 유지 ⚠️ 시스템에 따라 지원 안 될 수도 있음 중간

Windows는 기본적으로 Ubuntu 설치용 USB 부팅 디스크 제작 도구를 따로 제공하지 않습니다. 그러나, 무료로 사용할 수 있는 신뢰할 만한 도구들이 많이 있습니다, 그 중 가장 널리 쓰이는 것이 아래 두 가지입니다:


✅ 1. Rufus (가장 추천)

  • 홈페이지: https://rufus.ie
  • 특징:
    • 작고 가벼움 (설치 없이 실행 가능)
    • Ubuntu 포함 거의 모든 OS 설치 USB 제작 가능
    • BIOS/UEFI 자동 감지 및 설정

🧭 Rufus 사용 방법

  1. https://rufus.ie 에서 Rufus 다운로드
  2. USB 메모리 연결
  3. Rufus 실행 후 다음 항목 설정:
    • 장치(Device): USB 드라이브 선택
    • 부트 선택(Boot selection): Ubuntu ISO 파일 선택
    • 파티션 방식:
      • GPT (UEFI) → 최신 PC용
      • MBR (BIOS) → 구형 PC용
    • 나머지 설정은 기본값으로 두고 [시작] 클릭

✅ 2. balenaEtcher

  • 홈페이지: https://www.balena.io/etcher/
  • 특징:
    • 인터페이스가 매우 직관적 (3단계 클릭만으로 USB 제작)
    • 윈도우, macOS, 리눅스 모두 지원

❌ Windows 기본 기능으로는 어려움

  • Windows의 기본 디스크 복사나 "복원" 기능은 부팅 가능한 Linux USB를 만들 수 없습니다.
  • ISO 파일을 그냥 USB에 복사한다고 해서 부팅이 되지 않습니다.

📝 부가 팁

  • USB는 최소 4GB, FAT32 또는 exFAT 포맷 권장
  • Ubuntu ISO는 반드시 정식 사이트에서 다운로드
  • 설치 후에는 USB를 다시 포맷해서 일반 저장용으로 사용 가능

+ Recent posts