Skip to main content

CentOS 7에서 Nginx/PageSpeed Module + PHP-FPM7.1 + MariaDB 설치, 보안 로그인 (1)

Ubuntu 이외의 첫 리눅스 도전

서버를 구축하면서 처음에는 익숙한 Ubuntu로 막연하게 되겠거니 생각했는데,
사실 말처럼 우분투는 그렇게 가볍지 않았다.

물론 무언가 검색했을 때 바로바로 해결책이 나오고 apt-get으로 나오는 검색 결과가 많은 점은 확실히 메리트이긴 하나, 몇 가지 마음에 안 드는 점이 있었는데…

  • 너무 잦은 업데이트
    • 아무리 서버 콘솔 운영체제를 깔아도 우분투의 패키지 업데이트는 무척 많고 방대하고 잦다.
    • 아무 생각 없이 업데이트 했다가 기존에 잘 돌아가던게 안 될 우려가 크므로 신중해야 하는데, 로그인시마다 업데이트 몇 개가 있다고 압박을 한다.
  • 너무 많은 변수
    • 소프트웨어도 다양하고 좋은 점은 있지만, Ubuntu에서 셋팅법은 타 OS보다 더 다양하고, 그만큼 문제의 요인도 많아보인다.
    • 물론 대부분의 단점은 본인의 미숙함에서 오는지라, 그냥 이런저런 문제로 Ubuntu 말고 CentOS가 서버에 적합하다는 의견을 많이 보게 되면서 골랐다고 보면 된다.
  • apt와 apt-get보다 yum이 단순하고 편하다.
    • 이건 철저히 취향 문제인지라… 좀 더 써보면서 결론을 내볼까 한다. 일단 명령이 짧은 건 명백한 장점이다.

Apache보단 Nginx가 답인가

Apache가 일반적인 서버 셋팅의 정석인 듯 한데, Apache는 무겁고, 셋팅이 결코 단순하지 않다. Nginx가 가볍다고 잘라 말하기엔 다양한 상황이 있고, 멀티미디어 성능에서는 상호간에 큰 차이가 없는 것으로 나타나있다. 편한 걸 쓰기 나름이지만, config의 스타일이 직관적인 점과 FastCGI가 기본인 Nginx가 더 끌렸다.

그럼 이제부터 서버 셋팅을 시작해보자. 따끈따끈하게 VPS에서 CentOS 7 서버를 만들어낸 상황으로 가정하자.

참고로 본 서버는 Vultr에서 구동되고 있다. 서버 셋팅에 관해서 후일 더 자세하게 적어볼 생각이다. 링크를 누르고 신규 서버를 셋팅하고 금액을 지불하면, 신규 가입자와 글쓴 본인 모두에게 소정의 적립금이 적립된다고 한다.

다음 글에서 이어집니다.

[SCIT마스터 작문] 2017年11月6日

정신적인 문제를 안고 있을 경우, 술과 담배는 도움이 된다고 생각합니까?

일러두기

  • 이 주장은 논리 전개를 위해 선택된 것으로 자신의 생각과 일치하다고 할 수 없습니다.
  • 일본어로 쓴 다음, 한국어로 옮긴 글입니다.

작문

저는 정신적인 문제를 안고 있을 때, 술과 담배 같은 것은 도움이 되지 않는다고 생각합니다. 왜냐하면, 술과 담배는 의존성이 있어서, 결과적으로 몸을 술과 담배에 맡기는 상태가 되기 때문입니다. 의존한 끝에 자신의 몸을 망가트리는 것은 충분히 예측 가능합니다.

물론, 술을 마시면 몸과 마음이 편안해지고, 담배를 피면 냉정해지고 짜증과 스트레스의 대책이 된다고 하는 사람도 있습니다만, 그것은 평소 정신적 스트레스에 더 약해져서, 감정의 제어를 잃어버리는 결과에 지나지 않는다는 의견도 있습니다.

그러므로, 저는 정신적인 문제를 안고 있을 때, 술과 담배는 도움이 되지 않는다고 생각합니다.

감상

조사 하나로 틀린 것으로 그치면 좋았을 것을, 술 주 글자에서 삼수변을 세 번이나 빼먹은 실수는 부끄럽습니다.

CentOS 7에서 GoAccess 셋팅

개요

GoAccess는 유닉스 계열 시스템의 터미널, 사용자의 브라우저에서 돌아가는 오픈 소스 실시간 웹로그 분석기이자, 상호 작용 뷰어라고 합니다. 터미널 기반 로그 분석기다보니,
SSH 같은 터미널로 접속했을 때, 웹 서버 통계를 빠르게 분석할 수 있는 물건입니다.
터미널 출력 말고도 HTML이나 JSON, CSV로 출력하게 할 수도 있다네요.

배경

nginx의 실시간 통계 기능이 있다는 글을 보고, 그 툴이 나름 잘 만들어졌길래 혹시나 하고 정보를 더 찾아봤습니다.

그리고 알게된 사실은 nginx plus라는 상용 프로젝트에 들어 있는 물건으로 많이 비싸다는 것입니다.

nginx 실시간 현황 확인 페이지 설치에 대해서는 후일 또 올리도록 하겠습니다.

결국 이를 대체할 다른 방법이 없을까 찾아봤는데, GoAccess가 가장 괜찮은 대안 같았습니다.

설치

cent OS 7 기준…

sudo yum update
sudo yum install goaccess

이걸로 끝.

컴파일을 하고 싶은데 openssl 오류를 뛰어넘지 못해서 빌드에 이르지 못하고 있습니다.

로그 설정

https://github.com/stockrt/nginx2goaccess

우선 여기 가서 내 서버에 설치 후 저 설명대로 access_log format을 nginx에서 긁어다가 붙여서 변환시켜야 합니다.

access_log (log파일이름) combined로 간편하게 선언하면 GoAccess에서도 아무런 문제 없이 읽어들이는 것을 확인할 수 있습니다.

그러나 저는 Virtual Host로 별도 사이트 운영중이기 때문에 VHOST명을 포함한 로그 수집은 필수였고, 그러면 필히 파싱 오류가 나더군요.

 

옵션

goaccess /var/log/nginx/access.log -o ~/go_report.html --real-time-html

데몬화

*단순 데몬화는 간단합니다. –daemonize만 붙이면 그 순간부터 백그라운드로 잘 실행됩니다.

그러나 제 경우엔 그것만으로는 부족합니다. 자동 실행되어야 합니다.

1.systemd 관련 설정을 위한 파일 생성

[Unit]
Description=GoAccess Live Log Analyzer

[Service]
Type=simple
ExecStart=goaccess /var/log/nginx/access.log -o ~/go_report.html --real-time-html
ExecStop=/bin/kill -9 ${MAINPID}
PrivateTmp=false

[Install]
WantedBy=multi-user.target

/etc/systemd/system/goaccess.service에 root 권한을 써서 생성합니다.

–daemonize는 불필요합니다. 이 자체가 systemd 데몬으로 구동됩니다.

sudo nano /etc/systemd/system/goaccess.service면 될 듯 합니다.

2. systemctl daemon-reload를 써서 위 정보를 서비스로 읽어들입니다.

3. sudo systemctl start goaccess를 쓰면 정상적으로 시작합니다.

이제 서버에서 go_report.html을 읽어보면 잘 작동하는 것을 볼 수 있습니다.

문제점

다만, SSL이 적용된 경우, html 내부에 쓰인 goaccess 구동용 웹소켓 또한 보안으로 암호화되어야 합니다.

아쉽게도 yum에서 손쉽게 설치한 goaccess는 최신 버전인 1.1에서 추가된 openssl 관련 컴파일 옵션이 빠져있습니다.

손수 빌드하셔서 openssl을 포함시켜야 쓸 수 있을 것으로 보입니다.

여담

셋팅 다 해놨더니 불안한 서버 속도를 극복하고자 Cloudflare 캐싱을 활용하게 되었습니다.

접속 경로가 Cloudflare를 경유하게 된 탓에 방문 경로 분석이 무용지물이 되었는데요.

다행히 Google Analytics 스크립트는 영향받지 않으므로 통계 수집에 이상이 없다고 하네요. 그 쪽의 방문자 수 통계를 더 참고해야 할 듯.

역시 본연의 액세스 로그 판단 용도에 맞도록 트래픽이 하드한 파일과 오류 파악에나 신경을 쓰면 되지 싶습니다.

[SCIT마스터 작문] 2017年10月30日

유연근무제를 도입하고 있는 기업이 있습니다만, 이 제도에 대해 당신의 의견을 서술해주세요.

일러두기

  • 이 주장은 논리 전개를 위해 선택된 것으로 자신의 생각과 일치하다고 할 수 없습니다.
  • 일본어로 쓴 다음, 한국어로 옮긴 글입니다.

作文

フレックス制を導入している企業が増えているなか、私はそのメリットが知られてなくて、まだ多くの会社が導入してないことが残念な事実だと思います。

なぜなら、通勤ラッシュも避けられるし、自分に合う時間を選んで働くことで人それぞれである活動時間に集中していい結果に繋がるからです。私も学校のバイトをしてしていたとき、午後を選んで、通勤時間を避け、ストレスなく働いたことがあります。

