학문 중에 유일하게 변하지 않는 학문은 수학이며, 그 이유는 사람의 약속에서 출발했기 때문이다.

OLPP는 수학적 base에서의 철학을 말하고 나의 첫번째 책에서 주장했던 내용이다.


이는 경험주의, 실존주의에서 출발했으며 내 생각은 본질 자체의 정의가 섣부른 판단이라 굳이 사르뜨르가

사상을 나누었다고 생각한다. 그러나 그 사상이 신을 반대하는 것이기 때문에 담배를 폈고 폐부종으로 사망하였다.

그러나 그 당시 기준으로 매우 오래 산 것으로 보아 신을 믿는 사람들보다는 스트레스를 덜 받았을 것이다라고 추측해 본다.


나는 불어를 모른다. 제대로 공부하려면 불어를 알아야 할 것 같은데 우선은 인터넷에 퍼져있는 것으로 공부하게 되었으며.


내 생각은 많았고, 지금도 많지만 이 카테고리의 글은 그의 말 몇가지에 대한 나의 생각을 끄적이는 것에서부터 출발하는 것이 좋을 것 같다.


"인생은 B(irth)와 D(eath) 사이의 C(hoice)이다."


죽음도 자신이 선택하는 것이라 생각했던 그의 주체적 생각이 잘 드러나 있다. OLPP는 사실 각 펑션, 컴포넌트, 아키텍쳐 단위의 코드 뭉치이기 때문에 당장은 주체성이 없고, 다른 모듈과의 관계에 의해 본질이 결정되는 원리이다. AI라고 부르는 것들은 아직 수백년은 더 발전되어야 한다고 생각하기에 OLPP에 주체성은 없다고 봐야겠다.  물론, 총 쥐어주면 사람 죽이는 AI야 금방 만드는데 고요한 호수에서 날아가는 새를 보며 감성을 느끼고 스스로 작품을 만들고 그 수익을 불우한 이웃에게

도와주고 그 안에서도 고민하는 AI는 수백년~수천년이 걸릴 것이라 생각한다. OLPP는 본질보다 실존보다 다른 모듈간의 관계가 중요하고 주체성은 없다.


"존재가 선행하며 본질을 지배한다."

그게 존재의 본질이라면? 말 장난 같기도 하지만 사르트르 시대에서는 생각의 다변화를 위해 필요한 사상이었다.


"파시즘은 그 피해자의 숫자가 아니라 그 살인의 방법에 의해 정의된다."

결론도 사실 중요하다. 해고의 방법이 아무리 아름다워도 해고는 파시즘의 국수주의와 같이 지 혼자 잘 살려고 하는 것이기 때문이다. OLPP 역시 결과가 중요하다.

y = f(x) 이기 때문에 function 설계도 중요하지만 y나 f 중 틀릴 경우 고쳐야 할 것은 f() 다.

"과거란 가진 자의 사치이다."

워낙에 많은 역사가 왜곡되니까... 돈 벌고 사람 다 해고시킨 부자들이 자서전을 쓰는 것과 같은 의미인 것 같다. 스티브잡스가 워즈니악에게 구라치고 돈 떼어먹은 사건만 아니면 정말 성인으로 기억되었을텐데 말이다. 

"부자들이 전쟁을 일으키면 결국 죽는 이들은 가난한 자들이다."

사실, 돈에만 국한되는 것은 아니다. 사람이 사람을 희생시켜 자존심을 지키거나 뭔가를 얻으려는 포괄적인 것을 의미한다. OLPP가 수학적 base를 벗어나지 않지만 가끔 현 사회에 대한 설명에 이용될 때가 있는데 그것은 매우 실용적이고 쉽게 이해되기 때문이다.


"절망과 함께 진정한 낙관주의가 시작된다. 아무것도 기대하지 않고, 그가 아무런 권리가 없다는 것을 알며, 그에게 주어질 것은 결국 아무 것도 없다는 것을 알면서도 오직 자기 자신을 믿으며 홀로 모든 것의 안녕을 위해 행동하는 것. 그것이 낙관주의이다."

극명한 것들은 사실 모두 이어져 있다. 선과 악이 한몸이듯. 낙관주의와 비관주의도 한몸이라는 것. 다만 무엇이 무엇을 먼저 격발 시키느냐. 그 시간이 중요한 것이다.



'!!OLPP' 카테고리의 다른 글

관계를 변화 시키다.  (0) 2019.04.15
몰입의 즐거움  (0) 2019.03.21
건전(sound)하지 못한 스타트업  (0) 2019.02.02
모든 것을 좌우하는 관점, OLPP  (0) 2019.01.21
추리와 추론의 차이  (0) 2019.01.14


별 거 안해도 돈을 많이 주던 시절이 있었다. 네이버 지식 in 도 초창기에는 돈을 주었기에 나는 매달 10만원 정도 받았던 것 같다. 구글 수익과 합하면 30~40만원 정도였다.

그러나 네이버도 구글도 어느 정도 사람이 모이면 돈을 적게 주고, 대신 모임을 개최한다.


난 유투브를 동영상 저장용으로 쓰는데 유투브가 처음 나오고 나서 바로 해서 그런지 구독자가 2천명은 되었었기에 유투버 모임에 초대되어 갈 수 있었다.


그 모임에 내 나이는 평균 이상이었고, 어린 친구들이 정말 돈을 많이 벌 것 같다는 생각이 사활을 걸고 참여하는 경우가 많았다.


정말 안타깝다.


구글, 네이버, 심지어 카카오까지(티스토리는 제외) 통계를 조작하고, 돈은 줄 만한 사람에게 준다. 내가 2008년 부터 삼성전자 다녀서 그런지 삼성전자에서 주말 이틀 출근만 해도 컨텐츠 관리하며 개고생해서 버는 돈보다 훨씬 많은 돈을 받았기 때문에 신경을 안 썼다. 물론, 티스토리는 애드센스 때문에 많이 하지만, 나의 최종 결정은 티스토리의 기능이 이미 구글의 블로거를 넘어섰고, 모바일에서는 유료앱이 달랑 1개 있는데 그것도 기능이 좋긴 하지만 티스토리가 제공하는 앱이 훨씬 좋기 때문이다. 1년간은 이전하고 광고를 나도 광고를 달 생각이다. 왜냐면 티스토리에 다는 광고는 사실 좀 파격적이기 때문이다. 구글 블로거야 걔네들이 서버를 운영하니까 돈 주는 것을 마음대로 조작한다고 쳐도. 티스토리의 경우 티스토리가 서버를 운영하니까 수익이 당연히 좋게 줄 수 밖에 없다. 네이버도 마찬가지. 그런데 다른 회사의 광고 모듈을 달게 한다는 것 자체가 대단한 파격이다. 물론, 거기에 따른 이유를 내가 모르는 것도 아니지만 네이버처럼 추잡하게 하지는 않는다. 추잡한 것은 어떤 것이냐? 해외에서는 차나 휴대폰 싸게 팔고 자국민에게 비싸게 팔면 이완용 짓거리랑 뭐가 다를게 있냐고 이미 알고 있을 것이다. 우리나라가 산유국은 아니지만 정유국인데 무지하게 기름값이 비싸다. 미국은 산유 되는 곳도 있긴 하지만 정유가 가능하기에 한국 반값이라는 것을 이해한지 십수년도 넘었다. 그런데 우리나라는 아니다. 네이버도 마찬가지. 동영상 광고 수익 때문에 유투브에서 막아 놨다. 여기까지는 사실 기업이니 이해가 가능한데, 한국만 막아놨다. 왜냐면 네이버가 외국에서 실패했기 때문이다. 8년전 내가 미국에 있을 때 무슨 미국 지역 전문가 모집한다고 네이버에서 떠들었는데 내가 이미 지식인 하면서 수작을 아는 터라 주변 IT 인들에게 이거 사기라고 많이 말을 해줬다. 믓튼, 미국 진출 실패해서 결국 자국민에게만 불편하게 하고 스킵도 오래도록 되지 않는 동영상을 보여주는 것이다. 한마디로 이.완.용, 매.국.노. 그러니 문화 사업을 할 수 밖에 없다. 그러니 경찰에 개인 정보를 동의 없이 넘겨줄 수 밖에 없다. 카카오는 그나마 이슈라도 되었는데 네이버는 이슈도 안된다. 댓글 조작이나 이슈되지. 왜냐? 네이버가 카카오 찔렀기 때문이다. 경쟁 없애려고. 모두 잘 알겠지만 제보 없이는 아무것도 안된다. 이 블로그에서 모두 풀 생각이다.


뭐... 잡썰이 더 길어 졌는데.


백만을 찍는 유투브 영상을 보면 이벤트를 하는데 사실 그 안에 들어가는 돈을 보면 백만원이 안된다. 나 같으면 산타하고 그러면 찾아 가서 수천만원치 쿨하게 지원해주겠는데 그런게 될 수 없는 구조라는 것이다.


길게 쓰려면 한없이 길어질 것 같아서. 결론만 말한다.


개인이 수입억 버는 것은 알려지지 않았을 때 그렇게 벌 수 있다. 사업체 형태여야 한다. 자, 일반화까지는 아니지만 나중에 할 이야기에 대해서 이슈를 던져 보겠다.


개인 프리랜서도 그렇다. 개인이 프리랜서 하면 3.3% 떼고 주고 무시하고 그런데 사업체 끼면 사업자 대 사업자기 때문에 부가가치세 10% 더 받고 대우도 다르다.


어디나 그렇다. 당신이 개인이라는 것이 알려지는 순간 회사는 멈추지 않을 만큼만 돈을 주게 된다.


그래서 많은 유투버들이 합치게 된다. 출구 전략을 세우게 된다.


그만큼의 고민을 하려면 지금 하는 학업이나 일을 그만두고 해야할 정도다.


개인 의견이지만 난 솔직하게 쓴다.

나는 엔지니어다.

더 잘 만든 곳으로 이전하는 수 밖에 없다.

이전 기간은 1년으로 본다. 몇 개의 블로그 중


https://asmansi.blogspot.com/

만 보아도 2009년 포스팅 글이 있으니 블로그 한지 공식 10년이 되었다.


대학생 시절 호스팅 사업도 했고, 테터툴즈 깔아서 했었고 그 이전에는 01410, 하이텔, 나우누리 시절 개인 BBS를 돌렸으니

아마 더 오래된 것 같다.


프로그래밍도 오래 했는데 다음과 같은 사안으로 굳이 블로그를 옮기면서 통합하게 되었다.


1. 이전 글에도 몇 번 밝혔지만 민주주의의 경쟁에서 오는 품질 향상이라는 큰 전제도 많은 비용이 투입되는 경우 적당히 해야 한다. 즉, 자동화 회사는 대륙간 하나씩 있고 경쟁하는게 맞다. IT 분야는 온라인이라 더 경쟁이 쉬운데 국내에는 카카오만 있는게 맞다. 네이버는 댓글 조작하고 카카오는 국민 정보를 정부에 주지만, 사실 텔레그램의 CEO 같은 스타가 나올만한 환경도 아니고 어느 정도는 타협하고 가는 수준이어야 하기 때문.


2. 국내 서비스는 정치에 쉽게 영향을 받고, 세계적인 서비스라고 하면 사실 삼성/LG 밖에 없다. 네이버 미국 진출 실패했고, 라인 결국 일본에 머물고 국내는 카톡이 잡았다. 그럼, 어디를 국가 대표로 만들 것인가? 카카오가 맞다. 역사 개뿔 없어서 볼거리라고는 캐네디 암살 장소에 X 쳐진 것 밖에 없는 미국이지만 역사가 짧고 최신의 마인드이기 때문이다. 카카오톡도 젊다. 그리고 온고지신 정신이 살아있다. 다음을 인수하고 김기사를 인수하는 것을 보았을 때 무엇이 좋은지 아는 스티브 잡스 같았다. 나의 글들은 상당히 어그레시브하기 때문에 이상한 티스토리 팀장이 와서 데이터 센터 번개 맞았으니 실수로 지웠다고 하고 미안하다며 카카오 선물 세트 몇 개 보낼런지도 모른다. 얕은 수에 당한다면, 그것도 내 블로그의 운명이겠지.


3. 사실 쓰는 것은 내 자유다. 어릴적 제대로 솔직하게 공개되는 것 하나 없어서 수많은 시행착오를 겪어야 했던 지난날을 보면. 가난하지만 꿈이 있고 재미있어 하고 눈이 초롱초롱한 후임이 어딘가는 있을거라 생각한다. 그런 친구에게 닿기를 간절히 바라는 마음으로 쓴다.


4. 사실, 난 나에게 극대한 피해가 오더라도 솔직함을 선택했고 그 길을 걸었다. 그것은 어머니의 영향이다.

그럼에도 나름 선방하면서 살고 있는 것을 보면 나름 괜찮은 인생이다.

물론, 더럽게 사는 사람들이 더 잘사는 것은 확실하다.

그러나 그것이 잘사는 것이 아니라는 것을 가르쳐 주고 싶은 마음도 있다.


물론, 이 마음은 단순히 블로그 정리한다고 먹은 것은 아니고 수십년된 생각이다.



'{BE} JAVA 21 corretto' 카테고리의 다른 글

국내 도둑 네이버가 더 잘되었으면 한다.  (0) 2019.01.11
가지고 싶다  (0) 2019.01.10
Large Language Model - 003  (0) 2019.01.06
Large Language Model - 002  (0) 2019.01.03
Large Language Model - 001  (0) 2019.01.02

플러스친구 친구추가에 동의

플러스친구를 친구로 추가하시면 광고와 마케팅 메시지를 카카오톡으로 받아볼 수 있습니다. 

또한, 챗봇으로 이용가이드를 확인할 수 있고 정기적으로 활용 팁을 받아볼 수 있습니다.


개인정보 취급위탁 동의

서비스 이용자(이하 "회원"이라 한다)와 ㈜카카오(이하 “카카오”라 한다)는 “회원”의 개인정보 처리업무를 "카카오"에게 위탁함에 있어 다음과 같은 내용으로 본 업무위탁계약을 체결한다.

제1조 (목적)

본 계약은 회원이 개인정보처리업무를 "카카오"에게 위탁하고, "카카오"는 이를 승낙하여 "카카오"의 책임아래 성실하게 업무를 완성하도록 하는데 필요한 사항을 정함을 목적으로 한다.

제2조 (용어의 정의)

본 계약에서 별도로 정의되지 아니한 용어는 정보통신망법, 동법 시행령 및 시행규칙에서 정의된 바에 따른다.

제3조 (위탁업무의 목적 및 범위)

"카카오"는 계약이 정하는 바에 따라 플러스친구 서비스를 제공하는 목적으로 개인정보 처리 업무를 수행한다.

제4조 (재위탁 제한)

① "카카오"는 “회원”의 사전 승낙을 얻은 경우를 제외하고 “회원”과의 계약상의 권리와 의무의 전부 또는 일부를 제3자에게 양도하거나 재위탁 할 수 없다.

② "카카오"가 재위탁 받은 수탁회사를 선임한 경우 "카카오"는 당해 재위탁계약서와 함께 그 사실을 지체없이 “회원”에게 통보하여야 한다.

제5조 (개인정보의 안전성 확보조치)

"카카오"는 정보통신망법 제28조, 동법 시행령 제15조 등에 따라 개인정보의 안전성 확보에 필요한 관리적․기술적 조치를 취하여야 한다.

제6조 (개인정보의 처리제한)

① "카카오"는 계약기간은 물론 계약 종료 후에도 위탁업무 수행 목적 범위를 넘어 개인정보를 이용하거나 이를 제3자에게 제공 또는 누설하여서는 안 된다.

② "카카오"는 계약이 해지되거나 또는 계약기간이 만료된 경우 위탁업무와 관련하여 보유하고 있는 개인정보를 「정보통신망법」 제29조에 따라 지체없이 파기하거나 “회원”에게 반납하여야 한다.

③ 제2항에 따라 "카카오"가 개인정보를 파기한 경우 지체없이 “회원”에게 그 결과를 통보하여야 한다.

제7조 (수탁자의 의무 등)

① “회원”은 "카카오"에 대하여 정보통신망법 등 관련 법률에 따른 실태점검, 시정요구, 교육 및 감독 등을 요구할 수 있고 “카카오”는 이에 응하여야 한다.

② “카카오”는 이 계약에 의하여 위탁받은 업무를 수행함에 있어 이 계약에 따른 의무를 위반하여 “회원” 또는 개인정보주체에게 손해가 발생한 경우 “카카오”는 그 손해를 배상한다.


개인정보 수집 및 이용동의

(주)카카오가 제공하는 카카오서비스는 아래의 목적으로 개인정보를 수집 및 이용하며,

회원의 개인정보를 안전하게 취급하는데 최선을 다합니다.

[필수] 서비스 기본 기능의 제공

  • 목적 : 회원 식별 및 관리, 중요 공지 알림 및 전화번호 인증
  • 항목 : 이름, 휴대전화번호¹
  • 기간 : 회원 탈퇴 시 지체없이 파기
    • 서비스 제공을 위해 필요한 최소한의 개인정보로 동의를 해 주셔야 서비스 이용이 가능합니다.
    • ¹카카오톡 가입 휴대전화번호

더 자세한 내용에 대해서는 개인정보처리방침을 참고하시기 바랍니다.


  1. 귀도 반 로섬 (Guido van Rossum): 파이썬의 창시자로, 그의 기여와 이 언어에 대한 지속적인 관심으로 커뮤니티에서 가장 높은 존경을 받습니다.
  2. 레이몬드 헤팅거 (Raymond Hettinger): 파이썬 코어 개발자이자, 파이썬의 내장 기능과 라이브러리 개발에 중요한 기여를 한 인물입니다. 그는 또한 탁월한 강연자로도 유명합니다.
  3. 데이비드 비즐리 (David Beazley): 파이썬 교육자이자 저자로, 'Python Essential Reference'와 같은 중요한 파이썬 책들을 저술했습니다. 그는 또한 파이썬의 고급 기능과 내부 작동 원리에 대한 심층적인 이해를 공유합니다.
  4. 트레비스 올리판트 (Travis Oliphant): 과학 계산을 위한 파이썬의 주요 라이브러리인 NumPy의 주요 개발자 중 한 명이며, SciPy와 Anaconda의 공동 창시자입니다.
  5. 캐롤 윌링 (Carol Willing): 파이썬 소프트웨어 재단 이사회 멤버이자, 교육과 다양성 증진을 위한 활동으로 존경받습니다.

 

 


중요고지사항

본 Blizzard 최종 사용자 라이선스 계약은 2018년 1월 23 일에 효력이 발생합니다.
이 Blizzard 온라인 게임 플랫폼 (이후 정의됨)을 설치하거나 이용하기 전 다음 계약(“본 라이선스 계약”)을 주의 깊게 읽으시기 바랍니다. 본 라이선스 계약의 모든 내용에 동의하지않는다면, 본 게임을 설치할 수 없습니다.
Blizzard Entertainment, Inc.의 온라인 게임 플랫폼(기존에 “Battle.net®”이라고 지칭됨) 및 Blizzard의 인터렉티브 게임, 플랫폼상 또는 플랫폼을 통하여 구매 및 이용을 할수 있도록 제공한 Blizzard가 아닌 개발사 (이하 “라이센서”)의 인터랙티브 게임 (이하 집합적으로 “게임”이라 지칭됨)에 대하여 관심을 가져주셔서 감사합니다. 본 라이선스 계약상 플랫폼은 다음과 같은의미이며 집합적으로 또는 개별적으로 다음을 지칭합니다: (1) PC 또는 모바일 기기에 설치된 Blizzard Battle.net 앱 클라이언트 소프트웨어 (과거 “Battle.net” 클라이언트라 지칭됨);(2) Blizzard Battle.net 앱과 게임과 관련하여 Blizzard 가 제공하고 운영하는 게임 서비스; (3) 각각의 게임 (게임 및 Blizzard Battle.net 앱과 관련하여 인정된모바일 애플리케이션); (4) Blizzard의 게임과 관련된 웹사이트와 게시판 서비스; (5) PC나 모바일 기기에 설치된 상기 요소들의 모든 기능 및 요소. Blizzard Entertainment,Inc. 는 한국에서 게임 및 서비스를 제공할 수 있는 권리를 Activision Blizzard International B.V.의 사업부인 Blizzard EntertainmentInternational에게 허용하며, Blizzard Entertainment International은 블리자드 엔터테인먼트 유한회사를 통하여 게임 및 플랫폼을 운영합니다. 귀하와 라이선스 계약을 체결하는당사자는 Activision Blizzard International B.V.의 사업부인 Blizzard Entertainment International (“블리자드” 또는 당사”) 입니다.귀하가 본라이선스 계약의 내용에 동의하지 않는 경우, 게임 또는 플랫폼을 설치, 복사 또는 사용할 수 없습니다.

