커버로스 프로토콜(Kerberos Protocol) – 서버 접근 권한 관리

서버가 몇대 없고, 사용자의 숫자도 얼마 안되는 경우 각 서버별로 수동으로 유저를 추가하거나 권한을 부여해서 수동으로 관리하는것이 가능하다. 하지만 아래와 같이 점점 서버의 숫자가 많아지고, 유저들도 늘어나는 경우 관리에 드는 비용이 점점 커진다. 각 서버별로 접근 가능한 사용자(=클라이언트)들의 권한을 관리해야하는 경우 서버가 추가될때마다 혹은 유저가 추가/삭제 될때마다 매번 접근가능 유저를 등록하고 관리해야 하는 경우 이런 경우에는 클라이언트/서버 외에 제3의 인증서버(Authentication Server, AS)를 도입 하고, 이와 연동된 티켓 부여 서비스(Ticket Granting Service, TGS)를 통해 티켓을 발급하여 유효한 티켓이 있는 유저만 서비스 서버(Service Server, SS)에 접속을 할 수 있도록 제어하는 커버로스(Kerberos) 프로토콜 을 도입하여 편리하게 관리하는 것이 가능하다. ...

2018년 4월 30일 · 2분 · 346단어

우분투 JVM Segmetation Fault 버그 해결 및 커널 업데이트 방법

우분투(Ubuntu)의 커널 4.4.0.81 에서 JVM (Java Virtual Machine) 기반의 어플리케이션이 segmentation fault가 발생하면서 종료되어 버리는 현상이 존재한다. JVM 기반의 프로그램이 이상하게 실행이 안되고 죽는다 싶으면 아래 명령어로 커널 버전을 확인하자 uname -a 출력된 커널 버전이 4.4.0.81이 맞다면 버그로 인해서 segmentation falut가 나는것이 확실하다. 해당 버그 관련 참고 자료 https://usn.ubuntu.com/3344-1/ https://forum.ubuntuusers.de/topic/eclipse-crash-mit-speicherzugriffsfehler-nach-/ 해결 방법 1 (JVM 옵션 변경) JVM 실행시에 -Xss1280k 옵션을 줘서 max stack size를 변경한다. JVM 에만 영향이있고 커널 업데이트를 하지 않아도 되서 부담이 없다. 하지만 계속 찝찝함이 남으니, 커널 업데이트가 가능한 상황이라면 다음의 커널업데이트를 통한 문제 해결 방법을 추천한다. ...

2018년 4월 3일 · 1분 · 210단어

작업 스케쥴러 크론(Cron) 간단 사용법

unix 계열 운영체제 (linux, MacOS 포함)를 사용하다보면 시간대별로 반복되는 작업들을 수행해야 하는 경우가 매우 자주 있다. 이때 작업들의 스케쥴링을 위해서 application을 데몬처럼 실행시켜두고 해당 application 안에 통해서 스케쥴링을 할수도 있지만, 이미 unix 계열 운영체제에 기본으로 설치되어있는 cron 을 이용하면 훨씬 더 간편하게 특정 작업들을 실행할 수 있다. 크론 스케쥴 편집하기 아래 명령어를 실행하면 현재 로그인된 유저에 대해 cron job을 등록 할 수 있다. crontab -e 만약 특정 작업이 root 권한이 필요하여 root 유저에 대해 cron job을 등록하고 싶다면 아래 명령어를 이용하면 된다. ...

2018년 3월 23일 · 3분 · 447단어

깃(Git) 에서 유실된 커밋(commit) 복원하기