たしかに、会社の中で連絡が難しくなるこおはあると思います。しかし、これはメッセンジャーなどの機能を使えば、簡単に対処できます。

ですから、私はフレックス制の導入をより進めた方がいいと思います。

 

작문

유연근무제를 도입하고 있는 기업이 늘고 있는 요즘, 저는 그 장점이 알려지지 않아서, 아직 많은 기업이 도입하지 않고 있는 것이 안타까운 사실이라고 생각합니다.

왜냐하면, 통근 러시아워도 피할 수 있고, 자신에게 맞는 시간을 골라서 일하는 것으로 사람들 제각각인 활동 시간에 집중해서 좋은 결과로 이어질 수 있기 때문입니다. 저도 학교에서 아르바이트를 했을 때, 오후를 골라서 통근 시간을 피해서 스트레스 없이 일한 적이 있습니다.

물론 회사에서 연락이 어려워지는 문제가 있으리라 생각합니다. 그러나 이것은 메신저 등의 기능을 사용하면 간단히 대처할 수 있습니다.

그러므로, 저는 유연근무제의 도입을 더욱 진행하는 편이 좋다고 생각합니다.

감상

지난주 문장의 속편 같이 닮은 경험입니다. 하지만 근거편은 별로 발전하지 않은 것 같다는 생각이 듭니다. 어디에 있어도, 언제 출근해도 괜찮아지려면, 출세를 해야지요.

프로그래밍이란?

사람이 프로그래밍 언어로 명령하여 컴퓨터를 기동하는 기술

하나 이상의 추상 알고리즘을 특정 프로그래밍 언어를 사용하여, 상세한 컴퓨터 프로그래밍으로 실체화하는 기술을 말한다.

소스 코드 → 컴파일러 → 기계어

JAVA의 탄생 배경

  • 1991년 Sun사에서 제임스 고슬린을 중심으로 가전제품에 사용하기 위한 언어의 제작
  • 특정 CPU에 의존하지 않기 위해 가상 머신을 사용하게 됨
  • 넷 발달과 함께 웹에 사용할 수 있는 언어가 되었다.

[SCIT마스터 작문] 2017年10月23日

당신에게 지금 100만 엔의 여유가 있다면, 저금하시겠습니까? 투자하시겠습니까?

일러두기

  • 이 주장은 논리 전개를 위해 선택된 것으로 자신의 생각과 일치하다고 할 수 없습니다.
  • 일본어로 쓴 다음, 한국어로 옮긴 글입니다.

작문

돈에 여유가 있다면, 저금을 할 것인가, 아니면 투자를 할 것인가. 거기에는 반드시 옳은 정답은 없습니다. 그렇지만, 스스로의 기준만 있다면, 앞으로 어떻게 할지는 정할 수 있습니다. 그래서 저는 저금을 50%, 또 투자를 50%로 절반씩 나누었습니다.

왜냐하면, 저금의 이점인 재산의 보장과 투자의 이점은 높은 이익, 양쪽을 얻을 수 있기 때문입니다. 최근에는 10년간 계속된 불황도 끝이 예측되고 있고, 각국에서는 제각기 투자를 서두르고 있다고 합니다. 금리도 한국에서는 미국처럼 앞으로 오를 것이며, 투자의 이익도 경제와 연결되어 있기 때문입니다.

물론, 일본은 아직 제로 금리고, 투자 방법에 따라서 실패하기 쉽다는 점도 있습니다. 그러나 저도 5년 정도 전부터 투자 펀드가 10% 정도의 이익을 얻었으므로, 평소 투자하기 때문에야말로, 자신의 방법을 익힐 수 있다고 할 수 있습니다.

그러므로 만약 제게 100만 엔이 생긴다면, 저금과 투자를 절반씩 하려고 생각합니다.

선생님의 코멘트

세세한 문법 사용의 실수가 신경 쓰입니다.

감상

애매한 문장에 애매한 근거, 그런 곳엔 애매한 매력이 깃드는 법입니다. 적어도 한 가지로 입장을 정해서 썼다면, 읽는 쪽도 즐길 수 있는 문장이 되지 않았을까, 하고 생각해봅니다.

TickCount 탐구

발단