1. 플랫폼

  1. Blizzard 계정. 플랫폼을 이용하기 위하여 귀하는 플랫폼 상으로 계정(“계정”)을 만들거나 과거에 계정을 등록하였어야 합니다. 계정의 생성 및 사용은 아래와 같은 조건에따릅니다:
    1. 귀하는 (i) “자연인”이고, 귀하가 거주하고 있는 국가의 성인이며 (회사, 유한회사, 조합 및 기타 유형의 법인 또는 기업체는 계정을 생성할 수 없습니다), (ii)Blizzard로부터 특별히 플랫폼이용이 금지된 자가 아닌 경우에만 계정을 생성할 수 있습니다. 귀하가 미성년자이고 귀하의 부모님 또는 법정대리인으로부터 플랫폼 사용에대한 허가를 받은 경우, 귀하는 귀하의 부모님 또는 법정대리인의 계정과 독립된 계정을 생성하여야 합니다.
    2. 플랫폼상 한 개인이 개설할 수 있는 최대한의 계정 수는 한(1) 개로 제한됩니다.
    3. 귀하가 계정을 생성하거나 업데이트함에 있어 귀하는 다음과 같은 의무가 있습니다.
      1. Blizzard에게 귀하의 성명, 주소, 전화번호, 이메일 주소, 환불 요청시에는 계좌번호와 같은 정확하며 최신의 일정한 개인정보를 제공하여야 합니다. 이에더하여 Blizzard는 귀하에게 특정 게임 또는 플랫폼의 특정 기능을 사용하기 위하여 결제정보를 제공할 것을 요구할 수도 있습니다. Blizzard가 귀하의개인정보를 보관함에 있어서는 Blizzard의 개인정보취급방침이 적용되는 바, 그 내용은http://kr.blizzard.com/ko-kr/company/about/privacy.html에서확인하실 수 있습니다. 또한, Blizzard는 귀하가 플랫폼에 접속함에 따라 발생하는 개인정보가 아닌 정보를 수집할 권리가 있습니다.
      2. 고유한 사용자명 및 계정암호 (이하 총칭하여 “로그인 정보”) 를 선택하여야 합니다. 계정의 암호로 실명을 이용하지 말아야 하며 본 라이선스 계약의 규정에서달리 정하지 않는 한 계정이나 로그인 정보를 타인과 공유하여서는 안됩니다.플랫폼을 통하여 구동되는 게임 중에는 게임에 오류가 발생하는 경우 귀하의 컴퓨터 시스템에서 시스템 및 드라이버 정보를 포함한 관련 정보를 Blizzard로 전달하도록 하는툴을 포함하고 있는 것도 귀하는 요청 시 Blizzard에 정확한 정보를 제공하고, 정보가 변경되면 즉시 이러한 정보를 업데이트할 것에 동의합니다.
    4. 플랫폼에서 게임을 이용하기 위해서는 계정에 게임의 라이선스를 등록하여야 하며, 라이선스의 등록을 위해서 Blizzard가 생성한 인증 코드가 필요합니다. 소매점에서 구매한게임 라이선스의 경우, 인증 코드는 해당 게임의 포장 내에 포함될 수 있습니다. 디지털 방식으로 Blizzard에서 게임을 구매하거나 경우 PC방 서비스를 이용하여, 인증코드는 게임을 구매한 계정에 할당됩니다.
    5. 귀하는 계정과 로그인 정보를 비밀로 유지할 책임이 있으며, 귀하로부터 허락을 받았는지 여부를 불문하고 구매 등을 포함한 귀하의 로그인 정보의 모든 사용내역에 대한 책임을부담합니다. 귀하는 자신의 로그인 정보를 비밀로 유지할 책임이 있으며, Blizzard의 고의, 중과실로 인한 것이 아닌 한, 로그인 정보 사용에 대한 책임을 집니다.귀하가 로그인 정보의 허락 없는 공개, 도난 또는 분실 등 보안에 문제가 생겼다는 사실을 인지하거나 그에 대한 합리적인 의심이 드는 경우 귀하는Blizzard Support를 통하여 그러한 사실을Blizzard에게 알려야 합니다.
    6. 귀하가 거주하는 국가의 법률의 적용을 받음을 조건으로, 미성년자들은 그들의 부모님 또는 법정대리인에 의하여 생성된 계정을 사용할 수 있습니다. 귀하가 귀하의 자녀 또는귀하의 후견을 받는 아동(통칭하여 “아동”)에게 플랫폼의 계정을 사용할 수 있도록 허용하는 경우, 귀하는 귀하 및 귀하의 아동을 대표하여 본 라이선스 계약을 체결한다는사실에 동의하며, 귀하가 허용하였는지 여부를 불문하고 귀하가 귀하의 아동에 의한 모든 계정사용내역에 대한 책임을 부담한다는 사실을 인지하고 이에 동의합니다.
    7. 귀하가 게임 및 플랫폼을 사용하여 Blizzard 또는 다른 이용자들과 서로 게임을 하는 경우, 이는 Blizzard에 의하여만 유지되고 강제되는 운영정책 (“운영정책”)의적용을 받게 됩니다. 위 운영정책은 예시적이며 예시되지 않은 내용이 포함될 수 있습니다. 운영정책은 본 항에 의하여 본 라이선스 계약의 일부를 구성하게 되며,http://kr.blizzard.com/ko-kr/company/legal/웹페이지 및 그 하위 페이지에서 그 내용을 확인하실 수 있습니다. 개인정보 취급방침은http://kr.blizzard.com/ko-kr/company/about/privacy.html에서 그 내용을 확인하실 수 있습니다.
    8. 귀하는 귀하나 제3자가 귀하의 계정을 이용함으로써 발생하는 모든 비용 및 관련 세금을 지불하는 것에 동의합니다. 특정 게임에 대하여 자동 결제 방식을 선택할 경우, 귀하가자동 결제나 계정을 취소하기 전까지는 해당 결제에 대한 지불은 자동적으로 처리되는 것을 인정하고 (귀하의 배틀코인 잔액이나 신용카드로 결제될 수 있습니다.)Blizzard는 언제든지 플랫폼을 통하여 제공되는 상품 및 서비스의 가격을 변경할 수 있습니다.
    9. Blizzard는 귀하가 플랫폼을 이용할 경우 귀하의 채팅 등의 교신내용을 모니터하고 기록할 수 있으며, 귀하는 귀하가 플랫폼을 이용할 경우 귀하의 교신내용의 사적인 것일것이라고 기대할 수 없다는 것을 인정하고 이에 동의합니다. Blizzard는 다음과 같은 이유를 포함하여 어떠한 이유로도 귀하의 교신내용을 공개할 권리가 있습니다: (a)관련 법령, 법적 절차, 정부 요청의 준수목적 (b) 본 라이선스 계약이나 기타 Blizzard의 정책 실행 목적, (c) Blizzard의 법적 권리 및 구제 방법을보호하기 위한 목적, (d) 블리자드의 판단으로 타인의 신체 및 안전에 위협이 있다고 생각할 경우 그를 보호하기 위한 목적, (e) 범죄행위 및 기타 위협행위를 보고하기위한 목적
  2. 라이선스 부여. 귀하가 본 라이선스 계약에 동의하고 이를 준수하는 경우, Blizzard는 귀하에게 다음과 같은 내용의 제한적이고, 취소가능하며, 재라이선스가 불가능하고비독점적인 게임 및 플랫폼을 이용할 수 있는 라이선스를 부여하며, 이 라이선스는 아래 1.C항에서 규정하고 있는 “라이선스에 대한 제한”규정의 적용을 받습니다:
    1. 귀하는 서비스를 이용하고 이에 접속하기 위하여 Blizzard Battle.net 앱을 귀하의 적법한 통제하에 있는 한 대 이상의 컴퓨터 또는 모바일 기기에 설치할 수있습니다.
    2. 귀하는 본 라이선스 계약에서 달리 규정하고 있지 않는 한, 본 라이선스 계약의 계약기간 동안에만 플랫폼을 개인적이고 비영리적인 오락 목적으로만 사용할 수 있습니다.
    3. 귀하는 플랫폼 이용과 관련한 귀하의 권리나 의무를 타인에게 이전할 수 없습니다.
    4. 귀하가 소매점으로부터 원본 미디어(예를 들면 CD-ROM이나 DVD 등에 담겨 있는 경우 등)의 형태로 구매한 게임의 경우, 동봉된 인증 키를 계정에 연결하지 않았을 경우,귀하는 본 라이선스 계약에 동의하는 자에게 원본 미디어, 원본 패키지 및 게임과 함께 유통된 매뉴얼 등 문서를 물리적으로 이전하는 방법으로 본 라이선스 계약에 따른 게임사용과 관련한 귀하의 모든 권리와 의무를 영구적으로 이전할 수 있으나, 이는 귀하가 귀하의 통제 또는 소유 하에 있는 모든 게임의 사본 및 설치를 영구히 삭제한다는 전제하에서만 가능합니다. 위 이전행위와 관련하여 부과되는 모든 세금, 수수료, 요금, 의무, 원천징수금, 부과금 등과 이자, 불이익 및 가산금에 대하여는 귀하가 온전한 책임을부담합니다. 위와 같은 경우 외에는 Blizzard는 그 어떠한 게임에 대한 권리 및 의무의 이전도 인정하지 않습니다.
    5. 플랫폼에서 이용가능한 일부 게임들은 다음을 포함하는 특정 라이선스 조건이 적용될 수 있습니다:
      1. 게임의 시험판 또는 ‘스타터’ 버전은 귀하가 Blizzard로부터 게임 라이선스를 구매하기 전에 게임의 제한된 버전을 구동할 수 있도록 합니다. 게임의 완전한버전에 대한 라이선스는 플랫폼을 통하여 구매할 수 있습니다.
      2. 일정한 경우 게임의 “완전한 버전”은 게임 라이선스를 구매하고 귀하의 계정에 추가하여야 구동될 수 있습니다.
      3. 귀하는 귀하에게 등록된 계정을 통하여 귀하가 라이선스를 부여받은 게임을 공중에게 제공되는 인증된 사이버카페나 컴퓨터게임센터에서 플랫폼상에 이용할 수 있습니다.해당 시설의 운영자는 시설을 이용하는 것에 대한 대가를 징수할 수 있습니다.
      4. 특정 게임의 경우 플랫폼에서 획득할 수는 있으나, 플랫폼에서 이용할 수 없을 수도 있습니다. 그러한 경우 해당 게임은 구매 후 설치하거나 이용할 경우 별도의최종 사용자 라이선스 계약의 적용을 받을 수도 있습니다.
      5. 블리자드의 라이센서에 의하여 제작되고 플랫폼을 통하여 배포 및 이용되는 게임의 경우, 귀하는 해당 게임을 플랫폼에서 이용하기에 앞서 라이센서의 최종 사용자라이선스 계약에 동의하여야 할 수 있습니다. 라이센서의 최종 사용자 라이선스 계약의 조건은 본 조항에서 인용됨으로써 본 라이선스 계약의 일부가 됩니다.라이센서의 게임 이용과 관련하여 본 라이선스 계약의 조건과 라이센서의 최종 사용자 라이선스 계약의 조건에 차이가 있을 경우, 라이센서의 최종 사용자 라이선스계약이 우선하며 해당 게임의 이용에 적용됩니다. 그 외의 플랫폼과 관련하여 본 라이선스 계약의 조건과 라이센서의 최종 사용자 라이선스 계약의 조건에 차이가있을 경우, 본 라이선스 계약이 우선하며 귀하의 플랫폼 이용에 적용됩니다.
  3. 라이선스에 대한 제한. 귀하는 귀하가 아래와 같은 라이선스에 대한 제한을 침해하거나 침해하는 것을 돕는 경우에 위와 같은 플랫폼, 그 일부 또는 구성요소 및 특정 기능을사용할 수 있는 라이선스가 철회될 수 있고, 어떠한 상황에서도 다음과 같은 행위 또는 다음 행위 중 일부라도 하지 않을 것에 동의합니다:
    1. 2차적 저작물을 만드는 행위: 플랫폼, 서비스 또는 게임의 복제 또는 재생 (본 라이선스 계약1.B조항에 의하여 허용되는 경우는 제외)하는 경우 또는 이를변환, 역설계, 제작, 소스코드 추출, 수정, 분해, 역컴파일하거나 이를 기반으로 2차적 저작물을 만드는 행위;
    2. 치팅행위: 다음과 같은 것을 제작, 이용, 제공, 홍보, 광고, 사용가능하게 하거나 배포하는 행위 또는 그러한 행위를 돕는 행위
      1. 치트프로그램, Blizzard에 의하여 명시적으로 허가되지 않은 것으로서 게임 내용에 영향을 미치거나 조작하는 방법으로 귀하나 다른 이용자가 그러한 방법을이용하지 않는 이용자보다 유리한 지위를 가지게 되는 게임내의 버그를 이용하는 것을 포함.
      2. 자동화소프트웨어 (Bots): Blizzard에 의하여 명시적으로 허가되지 않은 것으로서 게임이나 플랫폼과 그에 부수한 요소나 기능에서 자동화된 동작을 가능케하는 프로그램 명령어나 소프트웨어 (예를 들어 게임내에서 캐릭터를 자동으로 동작하게 하는 프로그램 등)
      3. 해킹: Blizzard에 의하여 명시적으로 허가되지 않은 게임소프트웨어나 플랫폼에 접속하거나 수정하는 모든 행위
      4. Blizzard에 의하여 명시적으로 허가되지 않은 Blizzard Battle.net 앱 클라이언트나 플랫폼, 게임 및 그에 부수한 요소나 기능과 관련하여이용되는 프로그램 명령어나 소프트웨어로서 게임 내용에 영향을 미치거나 조작하는 것
    3. 금지된 영리목적의 사용행위: 본 라이선스 계약에서 명시적으로 허용되지 아니한 목적으로 Blizzard Battle.net 앱 클라이언트, 플랫폼 또는 게임 또는그 일부는 사용하는 행위. 여기에는 다음과 같은 행위가 포함되나 이에 제한되지 않습니다. (i) 영리목적의 시설에서 게임을 구동하는 행위(제1.B.vi.4의 적용을 받음);(ii) 플랫폼이나 게임 밖에서 판매하기 위하여 게임 내 화폐, 아이템, 자원, 물약을 수집하는 행위; (iii) 플랫폼이나 게임 밖에서의 대가를 위하여 게임 내에서파워레벨링 등을 하는 행위; (iv) 플랫폼 또는 게임을 통하거나 그 안에서 문자, 영상통화 등의 방법으로 영리목적의 광고, 권유 또는 청약을 하거나 이를 가능하게 하는행위; 또는 (v) 관련된 지역에서 법률상 도박에 해당하는 지 여부와 관계없이 허가 없이 Blizzard 게임의 결과를 포함한 어떠한 부분이라도 이용하는 이벤트를조직하거나, 홍보, 협조, 또는 참여하는 행위
    4. “이스포츠”: 1.D.ii.2에서 명시되지 않은 형태로 Blizzard의 사전 서면동의 또는 추가 라이선스를 획득함 없이 영리법인 또는 비영리법인에 의하여스폰서, 홍보되거나 그에 의하여 가능하게 된 ‘이스포츠’ 또는 그룹경기를 위하여 플랫폼이나 게임을 사용하는 행위;
    5. 클라우드 컴퓨팅: 게임 이용을 포함하여 플랫폼 사용 시 게임의 내용을 제3자의 서버에서 불특정의 기기로 허가없이 스트리밍하거나 송출할 수 있도록 고안된 승인받지 않은 제 3자가 제공하는 “클라우드 컴퓨팅” 서비스, “클라우드 게임” 서비스를 포함한 어떠한 소프트웨어나 서비스를 이용하는 행위
    6. 정보 “추출행위”: Blizzard Batte.net 앱 클라이언트, 플랫폼 또는 게임에 의하여 저장되거나 생성된 정보를 승인되지 않은 방법으로 가로채거나수집하거나 읽어내거나 “추출”하는 행위; 다만, Blizzard는 고유한 단독 재량으로 특정 제3자 사용자 인터페이스의 사용을 허용할 수 있습니다;
    7. “아이템 복제”행위: 플랫폼 및 게임의 디자인 하자, 보고되지 않은 문제점 또는 프로그램 버그를 이용하여 생성된 게임 내 아이템을 생성, 이용 또는 거래하는행위;
    8. 대전주선: 어떠한 목적으로도 게임에 관련된 대전주선서비스를 호스팅, 제공 또는 개발하거나 방식을 불문하고 Blizzard가 사용하는 통신 프로토콜을 가로채거나에뮬레이션하거나 리디렉트하는 행위. 이에는 허가되지 않은 인터넷 게임, 네트워크 게임(Blizzard가 명시적으로 허가한 경우에는 예외), 또는 콘텐츠 집합통신망의 일부로행하여지는 경우가 포함되나 이에 국한되지는 않습니다;
    9. 허가되지 않은 접속: 게임 또는 플랫폼에 허가되지 않은 접속을 생성, 조성 또는 유지하는 행위로서 이에는 (i) 플랫폼을 에뮬레이션하거나 에뮬레이션하려고시도하는 허가받지 않은 서버로 접속하는 행위 및 (ii) Blizzard에 의하여 명시적으로 허가된 바 없는 제3자 프로그램 또는 도구를 사용하는 접속이 포함되나 이에국한되지는 않습니다;
    10. 이전행위: 본 라이선스 계약서에 명시적으로 허가되지 않은 방식으로 다른 당사자에게 게임의 복사본 또는 게임에 대한 귀하의 권리를 판매, 재라이선스, 대여,임대, 담보제공 또는 양도하는 행위;
    11. 방해/괴롭힘: 다른 이용자의 게임 이용 경험을 방해하거나 저해하기 위한 어떤 행동에 관여하거나, 다음과 같은 행위를 포함하여 Blizzard의 플랫폼의 운영을방해하는 행위:
    12. 플랫폼이나 게임의 환경을 지원하기 위하여 이용되는 어떠한 컴퓨터를 방해하거나 방해하는 것을 돕는 행위. 플랫폼을 방해하거나 게임의 적법한 운영을 훼손하기위한 귀하의 모든 시도는 민법 또는 형법에 위반되는 행위일 수 있습니다.
    13. 다른 이용자의 게임 이용 경험을 방해하거나 저해하기 위한 정도를 벗어난 괴롭힘, 고의적 게임방해행위, 괴롭히는 행위, 채팅 및 고의적인 게임내 미활동 또는고의적인 접속종료 행위
    14. 플랫폼 오용: 귀하는 본 라이선스 계약에 의해 명시적으로 허용된 이외의 방식으로 플랫폼에 접속하거나 플랫폼을 이용할 수 없습니다. 상기 항목에 제한되지 않고귀하는 (a) 플랫폼 거부 공격을 포함(이에 제한되지 않음)하여 플랫폼에 대해 어떤 형태로든 일체의 공격을 수행하거나 그러한 공격에 지원 또는 참여하지 않으며 그 밖에플랫폼 또는 타인의 플랫폼 이용을 방해하지 않으며, (b) 플랫폼, 다른 이용자에게 등록된 계정 또는 플랫폼에 접속된 컴퓨터 시스템 또는 네트워크에 대해 허가되지 않은접속을 하지 않을 것에 동의합니다.
    15. 법률 위반: 이용자는 게임 클라이언트 또는 플랫폼 이용과 관련하여 어떠한 준거법이나 규정도 위반하지 않을 것에 동의합니다. 상기 항목에 대한 제한 없이 귀하는플랫폼을 통해 (사생활 에 대한 권리 또는 평판을 포함하여) 타인의 저작권, 등록상표, 특허, 영업 비밀 또는 기타 권리를 침해하는 자료 또는 정보를 제공하지 않을 것에동의합니다.
  4. 게임 및 플랫폼 기능
    1. 플랫폼 기능.
      1. 글로벌 플레이. 플랫폼을 통하여 구동할 수 있는 게임 중 “글로벌 플레이”기능이 제공되는 게임의 경우, 귀하는 계정이 생성된 지역 이외의 지역의다른 플레이어들과 함께 게임을 즐길 수 있습니다. 글로벌 플레이 기능을 사용하기 위하여서는 귀하가 게임을 하고자 하는 지역에서 Blizzard가 운영하고 있는서버로, 계정과 관련한 귀하의 개인정보의 전부 또는 일부의 이전이 요구됩니다. 귀하는 글로벌 플레이에 참여함으로써, Blizzard가 귀하의 정보를 귀하가글로벌 플레이 기능을 이용하여 참여할 것을 선택한 개별 지역에 위치한 Blizzard의 서버에 이전할 수 있음에 동의합니다. 보다 자세한 내용을 위하여는Blizzard의 개인정보 취급방침을 참조하시기 바랍니다.
      2. 배틀코인.
        1. Blizzard에서 상품이나 플랫폼의 기능을 구매하기 위한 용도로만 사용되는 금액 (이하 “배틀코인”)을 계정에 보유할 수 있습니다. 단,계정은 신용 한도, 당좌 보호 또는 예금 계좌는 아닙니다. 배틀코인이 미사용인 경우, 충전 후 7일 이내에는 귀하는 전자상거래 등에서의소비자보호에 관한 법률에 의거하여 그 충전을 취소요청할 수 있으며, 이 경우 수수료 차감없이 전액 환불 됩니다. 충전된 배틀코인이 일부라도사용되거나, 충전 후 7일이 경과한 경우 충전된 배틀코인의 환불은 법률에서 달리 규정하지 않는 한, 구매시 동의한 조건에 따라 환불 수수료가공제되어 환불됩니다.. 귀하가 계정에 충전한 배틀코인과 기타 제삼자로부터 선물 받은 배틀코인은 충전한 날 또는 선물 받은 날로부터 5년 이내에사용하여야 하고, 그 기간 내에 사용하지 않은 금액은 소멸합니다.. 계정에 충전된 배틀코인은 이자를 발생시키지 않습니다.
        2. 계정에 배틀코인을 충전하기 위해서는https://kr.battle.net/account/management/ebalance-purchase.html에서제공되는 설명을 참조해주십시오. 계정에 배틀코인을 충전하는 거래는 아래에 첨부된 판매 조건에서 확인하실 수 있는 거래조건에 의하여 규율 됩니다.계정에 충전할 수 있는 최소 단위 금액은 1,000원이며, 최대로 충전할 수 있는 금액은 관계 법령상 성년자의 경우 50만원, 관계법령상미성년인 경우 7만원입니다. 당사는 최소 충전 단위 금액과 최대 충전 금액을 본 라이선스 계약의 9 조에 의거하여 귀하에게 고지한 후 수시로변경할 권리를 유보합니다. 계정에 충전된 잔액을 확인하기 하거나 계정에서 최근에 발생한 거래를 조회하기 위해서는https://kr.battle.net/account/management/transaction-history.html를방문하시어 해당 페이지의 설명을 따라주시기 바랍니다.
        3. 충전된 배틀코인은 Blizzard에서 현금과 동일하게 구매에 사용될 수 있으며, 귀하는 인증되지 않은 거래를 포함하여 해당법률의 조건에 따라귀하의 계정에서 발생한 모든 거래에 대하여 책임이 있습니다. 만약 귀하의 계정에 문제가 발생했다는 의심이 들면, 귀하는http://kr.battle.net/support/ko/를확인하셔야 합니다. 계정의 잔액은, 당사가 귀하로부터 ‘계정에 문제가 발생했을지도 모른다’는 귀하의 통지를 수령하였다고 통지를 발송한 때부터보호될 것입니다. 그 시점 이후로부터 당사는 계정의 잔액을 동결하는 조치를 취할 것이며, 당사가 귀하에게 계정의 통제권을 회복시킨 이후에 동결조치를 해제할 것입니다.
        4. 귀하가 직접 구매한 (선물받은 배틀코인 제외) 배틀코인의 환불을 요청한 경우 현재 남아 있는 잔액의 10% 또는 잔액이 10,000원 이내인경우 1,000원을 공제하고 남은 금액을 환불하여 드립니다. 다만 잔액이 1,000원 이하인 경우 환불이 불가능합니다.
        5. 당사가 귀하의 계정의 문제가 귀하에게 어떠한 이유로든 책임이 있다고 판단할 경우, 당사는 문제가 발생한 타 이용자의 계정을 통하여 획득한배틀코인을 계정에서 제거하고, 귀하가 플랫폼을 사용할 권리를 부여받은 게임에 접속을 중지시키며, 계정의 삭제와 동시에 또는 선택적으로 귀하에게가능한 모든 법적, 형평법적 조치를 취할 권리를 보유합니다.
        6. 귀하가 당사로부터 상품 및 플랫폼을 구매하기로 동의할 경우, 그러한 구매 대금을 지불할 의무의 불이행이 발생할 경우, 당사가 귀하의 현재 계정에충전된 배틀코인을 동결할 권리를 보유하는 것에 귀하는 동의하며, 불이행된 대금 채무를 완전히 이행하기 전까지 충전된 배틀코인을 불이행 채무의이행에 사용하는 것에 동의합니다. 대금 채무가 계정에 충전된 배틀코인에 의하거나 기타 다른 결제수단에 의하여 완전히 변제될 경우, 당사는 계정에충전된 배틀코인의 동결을 해제할 수 있습니다.
      3. 플랫폼을 통한 구매. 플랫폼을 통하여 구매한 제품의 판매조건은 아래의 첨부 1에서 확인하실 수 있으며, 해당 판매조건은 본 라이선스 계약에 의하여인용됨으로써 본 라이선스 계약의 일부가 됩니다.
      4. 이용자 콘텐츠. “이용자 콘텐츠”는 게임이나 플랫폼과 관련하여 귀하 또는 다른 이용자가 게임 클라이언트 또는 플랫폼을 통해 업로드 또는 전송하는대화 텍스트를 포함한 커뮤니케이션, 이미지, 사운드 및 모든 자료 및 정보를 의미합니다. 귀하는 게임내에서 보여지거나 게임과 일체화된 이용자 콘텐츠에 대하여Blizzard가 다음과 같은 방법과 조건으로 이용하는 것을 허락합니다.
        1. 해당 이용자 콘텐츠를 게임이나 플랫폼의 제공 및 홍보의 목적으로 이용, 편집, 형식의 변경 및 기타 변형 (공표, 복제, 공연, 전송, 배포,방송, 2차적 저작물 작성 등 어떠한 형태로든 이용 가능하며, 이용기간과 지역에는 제한이 없음)
        2. 이용자 콘텐츠를 제작한 이용자의 사전 동의 없이 거래를 목적으로 이용자 콘텐츠를 판매, 대여, 양도 행위를 하지 않음
        3. 컴퓨터 메모리에의 접속
        4. 해당 이용자 콘텐츠의 작성자로서의 귀하의 성명은 표시하지 않을 수 있음
        게임내에서 보여지지 않고 게임과 일체화되지 않은 귀하의 이용자 콘텐츠 (예컨대, 일반게시판등에의 게시물)에 대하여는 Blizzard가 귀하의 명시적인 동의가없이 상업적으로 이용하지 않으며, 귀하는 언제든지 이러한 이용자 콘텐츠를 삭제할 수 있습니다.
        다만, 이러한 이용이 법률에 의하여 제한을 받을 경우, Blizzard는 해당 법률 규정에 따릅니다.
      5. 실제 ID 기능 및 신원 공개. 플랫폼은 귀하로 하여금 “실제 ID 친구” 기능을 통하여 플랫폼을 이용하는 다른 사용자들에게 귀하의 신원을 공개할수 있도록 합니다. 귀하가 실제 ID 기능을 사용하고 다른 사용자에게 “실제 ID 친구” 신청을 함에 동의하는 경우, 당해 사용자는 귀하의 실명을 볼 수 있게됩니다. Blizzard 클라이언트 음성채팅과 같은 기능은 실제 ID 기능을 사용함에 동의한 사용자간에서만 사용이 가능합니다. 귀하가 실제 ID기능을사용함에 동의하는 경우 귀하가 “실제 ID 친구”로 지정한 사람들은 귀하의 다른 “실제 ID 친구”들의 이름 또한 볼 수 있게 되며, 귀하의 이름은귀하의 “실제 ID 친구”가 동 기능을 이용하여 지정한 다른 사람들에게 보여질 수 있습니다. 귀하는 귀하의 계정에서 모든 실제 ID 친구들을삭제하는 방법으로 언제든지 실제 ID 기능의 사용을 거부할 수 있습니다.
      6. 비용. 이용자는 등록한 계정을 자신 또는 타인이 이용함으로써 발생한 모든 비용과 세금을 지불하는 데 동의합니다. 본 플랫폼을 통해 제공되는 상품및 플랫폼(모든 게임에 대한 가입계획을 포함)에 대한 요금은 법률에 따른 사전 고지 후 변경될 수 있습니다 귀하는 관련 법령에서 규정된 경우를 제외하고는환불을 받을 수 없으며, 선불 처리된 게임 시간에 대한 잠재적 환불에 대한 정보는 해당 게임의 특정 이용 약관을 참조해야 합니다.
      7. 미예고 플랫폼 중단. Blizzard의 사전통지 없이 플랫폼이가 1일 4시간(누적시간) 이상 중단되거나 장애를 받은 경우 Blizzard는 기간별요금제 게임 플랫폼 이용자에게 그와 같은 미예고 중단 / 장애시간의 3배만큼의 게임시간을 제공합니다. 그러나 플랫폼 중단이나 장애가 다음과 같은 사유로 발생한경우에는 예외로 합니다.
        1. 아래 16.D 조에 정의한 바와 같은 "불가항력 사유"
        2. 이용자 또는 Blizzard에게 책임이 없는 제3자의 고의 또는 과실로 인한 플랫폼 중단 또는 장애
        3. Blizzard의 잘못 없이 Blizzard의 통신플랫폼 제공회사가 서비스를 제공하는데 필요한 통신플랫폼을 제공하지 못함으로 인한 플랫폼의 중단또는 장애
        4. 일정에 따른 플랫폼 장비의 유지/보수, 교체, 정기 점검, 설치로 인한 플랫폼 중단으로서 Blizzard가 이를 사전에 공지하는 경우
        5. 또한 정량제 이용자는 게임시간 연장을 적용 받을 수 없습니다.
        또한, Blizzard가 요금 미지급 또는 이용약관 위반을 이유로 정지시키지 않은, 유효한 계정을 갖고 있는 이용자는 Blizzard로부터 사전통지 없이30일 동안에 발생한 플랫폼 중단/장애 누적시간이 72시간을 초과하는 경우 계약을 해지할 수 있으며, 이는 이용자의 권리이지 의무가 아닙니다. 다만, 기간별요금제를 제공하지 않는 게임을 구매하였을 경우, 이용자는 관련 법규정에 의한 내용과 같거나 소비자에게 유리한 해당 게임의 판매 규정 및 조건에 따라 계약을해지하거나 보상받을 수 있습니다.
      8. 위치기반 정보의 이용. 특정 게임이나 플랫폼을 이용하기 위하여, 이용자는 블리자드가 이용자의 위치정보에 접근, 이용 및 저장할 수 있는 특정기능을이용할 것을 선택할 수 있습니다. 그러한 경우 Blizzard의 위치기반서비스 이용약관이 적용됩니다.
    2. 게임기능.
      1. 게임 편집기. 특정한 게임에는 게임과 관련하여 사용하기 위하여 사용자 지정 게임, 레벨, 지도, 시나리오 등 (“커스텀 게임”)을 제작할 수 있는프로그램(“게임 편집기”)이 포함되어 있습니다. 본 라이선스 계약과 본 라이선스 계약에서 인용된 다른 계약에서 커스텀 게임은 게임 편집기를 이용하여 제작된모든 콘텐츠 즉, 다음을 포함하나 이에 제한되지 않는 해당 커스텀 게임에서 이용된 모든 디지털 파일들과 (1) 그러한 파일들에 포함된 모든 콘텐츠 즉,플레이어 캐릭터나 비플레이어 캐릭터, 오디오 및 비디오 구성요소, 환경구성물, 객체, 아이템, 스킨이나 표면의 모양 (이에 제한되지 않음), (2) 모든제호, 상표, 상호, 캐릭터 명칭, 커스텀 게임에 포함되거나 이용된 기타 명칭이나 문구 (이에 제한되지 않음), (3) 커스텀 게임에 포함된 모든 콘텐츠,게임 컨셉, 방법이나 아이디어 등을 포함한 지적 재산권 을 의미합니다. 커스텀 게임은 특정 게임 편집기에서 이용되는 게임의 엔진으로만 구동될 수 있습니다.커스텀 게임의 이용방법에 대하여는 커스텀 게임 이용 정책이 규정하고 있으며, 본 조항에 의하여 해당 내용은 본 라이선스 계약의 일부를 구성합니다.Blizzard는 커스텀 게임을 플랫폼에서 언제나 독자적으로 수정, 제거 비활성화, 또는 삭제할 수 있습니다.
      2. 특정 게임의 “온라인” 구성요소. 어떠한 게임 (예를 들어, 디아블로 3)들은 온라인에서만 이용할 수 있으며, 최종 사용자는 허가 받은 플랫폼접근 권한을 획득해야 합니다. 최종 사용자는 Blizzard의 재량에 의하여 플랫폼이 제공되며 본 라이선스 계약에 따라 Blizzard가 플랫폼을 종료 또는중지할 수 있음을 이해하고 이에 동의합니다.
      3. 커뮤니티 토너먼트. 이스포츠 토너먼트 활동을 지원하기 위하여 블리자드는 커뮤니티 경기 라이선스에 따라 커뮤니티 토너먼트의 개최자에게 토너먼트를개최할 수 있는 라이선스를 개최합니다. 커뮤니티 경기 라이선스의 조건과 다른 토너먼트를 개최하려고 하는 경우 필요한 라이선스를 위하여tournament@blizzard.co.kr로 블리자드에게 연락하시기바랍니다.
      4. 게임의 베타 테스팅 선공개 버전. 게임의 일정한 선공개 버전(“베타”)은 테스팅(“베타 테스트”)을 위하여 귀하에게 제공될 수 있습니다. 이용자의플랫폼을 통한 베타 테스팅은 다음 사항에 따라 규율됩니다:
        1. 참가자격. 베타테스트에 참가하기 위하여 귀하는 다음의 필수조건을 모두 충족하여야 합니다:
          1. Blizzard가 귀하를 베타 테스트 참여자로 지정하여야 합니다;
          2. 베타테스트에 참가시 귀하가 사용할 계정은 정상적인 상태여야 합니다;
          3. 베타테스트 대상이 되는 베타가 다른 게임의 확장판인 경우, 계정에는 당해 게임의 이전의 모든 확장판으로 업그레이드 되어야 있어야 합니다;
          4. 귀하는 베타테스트를 위하여 등록하기 전 Blizzard로 하여금 귀하가 베타에 참여함에 있어 사용할 컴퓨터 시스템(“베타 테스트 시스템”)으로부터 하드웨어 또는 소프트웨어 정보를 취득할 수 있도록 하여 귀하가 베타테스트에 참여할 자격이 있는지 여부를 판단할 수 있도록 합니다; 또한
          5. 베타 테스트 시스템은 Blizzard가 베타테스트를 위하여 필요하다고 판단한 사양에 부합하는 것이어야 합니다.
        2. 비밀유지. Blizzard는 일정한 베타테스트를 비밀에 부칠 것을 결정할 수 있습니다. 베타테스트가 비밀로 결정되는 경우, 귀하는 베타테스트참여권유를 받음에 있어 당해 베타테스트가 비밀에 해당함을 고지 받을 것입니다. 비밀 베타테스트 중에는 베타의 존재 및 그의 모든 구성요소는비밀로 간주됩니다. 따라서 귀하는 Blizzard가 베타테스트가 더 이상 비밀이 아니라는 점을 귀하에게 알려주는 시점까지 비밀 베타테스트에 대한비밀유지의무를 부담합니다. 예를 들자면(아래로 그 의무가 제한되는 것은 아님) 귀하는 비밀 베타테스트 동안 다음과 같은 정보를 공개하지 않을것임에 동의합니다:
          1. 귀하가 베타 테스트 참여자라는 사실, 베타테스트의 기간, 베타테스트 참여자의 수, 베타테스트 참여자가 되게 된 경위 등베타테스트와 관련한 정보.
          2. 귀하가 베타테스트하고 있는 게임에 관한 정보, 게임의 룩앤필, 플레이할 수 있는 레이스, 등급, 전투, 마법, 커뮤니케이션,그룹핑, 퀘스팅, 통화시스템, 플레이어가 아닌 캐릭터와의 상호작용, 퀘스트, 아이템, 갑옷, 무기, 게임의 안정성 등.
          3. 베타 테스트 와 배틀코인 기능. 일정한 게임은 게임인터페이스를 통하여 디지털 아이템 또는 플랫폼을 사용할 수 있는 라이선스를 구매할 수 있도록하는 기능을 구비하고 있을 수 있습니다. 베타테스트기간 중 게임인터페이스를 통하여 디지털아이템 또는 플랫폼을 사용할 수 있는 라이선스를 구매하는경우, 모든 구매는 구매약관의 적용을 받게 됩니다. 베타테스트 기간 동안 디지털 아이템 또는 플랫폼을 사용할 수 있는 라이선스를 구매하기 위하여소비된 모든 배틀코인은 그 라이선스가 귀하의 계정에 잔존하는 경우를 제외하고 귀하의 계정으로 반환됩니다. 귀하가 베타테스트 기간 동안 배틀코인을이용하여 디지털 상품 또는 플랫폼을 구매하는 동안, Blizzard는 게임에 대한 베타테스트가 끝난 이후 위 구매로 귀하가 수령할 수 있는이익을 설명하는 정보를 제공할 것입니다. 본 라이선스 계약에 의하여 달리 명시되지 않는 한 배틀코인에 대하여는 본 라이선스 계약이 이적용됩니다.
          4. 피드백. 베타테스트 동안 및 그 이후에, 귀하는 Blizzard에게 베타에 대한 견해, 제안 및 인상을 피드백과 버그신고를 위한 툴, 내부웹사이트 또는 토론장 및 기타 다른 수단을 통하여 제공할 수 있습니다. 베타는 시스템으로 하여금 오류가 발생하였을 때 Blizzard에게 시스템및 드라이버의 정보를 전송하도록 하는 툴을 포함하고 있을 수 있습니다. 위 툴은 오류가 발생하는 동안 귀하의 컴퓨터 시스템에서 시스템의 정보를수집하고 귀하로 하여금 전자메일로 Blizzard에게 보고를 전달할 수 있도록 합니다.
          5. 인정사실. 귀하는 다음과 같은 사실을 인정합니다:
            1. 베타는 개발 중에 있는 작품이며 시스템에 피해를 입히거나 정보의 유실을 초래할 수 있는 버그를 포함하고 있을 수 있다는사실;
            2. 귀하는 베타를 설치하기 전 귀하의 하드드라이브를 백업하였거나 할 것이라는 사실;
            3. 귀하는 유실될 수 있는 정보의 전부 또는 일부를 복구하고 운영체제를 다시 설치할 수 있는 필요한 자원을 갖고 있다는사실;
            4. Blizzard는 시스템에 대한 피해 및 정보의 유실, 플랫폼의 방해, 소프트웨어 또는 하드웨어의 고장, 정보의 유실 또는플랫폼의 중단에 대하여 어떠한 책임도 지지 않는다는 사실.
            5. Blizzard가 게시판에 올린 글, 이메일, 채팅, 패킷 등 베타와 관계된 모든 커뮤니케이션(그것이 전자적인 것이든 아니든불문함)을 모니터링하고 기록할 수 있다는 사실;
            6. Blizzard는 베타테스트 중 언제든지 어떠한 이유로든 베타 안에 저장된 정보를 수정하거나 삭제할 수 있다는 사실;
            7. Blizzard가 베타 테스트 시스템으로부터 CPU, RAM, 운영체제, 비디오카드, 사운드카드에 대한 정보를 수집하여 이를Blizzard에게 보낼 수 있는 소프트웨어 프로그램을 베타 테스트 시스템에 전송할 수 있다는 사실; 및
            8. 귀하는 Blizzard의 명시적 허가없이 배포하는 등의 행위를 포함하여 베타 접속권을 매매, 이전 또는 상업적으로 이용하지않을 것이라는 사실
          6. 종료. Blizzard는 언제든지 어떠한 이유로도, 또는 아무런 이유 없이 베타테스트를 종료할 수 있습니다. 베타테스트가 종료되는 경우, 귀하는베타테스트에 이용된 게임의 출시전 버전 (“베타버전”) 및 베타테스트와 관련하여 Blizzard로부터 수령한 문서 등 관련 자료를 모두삭제하여야 하며, 베타버전을 설치하였던 하드드라이브에 남아 있는 베타버전와 관련된 모든 요소를 제거하여야 합니다. 귀하는 Blizzard가 베타테스트를 종료한 것이 디지털 아이템이나 월드오브워크래프트 게임 이용시간의 환불을 포함 어떠한 종류의 환불의 근거가 될 수 없음을 인정하고 이에동의합니다.
          7. 베타테스트에 적용되는 본 라이선스 계약의 조항들. 베타테스트에 참여하는 경우 본 라이선스 계약의 제1 D.ii.4조가 그와 충돌하는 본 라이선스계약의 기타 다른 조항들보다 우선적으로 적용됩니다. 또한, 본 라이선스 계약의 제1.B.iv조 및 제1.B.v.4조는 베타의 사용과 관련하여서는그 적용이 배제됩니다.
        3. 월드오브워크래프트의 기능
          1. 서버 조정 및 캐릭터 이동. 블리자드는 운영상 경영상의 이유로 독자적 판단에 의하여 게임 서버를 병합하거나 하나의 게임서버를 수개로 분할하거나이용자들에게 캐릭터를 블리자드 엔터테인먼트가 "캐릭터 이동" 서버라고 지정하는 매우 혼잡한 서버로부터 블리자드가 "타겟 서버"라고 지명하는서버로 이동시킬 수 있는 기회를 부여할 수 있습니다. 캐릭터를 이동시킬 수 있는 기회가 부여될 경우 다음의 사항을 유의하시기 바랍니다.
            1. "길드 마스터" 캐릭터는 타겟 서버로 이동시킬 수 없습니다.
            2. 이용자가 캐릭터를 타겟 서버로 이동시키기 위해서는 타겟 서버 상에 10개 미만의 캐릭터를 갖고 있어야 합니다.
            3. 캐릭터 이동은 이용자가 월드 오브 워크래프트에 접속하고 있지 않은 때에만 할 수 있습니다.
            4. 특정 캐릭터의 이름이 이미 타겟 서버에서 사용중인 경우에는 해당 캐릭터를 타겟 서버로 이동시킬 수 없습니다. 동일한 이름의캐릭터가 이미 타겟 서버에 존재하고 있는 때에는 캐릭터 이동절차의 일부로서 이용자에게 캐릭터의 이름을 새로이 정할 수 있는 기회가주어집니다. 이 때 새로이 정하는 이름 역시 본 이용약관에서 정하는 이용자 이름 관련 수칙에 부합하여야 합니다.
            5. 게임 중에는 "우편"을 타겟 서버로 이동시킬 수 없습니다.
            6. 플레이어들의 모든 경매는 취소되고 해당 아이템, 보증금 및 최고가 입찰은 반환됩니다. 이러한 사항은 타겟 서버에의 접속 시우편으로 나타납니다. 구매자 또는 판매자의 캐릭터가 경매장 거래로 이동됨으로 인한 게임 펀드나 아이템 상실에 대해 블리자드가책임을 지지 않는다는 점을 유의하시기 바랍니다.
            7. 타겟 캐릭터의 '친구 목록"은 타겟 서버로 이동시킬 수 없습니다.
            8. 타겟 캐릭터의 '길드 가맹(guild affiliation)"은 타겟 서버로 이동시킬 수 없습니다.
            9. 타겟 캐릭터의 '차단 목록(ignore list)"은 타겟 서버로 이동시킬 수 없습니다.
          2. 경험치 보상. 블리자드는 재량에 따라 극단적이고 비정상적인 상황으로 인해 플레이어들이 상실한 경험치를 보상해 주기로 결정할 수 있습니다. 예를들어, 블리자드는 최악의 서버 작동 중단으로 인해 상실한 경험치를 보상해 주기로 결정할 수 있습니다. 그러나 이 경우 블리자드는 경험치 상실의정황, 책임소재, 과실 여부 등을 고려하여 경험치 보상 여부를 결정하며, 블리자드는 사법당국의 결정이 없는 한, 그 운용규정에 따라 금전보상이나 금전상의 권리를 제공할 의무가 없습니다.
          3. 환불. 이용자는 아래의 규정에 따라 월드 오브 워크래프트 이용계약을 해지하고 환불을 요청할 수 있습니다. 다만, 결제자가 이용자가 아닐 경우에는결제자의 의사만으로 환불이 가능합니다. 자세한 내용은 별도의 환불 정책에 따릅니다.
            1. 이용자가 이용료 지급하고 7일 이내에 이용을 개시하지 않고 플랫폼을 해지한 경우 블리자드는 이용자에게 최근 지급액 전부를환불합니다.
            2. 이용자가 이용료 지급하고 월드 오브 워크래프트 이용을 개시하거나, 지급 후 7일이 경과한 후에 어떠한 사유로든 월드 오브워크래프트 이용계약을 해지하는 경우 블리자드는 이용자에게 최근 지급액 중 미이용 일수 비율에 해당하는 금액에서 잔액의 10%상당의 환불처리비용을 공제하고 남는 금액을 환불합니다. 이용자가 일정 시간의 월드 오브 워크래프트 접속을 위해 게임 카드를구입하거나 핸드폰 결제를 이용한 경우에는 해당 구입액 중 미이용 시간 비율에 해당하는 금액에서 잔액의 10% 상당의 환불 처리비용을 공제하고 남는 금액을 환불 합니다.
            3. 만약 이용자가 블리자드가 요금 미지급 또는 이용약관 위반을 이유로 정지시키지 않은, 유효한 계정을 가지고 있는 경우.Blizzard로부터 사전통지 없이 30일 동안에 발생한 플랫폼 중단/장애 누적시간이 72시간을 초과하는 경우 계약을 해지할 수있습니다. 다만 그러한 해지권은 이용자의 권리이지 의무가 아닙니다. 환불 되는 금액은 아래와 같이 계산됩니다.
              1. 이용자가 위와 같은 사유로 계약을 해지하고 또한 이용자가 월드 오브 워크래프트 접속을 위해 월 이용료를 지급하고있는 경우에는 최근 지급액 중 미이용 일수 비율에 해당하는 금액을 환불합니다.
              2. 이용자가 위와 같은 사유로 계약을 해지하고 또한 이용자가 일정 시간의 월드 오브 워크래프트 플랫폼 접속을 위해 게임카드를 구입하거나 핸드폰 플랫폼을 이용한 경우에는 해당 구입액 중 미 이용 시간 비율에 해당하는 금액을 환불합니다.
              3. 이용자가 할인된 요율(이하 "할인요금")로 일정 시간 플랫폼을 이용할 수 있는 권리를 부여하는 프로그램에 따라 월드오브 워크래프트 게임시간을 구입한 후 위와 같은 사유로 계약을 해지하는 경우, 블리자드는 할인요금으로부터 이용자가해지를 요청한 일자에 유효한 월 이용료를 30으로 나눈 값에 할인요금에 의한 구입이 이루어진 요금청구기간 중에이용자가 플랫폼을 이용한 날짜 수를 곱한 금액을 공제하고 나머지 금액을 환불합니다.
            4. 사전고지에 의한 서비스 장애/중단. 블리자드는 사전에 공지한 서버의 중지시간이 10시간을 초과할 경우 10시간을 초과한 시간을보상할 수 있습니다. (예를 들어 12시간의 정기점검이 있을 경우 2시간에 대하여 보상할 수 있습니다.)
            5. 미이용에 따른 캐릭터 이름의 삭제: 만약 이용자가 일정기간 월드 오브 워크래프트에 접속하지 않았을 경우, 이용자의 계정의 캐릭터이름들은 재설정되어 이용자를 포함한 모든 이용자들에게 사용가능한 상태로 변경될 수 있습니다. 미이용에 따른 캐릭터 이름 삭제에대한 자세한 내용은 월드 오브 워크래프트운영정책(https://kr.battle.net/support/ko/article/wow-operational-policy)에서확인하실 수 있습니다.
        4. 하스스톤: 워크래프트의 영웅들의 기능
          1. 카드팩의 환불. 이용자는 하나의 카드팩이라도 개봉하지 않은 경우 구매 후 7일 이내에는 그 구매에 대한 청약을 철회할 수 있습니다. 그러나,게임 내의 ‘골드’로 카드팩을 구매한 경우에는 환불할 수 없습니다.
          2. 투기장 입장권의 환불. 투기장 이용권은 구매즉시 사용되므로 청약 철회가 불가능합니다.

2. Blizzard의 소유권.

  1. Blizzard는 플랫폼, Blizzard에 의하여 개발되고 생산된 게임 (“Blizzard게임”), Blizzard의 개임으로부터 파생된 커스텀 게임, 계정 및 이들의 모든 구성요소 및기능에 대한 권한, 권리 및 이익에 대한 소유권 및 라이선스를 보유하고 있습니다. 플랫폼 또는 Blizzard게임은 제3자가 Blizzard에게 라이선스를 부여한 사항들을 포함하고 있을수 있으며, 귀하가 본 라이선스 계약을 위반하는 경우 위 제3자는 자신의 소유권을 귀하에 대하여 주장할 수 있습니다. Blizzard가 소유권을 갖고 있거나 라이선스를 갖고 있는 플랫폼및 Blizzard 게임의 구성요소는 다음과 같습니다:
    1. 플랫폼이나 Blizzard 게임 등에 등장하는 다음과 같은 모든 가상 콘텐츠:
      1. 가상 구성요소: 장소, 삽화, 건물 및 풍경 디자인, 애니메이션 및 시청각 효과;
      2. 서사: 주제, 컨셉트, 이야기 및 줄거리;
      3. 캐릭터: 게임 캐릭터의 이름, 화상, 목록 및 선전문구;
      4. 아이템: 디지털 카드와 같은 가상재화, 통화, 물약, 의복아이템, 스킨, 스프레이, 애완동물, 마운트 등.
    2. Blizzard게임에 등장하는 모든 콘텐츠(제1.D.i.5 조의 이용자 콘텐츠 제외)에 대한 소유권, 라이선스 권한 및 기타 권리는 Blizzard에 있습니다. 이용자는Blizzard게임에 등장하거나 게임에서 발생한 가상의 재화나 화폐, 또는 이와 유사한 콘텐츠를 본 약관에 따라 이용할 수 있는 권리를 보유합니다. 다만, 그에 대한소유권이나 저작권 및 기타 권리를 보유하지는 않습니다. Blizzard는 Blizzard가 서면 승인한 경우를 제외하고, Blizzard게임 외부에서 이루어지는 가상 재산의양도 또는 게임에서 나타나거나 만들어진 아이템의 “현실 세계”에서의 판매, 증여 또는 거래 시도를 인정하지 않습니다. 따라서 이용자는 Blizzard의 승인 없이 게임 내아이템 또는 화폐를 “실제” 돈을 받고 판매하거나 Blizzard게임 밖에서 아이템이나 화폐를 대가물로 교환할 수 없으며 해당 행위는 본 라이선스 계약과 운영정책에 의거제재를 받을 수 있습니다.
    3. 플랫폼 또는 Blizzard게임을 통하여 이루어지거나 생성되는 모든 데이터 및 커뮤니케이션.
    4. 플랫폼이나 Blizzard게임에서 비롯된 음향, 음악 작품, 녹음 및 음향효과;
    5. Blizzard게임 내에서의 시합, 전투, 결투 등에 대한 녹화, 게임 다시 보기 또는 재연; 블리자드는 본 라이선스 계약 제1.D.5의 이용자 콘텐츠를 제외하고 게임사에서표시되는 모든 내용에 대한 소유권, 이용권 내지 기타 권리를 보유합니다.
    6. 컴퓨터 코드. 이에는 “애플릿” 및 기타 소스코드가 포함되나 이에 한정되지는 않음;
    7. 제목, 작동법, 소프트웨어, 관련 문서, 기타 플랫폼 또는 Blizzard게임에 포함되어 있는 모든 저작자의 원저작물;
    8. 모든 계정. 귀하는 Blizzard가 계정의 명칭과 계정과 연동된 배틀태그를 포함한 모든 계정을 소유하고 있다는 점 및 계정은 Blizzard에게 도움이 되는 방법으로만사용된다는 점에 동의합니다. Blizzard는 계정의 이전을 인정하지 않습니다. 귀하는 계정을 구매, 판매, 선물 또는 거래하거나 그러한 내용의 청약을 할 수 없는 바,위와 같은 모든 시도는 효력이 부정되며 계정의 박탈이라는 결과로 이어질 수 있습니다;
    9. 2차적 저작물을 생성할 권리. 본 계약과 관련하여 이용자는 본 라이선스 계약상 또는 경연의 규정상, Blizzard의 팬아트 규정 또는 본 라이선스 계약의 부속문서 등에의하여 명시적으로 허용된 경우가 아닌 경우, Blizzard 의 플랫폼과 Blizzard 게임을 기반으로 한 저작물을 생성할 수 없습니다.

3. 소프트웨어 및 플랫폼

해당 제품과 플랫폼 개선을 위해 Blizzard는 귀하의 컴퓨터에 설치되어 있는 플랫폼 및 각 게임에 대한 업데이트를 다운로드하여 설치할 것을요구할 수 있습니다. 귀하는 Blizzard가 별도의 통지 없이 이용자 컴퓨터에 설치된 게임 클라이언트를 포함하여 플랫폼 및 게임을 업데이트할 수 있음을 인지하고 이에 동의합니다. 업데이트와 별도로다음과 같이 컴퓨터 프로그램이 설치될 수 있습니다.
  1. 설치목적. Blizzard는 제공하는 플랫폼 및 결제 서비스를 이용하기 위하여 필요한 사항으로 플랫폼의 변경에 따라 프로그램을 패치, 업데이트, 변경할 수 있습니다.
  2. 프로그램의 종류 및 기능, 용량. 게임클라이언트. 당사가 제공하는 게임을 이용하기 위한 프로그램으로 설치 사양을 포함한 자세한 내용은http://kr.blizzard.com/ko-kr/company/legal/ko-kr/gradesystem.html에서 확인할 수 있습니다. 각 게임의 등급에 관한 정보는http://kr.blizzard.com/ko-kr/company/legal/ko-kr/gradesystem.html에서 확인하실 수 있습니다.
  3. 프로그램의 제거방법. 게임클라이언트 및 플랫폼은 제어판의 프로그램 설치/삭제 메뉴 또는 해당 프로그램이 제공하는 Uninstall 프로그램으로 제거할 수 있습니다.

4. 사전에 설치된 소프트웨어

플랫폼에는 추가적인 조항에 동의하여야 사용할 수 있는 추가 소프트웨어(“추가 소프트웨어”)가 포함될 수 있습니다.
  1. 설치. 귀하는 Blizzard가 Blizzard Battle.net 앱 클라이언트를 설치하는 과정의 일부로 이러한 추가 소프트웨어를 귀하의 하드 드라이브에 설치할 수 있으며본 라이선스 계약의 계약기간 중 때때로 설치할 수 있다는 데 동의합니다.
  2. 이용. 귀하는 Blizzard가 귀하에게 추가 소프트웨어를 사용하고 실행하는데 필요한 유효한 허가나 영숫자 조합키를 제공하지 않는 한, 추가 소프트웨어에 접근, 사용, 배포,복사, 전시, 역설계, 소스코드추출, 수정, 분해, 역컴파일 또는 추가 소프트웨어를 기반으로 한 2차적 저작물을 만들지 않을 것에 동의합니다. Blizzard가 추가 소프트웨어를 이용하고실행하기 위하여 필요한 유효한 허가 및 영숫자 조합키를 제공하는 경우, 추가 소프트웨어의 사용에 대하여는 본 라이선스 계약이 적용됩니다.
  3. 복사본. 귀하는 보관 목적으로만 한(1)개의 추가 소프트웨어의 복사본을 만들 수 있습니다.

5. 모니터링에 대한 동의

게임이나 플랫폼이 실행되고 있는 경우, 게임은 게임과 함께 또는 게임과 별도로 제3자의 허가받지 않은 프로그램이 실행되고 있는지 여부를확인하기 위하여 이용자 컴퓨터의 메모리를 모니터링할 수 있습니다. 여기서 “허가받지 않은 제3자 프로그램”이라 함은 본 라이선스 계약 제 1.C조에 따라 금지되는 제3자 프로그램을 지칭합니다. 게임이허가받지 않은 제3자 프로그램을 감지하는 경우, (a) 게임은 그러한 정보를 Blizzard에게 알릴 수 있으며(여기에는 귀하의 계정명, 감지된 허가받지 않은 제3자 프로그램에 대한 상세정보 및 일시에대한 정보가 포함되며 전송되는 정보는 이에 국한되지 않습니다) (b) Blizzard는 사용자에게 사전고지를 하고 또는 하지 않고 본 라이선스 계약에 따른 권리의 전부 또는 일부를 행사할 수 있습니다.추가적으로, 특정 게임의 경우 게임에 오류가 생기는 경우에 이용자의 컴퓨터 시스템이 Blizzard에게 시스템 및 드라이버 정보 등을 전달하도록 하는 도구를 포함할 수 있습니다. 이용자는Blizzard가 해당 정보를 수집 및 이용하는 것에 동의합니다.

6. 콘텐츠 검열 및 공개

당사는 모든 콘텐츠를 사전 검열하거나 감시하지 않으며 이러한 행위는 불가능합니다. 단, 귀하가 플랫폼을 사용하거나 게임을 이용하는 경우 당사의대리인이 (대화 텍스트를 포함하나 이에 제한되지 않음) 통신 내용을 감시 또는 기록할 수 있으며, 이에 따라 귀하는 이러한 감시 및 기록 행위에 대해 취소할 수 없는 동의를 하는 것입니다. 귀하는 게임내 대화 텍스트 등이 공개되는데 동의합니다. 당사는 이용자가 생성한 콘텐츠에 대해 당사의 고의, 중과실이 없는 한, 책임을 지지 않습니다. 당사는 단독 재량에 따라 콘텐츠를 편집, 개시 거부 또는삭제할 수 있는 의무가 아닌 권리를 갖습니다. 당사는 (a) 적용 법규정, 법적 절차 또는 정부의 요구가 있는 경우나 이에 따라 당사의 법적 권리와 구제책 보호를 위해 필요한 경우, (b) 범죄또는 기타 위반 행위에 대하여 보고하여야 하는 경우 및 기타 이에 준하는 정당한 사유가 있는 경우에는 콘텐츠 및 기타 정보(대화 텍스트, IP 주소, 개인 정보를 포함하나 이에 제한되지 않음)를제공할 수 있습니다.

7. 보증 제한

플랫폼과 게임은 어떠한 명시적이거나 묵시적인 보증도 없이 “있는 그대로” 제공됩니다. 여기에는 상태, 중단 및 오류 없는 사용, 상품성, 특정목적에의 적합성 또는 비침해성에 대한 묵시적인 보증이 포함됩니다. Blizzard의 고의 또는 중과실에 의한 것이 아닌 한, 사용자는 게임 사용 및 작동으로 발생하는 모든 위험에 대한 부담을집니다. 이상의 내용은 본 조항에 규정된 명시적인 보증에 대해 귀하가 획득할 수 있는 원칙적인 유일한 구제 수단입니다. 그러나, 귀하가 거주하는 국가의 관련 법이 묵시적 보증의 배제 또는제한을 허용하지 않는 경우 위의 제한은 귀하에게 적용되지 않을 수 있습니다.

8. 책임의 한계

Blizzard가 관할권 있는 법원으로부터 고의 또는 중과실이 있다고 판단되지 않는 한, Blizzard, 그의 모회사, 자회사 또는 계열사는플랫폼, Blizzard Battle.net 앱 클라이언트, 계정 또는 게임의 사용 또는 사용/접근 불가능으로 인해 발생한 제반 손실 또는 피해에 대해서 어떠한 방식으로든 책임을 지지 않습니다.Blizzard의 책임은 어떠한 경우에도 귀하가 본 라이선스 계약의 계약기간 동안 Blizzard에게 지불한 총 사용료를 넘지 않습니다.

9. 면책

Blizzard가 관할권 있는 법원으로부터 고의 또는 중과실이 있다고 판단되지 않는 한, 귀하는 귀하의 플랫폼, Blizzard Battle.net 앱클라이언트, 계정 또는 게임, 사용자 콘텐츠, 커스텀 게임 및 그와 관련된 서비스 또는 기능 (유저 콘텐츠, 커스텀 게임, 게임 에디터, 배틀코인 및 본 라이선스 계약)의 사용으로 인하여Blizzard에게 초래된 모든 제3자의 소제기, 책임, 손실, 부상, 피해, 비용 또는 지출로부터 Blizzard를 방어하고 면책함에 동의합니다. 일부 국가들은 우발적 피해 또는 결과적 피해의 배제또는 제한을 허용하지 않는 바, Blizzard의 책임은 법에 따라 허용하는 최대한으로 면책됩니다.

10. 형평법상의 구제수단

귀하는 본 라이선스 계약 조항이 명확하게 지켜지고 집행되지 않는 경우 Blizzard에 치명적인 손해가 초래될 수 있다는 사실에 동의합니다.그러므로 귀하는 본 라이선스 계약 위반시 관련법령이 허용하는 한도에서 Blizzard가 보증금, 기타 담보 또는 구체적인 피해에 대한 입증 없이도 적절한 형평법상의 구제를 청구할 수 있는 자격이 있다는점에 동의하며, 위와 같이 Blizzard가 형평법상의 구제수단을 보유한다는 이유로 관련 법령상 Blizzard에게 인정되는 다른 구제수단을 구할 권한이 제한되지 않음에도 동의합니다.

11. 변경

  1. 계약의 변경.
    1. Blizzard의 권리. Blizzard는 플랫폼, 게임 및 법이 변화함에 따라 본 라이선스 계약의 새 버전(“새로운 계약”)을 만들 수 있습니다.
    2. 새로운 계약. Blizzard는 시간 경과에 따라 게임 및 법률이 변화하면 본 라이선스 계약을 새로운 계약으로 대체할 수 있습니다. 새로운 계약은 적용일자 및 개정사유와함께 http://kr.blizzard.com/ko-kr/ 에 그 적용일의 7일 전부터공시하거나 귀하가 입력한 가장 최근의 등록 전자메일로 전송하는 방법으로 귀하에게 제공될 것입니다. 새로운 계약에 귀하에게 불리한 조항이 포함되어 있는 경우, 새로운 계약은적용일로부터 30일 전까지 웹사이트에 공시되거나 귀하가 입력한 가장 최근의 등록 전자메일로 전송될 것입니다. 새로운 계약은 고지된 적용일로부터 효력이 발생합니다.
      1. 승낙. 귀하가 새로운 계약을 승낙하고 귀하 앞으로 등록되어 있는 계정이 여전히 정상적인 상태인 경우, 귀하는 새로운 계약의 적용을 받는 플랫폼,Blizzard Battle.net 앱 클라이언트, 계정 또는 게임을 계속하여 이용할 수 있습니다.
      2. 거절. 귀하가 새로운 계약을 승낙하지 않거나 새로운 계약의 조항을 준수할 수 없는 경우, 귀하는 플랫폼, Blizzard Battle.net 앱 클라이언트,계정 또는 게임을 더 이상 이용할 수 없습니다.
    3. 운영정책 및 개인정보 처리방침. Blizzard는 수시로 운영정책 및 개인정보 처리방침을 개정할 수 있으며, 새로 개정된 내용은 웹사이트에서 확인할 수 있습니다. 본라이선스 계약서, 운영정책 또는 개인정보 처리방침의 현재 버전에 대해 동의하지 않는 부분이 있으면 플랫폼 이용을 즉시 중단해야 합니다.
  2. 플랫폼과 게임의 변경. Blizzard는 언제든지 플랫폼, Blizzard 클라이언트, 계정 또는 게임의 모든 부분을 변경, 수정, 일시정지 또는 중지할 수 있으며, 이는게임의 균형을 유지하기 위하여 아이템을 삭제하거나 아이템의 효력을 수정하는 것도 포함합니다. Blizzard는 고지를 하지 않고 어떠한 책임도 지지 않은 채 귀하의 플랫폼,Blizzard Battle.net 앱 클라이언트, 계정 또는 게임 및 그 중 일부에 대한 접근을 금지하거나 일정 기능을 제한할 수 있습니다.

12. 계약기간 및 계약의 종료.

  1. 계약기간. 본 라이선스 계약은 귀하가 계정을 생성하는 순간부터 효력을 가지며 합리적인 기간 동안 그 효력을 유지합니다. Blizzard가 플랫폼의 제공을 중단하기로 하거나플랫폼을 제공할 수 있는 제3자의 라이선스의 효력을 중단하기로 결정하는 경우, Blizzard는 상업적으로 불가능하지 않을 경우, 귀하에게 삼(3) 개월 이전에는 고지를 할 것입니다.Blizzard는 고지한 기간 경과 후에는 플랫폼을 제공하거나 지원하지 않을 수 있습니다. 이러한 플랫폼 중단의 경우 귀하는 계정에 남은 이용기간이나 배틀코인의 환불 이외에는 당사에게플랫폼 계속이나 기타 손해의 배상을 청구할 수 없습니다. 플랫폼 또는 플랫폼에 대한 접근을 제공하기로 하는 Blizzard의 합의는 Blizzard의 서버의 용적 또는 다른 기술에 대한일시적 임대 또는 대여로 해석되지 않습니다.
  2. 계약의 종료.
    1. 자발적 해지. 이용자는 본 라이선스 계약의 제 1.D.8조나 제7.A조에 의한 조건에 의하거나 관계법령상 또는 법원의 결정에 의한 합당한 근거에 의하여Blizzard에게 support@blizzard.com으로 이메일로 연락하여 해지할 수있습니다. 해지할 경우, 계정에 부착된 모든 라이선스와 충전된 금액을 포함한 재산적 가치는 소멸하며 이용자의 개인정보는 당사의 개인정보취급방침에 의하여 관리되며 최종적으로삭제됩니다. 개인정보 삭제 후 일정기간 경과시 개인정보 삭제의 결과로 라이선스나 충전된 금액의 복구를 포함한 계정에 대한 어떠한 도움도 드릴 수 없습니다.
    2. 약관의 위반 등에 의한 정지/삭제. Blizzard는 본 약관의 위반이 있는 경우 사전에 이용자에게 통지를 하고 소명의 기회를 부여한 후, 그 위반 정도 따라 계정을정지할 수 있습니다. 다만, 중대한 위반으로서 그에 대하여 긴급한 대응이 필요한 경우에는 사전 통지 없이 이용자의 계정을 정지할 수 있으며, 이 경우에는 사후에 통지합니다.본 이용 약관에 대한 위반을 포함(이에 제한되지 않음)하여 이용자의 부정이용으로 인해 Blizzard가 해지한 계정은 다시 복구되지 않습니다. 대부분의 계정 정지, 해지또는 삭제는 본 이용 약관, 게임 내 정책 또는 게임 라이선스 계약에 대한 위반의 결과로 설명할 수 있으며, 이에 제한되지 않습니다. 본 규정에 의한 계정의정지/삭제에 대한 소명을 원하실 경우 정지 삭제의 통보를 받은 날로부터 15일 이내에https://kr.battle.net/support/ko/로연락하실 수 있습니다. Blizzard는 15일 이내에 소명에 대하여 답변하도록 최선의 노력을 다합니다. 다만 불가피할 경우 고객에게 통지한 후 15일 이후에도 소명에대한 답변을 할 수 있습니다.
    3. 약관의 위반 등에 의하여 본 라이선스 계약이 종료되는 경우 귀하의 게임에의 접근권리 및 귀하가 게임에의 접근권한을 부여받기 위하여 한 선지급은 모두 몰수됩니다. 또한귀하는 본 라이선스 계약의 종료 전 귀하의 계정에 선지급된 어떠한 금액도 환불되지 않음을 인식하고 이에 동의합니다.

13. 분쟁해결

귀하는 당사자 일방이 상대방에 대해 제기하는 일체의 법적 절차에서의 모든 청구는 양 당사자간 분쟁 사안에 대하여 민사소송법 또는 기타 관련법령상 실체적인관할권을 보유하고 있는 법원에서 개시되고 진행된다는 점에 동의합니다. 이 계약과 관련하여 제기된 소송에서 승소한 당사자는 민사소송법에 의거하여 타방 당사자로부터 소송과 관련하여 지급된 비용을 청구할 수있습니다. Blizzard와 귀하 사이에 분쟁이 발생할 경우 Blizzard 또는 귀하는 콘텐츠산업진흥법 제 29조에서 전하고 있는 콘텐츠 분쟁조정위원회의에 분쟁조정을 신청할 수 있습니다.

14. 준거법

본 라이선스 계약에서 달리 규정하고 있는 경우를 제외하고, 본 라이선스 계약은 대한민국의 법률의 적용을 받으며, 이에 따라 해석됩니다.

15. 등급 및 시스템 요구사항

귀하는http://kr.blizzard.com/ko-kr/company/legal/ko-kr/gradesystem.html에서 당사의 게임의 등급과 시스템 요구사항에 대한 정보를 확인할 수 있습니다.

16. 일반 조항

  1. 게임은 미국 정부가 수출을 금지하고 있는 국가(또는 그 주민 또는 국민)나 미 재무부 특별제한 국가 목록 또는 미 상무부 수출제한 목록에 포함된 특정인에게는 재수출, 다운로드 등의 어떠한방법으로도 플랫폼의 이용, 제공할 수 없습니다. 귀하는 이러한 국가에 소재하지 않고, 이러한 지역의 통제를 받지 아니하며 이러한 지역의 주민 또는 국민이 아니고 해당 리스트에 포함되어있지 않음을 진술하고 보증합니다.
  2. Blizzard는 본 라이선스 계약상의 지위의 전부 또는 일부를 귀하의 동의여부를 불문하고 다른 개인 또는 법인에게 양도할 수 있습니다. 다만 Blizzard의 사전 동의 없는 귀하의 본라이선스 계약상의 지위 양도는 무효입니다.
  3. Blizzard의 본 라이선스 계약 조항의 집행의 실패는 (1) 해당 조항상 보장되는 권리의 포기 또는 (2) 해당 조항을 집행할 수 있는 권리의 축소로 해석되지 않습니다.Blizzard는 특정한 경우 본 라이선스 계약 조항상의 권리실행을 포기하기로 결정할 수 있습니다. 그러나 귀하는 그 후에도 여전히 포기된 조항에 따를 의무를 부담합니다.
    1. Blizzard에 대한 경우. 본 라이선스 계약에 따라 이루어지는 귀하의 Blizzard에 대한 고지는 서면으로 이루어져야 하며 다음의 주소로 보내져야 합니다:대한민국 서울특별시 강남구 테헤란로 521 파르나스타워 15층, Blizzard Entertainment. 약관담당자 앞
    2. 귀하에 대한 경우. 본 라이선스 계약에 따라 이루어지는 Blizzard의 귀하에 대한 고지는 서면고지, 이메일 또는 웹사이트 블로그 포스팅을 통하여이루어집니다. 위와 같은 고지유형 및 경우는 당사의 개인정보취급방침에 자세히 적시되어 있는바, 개인정보 취급방침은Blizzard Privacy Policy에서확인할 수 있습니다.
  4. Blizzard는 자신의 합리적인 통제범위 밖의 사유로 인하여 의무이행이 지체되거나 불능해진 경우에는 그에 대한 책임을 지지 않습니다. 위와 같은 통제범위 밖의 사유에는 자연재해, 당사의가상공간에 대한 예측불가능한 침입, 전쟁, 테러, 폭동, 통상금지령, 행정당국 또는 군사당국의 행위, 화재, 홍수, 사고, 파업, 운송수단∙연료∙에너지∙노동력 또는 자료의 부족이포함됩니다.
  5. 본 라이선스 계약의 일부가 무효로 판단되거나 집행할 수 없다고 판단되는 경우, 해당 부분은 분리되고, 본 라이선스 계약의 나머지 부분은 완전한 효력을 갖습니다.
  6. 본 라이선스 계약은 http://kr.blizzard.com/ko-kr/company/legal/index.htmlBlizzard 법률관련 문서에 제공되는 Blizzard의 다른 관련 정책과 함께, 당해 문서의 실체적인 내용과 관련한 양 당사자 간의 완전한 합의를 구성하며, 기존의 모든 구두 또는서면으로 합의된 내용에 우선합니다. 본 라이선스 계약이 어떠한 사유로 종료되든 제 2, 5, 6, 7, 8, 12, 14, 15.B, 17,18,19조는 그 효력을 유지합니다.
별첨 1

대한민국 거주자에 대한 판매 조건

  1. 목적. 다음은 귀하와 Blizzard 및 그 관계사인 Blizzard 엔터테인먼트 유한회사를 통한 계약입니다.
    1. 본 Blizzard 온라인 스토어 특별약관(“특별약관”)은 Blizzard 플랫폼(“플랫폼”)의 최종 사용자 라이선스 계약(“이용약관”) 중 당사의 상품 및 서비스를 구매함에 있어,귀하와 Blizzard의 권리, 의무 및 책임사항을 보다 명확하게 규정함을 목적으로 합니다.
    2. 본 라이선스 계약은 이용약관의 필수불가결한 일부를 이루며, 본 라이선스 계약의 모든 정의는 이용약관에서 나오는 의미와 동일합니다.
  2. 특별약관의 개정. Blizzard는 본 특별약관을 개정할 경우 이용약관 11조에 준하는 방법으로 공지하며 적용됩니다.
    1. 통지
      1. Blizzard가 귀하에게 통지를 하는 경우, 귀하가 Blizzard와 미리 약정하여 지정한 전자우편 주소로 할 수 있습니다.
      2. Blizzard는 불특정다수 회원에 대한 통지의 경우, 1주일이상 Blizzard의 웹사이트 게시판에 게시함으로써 개별 통지에 갈음할 수 있습니다.
    2. 제품 또는 기타상품의 공급. Blizzard는 귀하와 제품 또는 기타상품의 공급시기에 관하여 별도의 약정이 없는 이상, 귀하가 청약을 한 날부터 7일 이내에 제품 또는 기타상품을 배송할 수 있도록주문제작, 포장 등 기타의 필요한 조치를 취합니다. 다만, Blizzard가 이미 제품 또는 기타상품의 대금의 전부 또는 일부를 받은 경우에는 대금의 전부 또는 일부를 받은 날부터 3영업일 이내에조치를 취합니다. 이때 Blizzard는 귀하가 제품 또는 기타상품의 공급 절차 및 진행 사항을 확인할 수 있도록 적절한 조치를 합니다.
    3. 환급 및 과오금
      1. Blizzard는 귀하가 주문한 제품 또는 기타상품이 품절 및 다른 사유로 인도 또는 제공을 할 수 없을 때에는 지체없이 그 사유를 귀하에게 통지하고 사전에 제품 또는 기타상품의 대금을받은 경우에는 대금을 받은 날부터 3영업일 이내에 환급하거나 환급에 필요한 조치를 취합니다. 환급이 지연될 경우 그 지연기간에 대하여 전자상거래 등에서의 소비자보호에 관한 법률 시행령에서정하는 지연이자율을 곱하여 산정한 지연이자를 지급합니다. 다만 환급시 귀하가 제품 및 서비스의 이용으로부터 얻은 이익에 대한 금액을 공제하고 환급할 수 있습니다.
      2. Blizzard의 귀책사유로 귀하에게 과오금이 발생한 경우, Blizzard는 귀하가 결제한 방법과 동일한 방법으로 환불하며, 동일한 방법으로 환불이 불가능할 경우에는 이를 사전에고지하고, 귀하와 협의하여 환불합니다. 다만, 귀하의 귀책사유로 과오금이 발생한 경우, Blizzard는 과오금을 환불하는데 소용되는 비용은 합리적인 범위에서 귀하가 부담해야 합니다.
    4. 주문취소
      1. Blizzard와 제품 또는 기타상품의 구매에 관한 계약을 체결한 귀하는 개별 제품 및 서비스 이용약관이나 거래조건에서 달리 규정하지 않는 경우, 수신확인의 통지를 받은 날부터 7일이내에는 주문을 취소할 수 있습니다.
      2. 귀하는 제품 또는 기타상품을 배송 받은 경우 다음 각호의 1에 해당하는 경우나 해당 제품 및 서비스에 스타터 팩이나 데모의 형태로 시험 상품을 제공한 경우에는 반품 및 교환을 할 수없습니다.
        1. 귀하에게 책임 있는 사유로 제품 또는 기타상품이 멸실 또는 훼손된 경우(다만, 제품 또는 기타상품의 내용을 확인하기 위하여 포장 등을 훼손한 경우에는 청약철회를 할 수있습니다)
        2. 귀하가 제품 또는 기타 상품을 사용 또는 일부 소비한 경우
        3. 귀하의 이용 또는 일부 소비에 의하여 제품 또는 기타상품의 가치가 현저히 감소한 경우
        4. 시간의 경과에 의하여 재판매가 곤란할 정도로 제품 또는 기타상품의 가치가 현저히 감소한 경우
        5. 같은 성능을 지닌 제품 또는 기타상품으로 복제가 가능한 경우 그 원본인 제품 또는 기타상품의 포장을 훼손한 경우
      3. 전항 제ii호 내지 제v호의 경우에 Blizzard가 사전에 주문취소가 제한되는 사실을 귀하가 쉽게 알 수 있는 곳에 명기하거나 시용상품을 제공하는 등의 조치를 하지 않았다면, 귀하의주문취소는 제한되지 않습니다.
      4. 귀하는 상기 규정에 불구하고 제품 또는 기타상품의 내용이 표시·광고 내용과 다르거나 계약내용과 다르게 이행된 때에는 당해 제품 또는 기타상품을 공급받은 날부터 3개월이내, 그 사실을 안날 또는 알 수 있었던 날부터 30일 이내에 청약철회를 할 수 있습니다.
      5. 귀하가 플랫폼의 선물기능을 이용하여 제3자에게 제품 또는 기타상품을 선물한 경우, 선물한지 7일 경과하거나 해당 제품 이나 기타상품을 수령한 제3자가 해당 제품이나 기타상품 이용을 시작한경우, 청약을 철회할 수 없습니다.
  3. 해지
    1. 귀하는 플랫폼의 모든 이용을 중지하고, 이와 관련한 모든 자료를 폐기함으로서 이용약관을 해지할 수 있습니다. Blizzard는 계속적 이용계약의 경우에는 각 제품/서비스에서 달리규정하지 않는 한, 상품/서비스 가액에서 이용자가 이미 사용한 부분에 해당하는 금액 (각 상품별 사용금액 산정기준은 상품 구매시 별도 고지할 수 있습니다.)을 제외하고 남은 금액에서 남은금액의 10%이내 금액 또는 남은 금액이 10,000원 이내인 경우에는 1,000원을 공제한 후 나머지 금액을 환불합니다. 다만 잔액이 1,000원 이하인 경우 환불이불가능합니다. 전항에 의한 청약철회나 본항에 의한 해지의 경우, 다음과 같은 당사의 웹사이트나 전화번호로 신청할 수 있습니다.
  • 웹사이트: https://kr.battle.net/support/ko/ticket/submit
  • 전화번호: (02) 1644-3210
    2. 귀하가 다음 각호의 사유를 포함한 본 특별약관의 조항을 준수하지 않을 경우, Blizzard는 이용약관을 해지할 수 있습니다.
    1. 플랫폼 가입 신청시에 허위 내용을 등록한 경우
    2. Blizzard 온라인 스토어를 이용하여 구입한 제품 또는 기타상품의 대금, 기타 Blizzard 온라인 스토어 이용과 관련하여 귀하가 부담하는 채무를 기일에 지급하지않는 경우
    3. 다른 사람의 Blizzard 온라인 스토어 이용을 방해하거나 그 정보를 도용하는 등 전자상거래 질서를 위협하는 경우
    4. Blizzard 온라인 스토어를 이용하여 법령 또는 이 특별약관이 금지하거나 공서양속에 반하는 행위를 하는 경우
    
    1. 귀하의 의무. 귀하는 다음 행위를 하여서는 안됩니다.
      1. 신청 또는 변경시 허위 내용의 등록
      2. 타인의 정보 도용
      3. Blizzard 온라인 스토어에 게시된 정보의 변경
      4. Blizzard 온라인 스토어가 정한 정보 이외의 정보(컴퓨터 프로그램 등) 등의 송신 또는 게시
      5. Blizzard, 기타 제3자의 저작권 등 지적재산권에 대한 침해
      6. Blizzard, 기타 제3자의 명예를 손상시키거나 업무를 방해하는 행위
      7. 외설 또는 폭력적인 메시지, 화상, 음성, 기타 공서양속에 반하는 정보를 Blizzard 플랫폼 및 온라인 스토어에 공개 또는 게시하는 행위
    2. Blizzard 온라인 스토어와 피연결몰 간의 관계. Blizzard는 블리자드 엔터테인먼트 유한회사의 이름으로 행해진 거래이외에는 책임을 지지 않습니다.
    3. 저작권의 귀속 및 이용제한.
      1. Blizzard가 작성한 저작물에 대한 저작권, 기타 지적재산권은 Blizzard에 귀속합니다.
      2. 귀하가 Blizzard 온라인 스토어를 이용함으로써 얻은 정보 중 Blizzard에게 지적재산권이 귀속된 정보를 Blizzard의 사전 승낙없이 복제, 송신, 출판, 배포, 방송, 기타방법에 의하여 영리목적으로 이용하거나 제3자에게 이용하게 하여서는 안됩니다.
    4. 재판권 및 준거법.
      1. Blizzard와 귀하 사이에 발생한 전자상거래 분쟁에 관한 소송은 대한민국 법률에 정하여진 바에 따라, 귀하의 주소지 관할법원 (주소가 없는 경우에는 관련법 규정에 따릅니다.) 을전속관할로 합니다.
      2. 본 특별약관과 Blizzard와 귀하 사이에 제기된 전자상거래 소송에는 대한민국 법률을 적용합니다.


제1조 (목적)

본 약관은 회원(본 약관에 동의한 자를 말하며 이하 "회원"이라고 합니다)이 주식회사 카카오(이하 "회사"라고 합니다)가 제공하는 티스토리(Tistory) 서비스(이하 "서비스"라고 합니다)를 이용함에 있어 회사와 회원의 권리·의무 및 책임사항을 규정함을 목적으로 합니다.

제2조 (약관의 명시, 효력 및 개정)

  1. (1) 회사는 본 약관의 내용을 회원이 알 수 있도록 서비스 화면(www.tistory.com)에 게시함으로써 이를 공지합니다.
  2. (2) 회사는 콘텐츠산업 진흥법, 전자상거래 등에서의 소비자보호에 관한 법률, 약관의 규제에 관한 법률, 소비자기본법 등 관련법을 위배하지 않는 범위에서 본 약관을 개정할 수 있습니다.
  3. (3) 회사가 약관을 개정할 경우에는 기존약관과 개정약관 및 개정약관의 적용일자와 개정사유를 명시하여 현행약관과 함께 그 적용일자 일십오(15)일 전부터 적용일 이후 상당한 기간 동안 공지만을 하고, 개정 내용이 회원에게 불리한 경우에는 그 적용일자 삼십(30)일 전부터 적용일 이후 상당한 기간 동안 각각 이를 서비스 홈페이지에 공지하고 회사가 부여한 이메일 주소로 약관 개정 사실을 발송하여 고지합니다.
  4. (4) 회사가 전항에 따라 회원에게 통지하면서 공지 또는 공지∙고지일로부터 개정약관 시행일 7일 후까지 거부의사를 표시하지 아니하면 승인한 것으로 본다는 뜻을 명확하게 고지하였음에도 불구하고 거부의 의사표시가 없는 경우에는 변경된 약관을 승인한 것으로 봅니다. 회원이 개정약관에 동의하지 않을 경우 회원은 제14조 제1항의 규정에 따라 이용계약을 해지할 수 있습니다.

제3조 (서비스의 제공)

  1. (1) 회사가 제공하는 서비스의 종류는 아래 각 호로 합니다.
    1. 티스토리(Tistory) 서비스
    2. 기타 회사가 자체 개발하는 등의 방법으로 추가적으로 회원에게 제공하는 일체의 서비스
  2. (2) 회원이 되고자하는 자는 아래와 같은 방법으로 회원이 되어 서비스를 이용할 수 있습니다.
    1. 웹사이트 다음(www.daum.net)의 회원인 경우 해당 사이트의 이용 ID 및 비밀번호를 이용하여 DaumID@daum.net 및 비밀번호를 등록하여 서비스를 이용
    2. 웹사이트 다음(www.daum.net)의 회원이 아닌 경우 회원이 되고자하는 자가 지정하는 임의의 이메일주소 및 비밀번호를 등록하여 서비스를 이용

제4조 (서비스 이용)

  1. (1) 서비스 이용시간은 회사의 업무상 또는 기술상 불가능한 경우를 제외하고는 연중무휴 1일 24시간(00:00-24:00)으로 함을 원칙으로 합니다. 다만, 서비스설비의 정기점검 등의 사유로 회사가 서비스를 특정범위로 분할하여 별도로 날짜와 시간을 정할 수 있습니다.
  2. (2) 제3조의 서비스 내용이 추가, 변경 또는 삭제됨에 있어 회사가 필요하다고 인정하는 경우 회사는 회원의 등록된 메일주소로 서비스 내용의 추가, 변경 또는 삭제된 내용 등을 통지할 수 있습니다.
  3. (3) 전항의 경우 불특정 다수인을 상대로 통지를 함에 있어서는 웹사이트 기타 회사의 공지사항 페이지를 통하여 회원들에게 통지할 수 있습니다.

제5조 (이용계약의 성립)

  1. (1) 회원은 회사가 제시하는 이용계약에 대한 내용을 인지하고 이를 수락함으로써 회사의 서비스에 대한 동의를 표시하고 회사는 이를 승낙함으로써 회원에게 서비스를 제공합니다.
  2. (2) 이용계약에 대한 동의는 인증 이메일에 전달되어진 인증링크를 클릭함으로써 의사표시를 합니다.

제6조 (서비스내용변경 통지 등)

  1. (1) 회사가 서비스 내용을 변경하거나 종료하는 경우 회사는 회원의 등록된 전자우편 주소로 이메일을 통하여 서비스 내용의 변경 사항 또는 종료를 통지할 수 있습니다.
  2. (2) 전 항의 경우 불특정 다수인을 상대로 통지를 함에 있어서는 웹사이트 기타 회사의 공지사항 페이지를 통하여 회원들에게 통지할 수 있습니다.

제7조 (권리의 귀속 및 저작물의 이용)

  1. (1) 회사가 회원에게 제공하는 각종 서비스에 대한 저작권을 포함한 일체의 권리는 회사에 귀속되며 회원이 서비스를 이용하는 과정에서 작성한 게시물 등(이하 “게시물 등”이라 합니다)에 대한 저작권을 포함한 일체에 관한 권리는 별도의 의사표시가 없는 한 각 회원에게 귀속됩니다.
  2. (2) 게시물 등은 회사가 운영하는 인터넷 사이트 및 모바일 어플리케이션을 통해 노출될 수 있으며, 검색결과 내지 관련 프로모션 등에도 노출될 수 있습니다. 또한, 해당 노출을 위해 필요한 범위 내에서는 일부 수정, 편집되어 게시될 수 있습니다. 이 경우, 회사는 저작권법 규정을 준수하며, 회원은 언제든지 고객센터 또는 각 서비스 내 관리기능을 통해 해당 게시물 등에 대해 삭제, 검색결과 제외, 비공개 등의 조치를 취할 수 있습니다.
  3. (3) 회사는 제2항 이외의 방법으로 회원의 게시물 등을 이용하고자 하는 경우에는 전화, 팩스, 전자우편 등을 통해 사전에 회원의 동의를 얻습니다.

제8조 (서비스이용의 제한 및 중지)

  1. (1) 회사는 아래 각 호의 1에 해당하는 사유가 발생한 경우에는 회원의 서비스 이용을 제한하거나 중지시킬 수 있습니다.
    1. 회원이 회사 서비스의 운영을 고의 또는 중과실로 방해하는 경우
    2. 회원이 제11조의 의무를 위반한 경우
    3. 서비스용 설비 점검, 보수 또는 공사로 인하여 부득이한 경우
    4. 전기통신사업법에 규정된 기간통신사업자가 전기통신 서비스를 중지했을 경우
    5. 국가비상사태, 서비스 설비의 장애 또는 서비스 이용의 폭주 등으로 서비스 이용에 지장이 있는 때
    6. 기타 중대한 사유로 인하여 회사가 서비스 제공을 지속하는 것이 부적당하다고 인정하는 경우
  2. (2) 회사는 전항의 규정에 의하여 서비스의 이용을 제한하거나 중지한 때에는 그 사유 및 제한기간등을 회원에게 알려야 합니다.
  3. (3) 제14조 제2항에 의해 회사가 회원과의 계약을 해지하고 탈퇴시키기로 결정한 경우 회사는 회원의 탈퇴 처리 전에 이를 통지하고, 회원은 회사의 통지를 받은 날로부터 30일 이내에 이에 대한 항변의 기회를 가집니다.
  4. (4) 정보통신망 이용촉진 및 정보보호 등에 관한 법률(이하 “정보통신망법”이라 합니다)의 규정에 의해 다른 회원의 공개된 게시물 등이 본인의 사생활을 침해하거나 명예를 훼손하는 등 권리를 침해 받은 회원 또는 제3자(이하 “삭제 등 신청인”이라 합니다)는 그 침해사실을 소명하여 회사에 해당 게시물 등의 삭제 또는 반박 내용의 게재를 요청할 수 있습니다. 이 경우 회사는 해당 게시물 등의 권리 침해 여부를 판단할 수 없거나 당사자 간의 다툼이 예상되는 경우 해당 게시물 등에 대한 접근을 임시적으로 차단하는 조치(이하 “임시조치”라 합니다)를 최장 30일까지 취합니다.
  5. (5) 제4항에 의해 본인의 게시물 등이 임시조치된 회원(이하 “게시자”라 합니다)은 임시조치기간 중 회사에 해당 게시물 등을 복원해 줄 것을 요청(이하 “재게시 청구”라 합니다)할 수 있으며, 회사는 임시조치된 게시물의 명예훼손 등 판단에 대한 방송통신심의위원회 심의 요청에 대한 게시자 및 삭제 등 신청인의 동의가 있는 경우 게시자 및 삭제 등 신청인을 대리하여 이를 요청하고 동의가 없는 경우 회사가 이를 판단하여 게시물 등의 복원 여부를 결정합니다. 게시자의 재게시 청구가 있는 경우 임시조치 기간 내에 방송통신심의위원회 또는 회사의 결정이 있으면 그 결정에 따르고 그 결정이 임시조치 기간 내에 있지 않는 경우 해당 게시물 등은 임시조치 만료일 이후 복원됩니다. 재게시 청구가 없는 경우 해당 게시물 등은 임시조치 기간 만료 이후 삭제됩니다.
  6. (6) 회사는 서비스 내에 게시된 게시물 등이 사생활 침해 또는 명예훼손 등 제3자의 권리를 침해한다고 인정하는 경우 제5항에 따른 회원 또는 제3자의 신고가 없는 경우에도 임시조치(이하 “임의의 임시조치”라 합니다)를 취할 수 있습니다. 임의의 임시조치된 게시물의 처리 절차는 제4항 후단 및 제5항의 규정에 따릅니다.
  7. (7) 회원의 게시물 등으로 인한 법률상 이익 침해를 근거로, 다른 회원 또는 제3자가 회원 또는 회사를 대상으로 하여 민형사상의 법적 조치(예: 형사고소, 가처분 신청∙손해배상청구 등 민사소송의 제기)를 취하는 경우, 회사는 동 법적 조치의 결과인 법원의 확정판결이 있을 때까지 관련 게시물 등에 대한 접근을 잠정적으로 제한할 수 있습니다. 게시물 등의 접근 제한과 관련한 법적 조치의 소명, 법원의 확정 판결에 대한 소명 책임은 게시물 등에 대한 조치를 요청하는 자가 부담합니다.

제9조 (팀블로그 서비스)

  1. (1) 회사의 서비스에서 제공하는 모든 블로그는 블로그를 개설한 회원의 의사에 따라 팀블로그로 운영할 수 있습니다.
  2. (2) 회원은 다른 회원이 개설한 팀블로그에 초대메일을 통해 팀원으로 초대받을 수 있으며 초대메일의 내용에 동의하고 승낙함으로써 팀블로그 회원으로 가입할 수 있습니다.
  3. (3) 팀블로그의 회원등급은 소유자, 관리자, 편집자, 필자의 4단계의 등급으로 구분이 되며 각 회원의 의무는 제11조에 명시한 회원의 의무를 동일하게 부여받습니다. 팀블로그에 속한 회원의 권한과 책임범위는 다음과 같습니다.
    1. 소유자(팀블로그를 만든 회원을 말합니다)는 팀블로그 운영에 대한 모든 권리를 가지게 되며 다른 회원을 초대하여 팀블로그의 개설, 운영, 폐쇄 및 회원관리를 할 수 있습니다. 또한 관리자(소유자가 지정한 운영자격을 가지는 회원을 말합니다)에게 회원관리의 권한을 부여할 수 있습니다.
    2. 관리자는 소유자가 부여한 회원관리 권한 외에 편집자와 필자의 권한을 관리할 수 있습니다.
    3. 편집자는 필자가 팀블로그에 게시한 게시물 등에 대한 편집권한을 가지며 회원관리 권한은 수행할 수 없습니다.
    4. 필자는 팀블로그에 게시물 등을 게시할 수 있으며 본인이 게시한 게시물 등에 대한 편집권한을 가집니다. 필자에 의해 올려진 게시물 등은 공개 게시물 등에 한해 팀블로그로 저작물에 대한 권한이 귀속됩니다. 필자는 회원관리 권한은 수행할 수 없습니다.
  4. (4) 팀블로그의 모든 회원은 자유롭게 팀블로그를 탈퇴할 수 있습니다. 팀블로그에 올려진 게시물 등은 팀블로그 저작물로 인정되어 회원 탈퇴 시 별도의 삭제작업을 병행하지 않습니다.
  5. (5) 팀블로그에 올려진 게시물에 대한 모든 책임은 팀블로그 소유자에게 있습니다.

제10조 (회사의 의무)

  1. (1) 회사는 회사의 서비스 제공 및 보안과 관련된 설비를 지속적이고 안정적인 서비스 제공에 적합하도록 유지, 점검 또는 복구 등의 조치를 성실히 이행하여야 합니다.
  2. (2) 회사는 회원이 원하지 아니하는 영리 목적의 광고성 전자우편을 발송하지 아니합니다.
  3. (3) 회사는 서비스의 제공과 관련하여 알게 된 회원의 개인정보를 본인의 승낙 없이 제3자에게 누설, 배포하지 않고, 이를 보호하기 위하여 노력합니다. 회원의 개인정보보호에 관한 기타의 사항은 정보통신망 이용촉진 및 정보보호등에 관한 법률 등 관계법령 및 회사가 별도로 정한 “개인정보처리방침”에 따릅니다.

제11조 (회원의 의무)

  1. (1) 회원은 아래 각 호의 1에 해당하는 행위를 하여서는 안됩니다.
    1. 회원정보에 허위내용을 등록하는 행위
    2. 회사의 서비스에 게시된 정보를 변경하거나 서비스를 이용하여 얻은 정보를 회사의 사전 승낙 없이 영리 또는 비영리의 목적으로 복제, 출판, 방송 등에 사용하거나 제3자에게 제공하는 행위
    3. 회사가 제공하는 서비스를 이용하여 제3자에게 본인을 홍보할 기회를 제공 하거나 제3자의 홍보를 대행하는 등의 방법으로 금전을 수수하거나 서비스를 이용할 권리를 양도하고 이를 대가로 금전을 수수하는 행위
    4. 회사 기타 제3자의 명예를 훼손하거나 지적재산권을 침해하는 등 회사나 제3자의 권리를 침해하는 행위
    5. 다른 회원의 이메일주소 및 비밀번호를 도용하여 부당하게 서비스를 이용한 경우
    6. 정크메일(junk mail), 스팸메일(spam mail), 행운의 편지(chain letters), 피라미드 조직에 가입할 것을 권유하는 메일, 외설 또는 폭력적인 메시지 ·화상·음성 등이 담긴 메일을 보내거나 기타 공서양속에 반하는 정보를 공개 또는 게시하는 행위
    7. 정보통신망이용촉진및정보보호등에관한법률 등 관련 법령에 의하여 그 전송 또는 게시가 금지되는 정보(컴퓨터 프로그램 등)를 전송, 게시하거나 청소년보호법에서 규정하는 청소년유해매체물을 게시하는 행위
    8. 공공질서 또는 미풍양속에 위배되는 내용의 정보, 문장, 도형, 음성 등을 유포하는 행위
    9. 회사의 직원이나 서비스의 관리자를 가장하거나 사칭하여 또는 타인의 명의를 모용하여 글을 게시하거나 메일을 발송하는 행위
    10. 컴퓨터 소프트웨어, 하드웨어, 전기통신 장비의 정상적인 가동을 방해, 파괴할 목적으로 고안된 소프트웨어 바이러스, 기타 다른 컴퓨터 코드, 파일, 프로그램을 포함하고 있는 자료를 게시하거나 전자우편으로 발송하는 행위
    11. 스토킹(stalking) 등 다른 회원의 서비스 이용을 방해하는 행위
    12. 다른 회원의 개인정보를 그 동의 없이 수집, 저장, 공개하는 행위
    13. 불특정 다수의 회원을 대상으로 하여 광고 또는 선전을 게시하거나 스팸메일을 전송하는 등의 방법으로 회사에서 제공하는 서비스를 이용하여 영리목적의 활동을 하는 행위
    14. 회사가 제공하는 소프트웨어 등을 개작하거나 리버스 엔지니어링, 디컴파일, 디스어셈블 하는 행위
    15. 회사가 제공하는 서비스에 정한 약관 기타 서비스 이용에 관한 규정을 위반하는 행위
  2. (2) 회사는 회원이 제1항의 행위를 하는 경우 해당 게시물 등을 삭제 또는 임시조치할 수 있고 회원의 서비스 이용을 제한하거나 일방적으로 본 계약을 해지할 수 있습니다.
  3. (3) 회사가 제공하는 서비스 중 관련 법령 등의 규정에 의하여 성인인증이 필요한 경우 회원은 해당 서비스를 이용하기 위하여 회사가 제공하는 방법에 따라 실명정보를 회사에 제공하여야 합니다.

제12조 (회원 ID 등의 관리책임)

  1. (1) 회원은 서비스 이용을 위한 회원 ID, 비밀번호의 관리에 대한 책임, 본인 ID의 제3자에 의한 부정사용 등 회원의 고의∙과실로 인해 발생하는 모든 불이익에 대한 책임을 부담합니다. 단, 이것이 회사의 고의∙과실로 인하여 야기된 경우에는 회사가 책임을 부담합니다.
  2. (2) 회원은 회원 ID, 비밀번호 등을 도난 당하거나 제3자가 사용하고 있음을 인지한 경우에는 즉시 본인의 비밀번호를 수정하는 등의 조치를 취하여야 하며, 즉시 이를 회사에 통보하여 회사의 안내를 따라야 합니다.

제13조 (양도금지)

회원의 서비스 받을 권리는 이를 양도 내지 증여하거나 질권의 목적으로 할 수 없습니다.

제14조 (이용계약의 해지)

  1. 회원은 서비스 이용계약을 해지하고자 하는 때에는 회사가 제공하는 서비스 내의 회원탈퇴 기능을 이용하여 탈퇴를 요청할 수 있습니다. 회사는 탈퇴를 요청한 시점에서 제8조 제(1)항의 각호에 해당하는 범위 외 불가피한 사정이 없는 한 즉시 탈퇴요청을 처리합니다.
  2. 회원이 제11조의 규정을 위반한 경우 회사는 일방적으로 본 계약을 해지할 수 있고, 이로 인하여 서비스 운영에 손해가 발생한 경우 이에 대한 민∙형사상 책임도 물을 수 있습니다.
  3. 회원이 서비스를 이용하는 도중, 연속하여 일(1)년 동안 서비스를 이용하기 위해 회사의 서비스에 log-in한 기록이 없는 경우 회사는 회원의 회원자격을 상실시킬 수 있습니다.
  4. 본 이용 계약이 해지된 경우 회원의 게시물 등 일체는 삭제됩니다. 단, 제9조 제(4)항의 경우에는 그러하지 않습니다.

제15조 (게시판 이용 상거래)

  1. 서비스 내 게시판을 이용하여 상거래(판매 및 중개 포함)를 업으로 하는 회원(이하 "게시판 이용 통신판매업자등 회원")의 경우 전자상거래 등에서의 소비자보호에 관한 법률(이하 "전자상거래법")에 따른 통신판매업자 및 통신판매중개업자의 의무사항을 준수하여야 합니다.
  2. (2) "게시판 이용 통신판매업자등 회원"은 전자상거래법에서 요구하는 일정한 신원정보(동법 제13조 제1항 제1호 및 제2호)를 관련 게시판 서비스 내에서 제공하는 입력 기능을 이용하여 표시하며, 해당 신원정보를 회사에 제공해야 합니다.
  3. (3) 회원과 "게시판 이용 통신판매업자등 회원" 사이에 상거래 관련 분쟁이 발생하는 경우 회사는 전항에 따라 확인된 "게시판 이용 통신판매업자등 회원"의 신원정보를 다음 각 호의 어느 하나에 해당하는 자의 요청이 있는 경우 제공할 수 있습니다.
    1. 전자상거래법 제33조에 따른 소비자피해 분쟁조정기구
    2. 공정거래위원회
    3. 시·도지사 또는 시장·군수·구청장
  4. (4) "게시판 이용 통신판매업자등 회원"으로부터 피해를 입은 회원은 고객센터 페이지를 통하여 전항 1호에서 정한 소비자피해 분쟁조정기구에 피해구제신청을 할 수 있으며, 회사는 해당 신청을 대행하여 처리합니다.

제16조 (면책조항)

  1. (1) 회사는 다음 각 호의 경우로 서비스를 제공할 수 없는 경우 이로 인하여 회원에게 발생한 손해에 대해서는 책임을 부담하지 않습니다.
    1. 천재지변 또는 이에 준하는 불가항력의 상태가 있는 경우
    2. 서비스 제공을 위하여 회사와 서비스 제휴계약을 체결한 제3자의 고의적인 서비스 방해가 있는 경우
    3. 회원의 귀책사유로 서비스 이용에 장애가 있는 경우
    4. 제1호 내지 제3호를 제외한 기타 회사의 고의∙과실이 없는 사유로 인한 경우
  2. (2) 회사는 제3자가 제공하거나 회원이 작성하는 등의 방법으로 서비스에 게재된 정보, 자료, 사실의 신뢰도, 정확성 등에 대해서는 보증을 하지 않으며 이로 인해 발생한 회원의 손해에 대하여는 책임을 부담하지 아니합니다.

제17조 (분쟁의 해결)

본 약관은 대한민국법령에 의하여 규정되고 이행되며, 서비스 이용과 관련하여 회사와 회원간에 발생한 분쟁에 대해서는 회사의 본점 소재지를 관할하는 법원을 합의관할로 합니다.

제18조 (규정의 준용)

이 약관에 명시되지 않은 사항에 대해서는 관계법령에 의하고, 법에 명시되지 않은 부분에 대하여는 관습에 의합니다.

부칙 (2016. 9. 12.)

본 약관은 2016년 9월 30일부터 적용하고 2015년 5월 29일부터 적용되던 종전의 약관은 본 약관으로 대체합니다.


1. 수집하는 개인정보 항목

- 필수정보의 수집 : 회원가입 시 이용자의 이메일 주소, 비밀번호를 수집하고 있습니다. 이용자의 이벤트 참여 시 해당 시점에 이용자의 이름, 휴대폰 번호, 유선 전화번호, 배송지 주소 추가 수집을 위한 별도의 동의를 받도록 하고 있습니다.
서비스 이용과정에서 아래와 같은 정보들이 자동으로 생성되어 수집될 수 있습니다.
o IP Address, 쿠키, 방문 일시, 서비스 이용 기록, 불량 이용 기록, 기기정보

2. 개인정보의 수집 • 이용목적

  1. 1) 회원으로 가입한 이용자를 식별하고 가입의사 확인, 불량회원의 부정한 이용을 방지하기 위하여 사용합니다.
  2. 2) 이용자에게 카카오의 다양한 서비스를 제공하고 서비스 이용 과정에서 이용자의 문의사항이나 불만을 처리하고 공지사항 등을 전달하기 위해 사용합니다.
  3. 3) 이용자와 약속한 서비스를 제공하고 유료 서비스 구매 및 이용이 이루어지는 경우 이에 따른 요금 정산을 위해 사용됩니다.
  4. 4) 신규 서비스가 개발되거나 이벤트 행사 시 참여기회를 알리기 위한 정보 전달 및 마케팅 및 광고 등에도 사용됩니다.
  5. 5) 맞춤형 서비스 제공 및 신규 서비스 개발 등에 참고하기 위하여 이를 익명화 하여, 이용패턴과 접속빈도 분석 및 서비스 이용에 대한 통계에서도 사용됩니다.

