• 카테고리
    • 전체 글

    • 카테고리1
    • 카테고리2
    • 카테고리3
    • 카테고리4
  • 태그
  • 방명록

'2021/02/17'에 해당되는 글 3건

  • 2021.02.17 생활의 속도 - 시간은 왜이리 안가나? / 왜 이리 빨리가나?
  • 2021.02.17 WSL2에서 기본 로그인 계정 설정하기
  • 2021.02.17 log4net Appender 커스텀

생활의 속도 - 시간은 왜이리 안가나? / 왜 이리 빨리가나?

카테고리 없음 2021. 2. 17. 19:05

50대에 접어든 혹은 훌쩍 넘으신 분들이 종종 하시는 말씀이 자신의 나이가 시간이 흐르는 속도라고 이야기하신다. 10대 때는 시간이 너무 너무 안가서 답답했지만, 40대를 넘어 50대에 접어들면 뭐 잠깐 했는데, 하루가 갔다고 말씀하신다.

나도 솔직히 공감가는 내용이다. 나도 10대 때만 해도 정말 시간이 잘 흐르지 않았다. 물론 재미넘치는 게임을 하면 시간이 항상 부족했지만, 교실에서 공부할때나, 도서관에서 책을 읽을 때나, 정말 시간이 흐르지 않았다. 나중에 20대 후반에 회사 업무를 잡았을때도, 바쁠때도 있었지만, 전반적으로는 시간적인 여유가 있었다. 아무리해도 시간이 남아 애니도 보고 만화도 보고 게임도 하던 그런 때가 있었다. 그런데, 지금은 업무에 집중을 해도 시간이 모자란다. 멀티테스킹은 일치 감치 포기한지 오래다. 되려 시간이 부족해서 스트레스를 해소할 방법을 찾기도 전에 어둑해지는 하늘만 멀끔히 볼 때도 있다.

정말 10살때는 10Km/h 속도로 시간이 흐르다가, 40되서는 40km/h가 되어 50되서는 50km/h가 되어 죽을 때는 정말이지 시간이 휙휙 지나갈 것 같다.

이 생각을 머릿속에 담고 있다가, 내 나름대로 생각해본 가설이 있어 적어본다.

왜 이렇게 시간 밀도가 나이에 따라 밀도가 달라질까?
처음에는 별 생각없이 그런가 보다 했다. 그런데, 막상 나이가 들고보니 앞서 이야기하신 선배들의 말이 맞아들어가 스스로 의구심이 들었다. 왜 그럴까?

이 때 세운 가설이 두뇌 시계라는 것을 생각했다.
절대적으로 모두의 공인을 받은 시계는 24시간으로 정해져 있다. 모두에게 공평하게 주어져 있다. 하지만, 자신의 두뇌에서 동작하는 시계는 철처하게 주관적으로 흐르는 시간이다. 보통 우리는 매 1분 1초 마다 머릿 속의 시계와 현실 시계를 잘 동기화 하지 않는다.(물론 약속시간 확인하거나, 퇴근 시간 3분전에 시계를 빤히 쳐다보는 사람이 아니라면...)
실제 시간이 흐르는 것과는 별개로 두뇌 안의 시계는 스스로 시간을 계산을 한다.

이 때, 나이가 어릴때, 즉 두뇌의 활동력이 우수할 때를 기준으로 본다면, 모든 일처리가 금방 끝난다. 사실 복잡한 것을 풀기 위해 많은 경험이 요구될 수 있지만, 대개의 경우 발전되는 시기의 두뇌라면 매우 빠른 처리가 가능하다. 빠른 처리만큼 결과물도 빨리나오게 되며, 당연한 결과겠지만, 여유시간이 늘 수 밖에 없다. 엄청난 처리 속도와 함께 두뇌 내 시계는 빨리지나갔지만, 실제 시간은 그에 비해 천천히 흘러갔으니, 시간적 여유가 남은 것 처럼 느끼는 것이다. 느린 시간의 느낌이지 않을까?

그러나 나이가 들어가면서 전체적인 처리속도가 줄어들고, 동시에 해야 할일은 더 늘어나면서 해야 할 일이 늘어나게 되면, 일이 엄청나게 밀리게 된다. 하나씩 처리하다가 보면, 미처 완료도 되지 않아 머리속 시계는 아직 주춤 거리고 있는데, 어느새 실제 시간은 훌쩍 지나가버린다. 뭐 하지도 않았는데, 벌써 어두워지는 하늘을 보게 된다고 생각한다.