이 의문이 시작된 것은 단순히 String(또는 C#과 같은 언어에서는 string으로 간소화되기도 하죠, 이하 string)과 StringBuilder, StringBuffer의 성능 차이에 대한 초급적인 언급이었습니다.

string은 실제로는 읽기 전용처럼 쓰인다는 건 초보 빼고는 다 알고 있는 사실입니다. immutable이라고 하던데, 변하지 않는다는 말이죠. 따라서 우리가 자유롭게 +나 concat을 하면 string은 그 때마다 새로운 개체를 반환하게 됩니다.

C++에서는 strcat()으로 문자열을 수정할 때 큰 영역을 미리 할당해두면 속도가 비약적으로 증가한다고 하지만, C#과 Java에서는 문자열의 수정이 어렵기 때문에 다른 방법이 필요하다는 것이고, 그 내용은 MSDN에도 잘 나와 있습니다. Java랑 C#이 판박이인 점은 코드를 복붙해보면 쉽게 알 수 있는 내용이더군요.

효과 검증

그래서 이걸 어떻게 알 수 있을까요. Java 선생님은 문자열을 파바바박 쏟아내는 반복문을 짜고, “어라, 별 차이가 없는데” 하셨지만, 실제로 큰 차이가 발생하는 것은 어느 정도 코드를 통해서도 쉽게 파악할 수 있었습니다.

 

/* string performance in C# */
            string me = "";
            Console.WriteLine("String START");
            var cnt = Environment.TickCount;
            for (int i = 0; i < 100000; i++)
            {
                me += "a";
            }
            Console.WriteLine("Time: "+(Environment.TickCount - cnt).ToString());
            Console.WriteLine("END");
            //Console.WriteLine(me);

            StringBuilder sb = new StringBuilder();
            Console.WriteLine("StringBuilder START");
            cnt = Environment.TickCount;
            for (int i = 0; i < 100000; i++)
            {
                sb.Append("a");
            }
            Console.WriteLine("Time: " + (Environment.TickCount - cnt).ToString());
            Console.WriteLine("END");

C# 코드

/* string performance */
        String me = "";
        System.out.println("String START");
        long cnt = System.currentTimeMillis();
        for (int i = 0; i < 100000; i++)
        {
            me += "a";
        }
        System.out.println("Time: "+(System.currentTimeMillis() - cnt));
        System.out.println("END");

        StringBuffer sb = new StringBuffer();
        System.out.println("StringBuffer START");
        System.out.printf("capacity: %d, length: %d\n", sb.capacity(), sb.length());
        cnt = System.currentTimeMillis();
        for (int i = 0; i < 100000; i++)
        {
            sb.append("a");
        }
        System.out.println("Time: " + (System.currentTimeMillis() - cnt));
        System.out.printf("capacity: %d, length: %d\n", sb.capacity(), sb.length());
        System.out.println("END");

Java코드는 다음과 같은 결과가 나왔습니다.

String START
Time: 7467
END
StringBuffer START
capacity: 16, length: 0
Time: 9
capacity: 294910, length: 200000
END

어마어마한 차이네요. 10만 개의 String을 붙이면서 7초 넘게 소요되었습니다. 한편, C#은 그나마 5초 내외로 되는게 코드 최적화의 힘인가 싶습니다. StringBuffer와 StringBuilder 모두 일의 자리나 심지어 0ms로, 찰나에 가까운 수준이라 극명한 차이를 보여주더군요.

역시 이미 사용된 Heap을 얼마나 유용하게 사용하고, 새로운 메모리 할당을 피하는 것이 중요한지 알게 되는 실험이었습니다.

새로운 의문

흥미로운 점은 Java의 StringBuffer와 달리 C#의 StringBuilder 소요 시간이 0ms라고 출력된 점입니다. 코드 한 줄도 아니고 10만인데 그게 가능한 걸까? 오차는 아닐까? 궁금해졌습니다.

당장, Environment.TickCount를 의심하기 시작했습니다. 사실 TickCount로 코드 속도를 비교하는 시대는 멀티 프로세서 시대의 도래로 종말을 맞았다는 이야기도 있습니다. 코드의 선후 관계는 보존되더라도 코드가 동시에 실행되는 타이밍의 차이는 충분히 있을 수 있다는, 쓰레드 위험이 일상화된 멀티 프로세싱의 시대니까요.

그래서 당장 C# 유저들은 무슨 방법을 쓰는가 알아보았습니다.

  • Environment.TickCount
  • GetTickCount / GetTickCount64
  • DateTime.Now(UtcNow).Ticks
  • Stopwatch
  • static Stopwatch.GetTimestamp

Environment.TickCount

가장 편하게 쓸 수 있는 Environment static class의 멤버 TickCount입니다. 컴퓨터의 UpTime을 보여주는 GetTickCount()와 다를 게 없는 특성으로, 부호 있는 정수(int)인지라, 차를 구할 때 24.9일 이상 켜진 컴퓨터에서는 특별한 조치가 필요합니다. MSDN에서는 Int32.MaxValue와 & 연산을 하여 해결하였습니다. (부호만 제거되겠군요)

GetTickCount64

Vista부터 쓸 수 있는 Win32 API인 GetTickCount64는 부호 없는 long 타입으로 반환합니다. 시스템이 켜진 시간으로부터 출력되는 밀리세컨드 값을 담기에 충분한 용량이죠. 다만, 실제로 놀지 않고 컴퓨터가 일한 시간을 구하려면 QueryUnbiasedInterruptTime을 사용해야 합니다.

DateTime.Now(UtcNow).Ticks

서기 1년 1월 1일 자정부터 100나노세컨드로 지난 시간을 나타냅니다. 윤초 같은 보정은 없다고 합니다.

Stopwatch

Stopwatch는 new 키워드 없이 인스턴스화가 가능한 Static 메소드 StartNew()를 통해 시간을 재기 시작하여 Stop()을 호출한 다음, ElapsedMilliseconds와 같은 속성으로 경과 시간을 측정할 수 있습니다.

  • IsHighResolution 속성에서 현재 컴퓨터의 하드웨어가 별도의 고해상도 성능 카운터 기능이 있는지 알 수 있는데, 현세대 컴퓨터는 대체로 True를 반환하는 것 같습니다.
  • Frequency 속성은 타이머의 틱 주기를 반환합니다.
    long frequency = Stopwatch.Frequency;
        Console.WriteLine("  Timer frequency in ticks per second = {0}",
            frequency);
        long nanosecPerTick = (1000L*1000L*1000L) / frequency;
        Console.WriteLine("  Timer is accurate within {0} nanoseconds", 
            nanosecPerTick);
    • 이와 같은 코드에서 Stopwatch 타이머의 정확도가 나타납니다.
        Timer frequency in ticks per second = 2343750
        Timer is accurate within 426 nanoseconds

static Stopwatch.GetTimestamp

Stopwatch의 인스턴스화 후 계산하는 시간을 아까워한 일부 유저는 GetTimestamp static 메소드의 성능이 더 좋지 않을까 생각하더군요.

  • 고해상도 성능 카운터가 활성화된 상태에선, 현재값을 출력합니다.
  • 일반 시스템 시계를 쓰는 경우, DateTime.Ticks와 동일한 값을 출력합니다.

벤치마킹

Repeating measurement 3 times in loop of 10,000,000:

Measured: GetTickCount64() [ms]: 228
Measured: Environment.TickCount [ms]: 50
Measured: DateTime.UtcNow.Ticks [ms]: 83
Measured: Stopwatch: .ElapsedMilliseconds [ms]: 856
Measured: static Stopwatch.GetTimestamp [ms]: 476
Measured: Stopwatch+conversion to DateTime [ms]:  811

Measured: GetTickCount64() [ms]: 219
Measured: Environment.TickCount [ms]: 50
Measured: DateTime.UtcNow.Ticks [ms]: 84
Measured: Stopwatch: .ElapsedMilliseconds [ms]: 847
Measured: static Stopwatch.GetTimestamp [ms]: 465
Measured: Stopwatch+conversion to DateTime [ms]:  799

Measured: GetTickCount64() [ms]: 235
Measured: Environment.TickCount [ms]: 51
Measured: DateTime.UtcNow.Ticks [ms]: 84
Measured: Stopwatch: .ElapsedMilliseconds [ms]: 851
Measured: static Stopwatch.GetTimestamp [ms]: 470
Measured: Stopwatch+conversion to DateTime [ms]:  791

Compare that with DateTime.Now.Ticks [ms]: 1150

General Stopwatch information:
- Using high-resolution performance counter for Stopwatch class.
- Stopwatch accuracy- ticks per microsecond (1000 ms): 2.3
 (Max. tick resolution normally is 100 nanoseconds, this is 10 ticks/microsecond.)
- Approximated capacity (maxtime) of TickCount [dd:hh:mm:ss] 25:20:31:23

Done.

단일 스레드만 쓰도록 프로세스 설정한 다음, 스레드 우선 순위를 높이고, Stopwatch를 활용하여 1000만 번 각각 호출하는데 걸린 시간입니다.

TickCount가 공통적으로 빠르지 않냐 싶은데, Stopwatch는 ElapsedMilliseconds 표시를 위해 추가로 계산하는 시간도 고려해야 할 듯 합니다.
개인적으로는 Start() Stop()을 반복하는 게 더 의미 있는 행동이 아닌가 싶기도 한데 말이죠.

 

벤치마킹 소스 코드 참고: https://stackoverflow.com/questions/243351/environment-tickcount-vs-datetime-now

결론

GetTickCount는 혼돈과 혼돈입니다. 설마 20여 일 동안 컴퓨터를 켜고 있을 멍청이가 있으리라 생각했을까요. DWORD로 부호 없애봐야 40여 일이군요.

쓰라는 거 써서 큰 이상이 생길 것 같진 않습니다. 하지만, 무엇이 오래 걸리는지 메소드와 클래스별 특징을 잘 알고 있다면, 오래 걸리는 작업을 최대한 회피하거나 미루는 방식으로 퍼포먼스를 더 향상시킬 수 있겠지요.

앞으로도 궁금한 점이 있으면 직접 실험해야겠다 마음 먹게 되는 주제였습니다.

프로그램의 기초

프로그램이란

컴퓨터가 범용적인 기계가 된 것은 바로 프로그램(program) 때문이다. 프로그램은 컴퓨터를 위한 작업 지시서로서, 구체적으로 컴퓨터가 특정한 작업을 하기 위하 명령어의 리스트이다. 명령어란 CPU가 수행하는 기초적인 연산이다.

프로그래밍 언어

  • 소스 코드(source code): 원하는 작업을 텍스트로 기술한 것
  • 소스 파일(source file): 소스 코드가 파일에 저장된 것
  • 오브젝트 파일(object file): 컴파일러가 기계어로 변환하여 파일에 저장한 것

[SCIT마스터 작문] 2017年10月16日

스스로 사장이 된다면, 어떤 복지 제도를 만들고 싶습니까? 왜 그렇습니까?

일러두기

  • 이 주장은 논리 전개를 위해 선택된 것으로 자신의 생각과 일치하다고 할 수 없습니다.
  • 일본어로 쓴 다음, 한국어로 옮긴 글입니다.

작문

만약 자신이 사장이 된다면 어떤 복지 제도를 만들고 싶은가? 그렇게 생각해서 회사 입장에 서봤습니다. 그렇게 함으로써 견해를 넓일 수 있기 때문입니다. 제가 떠올린 것은, 일하는 장소를 선택할 수 있는 제도입니다.

왜냐하면, 장소를 바꾸는 것이, 떨어진 집중력을 높일 수 있는 최고의 방법이기 때문입니다. 그리고 상상력도 풍부해져서, 효율도 높아집니다.

물론 사원이 여기저기 흩어져서 어디에 있는지 모르게 되니까 좋지 않다고 생각될지도 모르지만, 원격에서 연락은 최근에는 어려운 일이 아닙니다.

그러므로 사원들이 자유롭게 장소를 선택할 수 있는 복지 제도를 만들고 싶다고 생각합니다.

선생님의 코멘트

자신의 경험을 넣으면 훨씬 좋을 것 같네요.

예) 저도 SC 마스터에서 공부할 때, 휴게실에 이동하면 집중할 수 있습니다.

감상

이번 주부터 선생님이 바뀌어서(반 재편성) 제대로 코멘트를 달아주십니다. 연습해서 지적받지 않도록 해야겠다고 생각했습니다.

JAVA 연휴 평가 코드

Q1

import java.util.Scanner;

public class Q1 {

/*
 * 정수를 입력하세요: 8
 * 3의 배수도 5의 배수도 아닙니다.
 * 정수를 입력하세요: 3
 * 3의 배수입니다.
 */
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.print("정수를 입력하세요: ");
		
		int input = sc.nextInt();
		
		boolean is3mul = input % 3 == 0;
		boolean is5mul = input % 5 == 0;
		
		String output = "";
		if(!(is3mul || is5mul)) {
			output = "3의 배수도 5의 배수도 아닙니다.";
		} else {
			output += (is3mul && is5mul ? "3과 " : (is3mul ? "3의 " : ""));
			output += (is5mul ? "5의 " : "");
			output += "배수입니다.";
		}
		
		System.out.println(output);
		sc.close();
	}

}

Q2

import java.util.Scanner;

public class Q2 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.print("정수1 입력: ");
		int x = sc.nextInt();
		System.out.print("정수2 입력: ");
		int y = sc.nextInt();
		int min = (x < y) ? x : y;
		int max = (x < y) ? y : x;
		
		for(int i = min; i <= max; i++) {
			System.out.print(i+" ");
		}
		sc.close();
	}

}

Q3

class Account {
	private int num;
	private String name;
	private int balance;
	
	public Account(int num, String name) {
		this.num = num;
		this.name = name;
		this.balance = 0;
	}

	public Account(int num, String name, int balance) {
		this.num = num;
		this.name = name;
		this.balance = balance;
	}

	public int getNum() {
		return num;
	}