3. 개인정보의 보유 • 이용기간

카카오는 이용자의 개인정보를 회원가입을 하는 시점부터 서비스를 제공하는 기간 동안에만 제한적으로 이용하고 있습니다. 이용자가 회원탈퇴를 요청하거나 제공한 개인정보의 수집 및 이용에 대한 동의를 철회하는 경우, 또는 수집 및 이용목적이 달성되거나 보유 및 이용기간이 종료한 경우 해당 이용자의 개인정보는 지체 없이 파기 됩니다.
그리고 관계법령의 규정에 따라 아래와 같이 관계 법령에서 정한 일정한 기간 동안 회원정보를 보관합니다.
  1. 1) 서비스 이용 관련 개인정보 (로그인기록)/보존 근거 : 통신비밀보호법/보존 기간 : 3개월
  2. 2) 표시/광고에 관한 기록/보존 근거 : 전자상거래 등에서의 소비자보호에 관한 법률/보존 기간 : 6개월
  3. 3) 계약 또는 청약철회 등에 관한 기록/보존 근거 : 전자상거래 등에서의 소비자보호에 관한 법률/보존 기간 : 5년
  4. 4) 대금결제 및 재화 등의 공급에 관한 기록/보존 근거 : 전자상거래 등에서의 소비자보호에 관한 법률/보존 기간 : 5년
  5. 5) 소비자의 불만 또는 분쟁처리에 관한 기록/보존 근거 : 전자상거래 등에서의 소비자보호에 관한 법률/보존 기간 : 3년
  6. 6) 개인위치정보에 관한 기록/보존근거 : 위치정보의 보호 및 이용 등에 관한 법률/보존기간 : 6개월
  7. 7) 전자금융 거래에 관한 기록 : 전자금융거래법/보존기간 : 5년