상대적인 시간이고, 상당히 주관적인 것이기 때문에, 아 차이는 개인차가 따르게 된다. 분명 나이 70 먹고도 시간이 정말 느리게 흐른다고 느낄 수 있고, 15살인데도 불구하고 게임 좀 했는데 시간이 벌써 엄청나게 흘러갔다고 느낄 수 있다. 하지만, 일상적인 생활, 일상적인 업무를 한다고 가정한다면, 대개는 나이만큼의 시간이 흐른다고 느낄 것으로 생각한다.

주변의 이야기와 내 개인적인 경험만으로 추론한 것이라, 실제로 그럴 것이라 우기지는 못하겠지만, 나름 맞다고 생각이 든다.

효율적인 시간 활용은 매우 어렵다. 하지만, 빠르게 시간이 지나는 것을 느끼며, 일처리가 완료되면 나름 뿌듯한 성취감을 느끼지 않을까 싶다. 요즘 더욱 절실하게 원하는 생활 패턴 같다.

 

728x90
저작자표시 (새창열림)
블로그 이미지

하인도1

[하인드/하인도/인도짱 의 홈페이지] 저만의 공간입니다. 다양한 소재들을 나열하는 아주 단순 무식한 홈페이지 입니다. 다양한 문서 자료도 있겠지만, 저의 푸념들도 있답니다.

WSL2에서 기본 로그인 계정 설정하기

카테고리 없음 2021. 2. 17. 18:50

Windows 10에는 WSL 이라는 기술이 적용되어 있다.
자세한 WSL 기술에 대한 설명은 다른 웹사이트들을 참고하면 잘 나와 있다.
www.google.com/search?q=WSL2

 

WSL2 - Google 검색

2020. 7. 21. · 2004 업데이트를 해야 wsl2를 쓸 수 있는데, 넉넉한 하드 공간에도 불구하고, 기존의 설치된 앱들 덕분인지 윈도우 업데이트는 수동 프로그램을 ...

www.google.com

docs.microsoft.com/en-us/windows/wsl/compare-versions

 

Comparing WSL 2 and WSL 1

Compare version 1 and version 2 of the Windows Subsystem for Linux. Learn whats new in WSL 2.

docs.microsoft.com

간단하게 요약하면, Windows 10에 가상 머신을 만들어 Windows 안에 Linux를 동작하게 하는 것이다. 다만 이 가상화가 보통 알고 있는 Virtual Box, VMWare Workstation과 같은 전체 가상화가 아니라, Container 라는 개념의 아주 Light한 가상화라고 이해하면 될 것 같다. 여튼 Windows 10에서 Linux를 별다른 제약없이 쓸 수 있는 방법이다.

나는 이 Linux 중 Ubuntu 20 버전을 사용하는데, 이게 Microsoft Store에서 다운 받아 설치하여 구성할 수 있다.
문제는 설치를 하면, 내 개인 계정의 AppData 안에 이 가상화에 사용되는 기본 파일들을 저장한다는 점이다.

c:\Users\{개인 계정 Id}\AppData\Local\Microsoft\WindowsApps\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\ 

같은 위치에 각종 설정 파일, Linux 파일 폴더 등등이 담기게 된다. 만일 이 안에 개발 도구나 라이브러리 업데이트를 하면 저 위치에 용량이 늘어날 수 있다. 그래서 wsl의 import와 export 기능을 이용해 위치를 변경했다.

거기까지는 잘 되었는데, 예전에는 분명 내 개인 계정으로 로그인되는데, 갑자기 root로 로그인되는 것이다. root 계정은 편하긴 한데, 너무 넘치는 권한이라, 부담되어 예전처럼 내 개인 계정으로 나오는 방법을 찾아보았다.

결과적으로는 아래의 URL에서 답을 찾았다.

superuser.com/questions/1107986/how-to-sign-into-root-account-by-default-on-windows-subsystem-for-linux-bash-t

 

How to sign into "root" account by default on Windows Subsystem for Linux Bash terminal

Windows 10's Anniversary Update just came out and I immediately installed the Windows Subsystem for Linux to see how it fares. I found only one major shortcoming so far: there was no obvious way to...

superuser.com

다만, 저 방법을 적용하려고 보니, ubuntu 라는 실행파일을 도저히 찾을 수 없었다. 그래서 갸우뚱 거리고 있었는데, 알고보니, ubuntu2004.exe 로 변경되어 있었다. 경로를 찾을 때 아래와 같은 명령을 넣어서 간신히 찾았다.

dir/s/w ubuntu*.*

명령은 다음과 같이 넣으면 된다.

ubuntu2004 config --default-user {내 리눅스 계정}

막상 찾고보니, 댓글에 있긴 했다.