	public void setNum(int num) {
		this.num = num;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getBalance() {
		return balance;
	}
	
	public void deposit(int money) {
		this.balance += money;
	}
	
	public void withdraw(int money) {
		this.balance -= money;
	}
	
	public void print() {
		System.out.printf("번호:%d\t이름:%s\t잔액:%d", this.num, this.name, this.balance);
	}
}

public class Q3 {

	public static void main(String[] args) {
		//기본 생성자로는 객체를 생성할 수 없게 한다. 아래의 코드는 에러가 나야 함.
		//Account ac = new Account();
		
		//계좌번호와 이름을 입력받는 생성자를 정의한다. 이 때 잔액은 0
		Account ac1 = new Account(1, "김철수");
		
		//계좌번호와 이름, 잔액을 모두 입력받는 생성자를 정의한다.
		Account ac2 = new Account(2, "이영희", 10000);
		
		//이름을 리턴하는 메소드를 정의한다. 결과는 "이영희" 출력
		System.out.println(ac2.getName());
		
		//잔액은 변경 불가능. 아래 코드 모두 에러
		//ac2.balance = 1000;
		//ac2.setBalance(1000);
		
		//입금을 하면 잔액이 변경된다. 아래는 잔액 1000원 증가
		ac2.deposit(1000);
		System.out.println(ac2.getBalance()); //11000 출력
		
		//출금을 하면 잔액이 변경된다. 아래는 잔액 2000원 감소
		ac2.withdraw(2000);
		System.out.println(ac2.getBalance());
		
		//print() 메소드를 호출하면 전체 정보가 출력된다.
		//아래는 "번호:2 이름:이영희 잔액:9000"라고 출력된다.
		ac2.print();
	}

}

[SCIT마스터 작문] 2017年10月2日

같은 수입이 있다면, 대기업의 일원으로서 일하는 것과, 독립하여 일하는 것, 어느 쪽이 좋다고 생각합니까? 이유는 무엇입니까?

일러두기

  • 이 주장은 논리의 전개를 위해 선택되었으므로, 자신의 견해와 일치한다고 볼 수 없습니다.
  • 일본어를 먼저 쓴 다음 한국어로 번역되었습니다.

작문

저는 같은 수입이 있다면, 대기업의 일원으로서 일하기보다는 독립하여 일하는 것이 좋다고 생각합니다. 대기업에서 일하는 것이 독립해서 일하는 것보다 좋지 않은 점도 있는 것입니다.

왜냐하면, 독립해서 일을 하면 일의 순서와 휴식 시간 등을 스스로 결정할 수 있기 때문입니다.

물론, 대기업에서 연금도 더 받을 수 있고, 수입 이외의 장점도 있다고 보여집니다만, 이것은 개인뿐 아니라 사회 전체적으로 봐도 역설적인 부분입니다.

그러므로, 저는 독립해서 일하면서 자신을 속박하지 않는 생활을 지향합니다.

감상

동어 반복이 너무 많아서 힘듭니다. 읽으면서도 부끄러웠습니다.

[SCIT마스터 작문] 2017年9月25日

인간 관계를 좋게 하려면 무엇이 가장 중요하다고 생각합니까?

의견 정리

인간 관계를 좋게 하려면 식사를 같이 하는 편이 가장 중요합니다. 왜냐하면, 배가 차면 장소의 분위기도 풀리기 때문입니다. 물론 식사가 만능 열쇠라고 할 수 없고 커다란 영향이 없을지도 모릅니다.

그러나 데이트의 시작도 식사라고 자연스럽게 생각하듯이, 같은 이유로 친구도, 사회에서의 인간 관계에서도 통하는 곳이 있습니다.

그러므로, 인간 관계를 좋게 하려면 우선 식사를 시작하는 편이 좋다고 생각합니다.

감상

심플한 발표로, 스탠딩을 가정하지 않아서 무척 단순한 구성이 되었습니다. 쓰면서 분량만 신경쓰다보니 문장의 근거가 상당히 느슨합니다.

짧으면서 임팩트를 주는 발표란 무엇인가, 다시 한 번 생각해보게 됩니다.

[SCIT마스터 작문]2017年9月18日

인간 관계를 좋게 하려면 무엇이 가장 중요하다고 생각합니까?

의견 정리

인간 관계를 좋게 하려면 식사를 같이 하는 편이 가장 중요합니다. 왜냐하면, 배가 차면 장소의 분위기도 풀리기 때문입니다. 물론 식사가 만능 열쇠라고 할 수 없고 커다란 영향이 없을지도 모릅니다.

그러나 데이트의 시작도 식사라고 자연스럽게 생각하듯이, 같은 이유로 친구도, 사회에서의 인간 관계에서도 통하는 곳이 있습니다.

그러므로, 인간 관계를 좋게 하려면 우선 식사를 시작하는 편이 좋다고 생각합니다.

감상

심플한 발표로, 스탠딩을 가정하지 않아서 무척 단순한 구성이 되었습니다. 쓰면서 분량만 신경쓰다보니 문장의 근거가 상당히 느슨합니다.

짧으면서 임팩트를 주는 발표란 무엇인가, 다시 한 번 생각해보게 됩니다.

 

[SCIT마스터 작문]2017年9月11日

당신이 일자리를 찾을 때, 무엇을 가장 중시합니까? 그 이유는?

작문

저는 직장을 찾을 때, 무엇보다 안정이 중요하다고 생각합니다. 거기에는 세 가지 이유가 있어서, 어느 것도 인생에서 빼놓을 수 없는 중요한 것이라고 생각합니다.

우선, 안정은 행복의 우선 조건입니다. 안정된 생활이 불가능하면, 야근과 빠른 출근, 부정기적인 급료 등의 이유로 인간으로서 도저히 살기 어렵습니다. 충분한 수면을 취하고, 새벽에 깰 필요가 없는 일이 생활의 질을 높일 수 있습니다.

다음으로, 모험의 어려움입니다. 보람과 돈은 물론 중요한 것이지만, 그 길은 무척 길고 험하다고 생각합니다. 일의 계속, 그 자체가 어려울 정도로 안정되어있지 않기 때문입니다.

마지막으로, 안정은 다른 조건을 채울 수 있는 계기가 됩니다. 안정된 수입과 예측 가능한 시간 덕에 자기 관리와 직장 승진도 노릴 수 있습니다.

소감

SCIT 마스터 시작 이후 과제로 최초로 적은 글입니다만, 역시 문제가 많습니다.

그리고 이걸 외워서 발표한다는 것을 전혀 알려주지 않아서 무척 당황스러웠던 기억입니다.

그러니까 첨삭해주지 않는 요시다 선생님을 멀리하고, 친절하신 센다 선생님을 가까이 하는 것이 낫습니다.

종합검진의사 닥터 G 2017년 제10회 한국어자막

섬네일

제10회 환자의 호소 “열이 나고 배가 아프다”

환자는 어머니와 여동생, 할아버지 넷이서 생활하는 5살의 남자 아이다. 작년, 부모가 이혼하고, 아버지 대신 할아버지와 매일 가라데 훈련을 하고 있다. 항상 손이 가지 않는 오빠였지만, 어느 날, 좀처럼 일어나지 않아서 어머니가 보러 가니, 격한 복통으로 괴로워하고 있었다. 열도 있었다. 어머니가 회사에 “일을 쉰다”고 연락을 할 때, 구토를 하였다. 급히 동네 병원으로 가자, 종합병원에 가는 편이 낫다고 하면서 닥터 G를 소개받았다.
【닥터 G】 니가타대학의치학종합병원 소아과의사 사이토 아키히코
【게스트】 세킨 츠토무, 야스 메구미

폐렴구균성폐렴에 의한 흉막염
폐렴은 다양한 균과 바이러스에 의해 일어나지만, 그 중에서도 폐렴구균이라고 불리는 세균이 원인이 되는 경우가 가장 많다고 합니다. 폐렴구균은 주로 비인두(코와 목 안쪽)에 자리잡고 있어서, 기침과 재채기로 균이 주위에 비산되고, 그것을 흡입하는 것으로 감염됩니다. 이 균에 감염되어 폐렴을 발병하게 되면, 심한 기침, 가래, 발열, 가슴 통증 등의 증상이 나타납니다. 증세가 심하면 균이 수막염, 혈액 속에 침투하여 ‘패혈증’을 일으키는 경우가 있습니다. 0세부터 5세까지의 소아와 65세 이상의 고령자 등 면역력이 약한 사람이 걸리기 쉽고, 예방접종이 추천됩니다.
이번 증례의 5세 남아 환자는 폐렴구균이 기도에서 폐 내부에 감염하는 루트가 아닌, 어떤 원인으로 균이 혈액 속으로 침투하여, 혈류를 따라 폐의 외부에 도달하는 루트(“침윤성폐렴구균감염증”)으로 감염한 탓에, 기침과 같은 감기 증상이 없었습니다. 폐를 감싸는 흉막까지 염증이 퍼져서 “흉막염”을 일으키고, 그 통증이 신경에 전달되어 복통을 일으키고 있었습니다.
항생물질 효과로 내원 다음날 열이 내리고, 복통도 나았으며, 1주일 후에 무사히 퇴원하였습니다.

出所: http://www4.nhk.or.jp/doctorg/196/

주요 단어

