전체 글 476

특출난 재능을 이길 수 있는 것은 꾸준함뿐이다.

말그대로다. 천재를 이기려면 꾸준히 시간을 갈아넣는 방법 말고는 없다. 천재를 이기기위한 지름길 같은건 없다. 아무리 멀어도 빙빙 돌고 돌아서 시간과 피땀을 갈아넣으면 어쩌면 언젠가는 넘을 수 도 있다. 그외의 방법은 없다. 일반적인 사람은 천재가 아니니까. 특출난 재능을 이길 수 있는 것은 꾸준함뿐이다. 꾸준히 길을 찾다보면 답이 보일거라 생각한다. 지금은 어두워서 한치 앞도 못볼 수도 있다. 아직 많이 부족해서라고 생각한다. 자신이 맞는 길이라고 확신한 길을 계속 걷다보면 언젠가 기회는 찾아온다. 확신이 흔들릴때는 가능성과 판단의 합리성을 의심해야지 나를 의심하면 안된다. 기회를 잡고 성취하면 다시 또 나아가면 된다. 그렇게 아주 조금씩 걸어가면 된다. 천재성, 꾸준함, 노력, 열정, 행운 중에서 가..

생각들 2022.09.17

개인 프로젝트 준비

최근 그동안 해온것들을 돌아봤는데 프로젝트가 너무 빈약하다는 생각이 들었다. 미완성으로 끝난 프로젝트도 있었고 뭔가 제대로 완성된 결과물이 빈약하다는게 아쉬웠다. SpringBoot를 사용해서 여러 프로젝트에 참여했지만 스스로 너무 부족하다는 생각이 들었다. 어떤 기술을 쓰던 원하는 결과물을 만들어내는게 중요하다고 생각해서 이번에 개인 프로젝트를 제대로 만들어볼까 생각중이다. 생각해보니 개인 프로젝트를 제대로 진행해본 적이 없는 것 같다. 진짜 만들어보고 싶은게 뭔지도 진지하게 생각해본 적이 없던 것 같다. 지금 상태에선 Django와 SpringBoot 를 사용할 수 있는데 Flask 를 사용해서 만들어보고 싶은 것도 구상중이다. 이후에 좀 더 퀄리티를 높여서 SpringBoot를 사용해서 뭐든 결과물..

생각들 2022.09.15

[LeetCode] LeetCode 1576. Replace All ?'s to Avoid Consecutive Repeating Characters - python3

간만에 재밌는 문제를 만났다. 1576. Replace All ?'s to Avoid Consecutive Repeating Characters 문제인데 문제 자체도 재밌고 풀이 방식을 보던 중 꽤나 기발한 접근법을 보게 되어서 인상깊어서 기록해둔다. 우선 문제 링크는 아래와 같다. https://leetcode.com/problems/replace-all-s-to-avoid-consecutive-repeating-characters/ Replace All ?'s to Avoid Consecutive Repeating Characters - LeetCode Level up your coding skills and quickly land a job. This is the best place to expan..

[LeetCode] LeetCode 1572 - matrix-diagonal-sum - Python3

최근 심심해서 리트코드 문제를 몇개 풀었는데 그 중 재밌는 문제가 몇개 있어서 정리해본다. 1572번 문제이다. EASY인데 첫번째 솔루션에 비해서 코드를 꽤나 효율적으로 개선해서 정리해볼 필요가 있다고 생각해서 적어둔다. 일단 아래는 첫번째 제출한 솔루션이다. 꽤나 비효율적이라는걸 알 수 있다. 일단 for loop 이 두개 있다는것부터 비효율적이다. ''' Runtime: 207 ms, faster than 24.29% of Python3 online submissions for Matrix Diagonal Sum. Memory Usage: 14.1 MB, less than 57.39% of Python3 online submissions for Matrix Diagonal Sum. ''' class..

[스타트업 인턴] 하계 인턴 계약 만료. 다시 학교로 돌아가다.