여튼, WSL2 기법을 이용한 Linux 이용방법이 기발하긴 하다.
서버 개발을 할 때 매우 유용하며, 특히 Docker Desktop for Windows의 경우 이 WSL2를 이용하면 Hyper-V 설치 없이 이용이 가능하다.

나중에 Windows 용 Docker 설치 관련 글을 정리해서 작성해볼 예정이다.

728x90
저작자표시 (새창열림)
블로그 이미지

하인도1

[하인드/하인도/인도짱 의 홈페이지] 저만의 공간입니다. 다양한 소재들을 나열하는 아주 단순 무식한 홈페이지 입니다. 다양한 문서 자료도 있겠지만, 저의 푸념들도 있답니다.

log4net Appender 커스텀

자료수집 2021. 2. 17. 17:08

< 아래의 글을 참고로 작성했다. >

Custom Log4Net appender

docs.particular.net/samples/logging/log4net-custom/

 

Custom Log4Net appender • Log4Net Logger Samples

Customizing Log4Net by passing in a custom Appender.

docs.particular.net

Pattenlayout 내 커스텀 Converter 추가하기.

devstuffs.wordpress.com/2012/01/12/creating-your-own-pattern-layout-converter-for-log4net/

 

Creating your own Pattern Layout Converter for Log4net

Pattern Layout Converter is the way you tell log4net how to log something that it doesn’t know yet. You first create your class that will get the information, for instance, this class will is…

devstuffs.wordpress.com

 

현재 회사 프로젝트에서 log4net을 많이 이용하고 있다. 어느 정도의 리소스 소모가 발생하는 것은 어쩔 수 없지만, 순간 순간의 현재 상태를 찾아 내려고 로그를 작성할 때, 최소한 내가 만든 것보다 매우 효율적으로 동작하는 것은 확실했다.그래서 잘 사용해 왔는데...

로그 내용이 날 Text로 표시되다 보니, 문제가 내부 로직을 유추할 수 있다는 문제가 발생했다. 그래서 어떻게 해야하나 싶어 고민하는 중, 로그 출력을 담당하는 Appender의 로직 안에 Log를 찍기 직전에 Message 내용을 암호화 하면 된다는 생각이 들었다. 이래 저래 Googling을 통해서 다양한 정보들을 접하면서 하나씩 찾아 적용해보면서 대략적인 방향이 잡혔다. 그 내용을 정리한다.

 

1. Appender 만들기

log4net에서 사용가능한 Appender를 만들려면, IAppender 인터페이스 혹은 IBulkAppender 인터페이스를 구현해야 한다. 그리고 IOptionHandler 인터페이스도 같이 구현해서 다양한 설정 값을 처리해야 한다. 그래서 이 인터페이스 구현에 대한 최소 버전인 AppenderSkeleton을 상속 받아 구현해도 된다. 하지만, 단순히 파일 기반의 Appender에 대한 수정이라, 나는 RollingFileAppender를 상속 받았다.

이 클래스 안에 있는  void Append(log4net.Core.LoggingEvent loggingEvent) 함수만 override 했다. 여기서 파라미터로 받는 loggingEvent 안에는 로그로 출력할 정보에 대한 대부분의 정보가 담겨 있는데, 그 중 메시지 값만 암호화 하면 된다.

 

string newMessage = {암호화 처리 함수}(loggingEvent.RenderedMessage);

암호화 처리를 하는 함수를 별도로 구현해서 loggingEvent 안에 있는 메시지 값을 암호화 한 뒤, 문자열로 돌려줄 수 있게만 해주면 된다. 이렇게 암호화된 문자열을 아래의 코드와 같이 loggingEvent 안에 있는 Message 프로퍼티에다 새로 만든 암호화된 문자열을 Set 해주면 된다.

FieldInfo _loggingEventm_dataFieldInfo = typeof(LoggingEvent).GetField("m_data", BindingFlags.Instance | BindingFlags.NonPublic);

LoggingEventData loggingEventData = (LoggingEventData)_loggingEventm_dataFieldInfo.GetValue(loggingEvent);
loggingEventData.Message = newMessage;
_loggingEventm_dataFieldInfo.SetValue(loggingEvent, loggingEventData);

override를 했으니 맨 나중의 값은 base를 불려주도록 해준다.

base.Append(loggingEvent);

 

2. 암호화 함수 만들기

