개발자Tech2021. 8. 14. 19:56

개발자에 종사하다 보니, 새로운 서비스 개발을 맞게되었는데 요구사항이 여러 서브 도메인을 운영하거나, 고객들이 보유하고 있는 도메인을 자사서비스에 적용할 수 있는 스팩이 포함되어있었다. 관련해서 공부할 겸 기록을 남겨둔다.

 

* nginx + certbot 조합이 아닌, Caddy를 사용한 이유

 

 1. ACME를 지원하는 것은 다양하다. 하지만 대부분의 ACME 클라이언트의 경우 OS 환경에 따라 구축하기 어려울 수 있다.

  - 대표적으로 let's encrypt 인증서를 쉽게 발급해주는 certbot의 경우 윈도우, 우분투 등은 잘 지원하나, CentOS 등에서 호환성이 아쉽다.

 

 2. Nginx의 경우 domain by domain으로 개별 도메인에 인증서를 전부 연결해야하며, 연결된 모든 도메인의 인증서를 관리해야한다.

  - certbot을 통하여 관리할 수 있으나, 보유중이지 않은 도메인, 쉽게 말해 내가 관리할 수 없는 도메인들은 인증서 발급이 까다롭다. (와일드카드 인증서는 절대 발급 못받는다)

 

 3. 이것은 나한테만 해당되는 것인데 현재 개발중인 서비스는 연결될 도메인이 고객이 소유한 도메인인 관계로 제어할 수 없으며, 특히 DNS 레코드 설정 등이 즉시 구성될 수 없는 환경인 관계로 대응하기가 어렵다.

 

 Caddy의 경우  On-Demand TLS 라고 하는 새로운 기능이 추가되었다. 이 기능은 처음 접속 시 TLS handShake 하는 과정 중에 새 인증서를 동적으로 가져온다는 것이고 이는 서비스 구성시 미리 도메인 이름을 지정할 필요가 없다는 것이다.

 

 물론 다른웹엔진 + certbot으로도 구현할 수 있지만 이 방법이 지금 이 순간에는 가장 편한방법인 것 같다.

 

 

 * Caddy 2 설치하기

 

 우선 최신으로 업데이트를 하고 시작한다.

sudo yum update -y

 

 그 다음 go언어를 설치한다.

yum install -y golang

 go가 잘 설치되었는지 확인한다.

go version

위와 같이 버전이 나오면 완료

 

 Caddy를 설치할 폴더로 이동해서, Caddy를 쉽게 설치해주는 XCaddy를 다운받는다. (저장소를 통해 설치도 가능하지만 그러면 데비안계열을 제외하고 원하는 플러그인을 쓸 수 없다.) Caddy의 소스코드를 다운받을 필요는 없다.

wget https://github.com/caddyserver/xcaddy/releases/download/v0.1.9/xcaddy_0.1.9_linux_amd64.tar.gz
tar -vxf xcaddy_0.1.9_linux_amd64.tar.gz

 필요한 플러그인을 추가해서 빌드한다. (필자는 프록시가 필요하여 프록시도 같이 빌드 함)

./xcaddy build --with github.com/caddyserver/ntlm-transport --with github.com/mastercactapus/caddy2-proxyprotocol

 

 설치 이후에는 caddy 명령어를 통해서 서버를 실행시켜본다.

./caddy run

 

 접속해보면 "404 Not Found" 라는 창이 나올 것이다. 그렇다면 caddy는 정상적으로 설치되서 실행중이나, 아직 인덱스 파일을 만들지 않아서 실행되지 않는 것이다.

 

 이제 On-Demand TLS를 위해 설정파일을 만든다.

 sudo vim ./Caddyfile

 

# 상용에 아래 코드를 절때 안전장치 없이 배포하면 안됨
# Caddy는 모든 클라이언트의 TLS 핸드셰이크 과정에 있는 모든 ServerName에 대한 인증서를 얻으려고 시도 함.
# 서버를 위험에 빠뜨릴 수 있음. 
{
  email user@examplemail.com
}

https://

tls {
    on_demand
}
reverse_proxy localhost:8081

 * 주의사항

 위의 코드는 상용서버에 적용하면 대단히 위험함. 이유는 모든 클라이언트를 신뢰할 수 없으며, 클라이언트 중 공격을 시도하는 해커들이 존재할 수 있음.

 

 상용에서는 아래 예제와 같이 구현하는 것이 보다 안전함.