  • 嘔吐おうと: 구토
  • 吐気はきけ: 구토감
  • 細菌性腸炎さいきんせいちょうえん: 세균성 장염
  • キャンピロバクター胃腸炎いちょうえん: 캠필로박터 위장염
  • サルモネラ感染症かんせんしょう: 살모넬라 감염증
  • イレウス(Ileus), 腸閉塞ちょうへいそく: 장폐색
  • 虫垂炎ちゅうすいえん: 충수염(맹장염)
  • 腎盂腎炎じんうじんえん: 신우신염
  • レントゲン: X-Ray

느낀점

아이가 아픈 것은 참으로 진단하기 어려운 일이라 생각합니다. 처음에는 복통이니 뭘 잘못 먹었는가부터 시작해서, 전개 도중에는 키우던 거북이에 의한 세균 감염까지 나오고 닭고기냐 돼지고기냐 이런 이야기가 많았는데요. 언제나 멀리 돌아가는 닥터 G 에피소드의 특성을 여실히 보여주는 전개였습니다. MC가 “못난 출연진에게 의심 받은 거북이에게 거북아 미안하다!”라고 말할만도 했다 봅니다.

예방접종을 받으면서 예방접종으로 무엇을 하는지 잘 모르고 받는다고 생각합니다. 폐렴균이 하나가 아니란 것도 이번에 처음 알았습니다. 독감 예방이 어려운게 변이가 많아서 모두 대응할 수 없기 때문에 예방접종도 마치 유행 패션 찍듯이 유행할 균을 예측해서 만드는 것에 불과하다고 하죠. 다행히 더 많은 케이스에 대응할 수 있게 되면서 보호받을 수 있는 균의 종류도 늘어난 건 좋습니다만, 이렇게 출생 시기에 따라 같은 면역 시스템인데도 차이가 날 수 있다는 것을 이해시킬 수 있는 회차였다고 봅니다. 의료진이 이런 정책의 변화 시기를 잘 기억하고, 현재 상태가 아닌 당시의 환경을 고려하여 진단을 종합적으로 내리기엔 사실상 어려운 점이 많기 때문에, 꾸준한 교육과 정보 습득이 없으면 불가능한 닥터 G의 탄생이었을 것입니다.

병명은 한자어를 초월하여 더욱 어려운 모습이었습니다. 특히 절절 매는 말투의 여성 수련의 정말 알아듣기 힘든 내용이었습니다. 수련의라서 학생 같은 느낌이겠지만, 저런 분한테 진단받을 때, “간염일지도 모른다고~(생각합니다는 안 들림)” 같은 진단을 받으면 어떤 기분일지. 아무튼 역시 안 들릴 때는 몇 번이고 재생을 다시하는 수밖에 없습니다. 빈칸은 용납할 수 없죠.

영상에 대해

영상은 별도로 제공하지 않으며, 개인적인 PVR 시스템을 통해 녹화하여 제작하였습니다. 저작권 법 준수를 위해 추가로 영상을 전송받거나 타인에게 전송을 하지 않았습니다.

2017-06-21-종합검진의사 닥터 G-NHK World 한국어자막 다운로드

종합검진의사 닥터 G 2017년 제9회 한국어자막

섬네일

제9회 환자의 호소 ‘배가 부풀고 괴롭다’

그림책을 중심으로 다루는 서점을 경영하는 58세의 여성. 책 읽어주기랑 재난지역에 책을 보내는 활동에도 힘을 쏟고 있다. 최근 배가 부풀어서 괴롭다고, 대학병원의 소화기내과에서 진찰받았다. 복수가 차있는 것이 발견되어서, 검사를 해보니 복수에서 암세포가 발견되었다. ‘3개월 시한부’ 선고를 받고 호스피스를 추천받은 한편, 이차진료를 받고 싶다고 닥터 G를 찾았는데… “선생님, 저는 포기하고 싶지 않습니다!” 환자를 구할 수 있을 것인가?
【닥터 G】 일본의과대학 무사시코스키병원 종양내과 의사 가츠마타 노리유키
【게스트】 유야마 레이코, 가츠무라 마사노부

원발성 복막암
암은 최초에 발생한 장소(원발소)에 의해 ‘폐암’, ‘위암’과 같이 진단되지만, 드물게 전이된 암(전이소)은 있는 한편, 어떤 검사를 해도 원발소가 발견되지 않는 경우가 있습니다. ‘원발불명암’입니다.
‘원발불명암’에는 다양한 종류가 있지만, 그 중에 여성 복막에 전이가 확인되어, 종양 마커 CA125 수치가 높게 나타나며, 소화기와 난소 등의 장기에 암이 없는 경우에 특히 ‘원발성 복막암’이라는 병명이 붙어있습니다. 지금까지 임상 데이터에서 난소암과 같은 치료가 유효하다는 것이 밝혀져 있습니다.
증례의 환자는 소화기내과, 부인과, 비뇨기과 등 전문과에서 진찰을 받았지만, 원발소가 발견되지 않아서 치료될 수 없다는 진단을 받았습니다. 장기별로가 아닌, 암을 종합적으로 볼 수 있는 종양내과인 닥터 G에 의해 진단이 내려져서, 난소암과 같은 항암치료제와 대망(복막의 일부), 자궁, 난소의 적출 수술을 하였습니다. 5년 후 현재, 암의 재발 없이 건강하게 일하고 있습니다.

出所: http://www4.nhk.or.jp/doctorg/196/

주요 단어

  • 結核けっかく: 결핵
  • 腹膜炎ふくまくえん: 복막염
  • クラミジア感染症かんせんしょう: 클라미디아 감염증
  • 卵巣らんそう: 난소
  • 原発巣げんぱつそ: 원발소

느낀점

이번 닥터 G는 상당히 무섭습니다. 수련의들이 쩔쩔매는 모습이 인상적이던 회차입니다. 병이 있어도 알지 못하고 죽으라고 시한부 선고를 내리는 매정한 의사들과 많이 비교가 되는 한편, 한국은 종양내과가 일반적이라 이런 상황이 부각되기 전에 안착이 된 듯 합니다. 이번 화는 등장한 모두가 그리 어려운 말을 하지 않아서 듣기에 힘들었던 부분은 상당히 줄었다고 생각됩니다. 일본어는 암을 한자로 쓰지 않는다는 게 특이한 부분이라고 생각합니다. 더 어려운 말도 한자로 써야만 하는 경우가 많은데, 암은 생각보다 어려운 글자는 아니죠. 그러나 의외로 がん이라고 의료계에서 발음될 동음이의어가 없다보니 자연스레 암이 떠오르는데 지장이 없다는 점도 알아둬야겠지요.

영상에 대해

영상은 별도로 제공하지 않으며, 개인적인 PVR 시스템을 통해 녹화하여 제작하였습니다. 저작권 법 준수를 위해 추가로 영상을 전송받거나 타인에게 전송을 하지 않았습니다.

2017-06-14-종합검진의사 닥터 G 한국어 자막

종합검진의사 닥터 G 2017년 제8회 한국어자막

サムネイル

6월7일 (수) ‘종합검진의사 닥터 G’ 선 환자의 호소 ‘등이 아프다’

환자는 시어머니의 간호로, 심신 양면으로 스트레스 받는 생활을 하고 있는 50세의 여성. 1년 정도 전부터, 종종 등을 찌르는 듯한 통증을 느꼈습니다. 간호의 피로일까, 갱년기 장애일까, 아니면 무언가 더 무서운 병일지도 모른다…는 불안을 느끼던 중, 어느 날 밤, 딸과 통화를 하던 도중에 돌연 격한 통증이 나타났다. 어깨와 턱, 가슴도 아프다. 놀라서 친정에 달려온 딸과 함께 닥터 G의 병원을 찾았다. 문진은 계속되는데…
【닥터 G】 오카야마대학병원 의사 가타오카 히토미
【게스트】 하야미 유, 롯카쿠 세이지

모세혈관 협심증
심장의 모세혈관이 좁아져서, 혈관이 나빠지는 병입니다. 폐경 전후의 여성에게 나타나는 경우가 있습니다. 원인은 동맥경화를 막는 작용을 하는 여성 호르몬(에스트로겐)의 분비가 줄어드는 것이라고 합니다. 증상은 가슴과 등의 통증 등으로, 비교적 안정시에 일어나는 경우가 많다고 합니다. 갱년기 장애를 겪는 여성 10명 중 한 명이 걸린다는 조사도 있으며, 심근경색에 이르는 경우도 있습니다.
치료는 협심증약 중 칼슘 길항제와 니코란딜을 복용하는 것입니다.

증례의 환자는 다양한 의료기관을 전전하며, 심전도와 에코, CT 등 외에도, 전문의한테 심장조영술 검사도 받았지만, 이상은 발견되지 않았습니다.
‘미세혈관협심증’을 의심한 닥터 G는, 전문 의사에게 특별한 검사를 의뢰하는 것으로 확정 진단을 내릴 수 있었습니다. 칼슘 길항제 장기 복용을 하는 것으로 통증이 발생하는 일 없이 건강한 생활을 하고 있습니다.

出所: http://www4.nhk.or.jp/doctorg/196/

주요 단어

