2018년 2월 23일 금요일

법무법인이나 총판이란 곳에서 소프트웨어 라이선스 위반이라고 연락이 왔다면?

몇일전 회사에 법무법인 양X 의 변호사란 쉑이 전화해서
니들 마이크로소프트 불법 쓰고 있는거 걸렸고
우리가 그걸로 법적 조치 들어가는 중이야~ 라고 개솔 시전함
뭐 난 경험적으로 무시해도 된다고 했으나.. 불안한
부장님께서 그 법적조치는 어떻게 확인하냐 해서리..
민사조정신청 번호를 주더구만...
조회해 보니.. 접수한건 사실이네..
그래서 우리보고 니네 소프트웨어 내역 제출해라 라고 지럴...
뭐 대응안해도 되긴 하는데..
불안한 부장님을 위해.. 가족(동서형님이 변호사)을 동원...
민사조정신청이란게 완전 웃기더구만...
MS가 우리를 적발하는게 아니고.. 이런 쉑들이 먼저 사건 만들어서 협박건을 만들어서 만약 진짜 위법건이면 MS에다가
야! 우리가 이렇게 건수 만들어 와쓰~~ 나 이뻐? 우쮸쮸~~ 하는 거더구만..
하여간.. 동서형님에게 공식적인 조언을 들음..
요약하면.. 이 구라쟁이 쉑끼들아~~ 어디서 협박질이여..
니들이 우리 위반했다는 증거 있어? 있으면 니네가 구체적으로 내놔봐.
그리고 계속 개솔 지껄이면 법적 책임을 졸라 묻겠으!!
라고 내용 증명을 보내면 된다고 함.(원본은 점잖음.. 근엄근엄)
물론 무시해도 상관은 없다고 함. 정 찝찝하면 저런 내용을 점잖게 쓰라고 함...
다른 IT 종사자 여러분.. 적어도 회사껀 정품쓰는거 알죠?
쫄지 맙시다!


===============================후기==========================================

이 쉐리들 우리가 규모가 되는거 같으니까 민사 만들어서 재판 진행함..

우리 회사도 변호사 고용하여 맞대응..

이 쉐리들이 이슈화 한 것은..

1. MS-SQL DB 서버에 대한 익스터널 커넥터 라이선스가 있는가?

2.Windows Server에 대한 SPLA 라이선스가 있는가?

이렇게 크게 2가지로 요약할 수 있다.

나머지 업무용 PC에 대해선 용무가 없다..

특히 SPLA 라이선스는 MS 측의 입장으로 코에 걸면 코걸이, 귀에 걸면 귀걸이 식이라..

상당히 골때리는 라이선스이다..

결국은 상대측에서 고소취하로 갔지만...

SPLA 라이선스는 좀 말이 많을 듯 하다.. MS 맘대로 해석을 하면 어쩔수 없지 않을까...

결론 : 쇼핑몰 운영하는 분들은 SPLA 라이선스 꼭 체크하시길...


2018년 2월 12일 월요일

배치파일로 여러개의 파일을 동시에 실행하고 싶을때...

업무를 하다보니 또 귀차니즘이 발동함..

동시에 여러 문서와 프로그램을 열고 작업을 해야해서리..

이걸 한번에 다 열어주는 단축 아이콘을 만들자라고.. 연구...

