분류 전체보기 126

👉 [Python] Deque vs List

collections 모듈은 Python에서 제공하는 내장 모듈 중 하나이다. 이 모듈은 여러 유용한 자료 구조를 구현하는데 사용되는데, 그 중 하나가 `deque`(Double-Ended Queue) deque는 양쪽 끝에서 삽입과 삭제가 모두 가능한 큐(Queue)와 스택(Stack)의 역할을 동시에 맡는다! 이 자료 구조는 데이터를 양쪽 끝에서 추가하거나 제거할 때 매우 효율적인데, O(1) 의 시간복잡도를 갖는다. list는데이터를 삽입하거나 삭제할 때 맨 끝을 기준으로 작업을 수행하기 때문에, 리스트의 길이가 길어질수록 작업 속도가 느려진다. 시간복잡도가 O(N) 에 수렴한다. 반면, deque 는 데이터를 양쪽 끝에서 추가하거나 제거할 수 있으므로, 길이가 길어져도 빠른 속도로 작업을 수행할 ..

컴퓨터 공학 2022.08.10

👉 [알고리즘] 그리디 알고리즘

그리디 알고리즘(Greedy Algorithm)은 최적해를 구하는데 사용되는 근시안적인 방법론이다. 즉, 현재 상황에서 가장 최적인 선택을 하여 결과적으로 최적해를 도출하는 방법. 최적화 문제를 그리디 알고리즘으로 풀 수 있는 부분 문제들로 나눈다. 각 부분 문제에 대한 최적해를 구한다. 각 부분 문제의 최적해를 결합하여 전체 문제의 최적해를 구한다. 하지만, 그리디 알고리즘이 항상 최적해를 도출하는 것은 아니다. 때로는 그리디 알고리즘이 최적해를 보장하지 않는 경우도 있다. 그리디 알고리즘이 근시안적인 방법론이라고 말하는 것은, 현재 순간에서만 최적인 선택을 하기 때문에 전체적인 상황에서 최적해가 아닐 수도 있다는 것을 의미한다. 그러나, 그리디 알고리즘이 결과적으로 최적해가 될 수 있는 이유는 부분 ..

[영화] 버닝

내가 가장 좋아하는 형식의 영화이다. 끝나고 '엥 이게 뭐야?' 가 아니라, 고민이 들어가고 다시끔 돌아볼 수 있게 하는 그런 것들. 그리고 이 영화가 내게 주는건 불확실성이다. 우리 삶은 모든 불확실성 앞에서 살아간다. 내가 하는 일이 성공할지 안할지 모르고. 네가 언제까지 회사를 다닐 수 있을지 아닐지 등. 앞으로 일어날 모든일든은 불확실하다. 그리고 그것은 우리가 관측해야만 비로소 현실이다. 영화 속의 우물이나 고양이도 그렇다. 우리가 관측하기 전까지 알 수 없는 것이다. 그런데도 바보같은 우리들은 추측을 통해 확실성을 갖고 행동한다. 벤의 마지막 장면이 나타난 이유도 그렇다. 우리는 그럴 것이다라는 생각만으로 행동한다. 그리고 그 끝의 최악이 영화에서 나타난다. 이것보다 최악일 순 없겠지. 우리는..

일상/독서 2022.07.17

👉 [Infra] Nginx 기반 무중단 배포를 직접 만들어 보자.

Why 서비스를 배포하다보니 계속해서 반복되는 작업이 눈에 띄었다. Spring 경우, 배포를 위한 과정이 python 프레임워크들에 비해 복잡했기 때문. 반복적으로 배포 과정을 불필요하게 진행하는 것보다 반자동으로 편하게 작업할 수 있을 것 같았다. 기존에 Docker 활용할 때도 일일이 입력하는 명령어 집합을 만들어서 종종 썼었으니. 검색해보니까 다양하게 나왔으나, 우선 내가 필요한건 라이트하게 임시로 쓸 수 있는 배포였다. CI/CD 전문화하여 구축하기에는 '시간'이라는 리소스가 한정적이므로 trade-off가 명확했다. HOW 그래서 여러가지 찾아보는데, 이상하게 내용이 오버 스펙처럼 보였다. 굳이 이렇게 까지...? 라는 생각이 계속 들었다. 대게 어떤 방식이냐면... (0) Spring pro..

컴퓨터 공학 2022.04.25

[생각] 요기패스, 배달앱 시장의 게임체인저

요기패스는 게임체인저가 될것이다. 감히 그렇게 생각한다 현재 배달앱 시장은 삼파전이다. 배달의민족, 요기요, 쿠팡이츠인데 배달의민족이 2000만 MAU이고 요기요가 900만 MAU니 사실상 배민이 큰 파이를 모두 먹고 있다. 이러한 상승 계기는 여러 요인이 있겠지만, 요기요 대표 인터뷰를 빌려 추측하자면 배민이랑 요기요가 경쟁우위를 다루고 있을때, 요기요의 본사인 독일의 DH사에서 배민을 인수하려고 했다. 이때 배민은 쿠폰이벤트로 출혈을 감수하며 고객모으는데에 집중한 반면. 요기요는 하지 못했다. 할수 있었지만. 왜냐면 본사에서 배민을 눈독들였거든.. 결국 재판결과 요기요를 매각해야만 배민을 DH가 인수할 수 있는 상황이 마련되었고, 당연하게도 요기요를 팔고 배민을 인수했다. 사실상 요기요는 빨아먹히다가..