  • 急性心筋梗塞きゅうせいしんきんこうそく: 급성심근경색
  • 狭心症きょうしんしょう: 협심증
  • 冠攣縮性狭心症かんれんしゅくせいきょうしんしょう: 관련축성협심증(변이형 협심증의 일종)
  • 大動脈解離だいどうみゃくかいり: 대동맥해리(대동맥 박리)
  • 心臓しんぞうカテーテル: 관상 동맥 조영술
  • 高安病たかやすびょう, 高安動脈炎たかやすどうみゃくえん: 타카야수 동맥염
  • 自律神経失調症じりつしんけいしっちょうしょう: 자율신경실조증
  • 微小血管びしょうけっかん: 모세혈관

느낀점

두 번째 번역이 되니 편안하게 들리는 단어가 더 많아졌습니다. 그러나 소리가 작은 닥터 G와 역시 낯선 어휘가 또 새로 등장하는 탓에 반복적으로 들어야 알 수 있던 부분은 여전히 존재하였습니다. 특히 이번 사례는 알려지지 않은 질환을 조명하는 탓에, 제 번역의 감수를 맡은 분도 이 질환을 처음 알고 놀랐다는 후문입니다.

영상에 대해

영상은 별도로 제공하지 않으며, 개인적인 PVR 시스템을 통해 녹화하여 제작하였습니다. 저작권 법 준수를 위해 추가로 영상을 전송받거나 타인에게 전송을 하지 않았습니다.

종합검진의사 닥터 G2017-06-08-NHK World 자막 다운로드

종합검진의사 닥터 G 2017년 제6회 한국어자막

サムネイル

제6회 환자의 호소 ‘오른쪽 가슴이 아프다’

출판사에서 양육 잡지를 편집하고 있는 38세의 여성. ‘오른쪽 가슴이 아프다’고, 편도 2시간이나 걸려서 닥터 G를 찾았다. 자세히 진찰하자, 2년 정도 전부터, 몸 여기저기가 아팠다고 한다. 처음에는 오른다리 발목. 그 후에는 양팔과 등도 그랬다고 한다. 게다가 최근엔 눈도 흐릿하고 물체가 이중으로 보인다고 한다. 그러나, 여러 병원을 돌아봐도 아픈 곳이 없다고 하고, 검사를 해도 이상이 없다. 닥터 G에 따르면, 사상 최대로 어려운 문제라는데!
【닥터 G】 라쿠와오토와병원 의사 가미야 도오루
【게스트】 아키카와 테츠야, 단 미츠

신체화 장애(신체증상증)
정신의 불안정함이 신체의 증상으로 나타나는 병입니다. 통증과 같은 고통을 동반하는 증상과, 건강에 대한 불안에 사로잡혀 있는 것이 특징으로, 매사에 비관적인 생각, 불안을 키우는 특성의 사람들에게 흔히 보입니다. 이전에는 신체표현성장해라고 불렸습니다. 증상을 설명할 수 있는 신체적 질환이 없는데도 불구하고, 다양한 장소의 통증과 저림, 구토감, 목의 이물감 등이 6개월 이상 지속됩니다.
신체화 장애는 비교적 흔한 질병으로, 일본인 성인의 5퍼센트에서 7퍼센트가 이 병이 있다고 여겨집니다.
치료법은 심리요법, 약물 치료, 직장과 가정의 환경 조정 등입니다. 그러나 실제로 통증과 같은 신체적인 고통이 있는 탓에, 정신적인 질환이라는 것을 받아들이지 못하고, 닥터 쇼핑을 반복하고 좀처럼 치료에 임하지 못하는 사람이 많습니다.
이번 병례의 환자는 2년간 오른다리 발목을 시작으로, 오른쪽 가슴, 양팔, 등에 찌릿찌릿한 통증을 느끼게 되었습니다. 게다가 반년 전, 인터넷으로 조사한 것이 계기로 자신은 ‘다발성경화증’이라고 믿게 되어, ‘물체가 이중으로 보인다’ ,‘삼키기가 힘들다’와 같은 다발성 경화증의 증상이 나타나게 되었습니다. 자신이 특정한 병이라고 깊이 믿게 되면, 실제로 그 병의 증상이 나타나는 경우도 신체화 장애의 특징 중 하나입니다. 닥터 G의 진찰을 받고, 환자는 자신의 병을 올바르게 이해하고, 병은 호전되고 있습니다.

출처: http://www4.nhk.or.jp/doctorg/196/

주요 단어

  • 研修医けんしゅうい: 연수 의사, 한국에서 흔히 수련의, 레지던트로 불림.
  • 帯状疱疹たいじょうほうしん: 대상포진
  • 抗リン脂質抗体症候群こうりんししつこうたいしょうこうぐん: 항인지질항체증후군
  • 糖尿病性とうにょうびょうせいニューロパチー: 당뇨성 신경병증
  • まれ: 드묾

느낀점

TV 프로그램을 처음으로 번역해보았습니다. 병에 대한 전문 지식이 있는 것은 아니지만, 구글 검색을 통해 일본어와 한국어의 어휘 매칭이 어느 정도 가능하였고, 그 이후 관련 업계 지인의 도움을 얻어 큰 무리 없는 이해가 가능한 자막이라는 평을 받을 수 있었습니다.

영상에 대해

영상은 별도로 제공하지 않으며, 개인적인 PVR 시스템을 통해 녹화하여 제작하였습니다. 저작권 법 준수를 위해 추가로 영상을 전송받거나 타인에게 전송을 하지 않았습니다.

Doctor G-NHK World2017-05-2422-25 자막 다운로드

아종면선곱창국수 阿宗麵線

아종면선곱창국수
阿宗麵線

정보

방문일

2017년 4월 14일 (금)

메뉴

소(小) NT$50 (약 1,850원)
대(大) NT$60 (약 2,250원)

소감

시먼딩 한복판에 자리잡은 이 가게는 손쉽게 찾아갈 수 있습니다.
뿌요샹챠이 한 거랑 안 한 거 같이 주문했는데 여러 사람 협업으로 줄선 사이 뚝딱 담아내는 거라 이게 꼬이면 앞뒤 사람에게 대신 줘야 해서 시간이 걸립니다.
사실 고수향이 그리 강하진 않은 듯 합니다. 나중에 본 팁으로는 흑식초를 조금 더 하면 달고 신 맛이 어우러져 상당히 맛이 좋다고 합니다.
칠리 등 세 가지 소스를 더 넣어 먹을 수 있다지만, 이미 간도 맞고 맛에 빈틈이 없어서 필요한가 의문입니다.
서서 먹는 음식이지만 국물과 면 하나도 아쉽지 않습니다.
중국이나 대만 입맛이 아니어도 어쩐지 진한 육수에 빠져서, 국물까지 들이키고 있을 겁니다.
아쉬운 것은 젓가락이 안 나오고 숟가락만 줘서 국수를 후루룩 들이킬 수 없다는 점입니다. 워낙 가늘고 짧아서 젓가락도 애매해서 그랬을지 모릅니다. 그래도 젓가락이 익숙한 한국인 입장에선 챙겨다니던 젓가락으로 먹는 게 더 좋았네요. 국물은 떠먹다가 그냥 마셔버렸지만요.

C:\ 등등에서 수상한 폴더가 드라이브 루트에서 발견된다면

이상한 폴더가 있군요.

탐색기의 숨김 폴더를 보이도록 하고 쓰시는 분이 계시다면,
컴퓨터에서 기묘한 폴더를 보신 적이 있으실 겁니다.

폴더 이름은 딱 저렇습니다.

이상한 파일이 있군요.

들어가면 폴더랑 별반 다를바 없는 네이밍 센스의 파일이 하나 딸랑 들어 있습니다.
그림이라고 뜨지만 당연히 열리지 않는, 그림이 아닌 파일입니다.

이상한 내용이 있군요.

헥스 에디터로 파일을 뜯어보면 알 수 있습니다.
여기서는 HxD라는 무료 헥스 편집툴을 사용하였습니다.

그리고 궁금증이 풀렸습니다.
안랩이라면 V3 만든 그곳에서 직접 만들어놨다고 봐야겠죠.

랜섬웨어를 방지하기 위한, 랜섬웨어 감지 파일이라고 합니다.
이 파일이 변조된 걸 확인하는 즉시 그걸 한 프로세스를 막강하게 공격하겠지요.

ABC 순으로도 제일 처음 당하라고 일부러 이상한 네임을 골랐을 겁니다.

이상한 앱이 있군요.

그리고 그 주체는 바로 이 녀석입니다.

요즘 웬만한 시중은행 홈페이지 들어가면 저절로 깔리는 바로 그 녀석입니다.
신경 쓰이는 분은 위협 행위 차단 체크를 푸는 것으로 저 기능을 끌 수 있다고 합니다.

왠지 네이버 라인 스티커 하나쯤 들어가야 할 타이밍인데 근질근질
엄지척

 

 

학생 프로젝트 상호 평가 투표 페이지의 제작 완료 보고서

샘플 페이지로 이동

기간: 2015년 11월 20일 ~ 12월 22일

인원: 1명

목적: ACE 그룹 활동 콘테스트 발표회에 참가한 5팀을 공정하게 평가할 수 있는 웹 기반 평가 페이지를 작성한다.

ACE 그룹 활동 콘테스트 평가 시스템

프로젝트

완료보고서

2015.12.07

일어일문학과 201131307 이진백

gachon

목 차

1. 프로젝트 완료 개요 3

1.1 프로젝트 개요 3

1.2 프로그램 구성 4

1.3 프로그램 실행화면 5

1.4 프로그램 구조 11

1.5 데이터베이스 설명 12

1.6 주요 클래스(또는 함수) 설명(10개~20개) 14

프로젝트 완료 개요

프로젝트 개요