깃(Git)을 이용하여 작업을 하다가 리베이스(rebase) 실수 또는 잘못된 명령어나 조작 실수 등 다양한 이유로 인해 자신의 피땀눈물이 담긴 커밋(commit)들을 날려먹는 경우가 은근히 있다. remote에 push해서 백업을 만들어놓고 로컬에서만 작업했으면 다시 remote 저장소에서 받아오면 되지만, 그렇지도 않은 경우에는 어떻게 이 지워진 커밋들을 다시 읽어오거나 복원할 수 있을까? 다행히도 한번이라도 commit이 된 내용이라면, 심지어 현재 보이는 git tree 상에 보이지 않는 commit들 까지도 local git repository안에 commit log들이 남아 있다. 덕분에 이를 검색해서 해당 commit 상태로 복원 할 방법이 존재한다. ...

2018년 3월 11일 · 1분 · 150단어

스팀잇 폰트체인저 – 한글 폰트 최적화로 스팀잇 포스트의 가독성을 향상시키기

스팀잇 사이트의 경우 영문 포스트는 그나마 이쁘게 설정되어있는데, 한글의 경우 폰트 설정도 엉망이고 줄간격, 자간 등이 전혀 한글 읽기에 최적화가 되어있지 않습니다. 특히 윈도우 환경에서 볼때 포스트 본문에 대해 OS 기본 폰트가 로딩되지 않도록 개발이 되어있어서 정말 안타까웠습니다. 그래서 결국 답답한 마음에 크롬 브라우저 사용자들을 위해서 크롬 확장 프로그램을 개발해 보았습니다. 스팀잇 폰트 체인저 소개 “스팀잇 폰트 체인저” 크롬 확장 프로그램을 설치하면 무엇이 바뀌는지는 다음 스크린샷을 참고해주시면 한눈에 이해하실 수 있습니다. ...

2018년 2월 28일 · 2분 · 355단어

Swift struct vs. class 차이점 비교 분석

Swift에는 struct와 class타입이 공존하고있기 때문에 아래의 차이점을 잘 숙지하고 상황에 맞게 사용하는것이 매우 중요하다. struct call by value (할당 또는 파라메터 전달시 value copy가 일어남) stack memory 영역에 할당 (속도가 빠름) scope based lifetime: 컴파일타임에 compiler가 언제 메모리를 할당/해제할지 정확히 알고있음 data locality: CPU 캐시 히트율이 높음 상속 불가능 (protocol은 사용 가능) NSData로 serialize 불가능 Codable 프로토콜을 이용하여 손쉬운 JSON <-> struct 변환 가능 (Swift 4 이상) 항상 새로운 변수로 copy가 일어나기때문에 multi-thread 환경에서 공유변수로 인해 문제를 일으킬 확률이 적음 1 class call by reference (할당 또는 파라메터 전달시 객체를 가리키고있는 메모리 주소값만 복사됨) heap memory 영역에 할당 (속도가 느림) 런타임에 직접 alloc하며 reference counting을 통해 dealloc이 필요 memory fragmentation 등의 overhead가 존재 상속 가능 NSData serialize 가능 Codable 사용 불가능 런타임에 타입 캐스팅을 통해서 클래스 인스턴스에 따라 여러 동작이 가능 deinitializer 존재 참고: class안에 struct 변수를 property로 정의하는것 가능하며, 반대로 struct의 property중 하나로 class 인스턴스 변수를 갖고있는 것도 가능하다. 이 경우 해당 struct 변수의 copy가 일어날때 class 인스턴스의 주소값만 복사된다. ...

2018년 1월 30일 · 3분 · 549단어

Swift Closure vs. Objective-C Block 차이점 비교 분석

Obj-C의 블락(block)이나 Swift 클로저(closure)는 컨셉은 거의 동일하나 closure 내부에서 현재 scope에 존재하는 값 타입(value type) 변수들을 캡쳐(capture)해서 사용할 때 기본동작이 반대로 되어있기 때문에 사용법에 주의를 기울여야 한다. 반면 클래스 인스턴스와 같은 참조 타입(reference type) 변수들은 항상 reference copy가 일어나기 때문에 두 언어를 사용할때 차이점에 크게 신경쓰지않아도 된다. (대신 retain cycle이 생기지 않도록 조심해야 한다.) 다음 예제들을 통해서 차이점을 좀 더 자세히 알아보자. Capture in Swift closure Swift의 경우 일반적으로 value type 변수를 다른 변수에 할당하거나, 함수 파라메터로 전달 할 때 copy동작이 기본이다. 하지만 closure에서 변수를 capture를 할 때는 명시적인 capture list를 작성하지 않으면 value type 변수(struct 변수 포함) 임에도 불구하고 reference capture가 일어난다. 확인을 위해서 다음 예제를 살펴보자. ...