멤버십 서비스 이용 약관

 

제1조  (목적)

본 약관은 쿠팡 주식회사(이하 “회사”)가 운영하는 웹사이트모바일 웹 및 앱 등에서 제공하는 멤버십 서비스를 이용하고자 하는 자와 회사 간의 권리·의무서비스 이용절차 및 기타 제반사항을 정함에 그 목적이 있다.


제2조  (용어의 정의)

1. 멤버십 서비스(가칭 로켓와우”, 이하 “본 서비스라고 한다.)대상회원이 멤버십으로 가입함으로써 회사가 대상회원에게 추가적으로 제공하는 각종 서비스 및 관련 부가서비스 일체를 의미한다향후 서비스 명칭의 변경은 사전 고지 없이 가능하다 (서비스 개시 후 서비스 명칭 변경 예정).

2. 회원이란『쿠팡 이용약관』에 동의하고 그 서비스를 이용하는 자로서본 서비스를 이용하기 위해 본 약관에 동의한 자를 의미한다.

3. 대상회원이란『쿠팡 이용약관』에 동의하고 그 서비스를 이용하는 자로서본 서비스 중 개별 서비스를 이용할 수 있는 요건을 갖춘 자를 의미한다.

4. 대상 서비스이란회사가 제공하는 본 서비스 중 회사가 개별 서비스에 대한 상세 설명을 통해 지정한 서비스를 의미한다.