  • 프로젝트 명
『 ACE 그룹 활동 콘테스트 평가 시스템 』개발
  • 프로젝트 요약
대학 선진화 사업으로 관청과 대학이 힘을 합쳐 진행 중인 프로젝트 중 하나로, ACE 대학이 있는데, 여기서 인문대학은 ACE 산하 프로젝트를 여러 가지 진행하고 있다. 5가지 남짓의 프로젝트 중 여러 학생들에게 가장 관심있게 보여지는 활동은 그룹 활동 콘테스트다. 이는 학생들끼리 3인 정도의 그룹을 구성하여 동양 문화에 관한 발표를 하여, 학생 서로간에 평가를 하여 발전하는데 의미가 있다. 그러나 이 평가 과정을 계획 단계에선 수작업과 거수 방식을 혼용한 것으로 기획하여 많은 혼란이 예상되었고, 이에 참가자인 개발자 본인이 담당 교수 ‘세키네 히데유키’의 허락을 얻어 진행한 모바일 웹 프로젝트다.

본 프로젝트를 통하여 참가자 발표 정보를 간략하게 보여주고, 참가자임을 인증하면 다른 조를 평가하여 최종적으로는 발표 당일 마지막에 전면 프로젝터를 통해 즉시 조별 순위를 나타내고, 예상 장학금을 표시하여 학생과 교수의 혼란을 방지하고 일 처리를 신속하게 하는 효과를 거둘 수 있다.

  • 팀구성
역할 학번 이름 email 비고
전체 구성 및 개발 201131307 이진백 [email protected]
  • 프로젝트 과정
기획 코딩 업로드 데이터 구성 테스트
  • 개발 후 느낀 점(개발 후기)
이 프로젝트는 매우 단순한 구조를 갖고 있지만, 그에 요구되는 코드 난이도는 적지 않게 느껴졌다. 아직 써보지 못한 UI 프레임워크인 Materialize와 어느 정도 초보적으로 익숙해진 jQuery의 혼합된 기술은 생소하긴 했지만, 결과적으로 성공하고 보니 무척 매끄럽게 돌아가는 것으로 보인다. 그 외 PHP 서버 사이드 코드를 통해서 데이터베이스 제어가 가능했는데, 이 부분은 별도로 데이터베이스 수업을 듣지 않고, 배경 지식을 통해서 해낸 것이라 역시 의미가 있었다. 또한 이런 경험이 앞으로의 웹 개발에서 작업이 막히지 않고 진행 가능한 원동력으로서 작동할 것을 생각하면, 뜻 깊은 경험이자 도전이었다고 되돌아보게 된다.

프로그램 구성

  • 실행환경 구성도

  • 실행기능
주요기능 상세기능 사용자
관리자 일반사용자[1]
순서 수정 직접 입력, 랜덤 수정
결과 열람 제목 숨김, 장학금 계산
조회 학생 인증, 조원 및 발표 개요 조회
평가 끌어서 평가, 다시 평가
  • 실행환경

서버OS: Linux 호스팅 서버

서버IP: 183.***.***.***

서버 접속 URL: http://vote.yeon.me/

지원 브라우저: IE11 이상, Chrome, Safari, Firefox 등 HTML5 지원 브라우저

(모바일의 경우) 모바일플랫폼: Chrome, Safari, Opera (Android, iOS, Windows Phone[2])

프로그램 실행화면

  • 사용자 인증

그림 1 유효하지 않은 학번 입력

그림 2 학생 번호를 입력하지 않음

그림 3 학번 입력 인증 화면

  • 평가 화면

그림 4 평가 페이지 상단 부분

그림 5 평가 페이지 하단 부분 (긴 스크롤 화면을 좌상-우상-좌하-우하 순으로 재구성)

  • 정렬 화면 (관리자)
    본 화면은 첫 인증 페이지에서 ‘ordr’ 키워드 입력으로 접근할 수 있다.

그림 6 정렬 순서 지정 페이지. 프로젝터 가독성 확보용으로 큰 글씨 적용.

  • 결과 화면 (관리자)
    본 페이지는 첫 인증 화면에서 ‘rest’ 키워드 입력으로 접근할 수 있다. (일반인들에게 비밀)

그림 7 순위만 보이고 조를 숨긴 화면 (발표 후 평가 인원들 평가 마무리까지 카운트 다운 단계)

그림 8결과 전체 공개

프로그램 구조

  • 디렉터리 구조 및 파일

tree

│ global.php

│ index.php

│ order.php

│ order_ok.php

│ result.php

│ vote.php

│ vote_submit.php

├─css

│ materialize.min.css

│ style.css

├─font

│ ├─material-design-icons

│ │ LICENSE.txt

│ │ Material-Design-Icons.eot

│ │ Material-Design-Icons.svg

│ │ Material-Design-Icons.ttf

│ │ Material-Design-Icons.woff

│ │ Material-Design-Icons.woff2

│ │

│ └─roboto

│ Roboto-Bold.ttf

│ Roboto-Bold.woff

│ Roboto-Bold.woff2

│ Roboto-Light.ttf

│ Roboto-Light.woff

│ Roboto-Light.woff2

│ Roboto-Medium.ttf

│ Roboto-Medium.woff

│ Roboto-Medium.woff2

│ Roboto-Regular.ttf

│ Roboto-Regular.woff

│ Roboto-Regular.woff2

│ Roboto-Thin.ttf

│ Roboto-Thin.woff

│ Roboto-Thin.woff2

├─img

│ hi1.img

│ hi2.img

│ hi3.img

│ hi4.img

└─js

materialize.min.js

Sortable.min.js

디렉터리 파일명 소스설명
global.php 실행 가능 여부 플래그 (false시 오류 메시지)
index.php 참가자 인증과 관리자 페이지 연결
order.php 발표 순서 재배열
order_ok.php 발표 순서 재배열 반영 후 index.php 복귀
result.php 결과 페이지
vote.php 평가 페이지
vote_submit.php 평가 전송 페이지 (Ajax)
css materialize.min.css 구글 안드로이드 Material 디자인
HTML5 CSS 프레임워크
css style.css 스타일시트
js materialize.min.js Materialize 자바스크립트
js Sortable.min.js Sortable (끌어서 놓기) 도구 자바스크립트

데이터베이스 설명

  • ERD (최종구현버전)

`num` tinyint(4) NOT NULL,

`order` tinyint(2) NOT NULL,

`people` varchar(255) COLLATE

`title` varchar(255) COLLATE utf8_unicode_ci NOT NULL,

`content` text COLLATE utf8_unicode_ci NOT NULL,

`members` tinyint(2) NOT NULL,

PRIMARY KEY (`num`)

proj2_group

`ab_no` int(10) NOT NULL AUTO_INCREMENT,

`stno` varchar(10) NOT NULL,

`name` varchar(5) NOT NULL,

`group` int(11) NOT NULL,

`sc_con` tinyint(4) NOT NULL,

`sc_cre` tinyint(4) NOT NULL,

`sc_ann` tinyint(4) NOT NULL,

`agent` varchar(200) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,

PRIMARY KEY (`ab_no`)

proj2_score

`no` int(11) NOT NULL,

`name` varchar(5) COLLATE

`group` tinyint(4) NOT NULL,

PRIMARY KEY (`no`)

proj2_student

  • 테이블명세서 (최종구현버전)
테이블 명 proj_score
개요 매 평가 순간 기록되는 개인의 조별 평가 테이블
NO Attribute Data Type NN PK FK Description
1 ab_no int(10) O 고유 번호
2 stno varchar(10) 학생 번호
3 name varchar(5) 이름
4 group int(11)
5 sc_con tinyint 내용 점수
6 sc_cre tinyint 창의 점수
7 sc_ann tinyint 발표 점수
8 agent varchar(200) UserAgent
테이블 명 proj_students
개요 학번 인증과 평가자 관리를 위한 사전 입력된 학생 정보
NO Attribute Data Type NN PK FK Description
1 no int(11) O 학번
2 name varchar(5) 이름
3 group tinyint(4)
테이블 명 proj_group
개요 조별 발표 개요와 조원 정보
NO Attribute Data Type NN PK FK Description
1 num tinyint(4) O 학번
2 order tinyint(2)
3 people varchar(255) 조원 이름
4 title varchar(255) 발표 제목
5 content text 발표 내용
6 members tinyint(2) 발표 순서

주요 함수 설명(10개~20개)

순차 실행이므로 별도의 클래스와 함수가 없다. 그러나 실행 순서별로 다음과 같은 핵심 기능을 제공하고 있다.

1.6.1. global.php

변수

