본문 바로가기

분류 전체보기667

728x90
반응형
[네트워크] 크로스레이어 프로토콜(Cross Layer Protocol)이란? 본 글은 2016년 11월 1일 11시 13분에 썼던 글이며 블로그 자료 이전으로 날짜와 일부 내용이 갱신되었습니다. 크로스레이어 프로토콜(Cross Layer Protocol)이란 한 계층의 프로토콜의 상태나 동작이 다른 계층(Layer)에 속한 프로토콜의 동작에 영향을 주는 것을 말한다. 예를 들어서 데이터링크(Data Link)계층에 속해 있는 프로토콜이 수집한 이웃 노드의 연결 품질(Link Quality)정보가 네트워크계층에 속한 프로토콜의 경로결정(Routing)에 영향을 주는 경우와 물리계층에 속한 프로토콜의 전력제어(Power Control)에 영향을 주는 경우 등이 있다. 전력제어와 관련된 크로스레이어 프로토콜의 한 예시를 설명 하자면 네트워크에 노드 A와 B와 C가 있고 서로 통신하는 .. 2020. 10. 13.
[네트워크] 듀티 사이클(Duty Cycle) 소개 본 글은 2017년 12월 16일 15시 50분에 썼던 글이며 블로그 자료 이전으로 날짜와 일부 내용이 갱신되었습니다. 통신 및 네트워크에서 흔히 말하는 듀티사이클(Duty Cycle)이란 주기적으로 장치가 켜지고 꺼지는 것을 말한다. 이는 주로 전력을 절약하기 위해 사용되며 흔히 통신 인터페이스의 전원을 껐다가 켜는 동작을 수행한다. 켜져 있을 때는 깨어있다(Wake up)하고 꺼져 있을 때는 자고 있다(Sleep)라고 말하는 것이 일반적이다. 위의 그림처럼 듀티 사이클을 나타낼 수 있으며 해석하면 t1에서 t2 시간 사이에는 장치는 켜져 있고 t2에서 t3에는 장치가 꺼져 있는 것을 알 수 있다. 2020. 10. 13.
아이폰에서의 와이파이 다이렉트 지원 여부 조사 본 글은 2017년 6월 23일 13시 35분에 썼던 글이며 블로그 자료 이전으로 날짜와 일부 내용이 갱신되었습니다. 아이폰이 와이파이 다이렉트(Wi-Fi Direct, Wi-Fi P2P)를 지원하는 지에 대해서 조사할 필요가 있어서 조사하게 되었다. 아이폰에서는 블루투스와 와이파이, 와이파이다이렉트, 이더넷 등의 인터페이스를 각기 독립적으로 사용하는게 아니라 여러 인터페이스를 하나처럼 사용할 수 있도록 MultipeerConnectivity라는 프레임워크를 제공하고 있다. 애플 개발자 문서: https://developer.apple.com/documentation/multipeerconnectivity 해당 프레임워크를 사용하면 아이폰에서 지원하는 인터페이스들을 활용하여 근처의 디바이스와 서비스를 찾.. 2020. 10. 13.
NS-3 UAN 모듈에 IPv6를 올리다가 생긴 PacketSocketHelper 중복 사용 문제 본 글은 2016년 12월 5일 20시 12분에 썼던 글이며 블로그 자료 이전으로 날짜와 일부 내용이 갱신되었습니다. UAN(Underwater Acoustic Networks) 모듈에 IPv6를 올려서 예제를 만드는 도중에 발생한 오류이다. IPv6나 IPv4를 노드(Node)에 올리다가 생기는 문제는 주로 PacketSocketHelper의 중복 사용 문제이다. InternetStackHelper가 PacketSocketHelper를 이미 쓰고 있기 때문에 나타나는 현상이라서 소스를 잘 살펴서 PacketSocketHelper가 중복 사용되는 부분만 지워주면 된다. 에러 메시지는 다음과 같다. Object::AggregateObject(): Multiple aggregation of objects o.. 2020. 10. 13.
TCP/IP가 성공한 이유는 무엇일까? 본 글은 2017년 11월 25일 0시 15분에 썼던 글이며 블로그 자료 이전으로 날짜와 일부 내용이 갱신되었습니다. 현재 대부분 통신이 TCP/IP 환경기반이다. 하지만 네트워크 관련 공부를 하다보면 OSI 7 Layer가 꼭 나오는데 이는 OSI 7 Layer가 비록 산업적으로나 상업적으로 성공하지는 못 했지만 새로운 네트워크 계층이나 프로토콜을 생각할 때 참고자료로써의 가치가 있기 때문이다. 그럼 왜 TCP/IP가 아닌 OSI 7 Layer가 참고자료로써의 가치가 아직까지도 있는데에도 왜 TCP/IP가 성공했는 지에 대해서 의문이 생긴다. 조사한 결과 이는 TCP/IP가 OSI 7 Layer보다 빨리 출시되었고 이기종간 통신 프로토콜이 최대한 빨리 필요한 미국방성에서 TCP/IP를 공식적으로 사용했.. 2020. 10. 13.
IPv4(Internet Protocol Version 4) 개요와 패킷 구조 본 글은 2017년 5월 29일 8시 34분에 썼던 글이며 블로그 자료 이전으로 날짜와 일부 내용이 갱신되었습니다. IPv4(Internet Protocol Version 4)는 1981년 9월에 IETF RFC 791에 정의된 TCP/IP에서 활용하는 네트워크 주소체계이다. 현재 IPv6와 함께 가장 강력한 인터넷 주소체계로 인정 받는다. IPv4에서는 네트워크 주소를 총 32비트로 표현하기 때문에 약 43억개의 주소를 나타낼 수 있다. 2011년 2월 4일부터 모든 공인 IPv4 주소가 소진되어 IPv4의 공인 IP 할당이 중지되었다. 네트워크에서의 주소를 표현하기 때문에 IPv4는 TCP/IP의 네트워크 레이어에 해당하는 프로토콜이다. 이 프로토콜의 패킷을 데이터그램이라고 부른다. IPv4의 패킷 .. 2020. 10. 13.
저장소 변경으로 라즈베리파이의 업데이트 속도를 빠르게 해보자 요약 라즈베리파이 저장소 미러 사이트에 가서 저장소 목록 확인 /etc/apt/sources.list 파일의 저장소 목록을 수정 저장소를 변경하는 이유 난 하드웨어와 소프트웨어는 순정 상태로 쓰는 것을 좋아한다. 그래서 어지간하면 기본 세팅되어 있는 저장소를 그대로 쓰고 싶은데 라즈베리파이의 경우 기본 저장소가 너무 느려서 개발 환경 세팅을 하는데 시간이 너무 오래 걸린다. 그래서 난 라즈베리파이를 세팅할 때 저장소를 한국에 있는 라즈베리파이 저장소 미러로 변경한다. 저장소 정보 확인 sudo vi /etc/apt/sources.list 먼저 /etc/apt/ 에 위치한 sources.list 파일을 열어본다. 파일을 보면 위와 같이 저장소 목록이 설정되어 있는 것을 확인할 수 있다. 빠를 것 같은 미러.. 2020. 10. 13.
NS-3에 적합한 통합개발환경(IDE)은 무엇일까? 본 글은 2017년 6월 15일 22시 24분에 썼던 글이며 블로그 자료 이전으로 날짜와 일부 내용이 갱신되었습니다. NS-3에 적합한 IDE를 검토한 이유 본격적으로 내가 네트워크 시뮬레이터를 사용해야하는 상황이 도래했다. 내가 소속되어 있는 연구실은 주로 NS-2와 NS-3를 네트워크 시뮬레이터로 사용하고 있으며 새롭게 네트워크 시뮬레이션을 익히는 자에게는 NS-3 사용을 권장하고 있다. 사실 나의 경우 작년에는 NS-3를 해도 gedit이나 Geany 같은 텍스트 에디터와 터미널 창으로 꾸역꾸역 버텨왔는데 이 경우 코드 추적, 자동완성 등의 기능을 사용하지 못 해서 생산성이 극단적으로 좋지 않았다. 안드로이드나 윈도우 개발을 주로하던 나에게는 이런 말도 안 되는 생산성으로 결과를 만들어 내니 꽤나 .. 2020. 10. 13.
라즈베리파이에서 BLE Advertising channel을 설정해보자 본 글은 2017년 6월 23일 22시 34분에 썼던 글이며 블로그 자료 이전으로 날짜와 일부 내용이 갱신되었습니다. Bluetooth Low Energy의 Advertising Channel 위의 사진과 같이 BLE(Bluetooth Low Energy)는 37번, 38번, 39번 채널에다가 Advertising을 할 수 있다. 하지만 기본설정으로는 3개의 채널을 번갈아가면서 Advertising하는 동작을 수행하기에 실험때문에 라즈베리파이의 블루투스의 Advertising 채널(channel)을 고정해야할 필요가 있어서 조사해보았다. 애플(Apple)의 BLE Advertising Channel ※ 참고: 현재 구글의 안드로이드나 애플의 iOS는 3개의 채널을 번갈아가면서 Advertising하는 동.. 2020. 10. 11.
OMNeT++ 소개 및 라이센스 비용 본 글은 2017년 9월 6일 18시 18분에 썼던 글이며 블로그 자료 이전으로 날짜와 일부 내용이 갱신되었습니다. OMNeT++ 소개 OMNeT++는 네트워크 시뮬레이터 중 하나로 확장성을 고려한 모듈식 설계가 큰 특징이다. 이 모듈식 개발을 위해 C++로 각 모듈의 동작을 구현하고 NED로 이 모듈을 묶는다. OMNeT++은 Eclipse 기반의 IDE를 제공하여 개발하기 용이한 장점이 있다. 사실 많이 사용하는 네트워크 시뮬레이터는 다 이 구조라서 구조자체는 딱히 큰 장점은 없으나 UI로 인한 편리함에 차이가 난다. OMNeT++ 라이센스 개인, 교육 및 연구를 목적으로한 학술기관, 비영리 연구기관 등에 비영리적 목적으로 무료로 제공한다. 하지만 아래의 예와 같이 영리 활동을 하는 경우 라이센스를 .. 2020. 10. 11.
NS-3에서 데이터형을 변환 하는 법 본 글은 2017년 10월 27일 11시 28분에 썼던 글이며 블로그 자료 이전으로 날짜와 일부 내용이 갱신되었습니다. 한 날 NS-3 모듈을 개발하는 도중 클래스 형변환을 할 필요가 있었다. NS-3에서는 스마트 포인터를 사용하고 있기에 dynamic_cast(expression), static_cast(expression)를 사용하면 된다 싶었는데 NS-3에서는 이게 안 된다. 찾아보니까 NS-3에는 비슷한 동작을 하는 다른 것이 있었다. DynamicCast(expression)이라는 것인데 dynamic_cast 처럼 동일한 역할을 하는 것 같다. 사용법은 다음과 같다. class NetDevice{}; class WifiNetDevice : public NetDevice{}; . . . // 현.. 2020. 10. 11.
라즈베리파이로 블루투스 비컨을 Advertising 해보자 본 글은 2017년 6월 23일 23시 36분에 썼던 글이며 블로그 자료 이전으로 날짜와 일부 내용이 갱신되었습니다. 라즈베리파이의 블루투스 라즈베리파이3에는 블루투스 모듈이 내장되어 있으며 Bluetooth 4.1 Classic과 BLE(Bluetooth Low Energy)를 지원한다. 이 중 BLE는 연결을 수립하지 않고 데이터를 넣어 패킷을 보내는 Advertising을 수행할 수 있으며 라즈베리파이3에서 쉽게 사용할 수 있다. 이 때 사용하는 패킷을 비컨(Beacon)이라 부른다. Advertising을 통해 iBeacon과 같은 기능을 라즈베리파이3가 수행할 수 있다. 본 글에서는 라즈베리파이3가 iBeacon을 수행하도록 설정하는 것을 다룬다. ※ iBeacon이란 애플이 등록한 상표로써 자.. 2020. 10. 11.
윈도우에서 php_ssh2 모듈을 써보자 본 글은 2017년 7월 17일 14시 34분에 썼던 글이며 블로그 자료 이전으로 날짜와 일부 내용이 갱신되었습니다. 윈도우에서 php_ssh2 모듈을 쓰는 이유 아무래도 보안 때문에 sftp를 써야해서 php_ssh2 모듈을 설치했다. 설치하면서 생각보다 착오를 많이 겪어서 다음에 진행하기 용이하도록 이 글에 설치법을 남긴다. 설치를 진행했던 컴퓨터의 환경은 Windows Server 2012 R2 x64와 php5.5, IIS 8.5.9600.16384이다. 먼저 사용가능한 버전을 확인하면 아래와 같다. 윈도우 php_ssh2 모듈 다운로드 php_ssh2 다운로드 주소 : https://pecl.php.net/package/ssh2 php_ssh2 모듈은 이렇게 버전들이 있다. 대부분 리눅스에서 구.. 2020. 10. 11.
[자바/JAVA] 네이버 SMTP를 활용해 메일을 발송해보자 본 글은 2017년 7월 19일 08시 32분에 썼던 글이며 블로그 자료 이전으로 날짜와 일부 내용이 갱신되었습니다. JAVA 기반의 SMTP 메일 발송 샘플코드를 기록하는 글이다. JavaMail 이라는 라이브러리를 가져다 쓰자 여기에서(https://javaee.github.io/javamail/) 받을 수 있다. 이 라이브러리는 SMTP와 IMAP, POP3을 지원한다. 개발환경 : JDK 1.8.0_111 x64, Windows 7, Eclipse Mars.1 Release (4.5.1), JavaMail 1.6.0 위에 있는 링크에 가서 javax.mail.jar을 받는다. 그 후 이클립스에 프로젝트를 생성하고 SMTP 클래스를 생성한 후 외부라이브러리를 위와 같이 추가한다. package ex.. 2020. 10. 5.
IoTivity에서 no oc_logger 에러가 발생할 때 해결법 본 글은 2017년 12월 13일 00시 48분에 썼던 글이며 블로그 자료 이전으로 날짜와 일부 내용이 갱신되었습니다. 세미나 때문에 오랜 만에 IoTivity를 할 일이 생겼다. 그런데 라즈베리파이에서 IoTivity 예제를 실행하니 다음과 같은 오류가 떠서 서버 프로그램이 실행되지 않았다. 에러는 'no oc_logger in java.library.path' 이다. 말 그대로 라이브러리 경로에서 oc_logger가 없다는 건데 내가 예전에 환경 변수 설정을 잘 못 해둬서 나는 거였다. 환경 변수 설정을 다시 해주면 된다. 나의 경우 문제가 있던 환경 변수가 다음과 같았다. export JAVA_HOME=/usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt export LD_LIB.. 2020. 10. 4.
[윈도우 10] 원격데스크톱 - CredSSP 암호화 Oracle 수정 때문일 수 있습니다. 본 글은 2018년 8월 21일 00시 39분에 썼던 글이며 블로그 자료 이전으로 날짜와 일부 내용이 갱신되었습니다. 어느 순간 내 컴퓨터로 원격 접속을 하려니 'CredSSP 암호화 Oracle 수정 때문일 수 있습니다.' 라는 오류 메시지가 나타나면서 접속이 불가능했다. 알아보니까 2018년 3월에 발견된 CredSSP의 취약점으로 인한 피해를 방지하기 위해 2018년 5월 윈도우 서버 업데이트에서 보호 수준이 완화로 기본 설정되었다고 한다. 취약점이 있다하더라도 일단 내 컴퓨터로 접속은 해야하니 원격 데스크톱의 클라이언트가 될 컴퓨터(원격 접속을 시도할 컴퓨터)의 설정을 바꿔야 한다. 1. 윈도우키 + R 를 입력하여 실행 창을 연다. 2. gpedit.msc 를 입력한다. 3. 로컬 컴퓨터 정책 .. 2020. 9. 27.
IIS 7.5에서 TLS 1.2를 활성화 하자. 어느 날 아주 예전에 구축해놓은 홈페이지와 웹서버를 점검하고 있던 중에 'TLS 1.2'를 지원하지 않아서 크롬의 보안 정책으로 인해 홈페이지의 기능이 정상적으로 동작하지 않고 있는 것을 발견하였다. 2020년 5월부터 크롬에서는 TLS 1.2를 지원하지 않는다고 한다[1]. 다행히 'IIS 7.5'는 간단한 설정만으로 'TLS 1.2'를 지원한다. 방법은 다음과 같다. 1. 실행 - regedit 입력 2. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols 로 이동 3. 'TLS 1.2' 키 생성 4. 'TLS 1.2' 키 안에 'Client'와 'Server' 키 생성 5. 'Client', .. 2020. 9. 26.
미디어위키에 인터넷 익스플로러(IE) 호환성 보기용 메타 태그 추가하기 안타깝게도 2020년인 지금도 인터넷 익스플로러(IE) 호환성을 고려해야하는 상황이 한국에는 있다. 특정 IE 버전으로 호환성 보기를 하기 위해서는 IE 호환성 보기용 meta 태그를 html 페이지에 추가하면 된다[1]. 미디어위키에 meta 태그를 추가하는 방법은 여러가지가 있다 그 중 BeforePageDisplay라는 Hook을 이용하여 페이지의 HTML이 생성될 때 meta 태그를 추가하는 방법이 가장 보편적이다[2]. 하지만 인터넷 익스플로러(IE)의 경우 비표준 meta 태그 형태라서 이 기능을 이용하는 것은 적합하지 않다. 진짜 온갖 방법을 써봤는데 먹히지가 않는다. 아래처럼 IE 호환성 보기용 meta 태그를 넣으면 $out->addMeta( 'http:X-UA-Compatible', '.. 2020. 9. 25.
스프링 프레임워크에서 트랜잭션을 설정할 때 주의해야할 것 스프링 프레임워크에서 트랜잭션을 설정하는 것은 인터넷에 잘 나와있다. 하지만 몇 가지 중요한 포인트를 놓쳐서 하루 종일 시간을 날렸다. 트랜잭션 어노테이션 혹은 트랜잭션을 위한 AOP를 설정할 때는 서블릿 컨텍스트 설정 파일(servlet-context)에다가 해당 내용을 기입해야한다는 것이었다. "설정 값만 보면 정상인데 왜 이게 동작을 안 하지?"라는 생각을 하며 있었는데 참 허탈하다. 이거 외에도 컨트롤러가 아닌 @Component, @Service, @Repository 유형의 클래스 또는 그 클래스의 메서드에다가 트랜잭션을 설정한다는 점과 트랜잭션을 위해서는 인터페이스가 필요하다는 것을 알았다. 아직은 어떤 이유로 이렇게 써야하는 건지를 모르겠다. 나중에 알게 되면 내용을 추가하겠다. [참고] .. 2020. 9. 7.
스프링 시큐리티를 쓸 때 한글 관련 인코딩으로 주의해야할 점 스프링 시큐리티(Spring Security)를 쓴다면 주의해야할 것이 있다. 내가 이것 때문에 오랜 시간 삽질을 했었다. 스프링 시큐리티는 ISO/IEC 8859-1 인코딩을 쓰는데 필터 순서를 제대로 안 맞춰주면 스프링 시큐리티의 필터가 먼저 동작하여 인코딩이 의도한 대로 동작하지 않는다. 나는 한글을 사용해야하고 웹프로젝트와 DB 모두 UTF-8로 설정되어 있었기 때문에 UTF-8로 데이터가 통신되어야 하는데 web.xml 설정 파일에서 필터 순서를 잘 못 지정해줘서 데이터가 ISO/IEC 8859-1로 통신되고 있었다. 설정 파일에서 필터는 위에(낮은 라인 번호) 있는 것이 먼저 실행된다. 검색하다보니 정통적으로 실수하는 내용인 것을 알았다. 다시는 실수하지 않기 위해 글을 남긴다. [참조] [1.. 2020. 9. 6.