두 달간의 인턴 기간이 오늘부로 끝났다. 오늘까지 두 달간의 기간 동안 많은 일들을 해보았다. 처음에 자바 안드로이드 라이브러리 개발로 지원했는데 면접 당시 옆에 계신 분께서 파이썬과 장고를 활용한 백엔드 개발 포지션을 추천해주셔서 응하게 된 것이 계기였다. 솔직히 말해서 오히려 좋았다. 원했던 포지션이 아니었음에도 뭐가 되었든 백엔드 개발을 할 수 있다는 점이 마음에 들었다. 이곳에서 일하면서 가장 좋았던 점은 만났던 사람들이라는 생각이 든다. 밥도 같이 먹고 오후 근무 시작전까지 많이 떠들었다. 물론 당연히 기술적으로도 많은 걸 배우고 경험할 수 있었다. 실수를 해서 다행이라는 생각이 들었다. 그 부분에서 문제가 나타나지 않았더라면 언젠가 더 큰 장애로 이어졌을 수도 있었겠다는 생각이 들었고 동시에 ..

[Django] Django 에서 테스트 코드 부분 실행하기

만약 테스트 코드를 일부 실행하고 싶다면 아래와 같이 진행하면 된다. app 명 + 테스트 코드 디렉토리명 + 테스트 코드 .py파일명 + 테스트 코드 클래스 + 테스트 클래스 메서드 명 순으로 적어주면 된다. # Run the specified module python3 manage.py test catalog.tests # Run the specified module python3 manage.py test catalog.tests.test_models # Run the specified class python3 manage.py test catalog.tests.test_models.YourTestClass # Run the specified method python3 manage.py test c..

Python3/Django 2022.08.18

[Django] CommandError: You must set settings.ALLOWED_HOSTS if DEBUG is False.

Django 를 production 상에서 운용할때는 반드시 DEBUG = False 로 두고 실행해야 한다. 그 이유는 DEBUG = True 로 두고 운용을 하게 되면 서버 운용 중 발생한 오류가 사용자에게 보이기 때문이다. 이 때문에 해커가 프로젝트의 구조를 파악할 수도 있게 된다. 그래서 반드시 DEBUG=False 로 두고 운용해야 하는데 막상 DEBUG = False 로 두고 runserver 를 돌리니 다음과 같은 에러가 발생했다. CommandError: You must set settings.ALLOWED_HOSTS if DEBUG is False. 어떻게 해결할 수 있을까? 해결법은 간단하다. 에러 로그가 하는 말 그대로 진행하면 된다 . settings.py 에 있는 ALLOWED_H..

Python3/Django 2022.08.18

[Django] drf-yasg가 적용되지 않을때 + ImportError: cannot import name 'url' from 'django.conf.urls' + frozen importlib

Django 를 사용해서 api 개발을 하던 중 api 스펙을 자동으로 생성해주는 drf-yasg 를 사용하려고 했다. 그런데 계속 frozen importlib 에러가 지속적으로 발생했고 django.conf.urls 에서 url 을 import 할 수 없다는 에러가 발생했다. 근데 당시에는 너무 바쁘고 일이 많아서 api 자동 생성을 후순위로 밀어두고 기능 개발을 빠르게 진행했었다. 그러다가 다시 api 를 살펴볼 일이 생겼는데 아예 오늘 drf-yasg 오류를 잡고 api generation을 끝내자고 생각해서 문제를 해결하게 되었다. 우선 ImportError: cannot import name 'url' from 'django.conf.urls' 는 버전 이슈다. 스택오버플로우를 참고한 결과 아..

Python3/Django 2022.08.18

[Github] private repository 에 push하기 + ssh-keygen

private repository 에서 작업하면서 인증키를 등록해놓은 상태여서 push 하는데 문제가 없었다. 다만 문제는 근 몇주간 클라우드 세팅때문에 코드 작업을 거의 진행하지 못했는데 갑작스레 인증키가 invalid 하다는 에러가 떠서 push 가 되지 않았다. 우선 아래와 같은 명령어를 입력해주자. $ ssh-keygen 이후 passphare 등을 묻지만 그냥 엔터로 입력하고 지나가도 무방하다. 그리고 나서 키가 생성되는 위치와 함께 키 생성이 완료됬음을 알 수 있다. 그리고 cat 명령어를 통해 id_rsa.pub 키를 알아낸다. 자 이제 이 pub 키를 github 에 가서 등록해줘야지만 private repository 에 push 를 할 수 있다. 그리고 이후 아래와 같은 과정을 거쳐서 ..

인프라/Git 2022.08.18