일상/생각 2022.02.24

👉 [JAVA] JPA 및 관련 정의

JPA(Java Persistence API)는 자바 진영의 ORM 기술 표준이다. JPA는 객체와 관계형 데이터베이스 간의 매핑을 제공하여, 객체 지향 프로그래밍과 관계형 데이터베이스를 연결하는 데 도움을 준다. JPA는 엔티티(Entity)라는 개념을 사용하여 객체를 데이터베이스에 저장하고, 조회하고, 삭제할 수 있다. JPA는 ORM 기술의 장점을 살려서, 개발자가 직접 SQL 쿼리를 작성하지 않고도 데이터베이스와 상호작용할 수 있다. 즉 개발자는 객체 지향적인 코드를 작성하면서도 데이터베이스와 효율적으로 상호 작용 할 수 있다. JPA도 인터페이스를 정의한 것이며, 이를 구현한 클래스들이 JPA 구현체다. JPA 구현체는 JPA 표준을 준수하며, JPA가 제공하는 API를 구현하여 객체와 관계형 ..

컴퓨터 공학 2022.02.21

카카오의 문화

"특히 초기 카카오의 정신인 '신뢰, 충돌, 헌신'이라는 화두가 지금도 강렬하다. 직원들이 서로 기본적인 신뢰로 무장한 상태에서 신나게 충돌해 박살나고, 무언가 결론이 나오면 내가 끝까지 반대했던 의견이라도 마치 내 의견인 것처럼 몰입하는 문화가 있었다" 출처 http://www.econovill.com/news/articleView.html?idxno=551193 신나게 충돌하고, 결론이 나면 마치 내 의견처럼.

일상/생각 2022.01.02

👉 [CS] Eager Loading vs Lazy Loading

이전에 한가지 질문에 봉착했다. "SQL에서 Join을 안쓴다면, Join을 안 만들었겠지. 근데 Join을 만들었다는건 쓰라는거잖아?" 내가 Join을 잘 사용하지 않고, 데이터 처리를 하는걸 보고 들은 이야기이다. 물론 필요해서 만들었다가, 생각보다 효율이 안나오는 사례도 있기 때문에 저말이 정답은 아니라고 생각하지만, Join 잘 활용하는 것도 능력이긴 하니까. 그렇다면 Join을 쓰는 사례와 안 쓰는 사례에 대해서 고민을 해보았고, 그 과정에서 Lazy Loading 을 접했다. 우리는 NoticeContent Table 과 NoticeComment Table 을 갖고 있으며, 각 Notice list를 반환시키는 함수를 만든다고 가정하자. content_list = NoticeContent()...

컴퓨터 공학 2021.10.27

상위 10%의 능력자가 되는 방법

잠이 오지 않아 쓰는 글. 우리는 대게 최고가 되고 싶어한다. (방금 모두라고 썼다가 지우고 대게라고 바꿨다. 세상을 초연한 사람들은 최고가 되길 원하지 않더라..ㅋㅋ) 최고라는 것을 수치적으로 보면 우리는 모두 상위 10%가 될수 있다. 그 논리를 이 글에 담아보겠다. 수능을 그냥 예시로 들겠다. 우리는 수능 백분위라는 개념이 있다. 하위 1프로부터 상위 99프로까지 전부 다 한줄로 나열하는 것이다. 이곳에서 상위 1%는 명문대학에 진학하고 흔히 말하는 탄탄대로(사실은 아니지만)를 걷게 된다. 그렇기에 우리는 모두 상위 1%가 되려고 한다. 어디 수능만이겠는가? 직장 잡으면 내 연봉이 전체 노동자의 상위 몇프로니, 업계 최상위 수준이라느니, 줄세우기를 참 많이 한다 우리는. 어린 시절부터 끊임앖는 줄세..

일상/생각 2021.08.24

👉 [CS] CS 지식은 필요한가?

항상 말이 많은 주제이다. CS(Computer Science)에 대한 이론적 지식이 실질적으로 프로덕트를 생산하는 현업에 있어서 정말로 필요한가? 에 대한 논쟁이다. 운영체제/데이터베이스/자료구조와 같은 이름만 보면 상당히 고리타분해 보이는(...) 과목들을 배우는데, 이게 정말로 실제로 우리가 프로덕트를 만드는데 필요하냐는 주장이다. 요즘같은 시대에 널린게 오픈소스인데, 남들이 만들걸 가져다가 쓸줄만 알면 되는거 아닌가? 우리가 자동차를 만듦에 있어서 바퀴를 재발명하는게 옳은 일인가? 라는 논지이다. 결론만 두괄식으로 말하면 나는 CS 지식은 필요하다는 입장이다. 그 이유는 다음과 같다. 1. 지식이 많다는 것은 넓게 볼 수 있는 시야를 갖는다는 것이다. = 아는 것이 많을 수록, 우리는 다양한 요소..

컴퓨터 공학 2021.07.18