# 상용 예제
# ask에 응답할 내부 포인트가 필요함 - 별도의 인증 서비스 구성 필요
# Caddy는 http://localhost:14331/check?domain=example.com 과 같이 호출할 것임.
# 200 OK 를 리턴하면 인증서를 발급함, 따라서 그 외에는 403에러 등을 발생시키면 됨.
# interval 변수로 정한 시간당 burst 변수에 정해진 횟수까지만 인증서 요청이 가능 - 예제) 2분당 5회까지

{
    email user@examplemail.com
    on_demand_tls {
        ask      http://localhost:14331/check
        interval 2m
        burst    5
    }
}

https://

tls {
    on_demand
}
reverse_proxy localhost:8081

 

 이제 설정파일을 만들었으니 실행해봄

sudo ./caddy run --config ./Caddyfile

 DNS서버에 아무거나 세팅해서 해당 서버에 연결하면, 무엇을 연결하던 TLS로 접속하는 것을 확인할 수 있다.

 

 여기까지 마쳤다면 Caddy를 통한 Automation-TLS > On-Demand TLS 서비스를 구현한 것이다.

Posted by Gerry.
주변기기2020. 1. 27. 22:00

아이패드 1세대를 써왔으나 갤럭시탭(노트10.1, 갤럭시탭A)을 거쳐 결정적으로 카카오톡 태블릿 지원으로 인해 6년만에 다시 아이패드로 돌아오게 되었다. 그 동안은 알뜰폰 Tplus의 유심을 별도로 구매해서 썼으나, 이제 태블릿 지원으로 별도의 번호가 필요없어져 해지 후 KT M모바일의 데이터 쉐어링 유심을 사용하게 되었다.

 

그런데...

 

아이패드 서비스 없음

 

"서비스 없음"...? 유심이 불량인가...?

 

아이폰 서비스 잘됨

아이폰에는 정상인식이 된다. 약간의 검색을 해보니...

 

 - 문제원인

 

"아이패드LTE를 첫 구매할 때 통신사를 통해서 구매한 경우 데이터쉐어링 유심이 인식되지 않는다고 합니다. 외국제품이거나 공홈을 통해서 구매한 아이패드LTE의 경우에는 아무 문제가 없이 인식이 가능하다고 하네요. "

 

... 아이패드를 다시 사야하는 것인가...

 

 - 해결책

 

"데이터쉐어링 유심을 전화기능이 있는 갤럭시탭에 일단 장착하여 여러번 재부팅하여 LTE신호가 뜨는 것을 확인시킨 후 아이패드에 장착하면 LTE신호가 뜬다는 정보를 접하게 되었습니다. 일단 어떤 방법이든 갤럭시탭을 구해 봅니다."

 

 정말 다행이였다. 나는 갤럭시탭을 써왔었고 카카오톡때문에 바꾼것이기에 고장나거나 처분하지 않았었기 때문이다.

 그래서 갤럭시탭(갤럭시탭A 8.0 2017 LTE KT발매)에 연결 해보았는데

 

번호등록(나밍) 불가, 저기서 멈추었다.

 고객센터에 전화를 걸기 전에 고객센터앱을 한번 확인해보았다.

 

통신사 전산에는 기변이 되었다.

 어머? 통신사에는 정상 등록이 되었네...? 그럼 유심을 바꾸어 끼어볼까?

 

개통성공

데이터가 정상적으로 된다! 그리고 전산에도

통신사 정상 인식

아이패드 Pro 12.9인치 512GB라고 정상 인식이 되었다. 다만, 설정->일반->정보 탭의 셀룰러 데이터 번호는 알수없음이라고 뜬다. 아까 태블릿이 정말로 나밍(유심번호등록)이 실패했나 보다. 이 문제는 고객센터(114)의 통화품질부서에 전화하면 신호를 다시 쏘는 과정을 통해서 해결되었다. 원인은 태블릿이 개통대기로 잡혀있어 나밍이 되지 않는 상태였다고... 암튼 이제 아이패드를 와이파이 없이 밖에서 사용할 수 있게 되었다! (아이패드에서 나밍한 이유로 갤럭시탭에서도 정상 인식 및 사용이 되었다!) 이제 출퇴근때 환승이나 사람 많으면 끊기는 와이파이 걱정 사용할 수 있게 되었다!

Posted by Gerry.
개발자일기2020. 1. 27. 21:30