[스타트업 인턴] 스타트업 인턴을 시작하고 한달이 지났다. 잘 지내고 있습니다.

서울에 있는 모 스타트업에서 하계인턴을 시작한지 벌써 한달이 되었다. 꽤나 바빴던 한달이었다. 앞으로도 한달이나 더 남았지만 한달이 지난 시점에서 한번 되돌아보는 시간을 가져보려고 했다. 처음 제안을 받았을때는 내가 애초에 지원했던 라이브러리 개발이 아니라 파이썬과 장고를 활용한 백엔드 포지션으로 들어와서 너무 좋았다. 사실 Django를 사용해본적이 없어서 내심 백엔드 개발 포지션을 탐내고 있었지만 먼저 포지션 변경 제안을 해주셔서 나는 좋았다. 하지만 기쁨도 잠시 Django를 이틀만에 빠르게 학습해야했고 NCP와 Nginx 그리고 도커 사용법을 익혀야했다. Django의 경우 파이썬을 오랫동안 사용해왔었고 SpringBoot를 활용해서 두세번 프로젝트를 진행했던 경험이 있었기 때문에 개념을 몰라서 ..

10월 4일 페이스북 대규모 장애 원인 간단 정리

2020년 10월 4일 페이스북은 물론이고 인스타그램, 왓츠앱 모두가 한꺼번에 접속되지 않는 문제가 발생했다고 한다. 장애 원인은 간단하게 정리할 수 있었다. 페이스북의 라우트가 라우터에서 즉 쉽게 말해 네트워크 상에서 없어졌기 때문이다. 즉 페이스북으로 무언가를 보내는 길 자체가 사라졌기 때문에 전 세계 어느 곳에서도 페이스북을 이용할 수 없게 된 것이다. 기업이 커지게 되면 하나의 작은 망을 구축해서 쓰게 되는데 페이스북도 마찬가지로 모든 서버들이 하나의 단일 지점을 기준으로 외부와 소통하고 있던 상태였다. 그런데 이 연결지점인 라우터가 자신이 facebook이라는 것을 외부로 알려주는 것을 중단했기 때문에 발생한 문제이다. 내부 개발자가 실수로 설정 정보에 라우터의 정보를 삭제하는 설정까지 넣은 상..

개발 정보 2022.07.29

[NCP] NCP 서버 생성 중 오류 발생 대응

NCP 사용 중 아래 에러가 발생했다. 관련 조치를 정리해둔다.   서버 생성 중 오류가 발생하였습니다. 점검 및 조치 방법은 설명서를 참고해주세요. 서버 강제 정지를 원할 경우 콘솔의 강제정지 버튼을 눌러주세요.  xentools version 이슈 -> 해결방법은 Xentools Re-install하면 된다고 합니다. 리눅스에서 Xentools를 재설치 하라고 합니다. 잘못된 fstab 설정 오류 ->   mount -av명령으로 /etc/fstab내용 진단 해서 해결할 수 있다고 합니다. window update 및 file system checkgin kernel 업데이트 오류 resolv.conf 오류

Cloud/NCP 2022.07.22

[NCP] Naver cloud platform 기초 학습 내용 정리 (입문)

NCP VPC 정의 VPC(Virtual Private Cloud)는 퍼블릭 클라우드 환경에서 사용할 수 있는 고객 전용 사설 네트워크임. 다른 네트워크와 논리적으로 분리되어 있어 IT 인프라를 안전하게 구축하고 간편하게 관리할 수 있음. 기존의 데이터 센터 네트워크와 유사하게 구현가능 기능 다른 네트워크의 간섭없이 완전히 분리된 네트워크 사용가능 VPC내부에 서브넷 생성 가능 Access Control을 통해 네트워크 접근을 제어하여 강력한 보안을 제공함. (ACG는 서버 단계의 접근을 제어하고 Network ACL은 서브넷 단계의 접근을 제어함) Cloud Connect와 Managed IPsec VPN을 통해 외부 네트워크와 안전하게 통신 가능 VPC내부에서 통신이 가능함. VPC Peering을 ..

Cloud/NCP 2022.07.21

[Python3] is와 == 의 차이