  • $isBlocked: 처음 실행시 기능이 제한되었는지 여부 판별. 다른 PHP에서 참조.
  • $isSaveNotAllowed: 저장을 실제로 할지 판별. 다른 PHP에서 참조.

1.6.2. index.php

변수

  • Form/student: 학번을 전송할 폼 input이다.

함수

  • $(document).ready: 메인 이미지를 무작위로 지정한다.

var ranstr = Math.floor((Math.random() * 4)+1);

$(“#imgMain”).attr(“src”,”img/hi”+ranstr+”.img”);

연결

  • vote.php: form action=post 형식으로 student 변수를 같이 전달하여 진행한다.
    미리 지정된 예약어의 경우 vote.php를 거쳐서 다른 곳으로 연결된다.
  • order.php: student가 “ordr”인 경우, 순서 지정 페이지로 연결된다.
  • result.php: student가 “rest”인 경우, 결과 페이지로 연결된다.

1.6.3. vote.php

변수

  • $database: MySQL 데이터베이스 접근용 medoo.php 프레임워크
  • $data_all: proj2_students 테이블을 가져온 데이터
  • $datas: $data_all의 일부를 취사 선택할 필터링 데이터. 대표적으로 평가 대상 중 본인의 조가 제외된다.
  • $alphabet: A ~ G까지의 7개 조 숫자와 매치할 이름

함수

  • PHP 블록: 데이터베이스를 가져와서 배열한다. 반복문에서는 조별 개요를 레코드에 따라 나열한다.
  • $(document).ready: materialize div Page 보이기 숨기기 기능과 이벤트 핸들러 연결이 있다.
  • $(“#sendbtn”).click: 떠서 이동하는 보내기 버튼의 클릭 이벤트. 각 리스트의 재배열된 항목을 가져와서 배열화하여, JSON String으로 구성한 뒤, ajax를 통해 vote_submit.php로 보이지 않게 전송한다. 사용자 피드백을 위해 스크롤을 아래로 내리고, 성공 멘트를 표시한다.

연결

  • vote.php: form action=post 형식으로 student 변수를 같이 전달하여 진행한다.
    미리 지정된 예약어의 경우 vote.php를 거쳐서 다른 곳으로 연결된다.
  • order.php: student가 “ordr”인 경우, 순서 지정 페이지로 연결된다.
  • result.php: student가 “rest”인 경우, 결과 페이지로 연결된다.

특이사항

  • materializeCSS 프레임워크를 통해 디자인을 구성한다.
  • Sortable 프레임워크를 통해 리스트 항목을 끌어당겨 재배열한다.

1.6.4. vote_submit.php

변수

  • $database: MySQL 데이터베이스 접근용 medoo.php 프레임워크
  • $id_data: proj2_students의 no 열만 가져온 학번 데이터
  • $data: vote.php에서 넘겨받은, 조별 클래스 형식의 3가지 영역 점수 배열 데이터
  • $query_array: 데이터를 medoo 쿼리 형태로 조에 하나씩 모은 배열 데이터

함수

  • PHP 블록: 학번의 유효성을 검사하고, 넘어온 조별 각 점수를 모아서 proj2_score 테이블에 $query_array를 일시 insert 한다.

연결

  • 이 php는 탐색되지 않으므로 아무 곳으로도 연결되지 않는다. 리턴값을 주면 vote.php에 ajax 형태로 성공 또는 에러가 표시된다.

1.6.5. order.php

변수

  • $database: MySQL 데이터베이스 접근용 medoo.php 프레임워크
  • $data: proj2_group 테이블에서 가져온 조별 발표 개요.

함수

  • PHP 블록: 조별 발표 개요를 출력한다.
  • putnum(): input에 무작위로 조 순서를 생성하여 알파벳 형식으로 나타낸다.

연결

  • order_ok.php: 생성된 숫자를 ord 변수에 담아 form post 형태로 전달한다.

1.6.6. order_ok.php

변수

  • $ord: post로 넘겨받은 ord 변수를 한글자씩 배열로 분리한 PHP String Array
  • $database: MySQL 데이터베이스 접근용 medoo.php 프레임워크

함수

  • PHP 블록: ord 유효성을 판별하고, proj2_group 테이블의 order 값을 항목별로 각각 업데이트한다.

연결

1.6.7. result.php

변수

  • show: get 방식으로 넘기는 변수. 1이면 텍스트를 가리지 않는다.
  • $database: MySQL 데이터베이스 접근용 medoo.php 프레임워크
  • $cnt: SQL1의 값을 담는다.
  • $imsi: SQL2의 값을 담는다.
  • $sc_*: 3가지 영역별 점수 배열.
  • $score: [1] ~ [7]까지 조별 최종 평균 점수 배열
  • $groups: proj2_group에서 조별 정보 테이블을 발표 순서대로 담는다.
  • $maxmoney = 420: 예상 최대 장학금 420만원
  • $pref_bonus: 100% ~ 110%까지 1위부터 7위까지 가산될 보너스 배율
  • $bonus: $pref_bonus를 토대로 같은 점수인 조원의 비율까지 보정된 실제 보너스 배율
  • $index_score: $score 배열을 재정의
  • $basex: 가장 점수가 낮은 사람이 받는 씨앗 금액

함수

  • PHP 블록 1: SQL1을 활용하여 평가 인원을 구하고, SQL2를 이용하여 PHP 배열로 출력된 조별 데이터 $score를 다시 한 번 전체 평균값으로 정렬한다.
  • PHP 블록 2: $pref_bonus 기반으로 랭킹 금액 보너스를 계산하고, 동점 그룹에 대한 보정값을 계산한 다음, 예상 장학금을 표시한다.
  • PHP 블록 3: 투표한 유저의 UserAgent 값을 같은 유저의 중복되지 않는 값으로 모두 나열한다. 같은 사람이 여럿 나타나면 다른 기기에서 투표했다는 소리이므로 부정을 의심할 수 있다.

SQL

  • SQL1 “SELECT stno FROM proj2_score AS t1 WHERE t1.group = “.$i.” GROUP BY `stno`;”
    proj2_score에서 group이 $i와 일치하는 것만 출력
  • SQL2 “SELECT AVG(`sc_con`),AVG(`sc_cre`),AVG(`sc_ann`),AVG((`sc_con`+`sc_cre`+`sc_ann`)/3) FROM (SELECT * FROM (SELECT `stno`,`group`,`sc_con`,`sc_cre`,`sc_ann`,`ab_no` FROM proj2_score AS t1 WHERE t1.group = “.$i.” ORDER BY `ab_no` DESC) AS t2 GROUP BY `stno`) AS t3;”
    proj2_score에서 group이 $i인 항목의 학번, 그룹 번호, 내용 점수, 창의 점수, 발표 점수 데이터를 가져온 다음, 학번 순으로 모아서, 그 항목의 내용 점수, 항의 점수, 발표 점수, 세 가지를 더한 수치의 평균값을 구한 배열을 출력한다.
  1. 일반 사용자는 프로젝트 참가자, 관리자는 프로젝트 발표자이자 참가자이므로, 교수 같은 외부인이 아닌 본 ‘관리자’는 참가자로서 일반 사용자 기능도 가능하여야 한다.
  2. Windows Phone에서는 [끌어서 평가] 기능이 작동하긴 하나, 드래그 상태가 유지되지 못하고 스크롤을 지속하므로 조작에 불편 사항이 있지만, 참가자 중에 Windows Phone 유저는 없을 것으로 예상된다.

Desktop Font

즉시 실행형 다운로드

소개

윈도우 8 이상의 운영 체제에서 사라진 창 글꼴 설정을 대신 해주는 앱입니다.

사용법

좌측에서 설치된 글꼴을 찾고(우상단 검색 기능 활용 가능), 대상을 선택하여 지정할 항목을 골라주고 Apply를 눌러서 적용합니다.

변경 사항은 재부팅 후 확인 가능합니다.

기본 글꼴을 바꾸진 못하므로, 상기 항목 외엔 기존의 글꼴이 그대로 유지됩니다.

각설

이 앱에 대해서는 첨부파일을 참조하세요.

윈도8을 쓰시면, 개인 설정에서 아무리 찾아봐도 글꼴 설정이 안 보이실텐데, 윈도7에선 맑은 고딕 말고 다른 걸 지정할 수 있었는데,

윈도8에서 사라진 거죠.

이 앱은 레지스트리에 직접 글꼴 설정을 기록해주는 앱입니다. 전 태블릿에 윈폰처럼 네오고딕을 적용해봤어요.

참고로 네오고딕은 그냥 적용하면 안 예쁘므로, MacType라는 앱을 이용해서 글꼴 다듬기 기능을 변경해야 윈폰처럼 부드럽게 표시됩니다.

경계선이 모나게 그려지는 앱들도 웬만하면 MacType 앱을 써서 해결 가능합니다.

http://code.google.com/p/mactype/

고해상도 고DPI에 맞게 띄우는데 다소 애를 먹었네요.