드디어 첫출근 첫주차이다, 선임분깨서 코드가 망가지면 복원하면 되고 또 테스트 서버니 커밋을 해 보아도 된다고 하셨다. 그래서 이 번주에는 처음으로 커밋을 해보았다. 두근두근 ㅋㅋ... 푸시까지 성공적으로 이루어졌다! 안혼나겠지..?

인생 첫 커밋!

하지만 아직까지 코드를 이해하지 못하고있다... 토비의 스프링책을 읽기 시작했는데 언젠가 이해할 수 있는 날이 오겠지...?

'개발자일기' 카테고리의 다른 글

신입 개발자의 면접후기  (1) 2020.01.14
Posted by Gerry.
개발자일기2020. 1. 14. 00:29

곧있으면 졸업이다. 졸업을 하기 전 새로 시작하거나 아직까진 시작으로 보이는 서비스회사에 가고 싶었다.

이유로는 그러한 곳은 다양한 일을 해야된다는 것이고 나중에는 절대로 경험해 볼 수 없을 것 같았다.

 

1. N사(합격)

 이 회사같은 경우 개발 직군으로 가서 나의 교육 관련 경력을 보고는 개발자의 길이 아닌 유지보수와 사용자 대상 교육 프로그램 진행 관련 직무를 맏을것을 권장하였다. 질문으로는 개발인지 알고있었지만 내부에서 소통이 어떻게 이루어졌는지 모르겠지만 직무에 관하여 물어보았으며, 그 밖에는 심도있는 질문은 없었다.

 

2. A사 (합격)

 이 회사는 만남주선 관련 서비스를 만드는 회사로서 서버개발자(PHP 언어 주력)를 뽑는 면접이였다. 오고 간 질문으로는 SQL 인젝션 공격이라던가, OSI 계층 구조, Modern PHP, 현재 PHP 최신버전, 졸업작품에서 쓰인 기술과 역활 등에 대하여 질문이 오고 갔으며, 회사 서비스에 대하여 이야기가 오고 갔었다.

 

3. C사 (합격, 입사)

 여기는 캠핑 등의 후기와 예약 중계업을 하는 회사로 이번에 N사에 위탁해 중계하던 것에서 벗어나 자체플랫폼과 사이트, 앱을 출시하고 싶어하며 외주로 진행하고 있었던 커뮤니티 서비스 등을 자체 개발로 전환하기 위해 신규 개발팀을 꾸리는 회사이다. 사실 복지는 A사가 월등히 좋았으나 이 회사를 선택한 이유로는 아직은 IT서비스 회사라고 부를 수 없지만 Y사처럼 자체 서비스를 통하여 기존에 있던 본인들의 비지니스 모델을 이전하고 싶어하던 회사였기 때문이다. 즉 시작을 하는 회사는 아니지만 IT는 처음이고, 덕분에 완전히 0베이스가 아니였다는 점이다. 이 회사는 자체 개발팀이 존재하지 않았기 떄문에 기존 협업하던 회사 개발자분과 함께 면접을 보았다. 기술 면접내용으로는 연결리스트 그리고 이중연결리스트의 활용 시나리오. 스택을 어디에 적용하였을 때 효율적일까, 다른 개발자와 다르게 요즘에는 전공자도 학원 경력이 있는데 왜 없는지에 대한 내용 등의 질문이 오고 갔고 (솔직히 이중연결리스트같은 경우는 학부생때도 한번 언급하고 넘어간 것이고 이건 면접담당 개발자분깨서도 실무에서도 사용을 잘 안하며, DB를 활용하기에 더더욱 필요성이 없다고 공감해 주셨다.) 좋은 인상을 남긴 것 같다.

 

 그래서...

 

  이제 곧있으면 학생에서 벗어나 처음으로 개발을 시작하게 된다. 아직까지는 막연한 두려움이 있다. 하지만 그동안 어떻게 살아왔는가... 있었던 곳 모두에서 정말 적응 잘하여 잘 해왔지 않겠지 않는가, 어찌됬든 나는 나대로 이제 개발자로서 커갈꺼고 회사도 비지니스 모델이 확실하니 성장할꺼 같다. 둘 다 나중에 유명해질 정도로 성장할 수 있으면 좋겠다.

'개발자일기' 카테고리의 다른 글

첫 커밋!  (0) 2020.01.27
Posted by Gerry.