2018년 1월 30일 · 2분 · 305단어

도메인 설정 변경 확인 명령어

도메인 레코드를 추가한다거나, 네임서버 주소를 바꾼다거나 하는 등 도메인 관련 설정을 변경하고나면 제대로 설정이 전파되었는지 확인하기 위해 지루하게 기다리는 시간이 이어진다. 도메인 설정이 모든 DNS들에게 전파되는데는 최대 1~2일까지 걸린다고 하지만 요즘은 refresh time이 빨라서 그런지 느낌상 대다수가 거의 1시간이내로 변경되긴 하는 듯 하고, 특히나 국내에서만 보면 10분내로도 변경된 설정이 바로바로 반영이되는듯 하다. Tip: 해외에서 웹사이트가 잘 접속되는지 확인하려면 https://pulse.turbobytes.com 사이트를 추천한다. DNS 변경내역 확인을 위한 더 정확한 방법 A레코드 같은것들이야 변경되면 웹브라우저를 열어 해당 도메인에 요청을 계속 보내거나 ping을 해서 IP주소가 잘 변경되었는지 확인하면 되지만 그외 레코드들은 확인할 방법이 마땅치 않아서 이것저것 찾아보던 중 다음 명령어를 발견했다. ...

2018년 1월 28일 · 3분 · 547단어

MySQL utf8에서 utf8mb4로 마이그레이션 하기

Emoji같은 글자들은 utf8 인코딩 되는경우 글자당 최대 4bytes까지 필요하다. 하지만 기존 MySQL의 utf8 필드의 경우 글자당 최대 3bytes 까지만 지원하는 한계점이 있었다. 때문에 MySql database에서 utf8mb4 설정을 해두지 않으면 해당 글자들이 포함된 텍스트가 입력되었을때 제대로 저장을 하지못하고 문자가 깨져버리는 사태가 발생하게 된다. 최근들어 이러한 글자들의 사용이 보편화 되고있기 때문에 이러한 문제를 막기 위해서 서버 환경변수와 데이터베이스 테이블 스킴을 utf8mb4를 지원하도록 어서 변경을 해두는 것이 좋다. 😁😂😃😄😅😆💩 주의: 항상 그렇듯이 모든 변경 전에는 DB를 백업해두자! ...

2017년 11월 14일 · 3분 · 481단어

Swift 익스텐션, Obj-C 카테고리 메서드명 Prefix하기

Obj-C category의 위험성 Obj-C에서 동일한 메서드 이름을 가진 카테고리(category) A, B가 동시에 존재하더라도, 컴파일 타임에 오류가 발생하지 않고 정상적으로 빌드되어 실행이 가능하다. 하지만 런타임에서 A와 B중 어떤 녀석이 먼저 호출될지 알 수 없기때문에 (규칙이 없으며 랜덤하게 호출됨) 매우 위험한 상황이 발생한다. 이를 방지하기 위해서 Obj-C에서 카테고리 메서드에는 프로젝트에서 사용하는 고유의 prefix를 붙여줘서 이름이 완전히 겹칠 확률을 최대한 줄여주는 방식을 꼭 사용해야 한다. 그렇지 않으면 외부 라이브러리를 사용할때 해당 라이브러리에 동일한 category명이 존재해서 랜덤하게 호출되는 상황이 발생 할 수 있다. 이는 매우 원인 파악도 힘든 에러가 될 것이기에 꼭 피해야 한다. ...

2017년 9월 23일 · 2분 · 381단어