나는 처음에 이 둘이 완벽하게 동일하다고 생각했다. 사건의 발달은 이러하다. 조건문을 써줄 일이 있었는데 != 을 is not 으로 명시해주었다. 이렇게 하면 읽는 사람이 좀 더 쉽게 읽을 수 있을거라고 나름 생각했다. 그런데 문제가 생겼다. 당연히 될거라고 생각했는데 정상 동작하지 않았다. is 가 무엇일까에 대해서 검색해보면 해답을 찾을 수 있다. is 는 ==와 달리 값을 비교하는게 아니라 레퍼런스 즉 포인터를 비교한다. python3 에서 변수는 내부적으로 데이터를 가리키는게 아니라 인스턴스 포인터를 가리킨다고 한다. 그러니 쉽게 말하면 is 연산자는 포인터(레퍼런스)를 비교하는 연산자이지 데이터를 비교하는 연산자가 아니라는 것이다. 그러니 주로 None 과 False, True 를 비교할때 사용..

[Docker] Docker 기초 공부자료

주말에 읽어보자구요 ~ https://tech.ktcloud.com/84?category=465864 도커를 공부하는 초보자를 위한 안내서 5편 - 도커 설치 및 명령어 실습 도커(Docker) 기초 다지기 - 도커 명령어 및 실습 앞선 포스트를 통해 도커가 무엇인지 공부했으니, 이제 실전에 돌입할 차례입니다. 도커 설치부터 핵심적인 명령어까지 실습을 통해 차근차근 알 tech.ktcloud.com

인프라/Docker 2022.07.18

[Django] 10분이면 읽는 Django 기초 개념 정리 (입문자용)