5. 대상지역이란회사가 제공하는 본 서비스 중 회사가 개별 서비스에 대한 상세 설명을 통해 지정한 지역을 의미한다.

6. 무료체험 기간이란본 회원이 본 서비스 이용계약을 체결한 이후부터 본 서비스의 이용료가 결제되기 직전까지 본 서비스를 무상으로 이용할 수 있는 기간을 의미한다.


제3조  (서비스의 제공 및 변경)

① 대상회원대상상품대상지역의 범위는 회사의 사정에 따라 변경될 수 있으며그 변경으로 인하여 본 회원이 본 서비스를 중도에 이용하지 못하게 된 경우 회사는 본 약관 제10조의 규정에 따라 환불한다.

②  서비스는 무료체험 기간 동안 본 회원에게 무상으로 제공되며무료체험 기간 경과 후에는 이용료를 결제한 본 회원에 한하여 본 서비스를 제공한다무료체험 기간은 회사의 사정에 따라 변경될 수 있다.

③ 회원은 무료체험 기간이 만료된 이후회원이 등록한 결제 정보를 이용하여 회사가 이용료를 결제하는데 동의한다.

④ 무료체험 기간은 최초 가입 시에 한하여 1회만 제공되며회원이 되었다가 탈퇴한 후 재가입한 회원에게는 무료체험 기간을 제공하지 아니한다.

⑤  서비스의 내용이 변경된 경우 회사는 변경된 내용을 회원에게 즉시 통지하여야 하며이용료 액수가 변경된 경우에는 변경된 이용료가 결제되는 시점에 회원에게 별도로 새로운 동의를 받아야 한다.


제4조  (본 서비스 가입 신청)

① 본 서비스는 대상회원이 본 서비스를 위한 약관에 동의하고 결제정보를 입력함으로써 가입 신청할 수 있다.

② 회사는 대상회원에게 『쿠팡 이용약관』상 결격사유가 없으면 가입 신청을 승인하며대상회원은 회사가 가입 신청을 승인하는 즉시 본 회원이 된다.


제5조   (추가 정보의 수집)

회사는 본 서비스를 제공하기 위하여 필수적으로 요구되는 정보를 별도의 동의 없이 추가로 수집할 수 있다다만수집하는 정보가 개인정보에 해당하는 경우 관련 법령 및 『쿠팡 이용약관』상의 개인정보 보호 규정을 준수해야 한다.


제6조  (본 회원의 의무)

회원은 회사로부터 본 서비스의 수령 및 이용료의 결제를 위해 회원 본인의 정보를 최신으로 유지하여야 하며회사는 회원정보가 부정확하여 발생하는 불이익에 대하여는 책임지지 않는다.


제7조  (회사의 통지 의무)

① 회사는 회원에게 본 서비스의 개별 서비스에 대해 설명하여야 하고서비스 내용의 변경이 있는 경우이를 회원에게 통지하여야 한다.

② 회원의 이용료가 결제된 경우 회사는 회원에게 결제 사실을 통지하여야 한다.


제8조   (금지행위)

① 회원은 이 약관에 따른 회원의 권리의무의 전부 또는 일부를 타인에게 대여양도위임할 수 없다.

② 회원은 본 서비스의 정상적인 운영 또는 다른 회원의 본 서비스 이용을 방해하는 행위를 하여서는 아니된다.


제9조   (서비스의 중단 및 탈퇴)

① 회사가 본 서비스를 중단하는 경우 회사는 본 서비스 화면을 통하여 중단일 30일 전에 회원에게 공지하여야 한다.

② 회원의 카드 한도 초과 등으로 이용료의 결제가 이루어 지지 않을 경우 회사는 해당 회원에게 그 기간 동안 본 서비스를 제공하지 않을 수 있으며위와 같은 상황이 지속되는 경우 회사는 해당 회원에게 영구적으로 서비스의 제공을 중단할 수 있다.

③ 회원은 언제든지 탈퇴함으로써 본 서비스의 이용을 해지할 수 있다.


제10조   (환불)

① 회사는 본 서비스 및 개별 서비스에 대하여 결제 및 환불 조건과 그 변경 내용에 대해 회원에게 설명하여야 한다.

② 회원이 이용료를 결제한 이후 본 서비스가 중도에 해지되는 경우회사는 회원이 결제한 금액에서 이용일수에 해당하는 부분을 공제한 금액을 환불한다.


제11조    (기타)

본 약관과 『쿠팡 이용 약관』이 상충하는 경우 본 약관이 우선하여 적용되고본 약관에서 규정하지 않은 사항은 『쿠팡 이용 약관』을 적용한다.

 

본 약관은 2018 10 4일부터 시행한다.

LLM(Large Language Models)에 대해 배우고 싶으시다면, 기초부터 차근차근 시작하는 것이 좋습니다. LLM은 자연어 처리(Natural Language Processing, NLP)의 한 분야로, 대량의 텍스트 데이터를 기반으로 언어를 이해하고 생성하는 모델을 말합니다. 여기 몇 가지 단계로 나누어서 공부할 수 있는 프로젝트를 제안드립니다:

1. 자연어 처리(NLP) 기초 이해하기

  • 텍스트 데이터 전처리: 정규 표현식을 사용한 텍스트 클리닝, 토큰화, 스톱워드 제거, 어간 추출 및 표제어 추출 등의 기초적인 NLP 전처리 방법을 학습합니다.
  • Python과 NLTK 라이브러리 사용: Python의 NLTK(Natural Language Toolkit) 라이브러리를 사용하여 기본적인 텍스트 분석을 수행해봅니다.

2. 머신러닝과 NLP의 결합

  • 기본적인 머신러닝 모델 학습: 머신러닝의 기초를 다진 후, 텍스트 분류나 감성 분석과 같은 간단한 NLP 태스크를 수행해 보는 프로젝트를 시작합니다. Scikit-learn 라이브러리를 활용한 분류 모델을 만들어 보세요.
  • Word Embedding 이해하기: Word2Vec이나 GloVe와 같은 워드 임베딩 모델을 학습하고, 이를 사용해 텍스트 데이터를 벡터 공간에 매핑하는 방법을 학습합니다.

3. 딥러닝과 NLP

  • TensorFlow나 PyTorch 학습: 딥러닝 프레임워크인 TensorFlow나 PyTorch를 사용하여 기본적인 신경망을 구축하는 방법을 학습합니다.
  • RNN과 LSTM을 사용한 텍스트 생성: 순환 신경망(RNN)과 장단기 메모리(LSTM) 네트워크를 사용하여 간단한 텍스트 생성 모델을 만들어봅니다.

4. 대형 언어 모델(Large Language Models) 탐구

  • Transformer 모델 학습: Transformer 아키텍처의 기초를 이해하고, 이를 기반으로 한 모델(BERT, GPT 등)에 대해 학습합니다.
  • Hugging Face의 Transformers 라이브러리 사용: Hugging Face의 Transformers 라이브러리를 사용하여 사전 훈련된 LLM을 탐색하고, 다양한 NLP 태스크에 적용해보는 프로젝트를 진행합니다.

5. 실제 프로젝트 수행

  • Fine-tuning 사전 훈련된 모델: 특정 태스크에 맞게 사전 훈련된 LLM을 Fine-tuning하는 방법을 학습하고, 실제 데이터셋에 적용해봅니다.
  • 자체 LLM 프로젝트: 배운 지식을 토대로 자신만의 LLM을 설계하고, 구현해보는 프로젝트를 진행합니다.

이 과정들은 LLM에 대한 이해를 넓히고, 실제로 어플리케이션을 만들어보는 데 도움이 될 것입니다. 또한, 이러한 프로젝트를 진행하면서 발생하는 문제들을 해결하는 과정에서 더 깊은 지식을 쌓을 수 있습니다.

============================================================================화사첨족.

집에서 일하는 것이 회사 사무실에서 일하는 것보다 더 편하다고 느끼는 이유는 여러 가지가 있을 수 있습니다. 개인적인 선호도나 작업 환경에 대한 요구 사항이 다르기 때문에, 각자의 이유는 조금씩 다를 수 있습니다. 여기 몇 가지 공통적인 이유를 소개합니다:

  1. 통근 시간의 절약: 집에서 일할 때는 출퇴근을 위해 시간을 소비하지 않아도 됩니다. 이 시간을 다른 개인적인 일이나 추가적인 업무에 할애할 수 있어서, 일과 생활의 균형을 더 잘 맞출 수 있습니다.
  2. 유연한 근무 환경: 집에서 근무하면 자신의 근무 환경을 자유롭게 조정할 수 있습니다. 예를 들어, 음악을 들으면서 일하거나, 원하는 시간에 휴식을 취할 수 있습니다.
  3. 소음 및 방해 요소 감소: 사무실 환경은 때때로 시끄럽거나, 동료들로부터의 방해를 받을 수 있습니다. 집에서는 이러한 외부 요소들을 더 잘 통제할 수 있어, 집중력을 유지하기가 더 쉬울 수 있습니다.
  4. 개인적인 안락함: 집은 개인적인 공간이므로, 자신이 가장 편안하게 느끼는 환경을 만들 수 있습니다. 예를 들어, 의자나 책상과 같은 사무용 가구를 자신의 선호에 맞게 선택할 수 있습니다.
  5. 건강 및 웰빙: 집에서 일하면 식사 준비나 운동과 같은 개인적인 건강 관리를 더 잘 할 수 있습니다. 사무실에서는 이러한 활동을 위한 시간을 찾기 어려울 수 있습니다.
  6. 기술의 발전: 클라우드 기반 도구와 커뮤니케이션 플랫폼의 발전으로 집에서도 팀원들과 효과적으로 협업할 수 있습니다.

물론, 집에서 일하는 것이 모든 사람에게 장점만 있는 것은 아닙니다. 집중력 유지, 업무와 개인 생활의 경계 설정, 사회적 고립감 등의 도전도 있을 수 있습니다. 하지만 많은 사람들이 위에서 언급한 이유들로 인해 집에서 일하는 것을 선호합니다.

집에서 일하는 것이 더 편하다고 느끼는 이유는 개인마다 다를 수 있지만, 일반적으로 다음과 같은 요인들이 작용할 수 있습니다.

  1. 출퇴근 시간 절약: 집에서 일하면 출퇴근에 소요되는 시간과 에너지를 절약할 수 있습니다. 이는 더 많은 자유 시간과 편안함을 제공합니다.
  2. 유연한 근무 환경: 집에서는 자신에게 가장 편안하고 생산적인 환경을 조성할 수 있습니다. 원하는 대로 작업 공간을 구성하고, 선호하는 조명이나 온도 등을 조절할 수 있습니다.
  3. 자율성과 집중력 향상: 사무실의 잡음, 동료와의 대화, 회의 등의 방해 요소가 줄어들어 업무에 더 집중할 수 있습니다. 또한, 자신의 페이스에 맞춰 일할 수 있어 자율성이 높아집니다.
  4. 가정생활과의 조화: 집에서 일하면서 가족과 더 많은 시간을 보낼 수 있고, 육아나 가사 등 개인적인 일과 업무를 더 유연하게 병행할 수 있습니다.
  5. 비용 절감: 출퇴근 비용, 식비 등을 아낄 수 있고, 회사에서 제공하는 자원 대신 이미 가지고 있는 개인 물품을 사용할 수 있습니다.
  6. 스트레스 감소: 직장에서의 人間關係, 업무 환경에 대한 스트레스가 줄어들 수 있습니다. 익숙하고 편안한 공간인 집에서 일하는 것이 정신적 안정에 도움이 될 수 있습니다.

다만, 재택근무가 모든 사람에게 적합한 것은 아닙니다. 업무 특성, 개인의 성향과 역량, 가정 환경 등에 따라 사무실에서 일하는 것이 더 효과적일 수도 있습니다. 개인의 선호도와 상황을 고려하여 최적의 근무 방식을 선택하는 것이 중요합니다.

 

 

  1. 저자는 SNS를 브런치와 트위터로 제한하기로 했습니다.
  2. 브런치에서는 기존의 콘셉트를 유지하되, 기술 블로그 형식으로 운영할 계획입니다.
  3. 기술 블로그를 하려는 이유는 저자의 경험과 연결되어 있습니다. 저자는 오랜 기간 교육 활동을 해왔고, 한국의 코딩 교육 상황을 개선하고자 하는 목표가 있습니다.
  4. 현재 한국의 코딩 교육은 학교가 감당하기 어려운 상황이며, 학원이나 온라인 교육도 한계가 있다고 봅니다. 이를 개선하기 위해서는 해외에서 성공한 교육자들의 노하우가 필요하다고 생각합니다.
  5. 한국 사회의 전반적인 문제점과 한계에 대해서도 언급하였습니다. 저자는 현재의 상황을 부정적으로 인식하고 있습니다.
  6. 자본주의 사회에서 돈과 성공이 인간을 변화시키는 현상, 그리고 불평등한 현실에 대한 고민도 드러냈습니다.
  7. 미래 세대인 코딩 영재들에 대한 기대감을 표현하면서도, 잘못된 방향의 교육에 대한 경계심도 나타냈습니다.




블로그 포스팅의 힘






전에 밝혔지만, 직장 생활하면서도 교육에 관심이 여러 활동을 하는데 특이한 것은 가끔 오는 과외 문의는 결국 인터넷 글을 보고 온다.






- 안녕하세요 현재 *지역 거주 중이고 제가 필요한 건 opengl 중에 간단하게 동작하는 것들을 구현하는 걸 배우고 싶습니다 * 페이는 과제 난이도 및 개수로 일단 회당 5~10만 원 정도로 생각중입니다 *


- 안녕하세요. 리눅스 커널을 공부하고 있는데 quick start를 위해 도움을 주실 분들 구하다가 글을 발견하고 메일 보내봅니다. *


- 안녕하세요. * 혹시 어셈블리어 기초과정 과외 가능하시면 연락 주십시오 시간은 되도록 그쪽 사정에 맞출 수 있습니다. *




공유 지식의 힘






대부분의 인터넷 글을 정리하고 카페 활동을 시작했었다. 사실 쓴 책에도 밝혔지만 "인터넷 서핑 공부법"이란 게 있어서 내가 썼던 글과 지식도 시간이 지나면 쓸모없는 것이 되고, 단순히 블로그 조회수만 올려주는 역할만 하는데 사람들에게 도움이 되진 않는다. 그래서 차라리 카페가 낫겠다 싶었다. 그렇게 카페를 하다 접었다가 최근 다시 시작했다. 내가 몰랐던 사실은 대부분의 사람들은 잘 된 카페에 모이고 활동을 한다는 것. 지인도 마찬가지. 결국 잘 안되더라도 재미를 느끼고 활동하는 사람과 함께 해야 유지시킬 수 있다는 것이다. 잘되고 나서는 얼마든지 사람을 모을 수가 있다. 그리고 퀄리티 있는 지식의 공유는 결국 사람을 모은다. 모여진 사람을 이끌며 줏대 있는 결심을 지속적으로 내비치면 주는 사람이 더 도움을 받는 커뮤니티가 된다.





프로그래머 Programmer : 네이버 카페


기술을 더욱 깊이 있게 하고픈 개발자 모임입니다.


cafe.naver.com 









Design Pattern


디자인 패턴의 실무적 접근방법은 이미 이전 포스팅에서 모두 말했다. Creational Pattern 뿐이지만 객체를 생성하는 new의 위치를 어디에 쓰느냐가 패턴의 종류를 결정했었다는 글은 내 책의 글귀인 "프로그래밍은 CPU와 MEMORY의 장난"이라는 말과 일맥상통한다.





C&JAVA Programming 실무 프로그래밍 초급편









GoF Design Pattern이 소프트웨어 영역에서는 시온이기에 사실 모든 디자인 패턴은 이 책에서 나왔다고 할 수 있다.





GoF의 디자인 패턴


이 책은 디자인 패턴을 다룬 이론서로 디자인 패턴의 기초적이고 전반적인 내용을 학습할 수 있다.


www.yes24.com 







그러나 내가 기존의 알던 내용을 제대로 정립하고, 배운 곳은 여기다.





The Catalog of Design Patterns



refactoring.guru 







아마 링크만 클릭하고 조금의 노력만 더해진다면 실무에서 쓰이는 코드들을 리팩터링 하면서 디자인 패턴을 제대로 배워 볼 수 있겠다. 내가 쓰는 중급 편의 지식도 대부분 여기서 파생되었다고 보면 되겠다. 그러나 내가 생각하는 것은 좀 더 Firmware 쪽 지식 base기에 디자인 패턴의 하부 단계를 생각할 수 있겠다. 조금 더 C에 가깝고, 리눅스 커널에 가깝다고 해야 할까?






지금까지 소개한 디자인 패턴은 사실상 모듈 디자인 패턴이다. 아키텍처 디자인 패턴은





10 Common Software Architectural Patterns in a nutshell


Ever wondered how large enterprise scale systems are designed? Before major software development starts, we have to choose a suitable…


towardsdatascience.com 







여기를 참고하여 인터넷 서핑으로 공부를 해야 하고, 그 상위의 시스템 디자인 패턴은 스스로가 갈고닦을 수밖에 없고, 나중에는 개인 경험 차이에 의해 다변화된다. 실무 프로그래밍 고급 편에 총정리를 할 생각이다. 그 사이 많은 시스템을 설계하고 만드는 수밖에 없다.






디자인 패턴 레이어가 햇갈리면 요구사항 분석 - 시스템 설계 - 아키텍처 설계 - 모듈 설계로 가는 V 모델을 보라.






지금도 많은 프로젝트를 하고 있지만 사실상 시스템 디자인 패턴은 아마존 클라우드로 귀결되고 있고, 그 비용을 낮추는 물리 시스템을 설계하는데 많은 시간을 쏟고 있다. 그게 내가 가질 차별점이라면 차별점일까...






따지고 보면 메이저 리그가 아닌 마이너리그에서의 비용 때문의 고민일 것 같지만, 자본주의 사회에서 똑같이 필요한 서비스를 제공한다고 했을 때 결국 승리하는 것은 적인 비용이라는 것은 누구나가 아는 사실.






단, 시간이 문제인데 "성공"이라는 것을 또 경험해보고 싶다면 그 시간을 어떻게 줄일지 고민해야 한다.






아직 1년 안된 신입 개발자가 폭풍 성장하는 것을 보면서, 결국 IT 기술 정립을 어떻게 해야 할지 몰라서 각자 목소리를 내고 있는 IT 기술을 학교로 돌려 보낼 수 있다고 자신한다. 






이미 많은 사람들이 노력하고 있기도 하고.

'진행 프로젝트' 카테고리의 다른 글

Creational Pattern 에 대한 썰  (0) 2019.01.22

구글의 AI는 뛰어나다. 물론, IBM 다음으로.


그 이유는 바둑 대결 같은 show는 이미 오래 전 퀴즈, 체스 분야에서 했고 이미 의료 진료에서 상용화를 이루어 국내 병원에 판매하고 있는 IBM


그러나 분야는 다르기에 동영상 추천 분야는 넷플릿스보다 구글이 뛰어나다고 느낀다. 정량적이지 않아 미안하지만 한 명의 유저로서.


솔직한 유튜버들의 수입 정보를 보다보면, 이 후 구글이 계속 추천해 준다.


치과의사 - https://www.youtube.com/watch?v=P_eZysqKK3A, 대졸직후 200~300, 전문의 일당 50, 20-1000, 교정 일당 80, 1600~2000, 지방급여가 많음, 기타 좋은 이야기 [구독각]


당구장 사장 - https://www.youtube.com/watch?v=FgsaC_5qlrE&t=43s , 한달 3000이상 기억. 솔직하고 개그 프로만큼 재밌음 계속 보게됨


IT 영업 - https://www.youtube.com/watch?v=dX7JrFmdg0o 490~970


철구 - https://www.youtube.com/watch?v=LLz8J-XsMEQ 아프리카 210~400, 유투브 3100,


킴성태 - https://www.youtube.com/watch?v=2zU8q-2Q4C4 140~740 연봉 6000


실리콘 벨리 - https://www.youtube.com/watch?v=9vrrNGEj2_k 연봉 2 가능



몇 달 되었다. 이미 지인 3분께 몇 주간 빌려드리고 다시 돌려 받은 것​


링크는


https://github.com/danielgindi/Charts



ChartsDemo-iOS Swift 그룹 아래 다음 개의 파일을 복사한다.

LineChart1ViewController

BalloonMarker

DemoBaseViewController


xib 복사하지 않고, interface builder 에서 view 추가하고 Custom Class

LineChartView 맞춘다. -> Module Charts 자동으로 들어간다.


LineChart1ViewController 열고 기존 리소스를 지우고, 다시 연결해 준다.