사실 암호화 방법은 다양하게 있어 자신이 속해있는 조직별, 프로젝트별 암호화 로직은 다양하게 적용될 수 있어 딱 이렇게 하시라라는 부분은 없지만, 중요한 부분은 암호화 결과가 String으로 나와야 한다는 점이다. 보통 암호화 결과물은 바이트 배열이기 때문에, 이 점을 주의해야 할 필요가 있다. 일단 내가 사용한 암호화는 복호화를 하기 쉽게 하고 PC에 부담이 적은 암호화 로직을 사용한 예제로 아래와 같이 사용했다.

private string Encrypt(string str)
{
    byte[] arySomeData = new byte[] { 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xF0 };
    DESCryptoServiceProvider des = new DESCryptoServiceProvider();
    des.Key = arySomeData;
    des.IV = arySomeData;
    ICryptoTransform desdecrypt = des.CreateDecryptor();

    byte[] src = Encoding.Default.GetBytes(str);
    byte[] result = new byte[0];
    using (MemoryStream ms = new MemoryStream())
    {
        CryptoStream cs = new CryptoStream(ms, desdecrypt, CryptoStreamMode.Write);
        cs.Write(src, 0, src.Length);
        cs.FlushFinalBlock();
        aryResult = ms.ToArray();
    }
    return Convert.ToBase64String(result);
}

문자열을 입력 받으면 salt 값으로 암호화 처리 인스턴스를 받은 뒤, 암호화 하고, 최종적으로 base64 인코딩을 하도록 했다. 이렇게 작성하면 입력된 문자열을 암호화 하게 된다.

 

3. 설정 적용

원래는 app.config 나, log4net.xml 같은 설정 파일을 통해 적용할 수도 있지만, 외부에 노출된 설정 파일로 맘껏 변경할 수 있게하면, 굳이 암호화를 처리하기 위한 로직을 작성하는 이유가 없다. (그냥 Appender 설정을 log4net에서 제공하는 Appender로 변경하면 끝임) 그래서 프로그램 시작할 때, 이 Appender로 처리될 수 있도록 변경하는 로직을 만들어 적용했다.

Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository();
                    
PatternLayout patternLayout = new PatternLayout();
patternLayout.ConversionPattern = "[%date %level (%t)[%property{uqid}] %logger - %message]%newline";
patternLayout.ActivateOptions();

EncryptionAppender appender = new EncryptionAppender();
appender.File = @".\EncryptedLog.log";
appender.Layout = patternLayout;
appender.StaticLogFileName = true;
appender.ActivateOptions();
hierarchy.Root.AddAppender(appender);

hierarchy.Root.Level = log4net.Core.Level.All;
hierarchy.Configured = true;

별 특이한 로직은 없다.
로그를 남길 때의 패턴을 구성하고, 위에서 만든 Appender를 생성한 뒤, 앞서 만든 패턴과 함께 설정을 한다.
그리고 난 뒤 앞서 가져온 루트 리파지토리에 Appender를 추가한다.

이제 외부에서 로그 내용의 암호화를 맘대로 끌 수 없게 된다.

 

4. 결론

굳이 암호화까지 해야 하나.. 라는 생각도 들지만, 내 디버깅 정보를 탈탈 털어서 역공학으로 소스로 만든 내용에 대한 이해/분석을 로그로 한다고 하니, 할 수 없이 암호화를 했다. 이 암호화 한 내용을 복호화 하여 처리하는 로직을 별도로 만들어봤다. 앞서 암호화 한 내용만 추출해서 복호화 할 수 있게만 했다.

워낙 후줄그래한 로직이라, 공개하긴 그렇지만, 일단 잘 암호화되어 저장되었음을 알 수 있었다.

 

728x90
저작자표시 (새창열림)
블로그 이미지

하인도1

[하인드/하인도/인도짱 의 홈페이지] 저만의 공간입니다. 다양한 소재들을 나열하는 아주 단순 무식한 홈페이지 입니다. 다양한 문서 자료도 있겠지만, 저의 푸념들도 있답니다.

  • «
  • 1
  • »
250x250

블로그 내에 소스 코드 삽입 이사온 기념 스킨도... RSS 전문 기능 비활성화 관련. 스킨 바꾸어 보았습니다. 서버 파일 정리 좀 했습니다.

«   2021/02   »
일 월 화 수 목 금 토
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28

좀 비스킷 불만 Azure 수 개발환경 Visual Studio 인터파크 moss SharePoint 협업 me2sms 오류 me2dayzm windows 것 블로그 me2photo 2010 twi2me Google Apps Engine MOSS 2007 java Tutorial 매뉴얼 친구 e-book Buscuit WSS 지름신

  • Total :
  • Today :
  • Yesterday :

Copyright © 2015-2025 Socialdev. All Rights Reserved.

Copyright © 2015-2025 Socialdev. All Rights Reserved.

티스토리툴바