7월 1주차에 급하게 Django 를 써야할 상황이 생겨서 이틀간 Django를 압축적으로 학습할 일이 생겼다. 그간 학습한 내용들을 간단하게 정리하도록 하겠다. 개인적으로 빠르게 학습하면서 (빠르게라기 보다는 급하게가 맞겠다.) 적은 내용들이라 다소 형식이 올바르지 못하더라도 필요한 내용들만 압축해서 정리해놓았다. 목차: 서버 구동 및 초기 설정 MTV 패턴 view (HTTP request, HTTP resposne) model (클래스 필드에 대하여, CharField, IntegerField, EmailField) DB migration, migrate DB 엔진 설정 (Mysql 연동 방법) Model api 사용법 (장고 기본 지원 ORM 사용법 - insert, select, update, ..

Python3/Django 2022.07.17

[Dev] HTTP에서 PUT과 PATCH의 차이

HTTP요청에서 PUT과 PATCH라는게 존재하는 것을 알고 있었는데 여태 둘이 같은 기능을 한다고 오해하고 있었다.  그러다가 Django를 학습하던 중 이 두가지를 구분해서 사용하는 예제를 보았고 분명 차이가 있다고 생각해서 오늘 찾아보았다.(생각보다 중요한 차이였다. 계속 모르고 있었다면 위험했다.) 우선 둘다 update를 한다는 점에서는 같다.  특정 객체를 디비에 밀어넣을때 내가 전달한 값으로 업데이트를 해서 넣는다는 점에서는 같다.  하지만 이 동작에서의 미묘한 차이가 있다.  PUT의 경우에는 업데이트를 할때 모든 값을 업데이트한다. 즉 모든 필드에 대해서 업데이트를 진행한다는 얘기다.  PATCH는 내가 전달한 값에 대해서만 업데이트한다. 전달한 필드에 대해서만 업데이트를 진행한다.  즉..

개발 정보 2022.07.15

[Django] Django에서 AbstractUser의 password 암호화, User모델 확장

Django를 사용해서 서비스를 개발 중이라고 가정하자. 우리는 보통 서비스를 만들때 User 모델을 정의하게 된다. 사용자 비밀번호, 아이디, 이름, 이메일, 가입날짜 등등을 이 모델안에 정의하게 된다. 그런데 이것만 가지고는 Django의 장점을 활용하기엔 부족하다. 그래서 Django에서는 User모델을 확장할 수 있게 도와준다. 확장을 해야 진짜 Django의 간편함을 누릴 수 있다. 어떻게 확장할까? 바로 상속을 통해서 가능하게 해준다. User모델을 정의하고 나면 우리는 AbstractUser를 상속받게 할 수 있다. 그리고 AbstractUser 안에는 username, password, email 등등의 기본적인 필드들이 존재한다. 미리 정의되어 있다. 그리고 우리는 상속을 통해 그 필드들..

Python3/Django 2022.07.15

[Django] Fatal error in launcher: Unable to create process using 에러 발생

djangorestframework-simplejwt를 install 하려는 와중에 pip에서 계속 문제가 발생했다. Fatal error in launcher: Unable to create process using 한참을 찾아보고 PATH값도 다시 수정해주는 작업을 했지만 소용이 없었다. 그리고 정말 간단한 해답을 찾았다. 내가 하려던건 pip install djangorestframework-simplejwt 였는데 이걸 아래처럼 입력해주면 해결된다. python -m pip install djangorestframework-simplejwt 명령어 앞에 python -m 을 붙여주면 된다. 아마 vscode 혹은 python 설치경로 지정에서 문제가 있엇던듯한데 굳이 그걸 설정을 바꿔가면서 하기보..

Python3/Django 2022.07.14

[스타트업 인턴] 첫 인턴을 시작하기까지의 과정과 고민들

대학생으로 있으면서 주변 사람들이 하나둘 취업하는 것을 보면서 많이 불안했던 것 같다. 나보다 일찍 취업에 성공한 친구들이 있었고 이미 취업에 성공해서 1년차 개발자라는 타이틀을 붙이고 있는 친구들도 있었다. 따라잡기 위해서 많이 노력한것 같다. 코딩테스트라는 것도 처음으로 공부해봤고 풀리지 않는 문제를 붙잡고 끙끙거리는 모습이 마치 수능 준비와 흡사하다는 생각도 들었다. 리트코드에서만 수백문제를 풀다보니 완전 초보적인 수준은 벗어나게 된것 같다. 처음엔 한 문제를 푸는데 한 시간은 붙잡고 있었던 것 같다. 그러면서도 이걸 꼭 해야할까에 대한 고민도 많았다. 그렇게 울며겨자먹기로 코딩테스트를 공부했지만 신기한건 문제풀이라는게 하면 할수록 재밌어졌다. 어째 게임도 잘하면 더 재밌는것처럼 문제도 점점 잘 풀..

코드를 작성하는 행위

최근 알고리즘 문제를 많이 풀었다. 이전에 백준에서 221개의 문제를 풀었고 이번에 leetcode에서 252개의 문제를 풀었다. 다른 사람들에 비하면 많이 부족한 수준이지만 개인적으로 느낀 점들이 많았다. 이것저것 작성해보고 말도 안되는 코드를 적어보기도 하고 끙끙대면서 여러 형태로 만들어보려고 노력했던 것 같다. 코드를 깔끔하게 만들려고 노력했고 더 빠른 코드를 만들 수 있도록 노력했다. 메모리적으로든 속도면에서든 효율적인 코드를 만들기 위해서 많이 고민했다. 이런 고민들을 하면서 느꼈던건 코드 품질이라는게 내가 생각했던 것보다 훨씬 많은 비중을 차지한다는 것이다. 이전부터 중요하다는 것을 인지하고 있었지만 꾸준히 개발을 하다보면 저절로 늘게 되는 능력이라는 생각을 했다. 하지만 이번에 느낀 것은 의..

생각들 2022.07.02

[스타트업 인턴] 첫 스타트업 하계 인턴 최종합격

얼마전에 모 스타트업에서 대면 면접을 봤다. 코딩테스트도 봤었고 이후 면접도 봤었다. 처음 지원한건 자바를 활용한 안드로이드 라이브러리를 개발하는 포지션이었다. 그런데 면접을 진행하면서 안드로이드 개발 대신 기존에 내가 계속 개발해왔던 백엔드 포지션을 제안해주셨다. 구체적으로는 파이썬을 활용한 백엔드 개발 포지션에 대해서 제안해주셨다. 순조롭게 면접이 끝났고 지금까지 쉬고 있었다. 오늘 메일을 받았는데 최종합격이라는 메일을 받았다. 그래서 영어로된 이름과 함께 졸업증명서, 통장사본을 보내달라고 하셨다. 여기까지는 좋은데 고민이 많다. 문제는 기술 스택이다. 내가 연마하고 싶은 기술은 Java 언어였다. 그게 안드로이드 개발로 지원한 이유였다. Java를 활용하면서 언어 활용도가 많이 늘 수 있을 것이라고..

[LeetCode] LeetCoe 1337. The K Weakest Rows in a Matrix - python3

재밌는 문제를 찾았다. 그리고 최근에 느낀거지만 Leetcode 에서 submit 을 하면 성능과 메모리가 어느정도 되는지 나오는데 그걸 줄여보려고 코드를 바꾸려고 했던 적이 많다. 근데 확실해진건 이걸 기준으로 성능, 메모리 최적화를 하긴 어렵다는 것이다. 그 이유는 그 결과가 항상 다르기 때문이다. 즉 그냥 근사치 정도가 아니다. 90퍼센트 효율이 뜨던 코드가 갑자기 10퍼센트 효율이 뜨는 경우도 있다. 그래서 그냥 이런 성능이랑 메모리 효율성을 따지기 보다 그냥 코드만 보기좋게 다듬는 연습을 하는게 더 낫다는 생각이 들었다. 그런데 마침 오늘 꽤 괜찮은 문제를 발견했고 최대한 코드를 줄여보려고 노력을 했는데 list comprehension의 한계에서 막혔다. 즉 list comprehension ..

[Python3] Exception has occurred: TypeError argument should be integer or bytes-like object, not 'str'

최근 새롭게 만들고 있는 프로젝트에서 암호화와 관련된 작업을 하는 와중에 Exception has occurred: TypeError argument should be integer or bytes-like object, not 'str' 라는 예외를 만날 수 있었다. 간단하게 해결할 수 있는 에러이다. 파이썬에서 bytes와 str은 아래와 같은 관계가 성립한다. str -> 디코딩 -> bytes bytes -> 인코딩 -> str 그러므로 encode를 해주던, decode를 해주던 utf-8로 해주면 된다는 소리다. 나 같은 경우는 RSA 키로 만든 public key와 private key가 결과물이 bytes 로 나왔는데 그걸 슬라이싱하려다가 발생한 오류였다. 아래 코드를 보면 알겠지만 exp..

[스타트업 인턴] 첫 스타트업 인턴 면접 후기

처음으로 회사에 직접 가서 인턴 채용 관련 면접을 보았다. 이전에 한번 동아리 면접을 본적이 있었는데 학생들끼리 진행하는 동아리 면접임에도 불구하고 엄청 떨었던 기억이 있다. 동아리 면접에서도 그렇게 떨었는데 왠지 모르게 회사에 가서 보는 대면 면접은 그때보다 마음이 편했다. 한번 동아리 면접에서 떨고나니 면접이라는게 결국은 내가 어떤 사람인지 탐색해보는 과정이라는 생각이 들었기 때문이다. 내가 좋으면 뽑고 별로면 안뽑는거다. 그게 전부다. 당일 회사에 가서 직접 면접을 보았는데 신기하게도 떨지 않았다. 아마 내가 예전보다 조금 나아진것도 있지만 면접관 분들께서 편안한 분위기를 만들어주었고 호응을 많이 해주었기 때문이라는 생각도 들었다. 내가 얘기할 시간도 많이 주셨던 것이 도움이 되었다고 생각한다. 면..

소프트 스킬과 하드 스킬

최근 트위터에서 소프트 스킬과 하드스킬에 대한 주제가 화제가 되었다. 물리엔진, ML 프레임워크, 컴파일러, 데이터베이스 등을 만드는 전문적인 개발을 하는 사람들의 경우 하드 스킬이 많이 요구되지만 일반적인 웹앱의 경우 평균 수준의 하드스킬이 요구되고 협업할 일이 많아서 소프트 스킬이 더욱 강조된다는 류의 트윗이었다. 최근 나도 협업에 대해서 많은 고민을 하고 있어서 이걸 보고 많은 생각이 들었다. 최근에 협업을 하면서 고민한 점들이 많아서 어떻게 협업을 이뤄내야할지에 대해서 진지하게 생각해보았다. 내 개인적인 견해는 이렇다. 하드 스킬은 기본중의 기본이다. 전문적인 엔지니어가 되기 위해서 하드 스킬이 필요한 것이고 진정 자신을 전문가라고 말하기 위해서는 하드 스킬을 쌓아야 하는 것이 당연시 된다. 그렇..

생각들 2022.06.20
반응형