다음 세개를 연결한다.


    @IBOutlet var chartView: LineChartView!

    @IBOutlet var sliderX: UISlider!

    @IBOutlet var sliderY: UISlider!

    

    override func viewDidLoad() {

        super.viewDidLoad()


2개를 올렸으니 주석 처리해야할 것이 생긴다.


        chartView.rightAxis.enabled = false

        

//        [_chartView.viewPortHandler setMaximumScaleY: 2.f];

//        [_chartView.viewPortHandler setMaximumScaleX: 2.f];



    @IBAction func slidersValueChanged(_ sender: Any?) {

//        sliderTextX.text = "\(Int(sliderX.value))"

//        sliderTextY.text = "\(Int(sliderY.value))"


그래프 나옴.

Fin.


[이 포스트는 계속 업데이트 합니다.] --> 중단되었습니다. 보통 포스팅이 중단되면 관련 기술이 완전히 사장되었던지, 다른 포스트에 version 2가 있다는 의미 입니다.

 

2024년 1월 1일의 결정 : 단 하나의 프로젝트는 제외하고, 내가 혼자서 만드는 모든 프로젝트 SwiftUI 로 전격 교체!

내가 혼자서 만든 TakeTouch 는 바꾸지 못한다(내재화한 오픈소스가 방대하여 아마 8명 팀이 해도 1년은 넘게 걸릴거라 생각한다.)

 

 

 

==== 지난 글 ====

 

iOS에 대한 관심이 높아진 것인지? ^^;; 인기 급 상승하네. 이 포스팅은 내가 봐도 참 알차다.

---------------------------------------------------------------



1. 폰트 지정


label.font = UIFont.init(name: "NanumSquareOTFL", size: 16)

폰트 이름은

for family in UIFont.familyNames.sorted() {
    let names = UIFont.fontNames(forFamilyName: family)
    print("Family: \(family) Font names: \(names)")
}

샌프란시스코 폰트 다운로드(sf compact, sf pro)
https://developer.apple.com/fonts/

Fonts - Apple Developer
developer.apple.com 

나머진

https://brunch.co.kr/@jade/203

저작권 걱정없는 무료 한글폰트


한글날 기념 무료 한글 글꼴 포함 | 이제 매년 한글날이 되면 많은 기업들이 한글폰트를 내는 것이 좋은 홍보의 수단이 되는 듯 하다. 최근에 누구나 이용할 수 있도록 공개된 무료 한글 공개 폰트(글꼴)들을 정리해 보았다. 유료가 아니어도 예쁜 폰트가 참 많아졌다. 1. 네이버 나눔한글폰트 http://hangeul.naver.com/2016/nanum 가장 많이 사용하는 무료 한글 폰트가 아


brunch.co.kr/@jade/203 

2. UINavigationBar

색상 바꾸기

internal extension UIColor {
    convenience init(red: Int, green: Int, blue: Int) {
    assert(red >= 0 && red <= 255, "Invalid red component")
    assert(green >= 0 && green <= 255, "Invalid green component")
    assert(blue >= 0 && blue <= 255, "Invalid blue component")
    self.init(red: CGFloat(red) / 255.0, green: CGFloat(green) / 255.0, blue: CGFloat(blue) / 255.0, alpha: 1.0)
}

convenience init(rgb: Int) {
    self.init(
    red: (rgb >> 16) & 0xFF,
    green: (rgb >> 8) & 0xFF,
    blue: rgb & 0xFF
)}


override func viewDidLoad() {

    super.viewDidLoad()
    let navigationBarAppearance = UINavigationBar.appearance()
    navigationBarAppearance.tintColor = UIColor(rgb:0xffffff)
    navigationBarAppearance.barTintColor = UIColor(rgb:0x00aaee)
    navigationBarAppearance.backgroundColor = UIColor(rgb:0x00aabb)
}

숨기기

override func viewWillAppear(_ animated:Bool) {
    super.viewWillAppear(animated)
    UINavigationBar.appearance().isHidden = true
    self.navigationController!.isNavigationBarHidden = true
    self.navigationController?.navigationBar.isHidden = true
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    UINavigationBar.appearance().isHidden = false
}

3. iPhone Screen Resolution enum

//Device Native Resolution(Pixels) UIKit Size (Points) Native Scale factor UIKit Scale factor
//iphone XS Max 1125 x 2436 414x896
//iphone XS 1242 x 2688 375 x 812
//iPhone XR 828 x 1792 414x896
//iPhone X 1125 x 2436 375 x 812 3.0 3.0
//iPhone 8 Plus 1080 x 1920 414 x 736 2.608 3.0
//iPhone 8 750 x 1334 375 x 667 2.0 2.0
//iPhone 7 Plus 1080 x 1920 414 x 736 2.608 3.0
//iPhone 6s Plus 1080 x 1920 375 x 667 2.608 3.0
//iPhone 6 Plus 1080 x 1920 375 x 667 2.608 3.0
//iPhone 7 750 x 1334 375 x 667 2.0 2.0
//iPhone 6s 750 x 1334 375 x 667 2.0 2.0
//iPhone 6 750 x 1334 375 x 667 2.0 2.0
//iPhone SE 640 x 1136 320 x 568 2.0 2.0
//iPad Pro 12.9-inch
//(2nd generation) 2048 x 2732 1024 x 1366 2.0 2.0
//iPad Pro 10.5-inch 2224 x 1668 1112 x 834 2.0 2.0
//iPad Pro (12.9) 2048 x 2732 1024 x 1366 2.0 2.0
//iPad Pro (9.7-inch)1536 x 2048 768 x 1024 2.0 2.0
//iPad Air 2 1536 x 2048 768 x 1024 2.0 2.0
//iPad Mini 4 1536 x 2048 768 x 1024 2.0 2.0

extension CGPoint : ExpressibleByStringLiteral {
    public init(stringLiteral value: String) {
    let point = CGPointFromString(value)
    self.init(x: point.x, y: point.y)
    }
}

enum iPhoneScreen : CGPoint {
    case iPhone_X_XS = "{375, 812}"
    case iPhone_XSMax_XR = "{414, 896}"
    case iPhone_8Plus = "{414,736}"
    case iPhone_8_7_6sPlus_6s_6Plus_6 = "{375,667}"
    case iPhone_7_Plus = "{414, 736}"
    case iPhone_SE = "{320, 568}"
    case iPad_Pro_129 = "{1024, 1366}"
    case iPad_Pro_105 = "{1112, 834}"
    case iPad_Pro97_iPadAir2_iPadMini4 = "{768, 1024}"
}

쓸 때는 CGPoint 자체를 써도 되고, iPhoneScreen.iPad_Pro_129.rawValue.x 이렇게 써도 된다.



4. AUTOLAYOUT 맛보기

다음은 각 기 다른 회사의 채용 공고에 있는 iOS 개발자 자격 사항이다.


1. Objective-C, Swift, Auto Layout, Storyboard, 객체지향 등의 이해도가 있으신 분
2. swift, objective-c, auto layout
3. Swift , storyboard, auto layout 사용 경험자

Android 개발할 때는 FrameLayout 보다 RealativeLayout를 많이 쓰니 사실상 auto layout이 맞으나, 결국 아이콘은 xhdpi, xxhdpixxxhdpi 뿐 아니라, sw600dp, sw720dp 등 기억나는 것만 10개 이상의 layout 폴더에 각기 다른 pixel의 아이콘을 넣었었다. 그리고 기종을 체크해서 코드로 레이아웃을 다르게 구현했었다. 왕도는 없더라. 그래야 깨끗하게 나오니까. 삼성폰의 번들 아이콘이기도 했으나...

스타트업이나 중소기업을 보면 Andorid 보다 iOS로 시작하는 경우가 많다. 7~8년 전 내가 알던 안드로이드 폰 종류가 7000천 가지였는데 지금은 만가 지도 더 될 것 같다. 그래서 트러블 슈팅에서 오는 비용을 줄이기 위해 screen density가 단순한 iOS 먼저 개발하고 성공하면 Android를 하는 경우가 많았다. 같이 개발하더라도 Auto layout를 선호한다.

Android에서 autolayout 이 relative 스타일이라면, iOS는 constratins라 하겠다.


Constraints를 제대로 알려면


https://developer.apple.com/documentation/uikit/nslayoutconstraint





NSLayoutConstraint - UIKit | Apple Developer Documentation



developer.apple.com 
부터 보면 되겠지만


좀 더 쉽게 접근하려면 UITableView를 만들고 그 Cell을 코드로 구현하면 된다.


기초는 여기...
https://www.ioscreator.com/tutorials/prototype-cells-table-view-ios-tutorial-ios10
Prototype Cells in Table View iOS Tutorial


When using Table Views inside the Storyboard, prototype cells can be used to create some predefined or even custom layouts of the Table View Cells. In this tutorial we will create a basic Prototype cell, which includes an (optional) image and a title. This


www.ioscreator.com 











트러블 슈팅 팁.


unable to dequeue a cell with identifier
스토리 보드에서 Table View Cell의 Identifier 설정이 맞지 않는 경우.
let cell = tableView.dequeueReusableCell(withIdentifier: "여기", for: indexPath)
여기와 Identifier가 일치해야 한다.


굳이 cell을 붙이지 않더라도 TableView만 붙인 상태에서 테스트해 볼 수 있으니,
let cell: UITableViewCell = UITableViewCell(style:UITableViewCellStyle.subtitle, reuseIdentifier: "Cell")
이 코드로 테이블 뷰가 잘 보이는지 확인할 수 있다.


Could not cast value of type 'UITableViewCell'
self.tableView.register(CustomTableViewCell.self, forCellReuseIdentifier: "여기")

즉, Constraints 만드는 방법은 2가지

contentView.addConstraint(NSLayoutConstraint(item: value, attribute: NSLayoutAttribute.centerY, relatedBy: NSLayoutRelation.equal, toItem: self.contentView, attribute: NSLayoutAttribute.centerY, multiplier: 1, constant: 0))


contentView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|-[title]-[value]-|", options: [], metrics: nil, views: viewsDict))


다양한 옵션은

https://stackoverflow.com/questions/25413239/custom-uitableviewcell-programmatically-using-swift


Custom UITableViewCell programmatically using Swift


Hey all I am trying to create a custom UITableViewCell, but I see nothing on the simulator. Can you help me please. I can see the label only if I var labUserName = UILabel(frame: CGRectMake(0.0, 0...


stackoverflow.com 
를 참고하고 xcode의 autofix 기능을 이용하면 최신 코드로 변경이 가능하다.


맛을 봤다면, 이제 스냅킷을 쓰자.
https://github.com/SnapKit/SnapKit


SnapKit/SnapKit


A Swift Autolayout DSL for iOS & OS X. Contribute to SnapKit/SnapKit development by creating an account on GitHub.
github.com 



-
------------------- 나의 구글 블로그 글 옮겨서 통합 ------------------

 

Android에서 Androidmanifest.xml이 설계도 이 듯, iOS에서는 info.plist 가 비슷한 역할을 한다.

info.plist의 Launch screen interface file base name은 런치 스크린을

Main storyboard file base name은 처음 실행할 스토리 보드 이름을 지정한다.

 

스토리 보드도 xml 파일이다. 

 

<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14313.18" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">

 

처음 실행되는 스토리 보드는 initialViewController 체크박스에 체크를 해야 한다. 물론, GUI로 보여주지만 결국, 다음과 같이  XML이 바뀌는 것이다.

 

<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14313.18" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="QfJ-J6-o4q">

 

스토리 보드에서는 ViewController를 지정할 수 있다. 이제 어떻게 코드가 흐르는지 알 수 있다.

 

autolayout을 위해 스토리 보드에서 constraints를 지정할 수 있지만, 왜 굳이 코드로 해야 하는지는 깊게 설명하지 않고 싶지만 굳이 말하자면, 큰 프로그램이 되는 환경 속에서 UI 작업을 지속적으로 경험해보면 코드로 할 필요성을 느낄 수밖에 없다. 애플이 편하게 MVC로 만들어주긴 했지만 말이다.(안드로이드는 무조건 xml이지...)

개발자는 항상 플랫폼 테스터도 되기 때문에 (본디 디버깅은 재미있지만) 이후 재미없는 디버깅을 하게 될 가능성이 크다. 서버와의 싱크를 맞추려니 콜백 지옥에 빠지고 그 지옥에서 나로려니  MVC를  MVVM으로 바꿔야 한다. 결론은 코드라는 이야기.

 

초유의 관심사 AutoLayout, 1편에서 snapkit을 쓰자고 했다.

 

snapkit은 pod으로 설치하고

  pod 'SnapKit', '~> 4.0.0'

import SnapKit 만 하면 UIView와 그 하위 친구들에게 바로 쓸 수 있다.

 

var firstGroup : UIView 던

var btnVarious : UIButton이던

var iqr : UILabel이던

 

쉽게 constraints를 지정할 수 있다.

 

firstGroup.snp.makeConstraints { (make) in

            make.width.equalToSuperview()

            make.height.equalTo(29)

            make.left.equalTo(0)

        }

 

btnVarious.snp.makeConstraints { (make) in

            make.width.equalTo(29)

            make.height.equalTo(29)

            make.right.equalTo(btnQuestionMark.snp.left).offset(-1)

        }

 

iqr.snp.makeConstraints { (make) in

            make.width.equalTo(110)

            make.height.equalTo(28)

            make.left.equalToSuperview().offset(22)

        }

 

storyboard에서 만드는 것처럼 원하는 view에 add를 먼저 하고 제약사항을 만든다. 붙인 view가 바로 superview다. offset은 + 값과 -값이 있고 둘은 서로 반대 방향이다. 좌표계를 바꿀 수 있지만 보통은 좌측 상단이 0,0이니 어디가 + 방향 인지는 쉽게 알 수 있다.

 

     labelAmount.snp.makeConstraints { (make) in

            make.width.equalTo(52)

            make.height.equalTo(17)

            make.left.equalTo(amount.snp.left)

            make.top.equalTo(amount.snp.bottom)

        }

값을 직접 지정할 수동 있고, 다른 view의 snp를 얻어와서 맞춰줄 수도 있다.

 

그럼 어떤 값 지정이 가능할까? public class ConstraintMaker를 보면

    public var left: ConstraintMakerExtendable {

    public var top: ConstraintMakerExtendable {

    public var bottom: ConstraintMakerExtendable {

    public var right: ConstraintMakerExtendable {

    public var leading: ConstraintMakerExtendable {

    public var trailing: ConstraintMakerExtendable {

    public var width: ConstraintMakerExtendable {

    public var height: ConstraintMakerExtendable {

    public var centerX: ConstraintMakerExtendable {

    public var centerY: ConstraintMakerExtendable {

    public var baseline: ConstraintMakerExtendable {

    public var lastBaseline: ConstraintMakerExtendable {

    public var firstBaseline: ConstraintMakerExtendable {

    public var leftMargin: ConstraintMakerExtendable {

    public var rightMargin: ConstraintMakerExtendable {

    public var topMargin: ConstraintMakerExtendable {

    public var bottomMargin: ConstraintMakerExtendable {

    public var leadingMargin: ConstraintMakerExtendable {

    public var trailingMargin: ConstraintMakerExtendable {

    public var centerXWithinMargins: ConstraintMakerExtendable {

    public var centerYWithinMargins: ConstraintMakerExtendable {

    public var edges: ConstraintMakerExtendable {

    public var size: ConstraintMakerExtendable {

    public var center: ConstraintMakerExtendable {

    public var margins: ConstraintMakerExtendable {

    public var centerWithinMargins: ConstraintMakerExtendable {

 

이런 값들이 있고 스토리 보드를 쓰다 보면 거의 대부분 알 수 있는 것들이다. 주의할 점은 제약 사항 충돌이다. left와 right 제약 사항을 동시 지정해보면 쉽게 알 수 있을 것이다.

 

SnapKit의 원리는 간단하다. 다음과 같이 Int Values를 array에 넣고 나중에 for 문을 돌면서 UIKit의 API를 이용(1편 참조)하여 제약 사항을 지정하는 것이다.

 

    internal static var none: ConstraintAttributes { return 0 }

    internal static var left: ConstraintAttributes { return 1 }

    internal static var top: ConstraintAttributes {  return 2 }

    internal static var right: ConstraintAttributes { return 4 }

    internal static var bottom: ConstraintAttributes { return 8 }

 

10진수로 더해도 되지만, 본디 2진수의 각 자릿수가 더 편하다.

1, 2, 4, 8 이 각각 2진수에서 1, 10, 100, 1000이다. 그래서 2진수로 1111인 15의 값은

    internal static var edges: ConstraintAttributes { return 15 }

에 대입되어 있다.

 

size는 width, height다. 

 internal static var size: ConstraintAttributes { return 192 }

 

   internal static var width: ConstraintAttributes { return 64 }

   internal static var height: ConstraintAttributes { return 128 }

 

최고수는 

  internal static var centerWithinMargins: ConstraintAttributes { return 786432 }

라서 UInt(32비트에서만 2,147,483,647 64비트에서는 

18,446,744,073,709,551,615

... 믓튼 충분)에 담겨있다. 모든 수를 보려면(internal struct ConstraintAttributes : OptionSet... 참조)

 

이런 속성들을 

 

internal static func makeConstraints...

internal static func remakeConstraints...

internal static func updateConstraints...

internal static func removeConstraints(item: LayoutConstraintItem) {

        let constraints = item.constraints

        for constraint in constraints {

            constraint.deactivateIfNeeded()

        }

    }

 

를 이용하여 적용한다.

 

 internal func activateIfNeeded(updatingExisting: Bool = false) {

        guard let item = self.from.layoutConstraintItem else {

            print("WARNING: SnapKit failed to get from item from constraint. Activate will be a no-op.")

            return

        }

        let layoutConstraints = self.layoutConstraints

 

        if updatingExisting {

            var existingLayoutConstraints: [LayoutConstraint] = []

            for constraint in item.constraints {

                existingLayoutConstraints += constraint.layoutConstraints

            }

 

            for layoutConstraint in layoutConstraints {

                let existingLayoutConstraint = existingLayoutConstraints.first { $0 == layoutConstraint }

                guard let updateLayoutConstraint = existingLayoutConstraint else {

                    fatalError("Updated constraint could not find existing matching constraint to update: \(layoutConstraint)")

                }

 

                let updateLayoutAttribute = (updateLayoutConstraint.secondAttribute == .notAnAttribute) ? updateLayoutConstraint.firstAttribute : updateLayoutConstraint.secondAttribute

                updateLayoutConstraint.constant = self.constant.constraintConstantTargetValueFor(layoutAttribute: updateLayoutAttribute)

            }

        } else {

            

NSLayoutConstraint.activate(layoutConstraints)

            item.add(constraints: [self])

        }

    }

 

UI기초 전편의 링크를 보면 constratins를 적용하는 것이 번거로웠다.

 

contentView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|-[image(10)]", options: [], metrics: nil, views: viewsDict))

contentView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:[labTime]-|", options: [], metrics: nil, views: viewsDict))

contentView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|-[username]-[message]-|", options: [], metrics: nil, views: viewsDict))

contentView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|-[username]-[image(10)]-|", options: [], metrics: nil, views: viewsDict))

contentView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|-[message]-[labTime]-|", options: [], metrics: nil, views: viewsDict))

 

혹은, 

 

        NSLayoutConstraint.deactivate([self])

        let newConstraint = NSLayoutConstraint(

            item: firstItem,

            attribute: firstAttribute,

            relatedBy: relation,

            toItem: secondItem,

            attribute: secondAttribute,

            multiplier: multiplier,

            constant: constant)

.

.

.

이런 식의...

 

그래서 쉬운 문법으로 AutoLayout을 위한 constraints를 쓸 수 있다는 점이 참 매력적인 SnapKit이다. , .snp.makeConstraints { (make) in ...    { $0. ...

 

'Swift & Python 실무 > {APP} SOCANNER APP' 카테고리의 다른 글

스토리보드 이동 방법  (0) 2019.02.14
제주도 항공 촬영  (0) 2019.01.19
C의 struct와 Swift 의 struct  (0) 2019.01.19
userDefault 활용  (0) 2019.01.16
Practical Swift  (0) 2019.01.14

2편이다.


각 언어의 특징으로만 보라는 이상한 말


내가 좋아하는 책이라 여러 권을 산 책이 있다. Objective-C라는 책인데 난 2권 다 있다. 물론, 내가 책을 쓸 때도 이 책의 영향을 많이 받았다.(2.0버전) 마크 달림플(Mark Dalrymple), 스콧 내스 터(Scott Knaster), 와카르 말릭(Waqar Malik). 실무 개발자 3인방의 내공을 책으로도 크게 느낄 수가 있다. 사실, 실무를 오래 한 프로그래머가 깊게 파보면 다른 프로그래밍 언어 책과 큰 내용 차이는 없다. 작은 두 가지의 의견을 새롭게 낼 뿐이었다. 그러나 그 작은 의견은 아는 사람이 보면, 프로그래밍의 정수를 담은 것이라 하겠다. indirection layer와 이 세상의 문제를 완벽하게 해결해 줄 수 있는 단일 프로그래밍 언어는 존재하지 않는다는 것이다. 그래서 각 언어의 특징은 그 언어로 이해하라는 식의 글귀가 있었다.(책 뽑아서 보면 되지만 너무 아래 깔려 있다 ㅠ)


그중 후자는 시중의 책에서 가장 많이 인용되어 잘못 생각하는 사람이 많이 생겨나는 것 같아서 몇 글자 적어 본다. 다른 책이 원조일 수도 있겠지만, 그들의 프로그래밍 역사로 봤을 때 벤치마킹이 분명하다. 후자는 프로그래밍 언어는 바로 그 언어의 특징으로만 봐야 한다는 말이다. 어느 책이나 이 말을 돌려서 하던지, 직접적으로 적던지... 비슷하게 쓴다.


미국에서 사는 사람들의 문화, 한국 사람의 문화. 다르고 언어도 그 문화의 다름과 같이 1:1로 완벽하게 대치될 수 없는 부분이 있다. 그러나 뿌리가 판이하게 다르고 역사도 너무도 깊다. 그에 반해 컴퓨터의 역사를 깊지도 않고 그 뿌리는 결국 인텔 프로세서다. 혹은, ARM Instruction Set이다.


3인방이 말한 것도 한 가지 언어를 배울 때 집중해서 깊게 이해라 하는 뜻이지. 이기종의 언어에서 말하는 똑같은 개념까지도 다르게 표현하라는 뜻은 아니다. 한국말에 있는 부모님 마음속의 한, 인연 등 문화적 관점에서 이해해야 할 부분도 있거니와. 영어 사전에서 쉽게 찾을 수 있는 한국말은 같다고 봐도 무방하듯이 각 프로그래밍 언어의 비슷한 부분은 비슷하게 이해하면 된다.


상속, 다형성, 캡슐화, interface, delegate, abstract, protocol


요즘 코딩 교육을 일반 교사가 직접 배워서 하기 때문에 가끔 지인을 만나 비 전공자 교사의 고충을 듣는다. 사실 나도 코딩 교사가 따로 있을 줄 알았는데 말이다. 어차피 모든 지식은 학교로 다시 돌려보내야 하는 것이 맞으니 몇 가지 적어 본다. 교사는 워낙 똑똑한 사람들이라 이미 지식은 꽉 차 있다. 두리뭉실한 개념을 이 분야의 묵은지가 연결만 시켜주면 되겠다. 비공개로 출판한 책에서 밝힌 적이 있는데, 글로 쓰는건 제대로 전달되지 않지만 끄적여 본다.(장자 윤편으로 검색해서 관련 글을 보시길)


어려운 개념들은 쉽게 말해도 관계없고, 또 그게 많다.


상속은

복사/붙여 넣기.


내가 프로그래밍 수업에서 상속을 가르칠 때도 이렇게 간단히 말한다.


썰을 더 풀면,

다형성은 배열 돌려서 동시 다발적으로 실행하게 만들기 위함이라고 했는데, 사실 실무에서는 그게 다다. 

void pointer가 java에서 object type이다. 그래서 모든 객체를 가리킬 수 있고 그것을 다형성이라 부른다. 


간단한 이론이지만 이것으로 메시지 큐를 구현하고, 또 애플이나 안드로이드 앱 프레임워크를 만든다. 어떤 알림이 오면 각 앱을 list 에 등록하고 for문을 돌면서 브로드 캐스팅 메시지를 날리게 되는 것이다. 


Xcode에서 싱글뷰 어플 test 하나 만들고 Viewcontroller에 넣으면 된다.


우선 해당 글에 있던 델이게이터 예제.

//

//  ViewController.swift

//  test

//

//  Created by Junho HA on 2018. 10. 5..

//  Copyright © 2018년 hajunho.com. All rights reserved.

//


import UIKit


class ViewController: UIViewController {


    override func viewDidLoad() {

        super.viewDidLoad()

        // Do any additional setup after loading the view, typically from a nib.

        let a : implementMe = 지나가던사람()

        a.날사랑하니()

    }

}


protocol implementMe {

    func 날사랑하니() -> Void

}


class 남자 : implementMe {

    func 날사랑하니() {

        print("...")

    }

}


class 관심있던남자 {

    func 날사랑하니() {

        print("어")

    }

}


에서 implementMe 를 상속받는 친구는 implementMe type으로 생성가능하다. 추상화된 포인터로 보면 되겠다.


행인을 하나 추가하고 배열로 선언하면 다음과 같다.


//

//  ViewController.swift

//  test

//

//  Created by Junho HA on 2018. 10. 5..

//  Copyright © 2018년 hajunho.com. All rights reserved.

//


import UIKit


class ViewController: UIViewController {


    override func viewDidLoad() {

        super.viewDidLoad()

        // Do any additional setup after loading the view, typically from a nib.

        let a : [implementMe] = [ 지나가던사람() , 행인1() ]


        a[0].날사랑하니()

        a[1].날사랑하니()

    }

}


protocol implementMe {

    func 날사랑하니() -> Void

}


class 남자 : implementMe {

    func 날사랑하니() {

        print("...")

    }

}


class 관심있던남자 {

    func 날사랑하니() {

        print("어")

    }

}


class 지나가던사람 : 관심있던남자, implementMe {

}


class 행인1 : implementMe {

    func 날사랑하니() {

        print("누구슈")

    }

}


a[0], a[1] 은


   for x in a {

            x.날사랑하니()

        }


로 치환 가능하다.


결국, 인터페이스 하나 던져주고 아래에서 다 구현하라고 하고 어떻게 구현했던 상위 포인터(Object  던 Void Pointer던 상위 포인터든)로 하위 구현부의 메소드를 for 문 돌려서 실행시켜 주면,


모든 앱의 이름도 반환 받을 수 있고,

모든 앱을 실행시킬수도,

모두 지울 수도,

모든 앱의 메시지 수신부에 메세지를 보낼 수도 있다.


다형성은 간단한 개념이지만 매우 강력한 아키텍쳐 패턴의 주요 개념이다. 참고로 우리가 패턴이라고 하는 것들은 대부분 모듈 패턴이다.


캡슐화는

변수 마음대로 못 바꾸게 하기.

가령 속도라는 변수가 있어서 자동차를 제어한다면 그 속도가 0보다 크고 200보다 크게 세팅되어야 한다는 조건을 걸어 주는 게 좋다. 그래서 변수를 직접 제어하지 안혹, getter/setter를 쓴다.


인터페이스는 상속자(상속받은 무언가)가 구현해야 할 껍데기다.

앱스트랙트는 껍데기에 살을 좀 붙인 것이다.


껍데기는 다중 상속이 가능하다.

살이 붙은 것(내용이 있는 것)은 다중 상속이 불가능하다.


다중 상속(복사/붙여 넣기) 해봤자. 껍데기는 껍데기일 뿐이다. 구현해야 할 것만 많아진다.

제약 사항이 많다는 것은 누가 편하게 쓰라고 만들어 놓으면서 제약을 걸어 놓은 것이다.


가령 허허벌판 일 때는 규칙이 없지만, 놀이터를 만들어 줄 테니 아이들만 뛰어놀게 하라는 제약처럼.


프로토콜은 인터페이스와 같다. 다만, 다른 애들이 대신 구현해 줄 수 있다.


protocol implementMe {

    func 날사랑하니() -> Void

}


라는 프로토콜이 있다. 프로토콜은 껍데기다.

Protocol methods must not have bodies


그럼 이 프로토콜(인터페이스, abstract class)를 상속하는 클래스는 무조건 구현을 해 줘야 한다.

class 남자 : implementMe {

    func 날사랑하니() {

        print("...")

    }

}

안하면,

Type '남자' does not conform to protocol 'implementMe'

맞지 않는다고 한다.


만약 구현하고 싶지 않은 누군가가 있다고 하자

class 지나가던사람 : implementMe {

}

이 경우엔 다른 클래스가 구현해도 된다.


class 관심있던남자 {

    func 날사랑하니() {

        print("어")

    }

}


class 지나가던사람 : 관심있던남자, implementMe {

}


관심있던 남자가 날사랑하니()를 구현해 놓았었으니 복/붙하면 implementMe의 요구사항을 충족시켜준다는 뜻. UITableViewDelegate, UIScrollViewDelegate 같이 복잡한 녀석들로 이런 개념으로 쉽게 분석이 가능하다. 다른 복/붙(상속)없이 해당 델리게이트만 상속하면 구현해야할 수많은 stub이 있다.



위에서 말한 모든 개념은 사실 아래의 요구사항으로 생겼다.


1. 잘 만들어 놓으니(framework, library, api,...)

2. 네가 맘대로 복/붙해서 가져다 써(상속)

3. 그런데 몇 가지는 네가 알아서 넣어야 하니까 구현을 해야 할 거야 내가 정해놓은 규칙대로 (인터페이스, 프로토콜, 앱스 트렉트 클래스/매소드)

4. 모두 구현하기 싫으면 다른 애들이 구현한 거 그대로 상속(복사)해서 써(델리게이트)

5. 내가 만든 것의 값은 마음대로 못 바꿔(접근 제한자, 캡슐화) 수치가 0이 되면 사람이 죽을 수도 있으니 0이 들어오면 에러를 발생시켜버릴 때(setter, assert)


그래서 사실 따지고 보면 다 같은 개념은 아니다.


그러나 실무에서는 비슷하다.


모듈을 보는 단계에서는 완전히 다르고,

아키텍처를 보는 단계 해서는 부분 부분 다르고,

시스템을 보는 관점에서는 완전히 같다.


프로그래밍은 어차피 메모리와 CPU의 장난.


lambda, 함수형 프로그래밍, 클로저

 

셋 다 같은 말이다.


모든 함수는 y=f(x) 에서 나왔다.


세상 간단.


함수형 프로그래밍은 람다 대수에서 나왔다.


람다 대수의 핵심은 무언가를 추상화하는 방법과 구체화 하는 방법에 대한 철학이고.

특징은 익명 함수라는 것.


클로저는 기본적으로 함수 포인터다.


    func 주문받기() -> [String] {

        let 주문목록 : [String] = ["짜장면", "짬뽕"]

        return 주문목록

    }


swift 에 이런 함수를 만들었다면 C의 함수포인터로


String (*v)();

v = 주문받기


이렇게 만들 수 있을 것이다.


그러나 swift 는 문법이 쉽다.


let v = 주문받기

var v = 주문받기


쉽게 만들 수 있다. 배가 고프니 중국집을 하나 만들어 본다. 배가 고파 자장면이 아닌 입에 촥 감기는 짜장면을 불러 본다.


class 중국집 {

    func 주문받기() -> [String] {

        let 주문목록 : [String] = ["짜장면", "짬뽕"]

        return 주문목록

    }

}


프로그래밍은 많은 사람들이 작업을 하기 때문에 수많은 클래스에 수많은 함수가 있다. 클래스는 메모리에 없으니 생성해서 만들어 줘야 함수를 쓸 수 있다.


let a : 중국집 =  중국집()

let b = a.주문받기()


자바였다면,

중국집  a = new 중국집();

이었겠지.


클래스 생성없이 메모리에 바로 생성시키는 방법도 있다. primitive type, new, malloc, static

static 은 swift에도 있으니


  static func 주문받기() -> [String] {

        let 주문목록 : [String] = ["짜장면", "짬뽕"]

        return 주문목록

    }

로 선언하면


print(중국집.주문받기())

가 가능하다.


내가 주문하려면, 파라미터를 넣고

  func 주문받기(s : [String]) -> [String] {

        let 주문목록 : [String] = s

        return 주문목록

    }


 let c : [String] = ["짜장면", "짬뽕"]

 print(a.주문받기(s: c))


혹은


  print(a.주문받기(s: ["짜장면2", "짬뽕2"]))

로 하면 된다.


위의 위키피디아 링크 "람다대수"를 보면 함수가 반드시 이름을 가질 필요는 없다. 는 구절이 있다.

b가 그렇다. print(b) 도 되지만, a.주문받기() 혹은 print(a.주문받기(s: ["짜장면2", "짬뽕2"])) 처럼 b를 안 써도 된다. b가 생긴다는 것은 상태 변수 혹은 속성 혹은 멤버변수 혹은 프로퍼티(다 같은 말이다)가 생긴다는 말인데 b 를 안쓰니 함수형 프로그래밍의 특징이 하나는 상태값을 저장하지 않는 것으로 귀결된다. C/C++, Objective-C, C#, JAVA, SWIFT 모두 함수형 프로그래밍 언어의 특징을 구현할 수 있다. 그러나 하나의 프로그래밍 패러다임만 구현하지 않는다.


이 상황에서 주문하는 쪽은 상태를 가질 필요가 없다(중국집 전화번호만 있으면 된다) 그러나 중국집은 주문 목록은 있어야 한다.



한타임 쉬고. <밥먹음 ㅋㅋ> 배부르니 중국집이 하기 싫어진다.


자, 여기까지 하고 문법 짚고 가보자.

보면, 클로저는

(parameters) -> return type in

statements

}

이렇게 선언한다고 한다.


swift 에서 함수 선언은


func #name(parameters) -> return type {

        function body

}


이랬다. func와 이름이 사라지고 {} 가 바깥으로 나와버려서 function body 시작점을 몰라 in 이 들어갔다.

별거 없다.


이제 중국집을 다시 만들고, 고객의 소리를 받아보자.


class 중국집 {

    private var 주문목록 : [String] = []

    static func 고객소리(x : ()->Void) {

        x() //고객의 소리는 x, 실행 명령어는 ()

    }

}


고객의 소리는 이렇게 만드는데,

    func name() -> Void {

            print("짜장면 더 맛있게 해주삼")

        }

        중국집.고객소리(x: name)


앞 서 말했 듯이 내가 func를 가질 필요는 없겠다.


중국집.고객소리(x: {})

중국집.고객소리(x: { () -> Void })

중국집.고객소리(x: { () -> Void in print("짜장면 더 맛있게 해주삼")})


그런데 () -> Void 이거 왠지 결국엔 C의 함수포인터랑 같다. 안돼! 난 최신 언어라구.


중국집.고객소리(x: { print("짜장면 더 맛있게 해주삼")})


이렇게도 가능하겠다.


        중국집.고객소리(x: { print("짜장면 더 맛있게 해주삼")

            print("짬뽕은 더 맵게")

        })


결국 실행은 사장이 하는 거고 구현을 클라이언트(함수를 호출하는 사람)이 하게 되었다. 그리하여 파라미터도 사장이 넣을 수 있다. 사장의 성깔이 좋은지 아닌지 중국집 사장이 직접 넣어보자.


class 중국집 {

    private var 주문목록 : [String] = []

    static func 고객소리(x : (Bool)->Void) {

        x(true)

    }

}


성격이 좋다고 넣었다. 그러면 고객은 한마디 더 할 수 있다.


        중국집.고객소리(x: { (사장성깔좋아) in

            print("짜장면 더 맛있게 해주삼")

            print("짬뽕은 더 맵게")

            if(사장성깔좋아) { print("진짜 맛없어요")}

        })


이렇게 클로저가 탄생하게 되었다. UI 기초 2편을 써야 하는데 스냅킷 내용이 반 이상이라. 클로저를 먼저 짚고 넘어가야할 것 같아서. 물론, 축약 안하고 써도 된다.


        중국집.고객소리(x: { (사장성깔좋아) -> Void in

            print("짜장면 더 맛있게 해주삼")

            print("짬뽕은 더 맵게")

            if(사장성깔좋아) { print("진짜 맛없어요")}

        })


그리고 사실 프로그래밍 할 때 이런 프로그래밍 언어적 특성이나 모듈 패턴을 몰라도 아키텍처만 잘 짜면 굳이 축약 코드로 도배 안해도 충분히 재 사용성이나 메모리 사용량은 감소한다.


결국 임베디드, C/C++을 해야 언어를 제대로 이해할 수 있다. 기초 서적은 외서를 보지만 가끔 국내 서적도 여러권 가서 내가 이해한 것이랑 비교해 보는데 생략된 부분이 너무도 많다. 물론, 나 역시도 써봐서 싣고자 했는데 까먹고 못 실었던 내용이 많으니... 비슷한 경우일 수도 있겠다.


그러나 람다 대수의 위키 페이지를 참고하는 게 함수형 프로그래밍을 더 확실히 이해할 수 있는 지름길이라 하겠다. fxJAVA 도 함수형 프로그래밍인데,...


사실 수학을 떠나, 프로그래밍 언어에서 완전히 함수형으로 된다는 것은 메모리 관리가 완전히 순차적으로 되어야 한다는 말이다. 메모리 청크 찾는 거야 운영체제 단에서 어쩔 수 없다고 해도 그 상위에서는 정말 순차적으로 들어가야 한다. 그래야 데이터 무결성도 지켜지고 액세스 속도도 빠르다.


뭐, 응용 프로그래머야 함수형 프로그래밍 흉내만 잘 내어도 쓸데없는 상태 변수를 만들지는 않겠지만, 결국 언어를 만든 사람이 적절한 타이밍에 메모리 관리를 효율적으로 하는 게 중요하다고 생각한다.



최근 코틀린이 아닌 자바를 사용하는 안드로이드 개발자가 iOS 개발을 하고 싶다고 하여 이야기 한 내용을 적어 둔다. 글은 2개로 쪼갠다.



1. MAC을 안 사도 된다.


이전에 포스팅 올렸다가 지워서 캡처 화면은 없지만 인터넷 뒤지니 자료가 많았다. 삼성 시리즈 9 노트북, VMWARE 위에 시에라 버전 올리고 XCode로 해 보았다. 전혀 문제없다. 맥의 커맨드 키는 컨트롤키 기능의 일부를 가져갔다고 생각하면 되고(cmd+C, cmd+V처럼) 맥의 옵션 키는 알트키(Alt, @)로 생각하면 금방 적응될 것이다. 맥이 있었지만 3개월가량 삼성 노트북으로 iOS 앱 개발했다.


2. 적응


맥의 프로그램 실행은 대부분 cmd+space bar를 눌러서 실행한다. 윈도에서 윈도키를 누르고 앱 이름을 실행하는 것과 같다. 윈도에서 Ctrl+Shift+ESC를 눌러 실행하는 프로세스 모니터는 Activity monitor란 이름이니 커맨드+스패이스 바를 통하여 실행하면 된다. 나머지는 우분투 리눅스 배포판과 창 모양, 창 닫기 위치, bash shell(맥에서는 terminal)이므로 사용하기 쉬울 것이다. 바꾸자. 맥으로. 오버워치 때문에 윈도우는 무조건 써야하니 하나 더 사자는 말


윈도우의 익스플로러는 finder 이며, 윈도우처럼 쉬프트 우클릭으로 쉘을 바로 열 수 있는게 아니라 몇가지 작업을 좀 해줘야 한다. 그리고 윈도에서 cmd 말고 powershell을 쓰듯이 맥은 기본 터미널 말고 iterm2를 쓴다. 거기에 zsh를 더해주면 더 좋다. 화면이 좁으니 모니터를 더 구입하는 것보다 bettersnap tool 같은 앱을 연결해서 창을 다룬다. 윈도 유저는 많은 모니터를, 맥 유저는 그냥 맥북 프로에 창 관리를 잘 하는 차이라고 보면 되겠다.



3. SWIFT


우선, ARM Firmware를 하는 내 입장에서는 JAVA나 C/C++, SWIFT가 모두 똑같은 언어로 보인다. PYTHON 은 perl이나 bash shell script 정도로 보이고 ^^;; 인터넷 서핑 공부법으로 편하게 공부하면 되지만 몇 가지 팁을 적어 본다.


(1) module, framework


module은 application 이나 framwork 을 말한다. Andoird에서 Project 와 같은(비슷하다는 말을 "같은"으로 표현하여 더욱 접근 장벽을 더 낮추겠다.) 개념이다. Eclipse에서 여러 Project를 하나의 workspace에 띄우는 것과 같다. Visual Studio 의 Project 개념. 더 큰 개념은 Solution이고 XCode에서는 그것을 workspace라고 부르니 결국 Eclipse의 workspace랑 같다. Android studio 에서는 gradle로 다양한 라이브러리를 import 한다. gradle의 그 한줄이 module, 또는 framework 이라고 보면 되겠다. 즉, framwork은 라이브러리다.



(2) cocoa Pods


cocoa는 STL이나 GLIBC처럼 표준 라이브러리 집합이다. swift 하는 분은 서버 개발자나 iOS 개발자, 특히 모바일 개발자가 많다고 생각된다. iOS는 UIKit을 쓴다. UI 프레임웍은 다음을 참고!


https://developer.apple.com/videos/frameworks/ui-frameworks

Frameworks - UI Frameworks - Videos - Apple Developer


developer.apple.com 



그리고 node.js에 npm이 있고, react에 yarn이 있고, fedora의 yum, ubuntu의 apt 가 있듯이 맥에는 brew 라는 패키지 관리자가 있다. brew를 이용해서 cocoapods를 설치할 수 있는데 pod은 라이브러리 관리 프로그램이다. pod 설치 후 pod init 하면 Podfile이 생성되고 해당 파일에 pod 'SwiftyJSON', '~> 4.0' 와 같이 패키지명을 적어주고 pod install 하면 라이브러리를 설치해 준다. 지우는 명령어는 따로 없고, Podfile에서 삭제하고 pod install 로 지운다. 현재 설치된 버전은 Podfile.lock에 저장된다. 설정파일 2개로만 관리하니 많이 편리하다. workspace 파일(각 project를 관리하는)이 없는 경우 자동 생성해 준다.




(3) 접근 제한자


2 때는 public, private, internal 만 있어서 비슷했는데 3버전 부터 open, fileprivate이 늘어났다. 자바에서의 public 은 swift의 open과 같다. 


https://docs.swift.org/swift-book/LanguageGuide/AccessControl.html

Access Control — The Swift Programming Language (Swift 4.2)


docs.swift.org 




(4) 함수 선언



void 리턴값은 아예 적지 않는다.

func stringMetohd(source : [String]){

for a in source {

print(a)

}

}


var weekdays : [String] = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"]


stringMetohd(source: weekdays)






모든 프로그래밍 언어에 y=f(x) 개념이 있듯이 스위프트도 함수가 기본이다.


func square(n:Int) -> Int {…}


로 함수 선언을 한다.


자바에서 public int square(int n) {...} 겠다.


C에서 함수포인터가 JAVA에서 인스턴스 변수로 편하게 객체를 대입하듯이


swift에서는 더 쉽게 할 수 있다.


let a=square


변수 선언은 var나 let을 쓸 수 있는데, let은 C에서 const, java에서 final과 같다.


물론, 자동 자료형 casting이 되지만 중급 이상 프로그래머는 알 것이다. 결국 자료형을 컨트롤해줘야 한다는 것을(뭐 frontUI만 짜면 별 상관 없겠지만 통신 기능만 들어가도 객체 직렬화 때문에 고려할 수 밖에)






믓튼, 이걸 더 쉽게 쓸 수 있다.


var b={(n:Int) -> Int in return n*n}


b(3) 하면 9가 나온다.






더 쉽게 쓸 수도 있다.


var c:(Int) -> Int


c={$0 * $0}


c(3)






bash shell programming을 많이 했던 사람에게는 별 이상할 게 없다.






Activity = ViewController


List View = Table View


Function Pointer, Instance = closer + new programming rules라고 보면 된다.


등 용어가 바뀌는 게 있지만 사실 안드로이드에게 바뀐 건 API 네임뿐.


애플이 삼성 베끼고, 삼성이 애플 베끼듯이 정책이 결국 requirement인데 requirements가 같아지다 보니 그걸 구성하는 system, architecture, module도 같아질 수밖에 없다. 즉, 메커니즘도 별반 차이 없다는 이야기. 애플이 파워칩을 계속 생산했으면 모르겠으나 어차피 Intel base고 각 회사 엔지니어들이 서로 이직을 하는 이상 바뀌는 것은 이름뿐일 거라는.






(5) Array


선언 방법은 다양하다.


var a = [Bool]()


var b : [Int] = []


a = [true, false, (3==3)]


var c = Array(repeating : true, count : 5)


var d : [Int ] = [1, 2, 3, 4]






이와 같이 선언을 먼저하고, 값을 넣는 방법도 있다.


개인적으로 변수가 nil을 포함한다는 개념인 Optional(?)이 있으니


C/C++과 비슷하게


var e : [Character]? = nil 을 선호한다.






배열을 JAVA의 ArrayList 처럼


var chart : [Character] = ["A", "�"]


chart.append("d")


chart += ["4", "5"]


chart.insert("h", at: 1)


chart.remove(at: 2)


편하게 넣었다 뺐다 할 수 있으니 자주 쓴다.






(6) for loop


()가 없는 점이 다르다. 


var weekdays : [String] = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"]






for index in 0...6 { //for index in 0..< 7 { 요렇게 해도 된다.


print(weekdays[index])


}






for index in 0...(weekdays.count-1) { //이렇게도


print(weekdays[index])


}






for day in weekdays {


print(day)


}






이런 식으로 쓴다. JAVA에도 for(String a : Iteratores), C++에서 for each(String a in ...) 하고 쓰는 것과 같기 때문에 편하게 볼 수 있다. 다만 ... , ..< 문법이 좀 생소할테지만 쓰다보면 더 직관적라는 것을 알게 된다.






(7) enum


enum integers : Int {


case one


case two


case three


}






print(integers.one.rawValue)


0


보통 enum 은 rawValue를 뽑아내기 위해 쓰는 개념이 아니긴하지만 이렇게 값을 뽑아낼 수 있는 방법이 있다는 뜻.






(8) casting


자바에서는 (String)을 했지만 as를 쓴다.


value as! Int


같이.






4. 조금 더...


struct 는 메소드 없이 멤버변수만 있는 자료형, 


struct myStruct {


var a : String?


var b : Int?


}






var c = myStruct()


c.a = "hello"


print(c.a!)






class의 경우 메소드 포함. Swift 용어로는 프로퍼티, 펑션이 둘 다 있는 class, 프로퍼티만 있으면 struct . 이 정도 개념이면, 맥으로 개발하는데 별 무리 없이 금방 적응하리라 생각된다. JAVA 던, 코틀 린이던, Swift 던 base 코드는 어셈블리랑 C일 수밖에 없어서... 다만 그들이 쌓아 올린 개념이 거대한 프로그램(프레임웍)인 경우 안 무너지기를 바라지만. 내 경험상 칩 단까지 디버깅을 해야 하는 상황도 오기 때문에 결국 안 무너지지는 않는다.






그냥 프런트 UI에 집중하고, 아키텍처나 모듈 단위를 벗어나지 않는 범위에서 디자인 패턴으로 개발자들끼리 싸우게끔 해서 시스템을 못 보게 하는 게 공룡 기업이 하는 방식이다. 






끝으로 대부분의 상황에서 폴링 방식보다 인터럽트 방식이 좋듯. 함수 포인터로 콜백을 구현하듯이 인터페이스를 잘 뽑으면 된다. 그 콜백이 옵서버가 되고 그런 옵서버를 편하게 만들어 주는 API 라이브러리를 사용하면 그게 곧 반응형 프로그래밍이다.






내 책에서도 밝혔지만 사실 더 편한 건 그런 개발을 알아서 다 해주는 개발자 API를 쓰는 기업 사장이 최고의 프로그래머!




http://www.yes24.com/24/Goods/42800973?Acode=101


실무 프로그래밍 초급편에 문제 풀이를 해 달라는 요청이 있었기에 씁니다.


1. 다음은 실행 가능한 코드입니까? 

#include <stdio.h>

int main()

{

             printf("Hello   World\n");

             extern   int s;

             printf("%d\n",   s);

             return   0;

}

int s = 88;


실행 가능합니다. 많은 프로그래머가 전역 변수는 함수 밖에서 선언해야 한다는 규칙으로 알고 있고, 인터넷에도 관련해서 잘못된 포스팅이 수십 건은 되는 것 같아서 책에 싣게 되었습니다. 물론, 이 소스 하나로 절차지향 프로그래밍에 대한 개념 설명시 이용하기도 합니다. C는 사실 객체 지향 언어입니다.


2. 다음은 포인터 입니까? 배열 입니까? 

int (*s)[8];


포인터입니다. 8의 크기를 갖는 배열의 주소를 지칭하는 포인터입니다. 실무 프로그래밍을 위해 *, &를 알고 관련 개념 이해를 위해 만든 문제입니다. 

int sora[8] = {0, 1, 2, 3, 4, 5, 6, 7};

int(*s)[8];

s = &sora;

printf("%d", (*s)[2]);

하면 두번째 값이 출력됩니다.



3. 다음 두 코드의 차이점은 무엇입니까? 

int *s();

void (*s)();


전자는 포인터 함수, 후자는 함수 포인터입니다. 전자는 int* s(); 로 int형 포인터를 반환하는 함수의 선언입니다. main() 함수 뒤쪽에 함수 선언 후 printf("%d", *s()); 로 쓸 수 있습니다. s() 로 함수를 실행하면, 주소 값이 넘어 오는데 해당 주소값에 있는 실제값을 * 연산자를 이용해서 보여줄 수 있습니다.

int* s()

{

int soul = 4;

return &soul;

함수 포인터는 반환 값이 같고 인자 선언이 같은 void myFunc() { } 와 같은 함수를 ss = myFunc; 로 지정할 수 있는 포인터입니다. 함수의 주소를 가리키는 포인터입니다.



4. 결괏값은 무엇입니까? 

#include <stdio.h>

int main()

{

             float   s = 3.141592;

             float   *o;

             o   = &s;

             printf("%f\n",   *o);

             printf("%f",   o[0]);

             return   0;

}

같은 값이 나옵니다. 값을 표현하는 연산자인 *와 []의 동일성을 말하기 위한 문제입니다.


5. 결과값은 무엇 입니까? 

#include<stdio.h>

int main()

{

             int   s = 8;

             const   int *o;

             o   = &s;

             *o   = 88;

             printf("%d",   s);

             return   0;

}


실행되지 않습니다. const 는 해당 메모리 주소가 가리키는 곳을 read-only 영역으로 하라는 뜻입니다. read-only 이기에 *o로 8이라는 값을 가져올 수는 있으나 해당 주소에 쓸 수는 없습니다. const 예약어가 없다면 값이 바뀝니다.


6. 결과값은 무엇 입니까? 

#include <stdio.h>

int main() {

             int   s = 3;

             int   o = 4;

             printf("%d",   s^o);

             return   0;

}

OR 연산(011+100)에 의해 7(111)이 됩니다.


7. 결과값은 무엇 입니까? 

#include <stdio.h>

#include <stdlib.h>

int main()

{

             int   *p = (int*)malloc(88 * sizeof(int));

             printf("%d   ", sizeof(p));                           

             return   0;

}


4혹은 8입니다. 포인터 변수의 크기이므로 주소 크기 입니다. 32bit로 컴파일하면 4, 64bit 인 경우 8이 됩니다.


8. 다음에서 typedef 제외, 코드를 재 작성 하십시요. 

typedef struct _Customer {

             char   name[8];

             int   id;

} Customer;

#include <stdio.h>

#include <string.h>

int main() {

             Customer   s, o;

             strcpy_s(s.name,   "Soul");

             s.id   = 8888;

             strcpy_s(o.name,   "Sora");

             o.id   = 3333;

             printf("name   : %s %s\n", s.name, o.name);     

             printf("id   : %d %d", s.id, o.id);

             return   0;

}

typedef를 제외하면, Customer s, o가 아닌 struct _Customer s, o로 쓰면 됩니다. 보통 typedef struct { 로 바로 씁니다. struct 선언 문법을 헷갈리게 하려고 한 의도입니다. struct 를 잘쓰면 class 부럽지 않습니다. 물론, 메소드(멤버함수, 함수)는 함께 담을 수 없지만 말이죠.


9. 결과값은 무엇 입니까? 

#include<stdio.h>

void main()

{            

             int   i = 0;

             printf("%d   ", i++);

             main();

}

 네, 0이 나오는 무한 루프 입니다. 실무 프로그래밍 초급편에서 main 함수를 호출하는 함수 포인터를 만들고, 무한 루프를 탈출할 수 있는 방법을 연구해 보았습니다.


10. 결과값은 무엇 입니까? 

#include<stdio.h>

union {

             char   s[3];

             int   o;     

} _union;

struct {

             char   r[3];

             int   a;

} _struct;

int main() {        

             printf("%d   %d\n", sizeof _union.s, sizeof _struct.r);

             printf("%d   %d\n", sizeof _union.o, sizeof _struct.a);

             printf("%d   %d", sizeof _union, sizeof _struct);

}


3 3

4 4

4 8

입니다. struct는 메모리를 공유하지 않고 내부에 묶여진 자료형에 대해서 각각 공간을 할당합니다. union의 경우 가장 큰 타입의 메모리의 크기를 가진다고 알려져 있습니다. 메모리를 공유하는 것은 맞지만 가장 큰 메모리를 점유하는 것은 아닙니다. 가장 큰 자료형의 "배수"가 들어갈 공간을 확보합니다. 가령,

union {

char   s[11];

int   o;

} _union;

의 경우, s배열 크기 char*11을 담을 11이여야 할 것 같지만 12가 나옵니다. o가 double일 경우 16이 나옵니다. char s[11]이 가장 크지만 해당 크기만큼만 메모리를 할당하지 않습니다. double형의 2배만큼 할당합니다(. comm   _union,16,16).  struct도 마찬가지 결과입니다. 이론과 실무는 많이 다릅니다.


  • Transformer 아키텍처는 강력한 문맥 이해 능력과 병렬 처리를 통해 텍스트의 의미를 잘 파악할 수 있게 해줍니다.
  • 자기 회귀 언어 모델은 이전에 생성된 단어들을 바탕으로 다음 단어를 예측하여 텍스트를 생성하는 방식입니다.
  • GPT와 같은 모델은 Transformer 아키텍처를 활용한 자기 회귀 언어 모델로, Transformer로 문맥을 이해하고 자기 회귀 방식으로 텍스트를 생성합니다.
  • 이런 조합을 통해 효율적이면서도 자연스러운 텍스트 생성이 가능해집니다.

Transformer와 자기 회귀 언어 모델이 시너지를 내며 발전하고 있고, 앞으로도 자연어 처리 분야에 큰 영향을 미칠 것 같습니다. ChatGPT나 Claude 같은 대화형 AI들이 이런 기술들을 바탕으로 점점 더 사람과 자연스럽게 소통할 수 있게 될 거라 기대되네요.

이런 흐름에 맞춰 우리도 계속 공부하고 발전해 나가는 것이 중요할 것 같아요. 자연어 처리 기술의 동향을 놓치지 않고 꾸준히 따라가려 노력해야겠어요.

Transformer 아키텍처와 자기 회귀 언어 모델의 결합은 자연어 처리(NLP) 분야에서 혁신적인 발전을 이루었습니다. 이러한 기술들은 텍스트의 문맥을 더 깊이 이해하고, 자연스럽게 텍스트를 생성하는 데 중요한 역할을 합니다. GPT와 같은 모델들은 이 두 기술의 장점을 결합하여 텍스트 생성의 질을 크게 향상시켰고, ChatGPT나 Claude와 같은 대화형 AI 개발에 있어 중요한 기반 기술이 되었습니다.

이러한 모델들은 뛰어난 언어 이해 능력과 생성 능력을 통해 다양한 언어 기반 작업에서 놀라운 결과를 보여주고 있습니다. 예를 들어, 기계 번역, 요약, 질문 응답(Q&A), 창의적인 글쓰기 등 다양한 분야에서 활용되고 있습니다. 또한, 이 기술들은 사용자와의 자연스러운 대화를 가능하게 함으로써, 사용자 경험을 극대화하는 데에도 기여하고 있습니다.

미래 전망

  • 개인화와 맞춤형 서비스: Transformer와 자기 회귀 모델을 활용한 AI 시스템은 사용자의 언어 사용 스타일과 선호도를 학습하여, 더 개인화된 대화와 정보 제공이 가능해질 것입니다.
  • 다양한 언어와 방언의 지원 확대: 이 기술들의 발전은 다양한 언어와 방언에 대한 이해를 깊게 하여, 전 세계 많은 사람들에게 접근성을 높일 것입니다.
  • 보다 진보된 상호 작용: 대화형 AI가 사용자의 의도와 감정을 더 잘 이해하게 되면서, 기계와의 상호 작용이 더 자연스럽고 인간 같은 형태로 발전할 것입니다.

지속적인 학습의 중요성

이러한 발전을 따라가기 위해서는 기술의 최신 동향을 꾸준히 학습하고, 새로운 도전을 시도하는 것이 중요합니다. 온라인 코스, 학술 논문, 오픈 소스 프로젝트 참여 등을 통해 지식을 넓히고, 실제 프로젝트에 적용해보는 경험을 쌓는 것이 좋습니다.

또한, 이러한 기술들의 윤리적 사용과 개인 정보 보호에 대한 고민도 함께 이루어져야 합니다. AI 기술의 발전은 사회에 긍정적인 영향을 많이 미칠 수 있지만, 잘못된 사용으로 인한 부작용을 최소화하기 위한 지속적인 노력이 필요합니다.

자연어 처리 분야는 계속해서 발전하고 있으며, 이러한 기술의 발전은 우리가 상상하는 것 이상으로 빠르게 진행될 수 있습니다. 그러므로 지금 이 순간에도 새로운 지식을 탐구하고, 학습하는 자세가 중요합니다.

 

 

 

2019년 아마존 오로라 사용기 

RDS를 쓰는 회사에서 개발하는 제품에 물리 서버를 이용하지 않는다면 아마존이 최선이 선택일 것이다. 전력량, 온/습도, 하드디스크 수명 관리 등을 안해도 될거라 생각하니 좋았다. NoSQL이던 RDBMS던 CRUD(Create, Read, Update, Delete)가 전부인 DB 세상이고 로드벨런싱과 보안계획/실행, 스케일링은 혼자 하기 힘드니까 계속해서 서버 구축하지 말자는 판단. 서버실 공간도 없고, 추가 전기 공사에 회사 이전 계획까지 겹친 것도 한 몫. 우선 DB 서버 부터... 초창기에는 비용도 저렴한 클라우드로 가자고 생각했다. 다들 따져보면 결국, 선택은 AWS RDS. 애저와 구글 클라우드를 이용해 보았으나, 수년 뒤 2018년에 결국 아마존으로 가게 되어 있다고 생각한다. AWS EC2에 우분투가 아닌 아마존 리눅스 기반에 mysql 설치하고 서비스를 만들고 잘 사용했으나, DB 서버는 분리하는게 당연한 지라 AWS RDS로 갈 수 밖엔.

 

우선 RDS로 오로라를 쓰는 이유 MySQL로 하고 싶지만 아래 AWS RDS 소개글을 보면 Aurora를 쓸 수 밖에 없게 만든다. 물론, 앞으로도 자사 솔루션을 더욱 강화할 것임은 당연지사 MySQL & Aurora MySQL은 전 세계에서 가장 많이 사용되는 오픈 소스 데이터베이스입니다. RDS에서 MySQL은 데이터베이스의 컴퓨팅 리소스 또는 스토리지 용량을 쉽게 확장할 수 있는 유연성을 갖춘 MySQL 커뮤니티 에디션의 풍부한 기능을 제공합니다. 최대 16TiB 크기의 데이터베이스를 지원 Amazon Aurora Amazon Aurora는 MySQL 및 PostgreSQL 호환 엔터프라이즈급 데이터베이스입니다($1/일 미만부터 시작). MySQL의 최대 5배 처리량, PostgreSQL의 최대 3배 처리량

자세한 정보는

https://aws.amazon.com/ko/blogs/korea/databaseintroducing-the-aurora-storage-engine/

Amazon Aurora Storage 엔진 소개 | Amazon Web Services

Amazon Aurora는 re:Invent 2014에서 발표한 이후, 2015년 7월에 정식으로 출시 및 2016년 4월 1일 서울 리전에 출시함으로써 국내외 많은 고객들이 RDBMS가 필요한 워크로드에 이미 도입을 하였거나 현재 도입을 고려하고 있습니다. Amazon Aurora는 AWS 역사상 가장 빠른 성장세를 보이고 있는 서비스 입니다. Amazon Aurora의 빠른 성능과 안정성을 지원하는 핵심인 Aurora 스토리지 엔진에 대한 좋은 블로그

aws.amazon.com

Aurora에서 개발용으로 MySQL 5.6.10a와 호환 가능 으로 하여 t2.small로 맞추었다. 개발용으로 만든 EC2 t2.large 인스턴스가 한달에 30만원씩 나오는 것을 보면 AWS 계산기가 제대로 동작 안하는 것 같다.

https://calculator.s3.amazonaws.com/index.html

Amazon Web Services Simple Monthly Calculator


calculator.s3.amazonaws.com

Estimate of your Monthly Bill ($ 45.90)월별 추정 요금 인데 RDS 생성 메뉴에 나오는 가격은 DB 인스턴스 45.99 USD 합계

45.99 USD 이다. 다르다. 0.09라도 다른 것은 다르다. 네트웍 I/O던 내부 I/O 던 관련이 없어 보이는데 말이다.

게다가 Storage 를 20->10으로 바꾸면 비용이 줄어야 할 텐데 오히려 는다. Estimate of your Monthly Bill ($ 46.01) 40으로 늘이면 당연히 는다. Estimate of your Monthly Bill ($ 48.30) 삼성전자 재적시절 유럽시장 SEAndroid 텍스트 로그만 받는데 월 300 만원씩 나간 것을 보면, 추정은 추정일 뿐 일단 사용해 보는 것이 정답임을 이미 알고 있기에 비용 딴지는 그만. 믓튼, 월 5만원에 개발용 서버 사용이 가능하다. 역추척은 서비스는 켜야 한다. $ 4.42 USD/월 추가된다. 만들고 나서 mysql workbench로 접속해 본다.

https://dev.mysql.com/downloads/workbench/

MySQL :: Download MySQL Workbench



dev.mysql.com

 

https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/CHAP_GettingStarted.CreatingConnecting.Aurora.html#CHAP_GettingStarted.Aurora.Connect

DB 클러스터 생성 후 Amazon Aurora DB 인스턴스의 데이터베이스에 연결하기 - Amazon Relational Database Service



docs.aws.amazon.com

 

카싼드라가 사용자 편의성을 위해 CQL로 추상화 했듯이,

 

AWS 오로라 DB도 그냥 mysql 이라고 생각하고 쓰면 되겠다.

 

 

 

2. 마이그레이션

 

기존 데이터를 가져오는 것도 자료가 많아 좋았다.

 

 

 

 

https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/MySQL.Procedural.Importing.External.Repl.html

Replication with a MySQL or MariaDB Instance Running External to Amazon RDS - Amazon Relational Database Service


docs.aws.amazon.com

 

https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/MySQL.Procedural.Importing.html

Restoring a Backup into an Amazon RDS MySQL DB Instance - Amazon Relational Database Service



docs.aws.amazon.com

 

https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/MySQL.Procedural.Importing.External.Repl.html

Replication with a MySQL or MariaDB Instance Running External to Amazon RDS - Amazon Relational Database Service



docs.aws.amazon.com

 

물리서버가 아니라 마음이 참 편하다. 결론은 돈이 좋다고 해야 하는 건가.

 

사전 학습(Pre-training)과 미세 조정(Fine-tuning)은 트랜스포머 기반 언어 모델을 개발할 때 널리 사용되는 중요한 기법들입니다. 이 두 단계를 통해 모델은 방대한 양의 텍스트 데이터로부터 일반적인 언어 지식을 습득한 후, 특정 태스크에 맞게 조정되어 최적의 성능을 발휘할 수 있게 됩니다. 

사전 학습 단계에서는 대규모의 텍스트 데이터를 사용하여 모델이 언어의 기본 구조와 문맥을 배우게 합니다. 가령 위키피디아나 책, 웹 문서 등 다양한 도메인의 방대한 코퍼스를 활용하죠. 이 단계에서 모델은 텍스트의 통계적 패턴을 파악하고 단어 간의 관계를 이해하는 법을 스스로 학습합니다. 엄청난 양의 데이터를 사용하기 때문에 시간과 자원이 많이 소모되지만, 한 번 학습된 모델은 여러 하위 태스크에 공통적으로 활용될 수 있다는 장점이 있습니다.

충분히 사전 학습된 모델은 미세 조정을 통해 특정 태스크에 맞게 튜닝됩니다. 사전 학습 때보다는 적은 양의 태스크 특화 데이터를 사용하여, 기존에 학습된 가중치들을 조금씩 업데이트하는 거죠. 이를 통해 모델이 해당 태스크에서 최상의 성능을 낼 수 있도록 보정하는 것입니다. 이렇게 사전 학습된 언어 지식을 토대로 태스크에 맞게 모델을 미세 조정하는 전략은 매우 효과적인 것으로 알려져 있습니다.

사전 학습과 미세 조정이 중요한 이유는 이 방법론 덕분에 좋은 성능의 모델을 더 적은 시간과 비용으로 만들 수 있기 때문입니다. 처음부터 태스크 특화 데이터로만 학습을 하려면 많은 양의 레이블링된 데이터가 필요하고 오랜 학습 시간이 걸리겠지만, 사전 학습 모델을 활용하면 상대적으로 쉽고 빠르게 좋은 결과를 얻을 수 있습니다. 그래서 요즘에는 BERT나 GPT 같이 대규모 사전 학습 모델들이 많이 개발되고 있는 추세입니다. 

앞으로도 사전 학습과 미세 조정은 트랜스포머 기반 모델들의 성능을 극대화하는 핵심 기법으로 널리 활용될 것 같습니다. 더 크고 강력한 사전 학습 모델들이 계속해서 등장하고 있고, 이를 다양한 태스크에 적용하는 사례도 증가하는 추세니까요. 우리도 이런 흐름을 잘 이해하고 활용한다면 자연어 처리 분야에서 많은 성과를 낼 수 있을 것입니다.

 

사전 학습(Pre-training)과 미세 조정(Fine-tuning)은 딥러닝 모델, 특히 자연어 처리(NLP)와 컴퓨터 비전 분야에서 널리 사용되는 학습 방법론입니다. 이 방법론은 높은 성능의 모델을 효율적으로 개발하기 위해 설계되었습니다. 여기서 사전 학습과 미세 조정의 과정을 각각 살펴보겠습니다.

사전 학습(Pre-training)

사전 학습은 대규모 데이터셋에서 모델을 훈련시키는 초기 학습 단계입니다. 이 단계의 목적은 모델이 일반적인 지식을 습득하게 하는 것이며, 이러한 지식은 언어의 기본 구조, 문법, 단어 간의 관계, 이미지의 기본 패턴 등이 될 수 있습니다. 사전 학습을 통해 모델은 실제 작업과는 독립적인 광범위한 지식을 습득하게 되며, 이는 후속 작업에서의 성능 향상에 기여합니다.

  • NLP에서의 사전 학습: NLP 분야에서 사전 학습은 주로 대규모 텍스트 코퍼스(위키백과, 책, 웹 텍스트 등)를 사용하여 수행됩니다. 예를 들어, GPT나 BERT와 같은 모델은 다양한 언어 모델링 작업을 통해 사전 학습됩니다.
  • 컴퓨터 비전에서의 사전 학습: 컴퓨터 비전 분야에서는 ImageNet과 같은 대규모 이미지 데이터셋을 사용하여 모델이 기본적인 시각적 패턴과 객체를 인식하도록 합니다.

미세 조정(Fine-tuning)

미세 조정은 사전 학습된 모델을 특정 작업에 맞게 조정하는 과정입니다. 이 단계에서는 사전 학습된 모델의 가중치를 초기값으로 사용하고, 작업 관련 데이터셋을 사용하여 추가 학습을 수행합니다. 미세 조정을 통해 모델은 특정 작업에 필요한 지식을 습득하게 되며, 이는 작업의 성능을 크게 향상시킬 수 있습니다.

미세 조정의 주요 장점은 다음과 같습니다:

  • 효율성: 사전 학습된 모델을 사용함으로써, 작은 데이터셋으로도 높은 성능을 달성할 수 있습니다. 이는 모델이 이미 일반적인 지식을 습득했기 때문입니다.
  • 속도: 사전 학습된 가중치를 사용함으로써, 학습이 더 빠르게 수행됩니다. 모델은 무작위 가중치에서 시작하는 것이 아니라 이미 어느 정도 최적화된 상태에서 학습을 시작하기 때문입니다.
  • 융통성: 미세 조정을 통해 다양한 작업에 쉽게 적용할 수 있으며, 특정 작업에 대한 모델의 성능을 최적화할 수 있습니다.

사전 학습과 미세 조정의 조합은 현대 딥러닝 연구와 응용에서 중요한 전략이 되었습니다. 이 방법론을 통해 개발자와 연구자들은 제한된 리소스와 데이터로도 복잡한 문제를 해결할 수 있는 강력한 모델을 개발할 수 있습니다. 이러한 접근 방식은 특히 자연어 처리(NLP)와 컴퓨터 비전 분야에서 큰 성공을 거두었으며, 이제는 음성 인식, 의료 이미지 분석, 그리고 다양한 종류의 예측 모델링 작업에도 널리 적용되고 있습니다.

사전 학습된 모델을 미세 조정하는 과정은 특히 데이터가 부족한 상황에서 그 가치가 빛납니다. 작은 데이터셋만으로도 고성능의 모델을 개발할 수 있기 때문에, 데이터 수집의 어려움이나 비용 문제를 상당 부분 해결할 수 있습니다. 또한, 미세 조정을 통해 하나의 사전 학습된 모델을 다양한 작업에 재활용할 수 있으므로, 모델 개발 시간을 크게 단축시키고 효율성을 높일 수 있습니다.

사전 학습과 미세 조정의 구체적인 절차

  1. 사전 학습(Pre-training):
    • 대규모 데이터셋에서 모델을 학습시켜 일반적인 지식을 습득합니다.
    • NLP에서는 언어 모델링, 컴퓨터 비전에서는 이미지 분류 등의 일반적인 작업을 수행합니다.
  2. 미세 조정(Fine-tuning):
    • 사전 학습된 모델을 기반으로, 특정 작업을 위한 작은 데이터셋을 사용하여 추가 학습을 수행합니다.
    • 이 과정에서는 학습률을 낮추고, 특정 작업에 맞게 모델의 일부를 조정합니다.

사전 학습과 미세 조정의 성공 사례

  • NLP에서의 BERT와 GPT: 이 모델들은 다양한 NLP 작업에서 뛰어난 성능을 보여주며, 자연어 이해(NLU)와 생성(NLG) 분야에서 혁신을 이끌었습니다.
  • 컴퓨터 비전에서의 ResNet과 EfficientNet: 이러한 네트워크는 ImageNet 같은 대규모 이미지 데이터셋에서 사전 학습된 후, 다양한 이미지 관련 작업에 미세 조정되어 뛰어난 성능을 나타냈습니다.

사전 학습과 미세 조정 기법의 발전은 앞으로도 계속될 것이며, 더 많은 분야에서의 응용이 기대됩니다. 이러한 접근 방식은 머신 러닝 모델의 효율성과 범용성을 높이는 데 크게 기여하며, 딥러닝 기술의 발전을 가속화할 것입니다. 따라서 이러한 기법을 이해하고 활용할 수 있는 능력은 머신 러닝과 인공 지능 분야에서 매우 중요합니다.

 

 

 

 

 

 

 

 

 10월 26일

결국 새로산 맥북프로 2개월 만에 수리하러 간다. 키보드 누르는 중에 끈적임 발생해 버렸따.

 

대규모 언어 모델(Large Language Model) 기반으로 만들어진 대화형 AI

알고리즘의 핵심은 Transformer 아키텍처와 자기 회귀 언어 모델(Autoregressive Language Model)

 

Transformer 아키텍처와 자기 회귀 언어 모델(Autoregressive Language Model)은 자연어 처리(Natural Language Processing, NLP) 분야에서 중요한 역할을 합니다. 각각의 개념을 하나씩 자세히 설명해 보겠습니다.

Transformer 아키텍처

Transformer는 2017년 Google의 연구원들에 의해 소개된 모델 아키텍처로, "Attention Is All You Need"라는 논문에서 처음 등장했습니다. Transformer 모델은 이전의 순환 신경망(RNN)이나 컨볼루션 신경망(CNN) 기반 모델들과 달리, 전체 시퀀스를 한 번에 처리할 수 있는 '어텐션 메커니즘'을 사용합니다. 이로 인해 모델의 병렬 처리 능력이 향상되고, 긴 시퀀스의 데이터에서 발생하는 의존성 문제(예: 장거리 의존성 문제)를 효과적으로 다룰 수 있게 되었습니다.

Transformer 아키텍처의 주요 구성 요소는 다음과 같습니다:

  • Self-Attention: 입력 시퀀스 내의 모든 단어들이 서로 '어떻게 연관되어 있는지'를 학습할 수 있게 해주는 메커니즘입니다. 이를 통해 모델은 각 단어의 문맥을 더 잘 이해할 수 있습니다.
  • Positional Encoding: Transformer 모델은 기본적으로 시퀀스의 순서에 대한 정보를 갖고 있지 않습니다. 따라서 위치 정보를 입력에 추가함으로써 모델이 단어의 순서를 인식할 수 있게 합니다.
  • Multi-Head Attention: 다양한 '어텐션 헤드'를 사용하여 다양한 시점에서 입력 데이터를 병렬로 처리함으로써, 모델이 다양한 관점에서 정보를 학습할 수 있게 합니다.
  • Feed-Forward Neural Networks: 각 어텐션 단계 후, 모델은 추가적인 처리를 위해 피드포워드 신경망을 사용합니다.

자기 회귀 언어 모델 (Autoregressive Language Model)

자기 회귀 언어 모델은 과거의 단어들을 기반으로 다음 단어를 예측하는 모델입니다. 이 모델은 시퀀스의 현재 단어를 예측하기 위해 이전에 등장한 단어들만을 사용합니다. 자기 회귀 모델은 문장이나 문서에서 단어의 순서와 문맥을 학습하여 자연스러운 언어 생성을 가능하게 합니다.

자기 회귀 언어 모델의 주요 특징은 다음과 같습니다:

  • 순차적 예측: 모델은 이전 단어들의 시퀀스를 조건으로 하여 다음 단어를 순차적으로 예측합니다.
  • 장기 의존성 학습: 모델은 긴 문장이나 문단에서도 이전에 나타난 단어들 사이의 관계를 학습할 수 있습니다.
  • 언어 생성: 자기 회귀 모델은 텍스트 생성에 자주 사용됩니다. 이전 단어들을 기반으로 문장을 계속해서 확장해 나가는 방식으로 작동합니다.

 

http://thegear.co.kr/16164
 

교사 강요(Teacher Forcing)는 순환 신경망(RNN)이나 자기 회귀 모델 등 시퀀스를 생성하는 모델을 훈련시킬 때 사용되는 기법입니다. 이 방법은 모델이 시퀀스의 다음 단어를 예측할 때, 이전 단계에서 모델이 실제로 예측한 단어가 아니라 실제 정답 시퀀스에서의 이전 단어를 입력으로 사용합니다. 즉, 모델이 단어를 잘못 예측하더라도, 항상 정확한 이전 단어를 기반으로 다음 단어를 예측하게 만드는 방식입니다.

교사 강요의 목적

교사 강요의 주요 목적은 모델의 학습 속도와 안정성을 향상시키는 것입니다. 초기 훈련 단계에서 모델의 예측이 부정확할 가능성이 높기 때문에, 정답 시퀀스를 제공함으로써 모델이 올바른 방향으로 더 빠르게 학습할 수 있도록 돕습니다.

교사 강요의 장점

  • 빠른 수렴: 모델이 정답 시퀀스를 직접적으로 학습함으로써, 학습 과정이 빨라집니다.
  • 학습 안정성: 초기 학습 단계에서 예측의 누적 오류가 학습 과정에 부정적인 영향을 미치는 것을 방지합니다.

교사 강요의 단점 및 한계

  • 노출 편향(Exposure Bias): 훈련 시에는 항상 정답을 보면서 학습하지만, 실제 사용 시에는 모델의 예측을 바탕으로 다음 단어를 생성해야 합니다. 이로 인해 훈련 시와 실제 사용 시의 차이가 발생할 수 있습니다.
  • 창의적인 텍스트 생성의 어려움: 모델이 정답 시퀀스에 지나치게 의존하게 되면, 새로운 혹은 창의적인 텍스트를 생성하는 능력이 제한될 수 있습니다.

교사 강요를 보완하는 방법

  • 교사 강요 비율(Teacher Forcing Ratio): 모델이 자신의 예측을 입력으로 사용하는 비율과 정답 시퀀스를 사용하는 비율을 조정함으로써, 노출 편향 문제를 완화할 수 있습니다.
  • Scheduled Sampling: 훈련 과정에서 점차적으로 모델이 자신의 예측에 더 의존하도록 만드는 기법입니다. 초기에는 교사 강요를 많이 사용하다가 점진적으로 자신의 예측을 사용하는 비율을 높여갑니다.

교사 강요는 모델의 훈련 과정을 개선하기 위한 효과적인 방법이지만, 그 한계를 인식하고 적절히 조절하는 것이 중요합니다.

 

판교역 4번 출구에 나오면 좌측에 육교가 있다. 좌측 육교를 타고 중간지점에서 우측으로 꺽으면 지하에 일렉트로 마트가 있는 건물이 있다. 1층 마트로 들어가서 엘리베이터를 타도 된다. 일렉트로 마트에서 애플 제품이 많은 전시장을 찾으면 바로 옆에 UBASE가 있다. UBASE에서 번호표를 뽑으면 된다. 아이폰 고객과 기타 고객은 구분되어 있기에 기타 고객으로 하면 차례가 금방온다.(그래도 40분 이상) 나는 애플 전화 서비스를 이미 받은 상태라 가니, 바로 키보드 전체 수리로 대화 주제가 넘어갔다. 그런데 제품을 맡겨야 한다는 말은 못 들었었는데, 맡기지 않으면 애플에서 키보드를 안 보내줘서 수리가 안된다고 했다. 이건 뭔... 황당한 이야기인지 모르겠지만... 맡길 수 밖에 없었다. 비밀번호를 따로 요구 하지 않는다. 전원 켜진 상태에서 검사 프로그램을 돌리는 것 같다. 애플 고객센터에서도 file vault를 활성화 하라고 했는데 그렇게 했다. 하드 디스크를 복사해도 일단 file vault를 깨는 마스터 솔루션이 없는 이상 보안에는 문제 없어 보였다. 인터넷을 뒤져보니 미국의 경우가 나온 기사에 해당 내용이 있긴했다. 뭐든 겪어 봐야 한다는...

 

Transformer 어텐션 메커니즘을 활용하여 입력 시퀀스의 위치 간의 관계를 파악하고, 병렬 연산을 통해 빠른 학습을 가능케 합니다. 자기 회귀 언어 모델은 이전에 생성된 단어들을 입력으로 받아 다음 단어를 예측하는 방식으로 동작합니다.

Transformer의 핵심 특징

Transformer 모델은 '어텐션 메커니즘(Attention Mechanism)'을 핵심으로 사용하여, 입력 시퀀스의 각 위치 간의 관계를 파악합니다. 이는 다음과 같은 중요한 이점을 가집니다:

  • 문맥 이해: Transformer는 시퀀스 내의 모든 단어 간의 관계를 직접적으로 계산함으로써, 단어의 문맥적 의미를 더 잘 이해할 수 있습니다.
  • 병렬 처리: 전통적인 순환 신경망(RNN)과 달리, Transformer는 입력 시퀀스를 전체적으로 한 번에 처리할 수 있어, 학습 과정에서의 병렬 처리가 가능해집니다. 이는 모델 훈련 속도를 크게 향상시킵니다.
  • 장거리 의존성 학습: 어텐션 메커니즘 덕분에, Transformer는 긴 입력 시퀀스에서도 먼 거리에 있는 단어들 간의 의존성을 효과적으로 학습할 수 있습니다.

자기 회귀 언어 모델의 특징

자기 회귀 언어 모델은 이전에 생성된 단어들을 입력으로 받아 다음 단어를 예측하는 방식으로 동작합니다. 이 모델의 주요 특징은 다음과 같습니다:

  • 순차적 예측: 모델은 현재까지 생성된 시퀀스를 기반으로 다음에 올 단어를 하나씩 순차적으로 예측합니다. 이 과정은 자연스러운 언어 생성에 매우 유용합니다.
  • 언어 생성 능력: 자기 회귀 모델은 주어진 텍스트에 이어질 새로운 텍스트를 생성하는 데 사용될 수 있으며, 이를 통해 자연스러운 문장을 생성하는 능력을 가집니다.
  • 장기 의존성 학습: 모델은 이전 단계에서 생성된 단어들의 정보를 활용하여 다음 단어를 예측하기 때문에, 시퀀스 내의 장기 의존성을 파악하는 데 도움이 됩니다.

결합 사용

Transformer 아키텍처와 자기 회귀 언어 모델은 서로 다른 방식으로 텍스트를 처리하고 생성하지만, 두 기술을 결합하여 사용하는 경우가 많습니다. 예를 들어, GPT(Generative Pre-trained Transformer) 시리즈는 Transformer 아키텍처를 기반으로 한 자기 회귀 언어 모델입니다. 이러한 모델은 Transformer의 강력한 문맥 이해 능력과 병렬 처리 장점을 활용하여, 효율적이면서도 자연스러운 텍스트 생성을 가능하게 합니다.

 

다행이 서브 맥북 에어가 있어서(성능은 더 좋은 서브... ) 일주일을 기다릴 수 있겠다. 상당사에게 여러 질문을 했을 때 늦으면 목요일 저녁이 될 것 같은데, 빠를 수도 있다고 했다. 이에, 애플 맥북 프로 키보드 수리 기간은 일주일이라고 보는게 좋을 듯. 인터넷 검색해보니 수리 기간 끝나면 80만원 정도 자비로 고쳐야 하는 것 같다. 나 역시 처음에는 문제 없다가 하루 10시간 정도씩 한달 반 정도 쓰니 나왔던 문제였다. O 키의 키감이 갑자기 변하더니 찐덕하게 들어가서 잘 안나오는 현상이 나왔다. 수리 센터에서는 키보드 전체를 2018년도의 것으로 교체해 준다고 하니 다행이다. 그 전에 이런 결함을 모르고 고생하셨던 수많은 애플 유저에게 감사한다. 수리 후에 배터리 사이클이 1이 되었다. 키보드는 4년 수리 기간 동안 수리하면 된다. 중고로 팔기전에 키보드 수리해서 배터리 사이클 1로 팔면 될 듯하다. 물론, 난 귀찮은 걸 싫어해서 넋두리니 파는 사람/사는 사람 알아서 들으시길.

 

판교 유베이스 위에 노브랜드가 있고 그 위에 복국 집 있다.

수리... 그리고 복요리

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


sudo /usr/libexec/locate.updatedb


updatedb는 linux랑 이름이 같다.


sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist


이렇게 로딩 후 

locate 가 동작한다.




  • java

MyClass c;

c = new MyClass();

c.member = 1;

c.method();


  • Objective-C

MyClass *c;

c = [[MyClass alloc] init];

c.member = 1;

[c method];


  • C

void myFunction(int);


void myFunction(int a) {

printf(“ HelloWorld \n”);

}


  • Objective-C

@interface MyClass: NSObject


-(void) myFunction: (int) a;


@end


@implementation MyClass

-(void) myFunction: (int) a

{

NSLog(@“HelloWorld \n”);

}

@end


  • Java

class XXX {

int a;

int b;

public static void main(String args[]) {}

}

  • Obj-C

@implementation XXX

{

int a;

int b;

}

@end

int main(int argh, char *argv[]) { return 0; }


  • Java

public int getNumer() { return number; }


  • Obj-C

-(int) getNumber { return number; }



#if DEBUG

        txtID.text = "itsme"

        txtPASSWD.text = "goodToSeeU#123"

#endif

+ 원리, 그래픽 소스까지 넣으면 복잡.

클로저는 간단하다.


import UIKit


func textT(_ first : ()-> (), _ second : ()-> ()) {

    first()

    second()

}


textT( { print("first") }, { print("second") })




보통 클로저는 하나만 쓰기 때문에 ()를 닫아 버리고 {} 로 대체 가능하다.


import UIKit


func textT(_ first : ()-> (), _ second : ()-> ()) {

    first()

    second()

}


textT( { print("first") }) { print("second") }


class ViewController: UIViewController {

    

    func textT(_ first : ()-> (), _ second : ()-> ()) {

        first()

        second()

    }

    

    override func viewDidLoad() {

        textT( { print("first") }) { print("second") }

    }

}

REST API를 쓴다면 필시 Alamofire를 이용하리라 생각된다.

클로저를 이용하면, DispatchQueue를 이용하지 않고 동기화를 할 수 있다.


make func getJSON() to func getJSON(_ whatUwant2execute : @escaping () -> () )


and use your function


getJSON { ... codes ... }


and choose the location you want to execute in Alamofire


getJSON(_ whatUwant2execute : @escaping () -> () ) { Alamofire.request(.GET, "http://announcement.vassy.net/api/AnnouncementAPI/Get/").responseJSON {

 (Response) -> Void in     // checking if result has value    

   if let value = Response.result.value {         

    let json = JSON(value)         

    whatUwant2execute()        

    .        

    .        

    .

then ... codes ... will be executed on that point.


결국 클로저는 함수 포인터고 함수를 실행할 때 쓰는 ()를 이용해서 트리거 시킨다가 요점.


내가 말하고 싶은 더블 클로저는 파라미터 2개인 클로저가 아니라 2차 포인터 처럼 클로저 안에 클로저를 말한다. 포인터를 C의 함수 포인터로 이해하면 쉽지만 이론 설명은 생략. 바로 코드로... 위 소스에서 두번째 클로저는 지웠다. 이름을 바꾸고 클로저 안에 클로저를 넣으면 된다. 흔적 따라오라며 다 바꾸진 않음


import UIKit


func progressBar(_ first : ((Int)->())-> ()) {

    first() { (s) in

        print(s, " %")

    }

}


progressBar() { (closure) -> () in

    print("hello msg")

    closure(10)

    print("checking new version of software")

    closure(20)

    print("connect to the updating server")

    closure(50)

    print("download loop")

    closure(100)

}


핵심은 progress를 담고 있는 var 를 없애는 함수형 프로그래밍을 한다는데 있다. 내가 생각하는 함수형 프로그래밍은 메모리를 삭제 과정 없이 계속 리니어하게 써서 속도를 향상 시키는데 있다고 믿지만, 어느 순간 변질 된 듯. 리눅스 커널 분석하며 어려운 함수 포인터를 typedef 로 무한적 래핑할 수 있는 제자들은 이해가 쉬울 듯.


트리블 클로저를 이용하면 updating 되고 있는 프로그레스바를 더욱 스무스하게 만들 수 있다.


하드웨어 발전 속도만 믿고 뱅글 뱅글 도는 기다림표로 점철되어진 안타까운 소프트웨어에 활력을!


그리고 팁...


FYI,

Plz remember () is used 2 ways "make something in memory" or "executing"

In swift world {} is the meaning of one of the (), executing.

This is the reason why you don't need to write like a below

getJSON ({ ... codes ... })

and {} is the meaning of the definition of functions body.

Both () and {} have two meanings we have to know.

망할 스택 오버플로우에 앞으로 답변하나 봐라. 대한민국 프로그래머 만세


interfacebuilder의 constraints는 무시하고 했는데 이제 같이 고려해야 한다. 

캘린더, 메세지 뷰 등 오픈소스 땡겨서 넣고 나니 충돌 에러가 많네.


에러가 다음과 같은 양상을 띤다면, IB constratins와 snapkit 의 제약 사항을 함께 따져봐야 한다.


Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.

The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKitCore/UIView.h> may also be helpful.

2018-12-12 09:18:49.725504+0900 Bridge2[12529:869661] [LayoutConstraints] Unable to simultaneously satisfy constraints.

Probably at least one of the constraints in the following list is one you don't want. 

Try this: 

(1) look at each constraint and try to figure out which you don't expect; 

(2) find the code that added the unwanted constraint or constraints and fix it. 

(

    "<SnapKit.LayoutConstraint:0x282946400@TendencyCalendarPopUP.swift#140 UIButton:0x1036cba20.top == UILabel:0x1036cb730.bottom + 3.0>",

    "<SnapKit.LayoutConstraint:0x282947180@TendencyCalendarPopUP.swift#166 UILabel:0x1036ccf40.top == UILabel:0x1036cb730.bottom + 10.0>",

    "<SnapKit.LayoutConstraint:0x282947240@TendencyCalendarPopUP.swift#168 UILabel:0x1036ccf40.top == UIButton:0x1036cba20.bottom + 10.0>"

)


Will attempt to recover by breaking constraint 

<SnapKit.LayoutConstraint:0x282947240@TendencyCalendarPopUP.swift#168 UILabel:0x1036ccf40.top == UIButton:0x1036cba20.bottom + 10.0>


Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.

The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKitCore/UIView.h> may also be helpful.


'진행 프로젝트 > [진행] My tools.' 카테고리의 다른 글

kakao T crash  (2) 2019.01.18
ibk onebank crash  (0) 2019.01.18
하스스톤 크러시 로그  (0) 2019.01.18
그냥 테스트 코드  (0) 2019.01.17
오늘자 트러블 슈팅  (0) 2019.01.08


//  Copyright © 2018 hajunho.com All rights reserved.



import UIKit


//Where am I, exactly  ex) "".pwd(self)

//I recommend the codes below to a base view controller


extension String {

    func pwd(_ x: Any)  {

        debugPrint("🍭pwd_"String(describing: x.self))

    }

}


퀀트(Quant):

  • 퀀트는 "Quantitative Analyst"의 줄임말로, 금융 분야에서 수학, 통계학, 프로그래밍 등을 활용하여 금융 모델과 거래 전략을 개발하고 분석하는 전문가를 말합니다.
  • 퀀트는 주로 헤지펀드, 투자은행, 자산운용사 등에서 일하며, 복잡한 금융 상품의 가격 결정, 위험 관리, 포트폴리오 최적화 등의 업무를 수행합니다.
  • 퀀트는 데이터 분석, 알고리즘 트레이딩, 머신러닝 등의 기술을 활용하여 금융 시장을 분석하고 예측합니다.

금융모델(Financial Model):

  • 금융모델은 금융 상품, 투자 의사 결정, 기업 가치 평가 등을 분석하기 위해 구축된 수학적 모델을 말합니다.
  • 금융모델은 주로 엑셀(Excel)이나 기타 스프레드시트 도구를 사용하여 작성되며, 기업의 재무 데이터, 시장 데이터 등을 입력으로 사용합니다.
  • 금융모델은 미래 현금 흐름 예측, 자본 구조 최적화, 투자 수익률 계산, 위험 분석 등 다양한 목적으로 사용됩니다.
  • 금융모델은 투자 은행, 회계법인, 컨설팅 회사 등에서 널리 사용되며, 기업 인수합병(M&A), 기업공개(IPO), 자산 가치 평가 등의 업무에 활용됩니다.

요약하면, 퀀트는 금융 분석을 위한 전문가를 말하는 반면, 금융모델은 금융 분석을 위해 구축된 수학적 모델 자체를 의미합니다. 퀀트는 금융모델을 개발하고 활용하는 사람이며, 금융모델은 퀀트가 사용하는 도구 중 하나라고 볼 수 있습니다.

퀀트(Quant)

  • 정의: "퀀트"는 "Quantitative Analyst"의 줄임말로, 양적 분석가를 의미합니다. 퀀트는 수학, 통계학, 금융공학, 컴퓨터 과학 등의 전문 지식을 바탕으로 금융 시장의 가격 결정, 위험 관리, 투자 전략 개발 등에 관한 양적 모델을 개발하고 분석하는 전문가입니다.
  • 역할: 퀀트는 복잡한 수학적 및 통계적 모델을 사용하여 금융 상품의 가치를 평가하거나, 시장 위험을 측정하고, 투자 전략을 설계합니다. 예를 들어, 옵션 가격 책정, 포트폴리오 최적화, 고빈도 거래 알고리즘 개발 등 다양한 영역에서 활동합니다.

금융모델(Financial Model)

  • 정의: 금융모델은 금융 시장, 금융 상품, 투자 전략, 기업 재무 상태 등을 수학적으로 표현한 모델입니다. 이 모델은 주로 투자 의사 결정, 위험 평가, 가치 평가, 재무 계획 수립 등을 목적으로 사용됩니다.
  • 특징: 금융모델은 시장의 변동성, 금리, 주가 등 다양한 금융 변수들을 반영하여 금융 상품의 가치를 추정하거나, 특정 금융 전략의 수익성을 예측합니다. 대표적인 예로는 블랙-숄즈 모델(옵션 가격 결정), CAPM(자본 자산 가격 모델), MPT(현대 포트폴리오 이론) 등이 있습니다.

차이점

  • 퀀트 vs. 금융모델: "퀀트"는 금융 모델을 개발하고 분석하는 사람을 의미하는 반면, "금융모델"은 그러한 분석에 사용되는 수학적 혹은 통계적 도구입니다. 즉, 퀀트는 금융모델을 만들고 활용하는 전문가를 말하고, 금융모델은 그러한 전문가들이 사용하는 구체적인 수학적 표현이나 프레임워크를 지칭합니다.

이러한 관점에서 볼 때, 퀀트는 금융모델을 설계, 개발, 적용하는 역할을 수행하며, 금융모델은 금융 시장의 다양한 현상을 이해하고 예측하기 위한 도구로 사용됩니다.

 

 

+ Recent posts