찾음! (https://stackoverflow.com/questions/3739327/launching-a-website-via-windows-commandline)

아래와 같이 하면 됨..

--웹사이트의 경우--
start chrome https://docs.google.com

start 뒤에 사용하는 브라우저를 지정하거나 생략할 수 있다.

--파일 또는 프로그램의 경우--

X:\어쩌구저쩌구파일명.xls

explorer "C:\실행하고싶은 파일.exe"

explorer "E:\squirrel-sql-3.7.1\squirrel-sql.bat"

웹사이트도 이 명령어로 열수도 있다.

끗!

아 귀찮아~

2017년 11월 22일 수요일

국세청 사이트에서 사업자 번호로 사업자 상태 조회하는 API 개발

0. 회사 ERP에 거래업체를 등록할 때마다 매번 국세청 사이트에 접속해서 사업자 번호로 사업자 상태를 조회해서 같이 입력을 해줘야 함

1. 국세청 사이트는 IE 전용이라 날 귀찮게 함.

2. 참고 또 참고 했지만, 역시 결국 귀찮음.

3. 에라이 개발해보자!!

4. 일단 있는거 있음 날로 먹기로 결심

5. 절라 구글링 해도 안나오거나, 뭔 놈의 유료로 파는 것만 발견.

6. 국세청 사이트의 해당 서비스를 분석

7. 결국은 서블릿 호출 + XML 전문통신

8. 간단하게 하기 위해서 ASP로 개발. (Java도 마찬가지 임.. 귀찮아서 개발 안함.)

9. 이하 소스

10. 퍼갈땐 출처 좀 밝혀 주길..(혹시 알어... 출세할지.. 불펌하면.. 혼내줄꺼임!)

11. git 에도 추가 (https://github.com/jaymz9634/retcompanystatus)

--------------------------------------------------------------------
2020-03-03 내용 추가:

국세청에서 과도한 접근에 대한 금지를 해놨음.

자체 테스트 해봤을때 한번에 30건 정도 조회하고 1분 쉬었다가 요청하면 문제없이 처리 됨을 확인.

내 경우에는 java로 구현해서 thread.sleep 으로 30건 마다 1분씩 쉬게해서 처리 완료.

<%
Session.CodePage = 949
Response.Charset = "euc-kr" '결과가 한글이기에 안 깨지게...'
'On Error Resume Next'

txprDscmNo = Request("txprDscmNo")

xmldata = xmldata & "<map id='ATTABZAA001R08'><pubcUserNo/><mobYn>N</mobYn><inqrTrgtClCd>1</inqrTrgtClCd><txprDscmNo>"&txprDscmNo&"</txprDscmNo><dongCode>05</dongCode><psbSearch>Y</psbSearch><map id='userReqInfoVO'/></map>"

set api = createobject("msxml2.serverXmlhttp")
api.open "POST", "https://teht.hometax.go.kr/wqAction.do?actionId=ATTABZAA001R08&screenId=UTEABAAA13&popupYn=false&realScreenId=", false 
api.setRequestHeader "content-type","text/xml; charset=utf-8"
api.send xmldata

if api.status = 200 Then
    Response.ContentType="text/xml"
    Response.Write(api.ResponseText)
else
    Response.Write("[statusCode : "&api.status&"]" & "<br/>")
    Response.Write("<hr/>")
    Response.Write(xmldata & "<br/>")
    Response.Write("<hr/>")
    Response.Write(api.responseText & "<br/>")'
End if

If Err.number <> 0 Then     '오류 발생 시 이 부분 실행
    Response.Write "<b3>" & Err.Source & "<hr noshade></h3>"
    Response.Write "오류 번호 : " & Err.number & "<br>"
    Response.Write "내용 : " & Err.Description & "<br>"
End If

Set api = nothing
%>

2017년 11월 10일 금요일

[악보채보]트리니티 - 무화과 나뭇잎이 마르고(라이브 워십2 버전)

언제나 귀찮은게 싫은 본인에게 교회 속회 인도자에게서 연락 옴..

A : 저희가, 추수 감사절 찬양대회 나가는데..

듣는 시작부터 귀차니즘 몰려옴... 이미 안하기로 결심

나 : 얘가 넷이고, 바빠서 어쩌구 저쩌구.

A : 집사님 없으면 안되효~~~ 풀 밴드로 하기로 했어효~~~

난 한적도 없고, 왜 지들 맘대로 선곡해서 날 거기에 맞추나 ㅡㅡ^

나 : 네... 하여간 생각은 해봅니다만, 안사람 한데 물어봐야 해요.

A : 네.. 꼭 해주시리라 믿쑵니다~~!~!

나 : 네, 다시연락드릴께요~ (안 한다라고~~!!!!)

끊고, 마눌님과 입맞추기 위해 물어봄..

속회 찬양대회 한다는데... 난 한다고 하지도 않았는데~~~ ㅡㅡ~~~~~ 주저리 주저리

마눌님 : 응, 그래 해보자~~

헉!! 이게 아닌데...

의 결과로 나온 악보...

트리니티라는 CCM 밴드의 라이브 버전을 한단다... 아무리 검색을 해도 안나와서리..

급한대로 딴 기타 악보...

너무 귀찮다~~




악보 다운!!

퍼가드라도... 출처는 좀 밝히자!!! 혹시 알어? 요딴걸로 잘먹고 살지!

끗!

2021-01-29 : 구글드라이브로 링크 수정
---------------------------------------------------------------------------
2022-08-30 : 뒤늦게 생각난 그 결과물..



2017년 11월 7일 화요일

Apache Solr에서 두개의 분류로 Group 하기

참고 : https://stackoverflow.com/questions/15758829/solr-how-can-i-group-on-two-different-fields

Apache Solr 4.3 에서는 group 기능이 있긴 하지만, 하나의 컬럼만 그룹이 가능하다.

이래저래 검색해서 pivot을 사용하면 된다는 걸 발견

전송 매개변수는 다음과 같다.

"fl":"분류1,분류2", -- 출력 컬럼
"indent":"true",
"q":"검색조건",
"group.field":"분류2",  -- 분류1 아님!!
"group":"true", --- group 사용
"wt":"json",
"facet.pivot":"분류1,분류2",
"fq":"필터조건",
"rows":"999" -- 반환 결과수 (분류2의 결과를 다 출력해야 해서 일부러 999 줌)


위에서 group.filed와 group을 제거하고 매개변수를 보내면 분류들만 출력되는 결과가 나옴.
이것도 나름 응용할 곳이 있을 듯 하다.

2017년 10월 18일 수요일

DB에서 구분자가 들어간 파라메터를 한줄로 출력

업무를 하다 보니...

DB 프로시저 등에 파라메터를 여러개 전달해서

구분자로 분해해서 쿼리의 IN 문장에 쓰고 싶은 경우가 많은데..

정작 찾아보니... 없다!!

split 구현한것들은 내가 원하는 형태가 안 나오길래.. 직접 구현..

목표는 '5040:5050:5060:' --->'5040','5050','5060' 요 딴식이다!!

이하 mssql 스칼라 함수!!

(
P.S. 기껏 만들어 놨더니.. 생각대로 안됨... 내가 상상한 사용법으로 안됨..

https://stackoverflow.com/questions/2944511/sql-server-in-clause-with-a-declared-variable

위의 링크대로 해야 함..
)


  1. SET ANSI_NULLS ON
  2. GO
  3. SET QUOTED_IDENTIFIER ON
  4. GO
  5. -- =============================================
  6. -- Author:     
  7. -- Create date: <2017-10-18>
  8. -- Description: <특정구분자로 결합된 문자 집합을 IN에 사용할 수 있는 형식으로 변경 반환 '5040:5050:5060:' --->'5040','5050','5060' >
  9. -- 구분자 마지막까지 붙일것!!!
  10. -- SELECT dbo.UFN_CONVERT_PARAMS('5040:5050:5060:',':')
  11. -- =============================================
  12. ALTER FUNCTION dbo.UFN_CONVERT_PARAMS(
  13.     @PARAMS VARCHAR(5000),
  14.     @TOKKEN VARCHAR(10)
  15. )
  16. RETURNS VARCHAR(5000)
  17. AS
  18. BEGIN
  19.     DECLARE @RTN    VARCHAR(5000)
  20.     DECLARE @TMP_CNT    INT
  21.     DECLARE @loop INT
  22.     SET @TMP_CNT = LEN(@PARAMS)-LEN(REPLACE(@PARAMS,@TOKKEN,''))    -- 슬래시 갯수 추출
  23.     SET @loop = 0
  24.    
  25.     DECLARE @SPLIT_SP   VARCHAR(500)    --분리한 값 저장
  26.     DECLARE @SPLIT_REMAINS  VARCHAR(500)
  27.     DECLARE @SPLIT_TMP_CD   VARCHAR(5)
  28.     SET @SPLIT_SP = ''
  29.     SET @SPLIT_TMP_CD = ''
  30.     SET @SPLIT_REMAINS = @PARAMS
  31.     WHILE(@loop < @TMP_CNT)
  32.     BEGIN
  33.         SET @SPLIT_TMP_CD = LEFT(@SPLIT_REMAINS,CHARINDEX(@TOKKEN,@SPLIT_REMAINS)-1)
  34.         SET @SPLIT_SP = @SPLIT_SP + '''' + @SPLIT_TMP_CD + '''' + ','
  35.         SET @SPLIT_REMAINS = REPLACE(@SPLIT_REMAINS,LEFT(@SPLIT_REMAINS,CHARINDEX(@TOKKEN,@SPLIT_REMAINS)),'')
  36.         SET @loop = @loop + 1      
  37.     END
  38.     RETURN LEFT(@SPLIT_SP, LEN(@SPLIT_SP) - CHARINDEX(',', reverse(@SPLIT_SP)))
  39. END
  40. GO

2017년 10월 16일 월요일

[Google Cloud 번역-0]앱 엔진 환경 선택


내맘대로 번역

앱 엔진 환경 선택

당신은 유연한 환경이나 표준 환경을 사용하여 앱 엔진에서 당신의 응용 프로그램들을 구동시킬수 있다. 또한 당신의 응용 프로그램에 두개의 환경을 사용하도록 선택할 수도 있고 서비스에 각 환경의 개별적인 이점을 얻을 수 있게 허용할 수도 있다.

앱 엔진 환경을 선택하라

microservice 아키텍처를 사용하여 응용 프로그램을 구성하면, 특히 두 환경을 모두 사용하기로 결정한 경우 App Engine에 가장 잘 부합된다. 응용 프로그램과 해당 서비스에 더 적합한 환경을 결정할 때 고려해야 할 몇 가지 요소가 있다. 다음 섹션으로 응용 프로그램의 요구 사항을 가장 잘 충족시키는 환경을 파악하고 이해하시오.

유연한 환경을 선택했다면

앱 엔진 유연한 환경을 사용한다는 것은 응용 프로그램 인스턴스가 구글 연산 엔진 가상 머신 (VM)의 Docker 컨테이너 내에서 실행된다는 것을 뜻한다.
일반적으로, 유연한 환경에 적합한 응용 프로그램들은 일정한 트래픽을 수신하거나, 정기적인 트래픽 변동이 생기거나, 점차적으로 매개변수들이 조정되는 것들이다.
유연한 환경은 다음과 같은 특징이 있는 응용 프로그램들에 최적화 되어 있다:
  • 지원되는 프로그래밍 언어의 모든 버전으로 소스 코드를 작성함: 
    PythonJavaNode.jsGoRubyPHP, 또는 .NET
  • 사용자 정의 런타임이 포함되었거나 다른 프로그래밍 언어로 작성된 소스코드가 포함된 Docker 컨테이너에서 구동.
  • imagemagick, ffmpeg, libgit2, Ehsms apt-get을 통한 그 밖의 운영체제를 포함하는, 다른 소프트웨어에 의존.
  • 네이티브 코드가 포함된 프레임웍을 사용하거나 의존.
  • 연산 엔진 네트웍에 있는 당신의 클라우드 플랫폰 프로젝트 리소스나 서비스에 접근.

표준 환경을 선택했다면

앱 엔진 표준 환경 사용은 당신의 응용 프로그램 인스턴스가 하나의 샌드박스 내에서 구동되고, 다음에 나열된 지원 언어의 런타임 환경을 사용한다는 것을 뜻한다.

일반적으로, 표준 환경에서 실행되는 응용 프로그램을 빌드하는 것이 더 제한적이고 복잡하지만, 응용 프로그램의 빠른 크기 조정 시간을 가질 수 있다.

표준 환경은 다음과 같은 특징이 있는 응용 프로그램에 최적화 되어 있다:
  • 지원되는 프로그래밍 언어의 특정 버전으로 소스 코드가 작성함:
    • Python 2.7
    • Java 7, Java 8
    • PHP 5.5
    • Go 1.6
  • 무료 또는 저렴한 비용으로 운영되며, 필요한 곳과 필요할 때만 비용을 지불한다. 예를 들어, 당신의 응용 프로그램이 트래픽이 없다면, 0 인스턴스로 조정 할 수 있다.
  • 즉각적인 크기 조정이 요청되는 급작스럽고 극단적으로 트래픽이 치솟음을 겪음.
고수준 기능 비교
다음 표는 두개의 환경에 대한 차이점에 대한 요약이다:
기능유연 환경표준 환경
인스턴스 시동 시간 수분 수초
최대 요청 시간만료 60 분 60 초
백그라운드 스레드 가능 제한적인 가능
백그라운드 프로세스가능 불가능
SSH 디버깅 가능 불가능
크기 조정 수동, 자동 수동, 기본으로 자동
로컬 디스크에 기록 가능, 임시적 (각 VM 시동시 디스크 초기화됨) 불가능
런타임 수정가능(Dockerfile 통해서) 불가능
자동 내부 보안 패치 가능(컨테이너 이미지 런타임 제외) 가능
네트워크 접근 가능 앱 엔진 서비스(아웃 바운드 소켓 포함)를 통해서만, 결제가 가능한 Python, Go 및 PHP 애플리케이션에만 사용할 수 있음.
써드-파티 바이너리 설치 지원가능 불가능
지역 North America, Asia Pacific, 또는 Europe North America, Asia Pacific, 또는 Europe
가격 vCPU, 메모리, 그리고 영구 디스크들의 사용에 기반함 instance 시간에 기반함
환경의 심도있는 비교는, 언어의 안내서를 참고하라: PythonJavaGo, 또는 PHP.

유연 환경을 연산 엔진과 비교

유연한 환경은 연산 엔진 VM에서 인스턴스 내의 서비스로 구동되지만, 유연한 환경은 다음 같은 점에서 연산 엔진과 차이가 있다:
  • 유연한 환경에서 사용되는 VM 인스턴스는 매주 재시작된다. 재시작 중에는, 구글의 관리 서비스는 필요한 운영 체제 및 보안 업데이트를 적용한다.
  • 항상 연산 엔진 VM 인스턴스에 root로 접속한다. 기본으로, 유연한 환경내의 VM 인스턴스에 대한 SSH 접근은 비활성화이다. 당신이 선택한다면, 앱의 VM 인스턴스에 root 접근을 활성화 할 수 있다.
  • 유연한 환경에서 사용되는 VM 인스턴스의 지리적 영역은 Cloud Platform 프로젝트의 App Engine application에 지정하는 위치에 따라 결정된다. Google의 관리 서비스는 최적의 성능을 위해 VM 인스턴스가 함께 배치되도록 한다.

표준 환경에서 유연 환경으로 이전

당신에게 표준 환경에서의 응용 프로그램이 있다면, 몇개의 서비스를 유연 환경으로 옮기고 싶어할 수 있다. 지침으로,  PythonJavaGo, 그리고 PHP의 권장 사항을 참고하라.
특정 서비스의 이전은, PythonJavaGo, 그리고 PHP에 대한 지침서를 참고하라.

[낯선] 2026.06.20 이태원 MZK MuzikBar 공연

간만의 공연 이태원 비틀즈가 이전하여 MZK MuzikBar 로 새 단장 오픈을 한 뒤로 2번째 공연 새 베이시스트가 합류한 뒤로 첫 공연이기도 함.. 이래저래 틀린 부분도 많지만.. 그래도 간만에 그럭저럭 잘했다.. https://www.youtub...