학습 배경사내 블로그 서비스의 개발 환경을 구축하던 중 certbot과 dns 챌린지 방식을 활용해 https 설정을 했고,그 과정에서 생긴 궁금증들을 해결해보았다. Certbot이란?Certbot은 Let's Encrypt라는 CA에서 SSL 인증서 발급 및 관리를 위해 제공하는 오픈소스 도구다.CA(Certificate Authority)는 말 그대로 https 인증을 하는 기관이고, Let's Encrypt는 CA 종류 중 하나이다. SSL 인증서의 목적은 무엇일까?SSL 인증서는 이 서버가 해당 도메인의 진짜 주인이다라는 것을 인증한다. 도메인의 주인이라는 것을 왜 인증해야 할까?공격자가 중간에서 브라우저의 요청을 가로채 진짜 서버인척 흉내를 낼 수 있기 때문이다.이를 MITM(Man in the..
문제 상황DailyBlog 내 게시글 목록을 새로 고침하면 0.5초 정도 지연되는 현상을 발견했다.개발자 도구로 응답 시간을 확인해보니 사용자가 충분히 체감할 수 있는 400~900ms로 측정되었다.블로그 서비스에서 게시글 목록이 늦게 로딩되는 현상은 사용자 경험을 크게 해칠 수 있기 때문에 이를 해결해보기로 했다. 시도한 것우선 개발자도구-네트워크 탭 내 Waterfall 항목을 확인해보았다.요청 시간 817ms 중 서버 응답 시간의 비율이 97%(807ms)였다. 다음으로는 django 애플리케이션 로그를 확인해보았다. django 애플리케이션에서는 별도로 구현한 LoggingMiddleWare를 통해 요청의 진입~탈출까지의 시간을 duration이라는 필드로 로그에 기록하고 있다. 해당 요청 로그..
학습 배경최근 블로그 클론코딩(리버스 엔지니어링)을하며 nginx에 https를 설정하는 작업을 했다.이전 프로젝트부터 https를 몇 번 다뤘지만 한번도 내부를 들여다 본 적이 없어 이번 기회에 알아보았다. https란?패킷을 평문으로 송신하는 http와 다르게 https는 암호화하여 송신한다.암호화 되어있기 때문에 패킷 송신 중 누군가가 탈취/감청을 해도 패킷의 내용을 알 수가 없다. https 통신에서는 클라이언트가 패킷을 암호화하여 송신하면 서버가 이를 수신하고 복호화한다.(응답 시에는 그 반대) 데이터를 암호화/복호화하기 위해서는 키가 필요하다.https를 알아보기 위해서는 대칭키와 비대칭키에 대해 알아야한다. 대칭키는 하나의 키를 가지고 암/복호화를 모두 할 수 있다. 말그대로 대칭이다.반대로..
지난 글을 작성하고 2달이 지났다.그동안은 ing였기도 하고 너무 바빴어서 기록을 남기지 못했다.물론 지금도 ing이기는 하지만, 지난 목표도 이뤄내고 수료도 했기에 한 숨 돌릴 수 있게 되었다. 결론부터 말하자면 TF팀을 꾸려 전시 공간 서비스인 포게더(우리는 v2라고 부른다)로 피봇팅을 하고 사용자를 꽤 모았다.그리고 그 과정에서 많이 성장할 수 있었다.배경지난 번에 세운 액션 플랜에 따라 팀을 설득하고 함께 할 팀원들을 모았다.기존 서비스에 사용자가 왜 없을까를 함께 분석하고 논의했고,명확한 타겟층이 없어 특정 사용자의 문제를 해결하고 있지 않다는게 가장 큰 문제라 보았다. 이후 나를 포함한 대다수 팀원들이 전시에 관심이 많았던 덕분에, 졸업 전시라는 특정 도메인에 주목할 수 있었다. 초기 사용자 ..
안녕하세요, 우아한테크코스 백엔드 7기 레오입니다.우아콘 참여권 추첨에서 운이 좋게 당첨되어, 2025 우아콘에 다녀올 수 있었습니다. 이에 우아콘 세션을 보고 들으면서 느낀점을 공유합니다!지극히 개인적으로 느낀점 위주이니, 그냥 가볍게 읽어주시면 좋을 것 같아요.전체 후기사실 기술적으로 깨닫거나 얻어간 부분은 딱히 없었습니다.다만 우아한형제들의 구성원분들이 일하는 방식과 그 가치관을 직접 공유 받을 수 있다는 점에서너무나도 유익하고 만족스러웠던 시간이었습니다.무엇보다도 끊임없이 도전하고 성장하는 연사님들이 멋있었습니다. 세션 별 후기1) 고객의 편리함을 완성하는 프로세스, 배민 사용자경험관리“배달의민족”의 UX를 개선하기 위해, 어떤 노력과 변화를 줘왔는지를 알 수 있었습니다.또한 TF 팀 운영 방식에..
오늘 DB 특강을 듣고나서 3, 4기 선배분들이랑 얘기할 수 있는 기회가 생겼다. 취업 때문에 어수선한 환경 속에서 들었던 내 고민들을 여쭤봤다. 그리고 답변들로부터 나는 취준으로부터 현실도피를 하는 것일 수도 있겠다는 생각이 들었다. 고민이 많아졌다. 우테코에서의 지난 시간이 후회되기도 했고, 앞으로 어떻게 해야할지 막막했다.집에 와서 노트에 생각들을 끄적이기 시작했고, 어느정도 생각이 정리된것 같아 글을 작성해본다. 지난 레벨 4의 나레벨 4 초반에 앞으로의 방향성에 대해 팀과 논의했었다. 나와 한 명을 제외하고는 전부 프로젝트에서 포폴 요소만 챙겨가고 큰 비중을 두지 않겠다는 선택을 했다. 온도 차가 달라 아쉬웠지만 팀플은 혼자할 수 있는게 아니므로 받아들일 수 밖에 없었다. 그렇게 1주, 2주가 ..
과거에 지난 기수 블로그들을 찾아보며 `왜 레벨 2부터는 회고가 없지?`하고 의문을 가졌었다. 직접 경험해보니 알 것만 같다. 나도 레벨 1 미션마다 회고했지만. 레벨 2에서 이리저리 치이면서 여유가 부족했고, 회고를 작성하지 못했다(않았다). 그런 사유로 레벨 3을 앞둔 이 시점에 레벨 2에 대해 간략하게 회고를 진행해 보았다. 4번의 미션과 페어 프로그래밍, 근로 업무, 유강스, 오브젝트 스터디, 레벨2 데일리, 이프와의 커피챗, 더 많은 크루들과 친해지기 등... 레벨 2에도 힘들고. 즐거운 일들이 참 많았다.유연해지기레벨 2 동안 가장 노력했던 것은 다른 의견을 유연하게 수용할 줄 아는 것이었다. 이전까지의 나는 내 방식만 정답이고 다른 사람의 방식은 틀렸다는 편협한 생각을 주로 지니고 있었다..
드디어(벌써?) 레벨 1의 마지막 미션인 장기를 끝냈다. 마지막 미션이었던만큼 생각할 것도 많고 미션 기간도 길었던 것 같다.장기 미션은 step1에서 기물 이동 구현을, step2에서 궁성 구현 및 db 적용을 요구로 했다. 변경에 유연한 코드미션을 시작하며 페어인 제프와 가장 먼저 고민했던 것은 여러 종류의 기물을 어떻게 구현할 것인가였다. 우선 각 기물 클래스가 Piece라는 추상 부모 클래스를 상속 받게 하는 방법을 떠올렸다. 그리고 step2에서 궁성에 대한 기능 요구사항이 추가될 것을 대비해서 조합, 더 나아가 전략패턴도 함께 고려해봤다. 논의 끝에 우리는 상속을 사용하기로 했고 이유는 다음과 같았다.1. 완벽한 is-A관계이다.2. 궁성에 대한 것은 2단계 기능 요구사항이다.3. 궁성이 추가..
레벨 1의 세번째 미션인 블랙잭이 끝났다. 이전 미션이 출석이었어서 그런지 이번 미션은 비교적 여유롭다고 느껴졌다.상속 vs 조합이번 블랙잭의 핵심은 딜러와 플레이어에서 발생하는 중복 로직들을 해결하는 것이었다. 주로 나온 방법들이 상속과 조합(합성과 같음)이었고, 나는 상속이 더 익숙했기 때문에 상속을 택했다. 물론 "딜러 is A 겜블러"라는 상속 관계가 적절하다고 생각해서 상속을 선택했기도 하다. 딜러와 플레이어는 모두 게임에 참가하는 겜블러라고 보았고 겜블러를 추상 클래스로 만들어 딜러와 플레이어가 상속 받게 했다. 그리고 딜러와 플레이어의 로직 차이는 초반에 공개하는 카드의 장수 차이만 존재한다고 생각해서 겜블러의 getInitialCards를 추상 메서드로 선언하였다. 이렇게 중복되는 로직은 ..
레벨 1의 두번째 미션인 출석이 끝났다. 이번 미션은 1단계에서 페어랑 함께 TDD로 구현하고, 2단계에서 혼자 처음부터 다시 TDD로 구현하는 것이 요구사항이었다. 우선 1단계는 많이 힘들었다. 그 명성과 대략적인 프로세스만 들어봤지, TDD를 직접 해보기는 처음이었기 때문이다. 페어인 젠슨도 TDD가 처음이었어서 둘이서 상당히 헤맨 기억이 있다. 무엇보다 어디서부터 어떻게 시작해야할 지가 가장 막막했었다. 예를 들어 A 객체에 대한 실패하는 테스트를 만들고 구현하자니, B 객체가 필요했다. 그래서 B 객체에 대한 실패하는 테스트를 만들고 구현하고자 하니, 또 C 객체가 필요했다. 이런 것이 몇번 반복되다 보니 젠슨이랑 나는 당황스러운 감정을 감추지 못하고 같이 웃기 바빴다. 지금 돌아보니 젠슨이랑 많..
