프로그래밍/개발 18

[개발] SQL vs NoSQL

SQL과 NoSQL의 차이가 무엇인가요? 누군가가 위와 같은 질문을 한다면 무엇이라고 답하나요? 질문한 사람은 면접관, 친구 또는 동료가 될 수 있습니다.관계형 DB vs 비관계형 DB스키마가 정적임 vs 동적임MySQL, PostgreSQL이 있음 vs MongoDB, DynamoDB가 있음등등.. 각자 자신만의 방식으로 답변을 할 것 같습니다.  최근에 저는 이러한 질문을 받으면 그 히스토리에서 답을 찾는 방법에 감동을 받아서 해당 내용으로 답변해보고자 합니다.SQL데이터베이스는 언제부터 필요했을까요? 아마 컴퓨터가 사용되기 시작하고 데이터가 많아짐에 따라 관리되기 시작했을겁니다. 더 이상 파일만으로 관리하기 힘들고 복잡한 join연산과 집계를 위해 데이터베이스에 대한 수요가 나타나기 시작했습니다. ..

[개발] 클라우드에 대해 알아보기

안녕하세요. 지금은 클라우드네이티브 부서에 배치돼서 서버개발하고 있습니다.. 쉽게 말하면 EC2를 만드는 일이죠. 공부한거 정리할 겸 + 도메인지식 쌓을 겸 글 써 봅니다. 틀린점이 있다면 지적 환영합니다,, 클라우드 비즈니스의 히스토리 위주로 갈 것 같네요. 전통적인 배포 방식과거 선배 개발자들의 사례를 보면 application 배포를 할 때 서버를 직접 구매해서 설치하고 네트워크 설정하고 다 했다고 합니다. 이런 걸 on-premise방식이라고 하죠. 언뜻 보기엔 귀찮고 오래걸릴 작업이라고 생각하지만 장기적으로 봤을 때는 이득이 될 수도 있습니다. 초기비용만 크게 투자를 하고 설치와 세팅만 잘 끝낸다면 그 이후로는 전기료만 잘 낸다면 추가 비용이 들 일이 적죠. (지속적으로 비용을 지불하는 클라..

[개발] 2024 카카오 겨울 인턴쉽 + 전환 후기

최근 블로그를 방치한 감이 있긴 한데 인턴 때문에 신경을 쓰기 힘들었던 것 같다. 그래서 꽤 오래전부터 후기를 남겨야겠다고 생각했지만 미루고 미루다 지금에서야 쓰게 되었다. 이미지들은 거의 다 사라지고 글만으로라도 후기를 남겨보려고 한다.면접이나 인턴 생활 관련해서 "써도 되나?"싶은 내용은 모두 빼고 작성해서 참고하시면 좋을 것 같습니다. 카카오 인턴쉽 지원카카오에서 2024 테크 인턴쉽을 모집한다고 해서 지원을 하게 되었다. 지원을 하게 된 동기는 크게 3가지이다.카카오에서 일하는 방식을 알고 싶었다.트래픽이든 리소스든 큰 규모를 다뤄보는 개발을 하고 싶었다.주니어인 나의 성장에 더 큰 도움이 될 것이라고 생각했다.이러한 경험은 어디가서 쉽게 하지 못하는 경험이기 때문에 지원을 결심..

[개발] 제 1회 엘리스 코드 챌린지 참가 후기

이런 대회가 열린다는 소식을 듣고 바로 신청했다. 파이썬 백엔드 엔지니어를 대상으로 한 알고리즘 및 api 기능 구현 대회였는데 모든 조건이 나와 충족했다. 대학교를 졸업하여 참가할 수 있는 대회가 많이 없는 나에겐(ㅜㅜ) 정말 좋은 기회였다. 예선 예선은 온라인으로 1주동안 진행됐는데 기간 내내 응시하는게 아니라 원하는 때에 3시간동안 응시하는 형식이었다. 예선은 알고리즘 + api 기능 구현이었다. 알고리즘 난이도는 코딩테스트보단 어렵고 XCPC하위 문제보단 쉬운 수준이었다. 코딩테스트에 안 쓰이는 개념도 쓰이니 모든 문제를 풀려면 대회 알고리즘도 건드려야한다. api 문제는 기능 구현과 간단한 테크닉을 사용하여 호출시간을 최적화 하는 문제였다. 우연찮게도 내가 블로그에 쓰면서 공부한 지식들이 나와서..

[개발] 주니어 개발자의 우당탕탕 MSA 전환기 - Nexus 편

지난 스토리의 마지막에 결국 서로 다른 서비스에서 공통으로 사용되는 함수나 ORM객체들을 공유 모듈을 사용하여 진행하기로 결정했다. 대표적으로 Nexus라는 것이 있다고 하여 이걸 사용해서 사설 공유 레포지토리를 구축하게 되었다. Nexus 구축하기 Nexus를 구축하는 방법은 정말 간단하다. 그냥 포트 하나 열고 docker run으로 실행하기만 하면 끝난다. 설치는 이렇게 간단한데도 고민해야 할 상황이 생겼다. 그럼 Nexus 서버는 어디에 있어야 할까? 후보군으로는 EC2와 쿠버네티스가 있었다. 지금까지 쿠버네티스에서 누려온 수많은 편리한 점을 생각하면 "당연히 후자지"라고 생각했다. 하지만 여기에서 반대 의견도 있었다. Nexus는 dev, prod 같이 사용하기 때문에 쿠버네티스와 별도의 서버에..

[개발] RDB에서 Incremental PK와 UUID PK

나는 요즘 관계형 데이터베이스로 개발을 진행하고 있다. 근데 최근 들은 내용이 꽤 흥미로워서 기록으로 남겨보려고 한다. 관계형 데이터베이스에서의 PK 관계형 데이터베이스에는 여러가지 키라는 개념이 존재한다. 기본키, 수퍼키, 후보키 등이 존재하는데 여기서는 기본키(Primary Key)에 집중하려고 한다. 데이터베이스 교과서를 보면 PK를 다음과 같이 정의한다. 릴레이션 안에서 튜플을 구별하기 위한 수단으로 주 키(primary key)라는 용어를 사용한다. 릴레이션은 테이블을 튜플은 row를 의미하므로 PK는 곧 테이블 안에서 unique한 컬럼을 의미하게 된다. 그 중에서 가장 흔하게 사용되는 PK는 아마 auto_increment옵션이 붙어있는 integer일 것이다. 이는 데이터베이스 내부에서 자..

[개발] 주니어 개발자의 우당탕탕 MSA 전환기 - DB 편

현재 내가 진행중인 프로젝트는 장고 하나의 서버에서 모놀리식으로 작동하고 있었다. 최근에 쿠버네티스를 도입하게 되어 이 기회에 MSA로 넘어가려는 시도를 하였다. 기획자에게 더 많은 사용자를 수용하고 성능도 더 나아지며 관리포인트가 줄어든다는 점을 들어 설득하여 기간을 할당받는데 OK를 받았다. 그렇게 MSA로 전환하기 시작한 여정이 시작된다. 장고에서 FastAPI로.. MSA로 넘어가며 장고를 포기하고 FastAPI를 사용하게 되었는데 그 이유는 2가지가 있다. 서드파티 등 장고의 풍부한 기능을 사용하지 않는다. MSA 서비스마다 장고로 띄우기엔 너무 무겁다. 처음부터 "뭐야 장고 정말 안좋네? FastAPI ㄱㄱ"한건 아니고 나름대로 문제를 해결하려고 시도는 했었다. 인스타그램같은 경우도 장고를 사..

[개발] Redis를 사용한 데이터 캐싱으로 조회 API성능 향상시키기

캐싱 캐싱은 데이터를 적당한 장소에 저장하여 다음에 같은 데이터 조회 요청이 들어왔을 때 빠르게 데이터를 획득할 수 있도록 한다. API를 호출하면 보통 데이터베이스를 조회하고 어떠한 연산을 통해 결과값을 반환한다. 하지만 트래픽이 늘어나거나 해당 연산이 오래걸릴 경우 서비스가 느려질 수 있다. 그럴 경우 캐싱을 통해 미리 저장해두고 빠르게 반환하는 방법을 생각할 수 있다. 레디스 캐싱을 사용할때 레디스가 많이 언급된다. 레디스는 key-value를 저장하는 In-memory DB이며 다음과 같은 특징이 있다. 1. 싱글스레드만 접근 가능하다. 2. string외에 다양한 데이터 타입을 지원한다. 3. 인메모리 데이터베이스이면서 디스크에 저장까지 한다. 4. 속도가 굉장히 빠르다. redis는 보통 같은..

[개발] VPC 개념잡기

VPC는 클라우드상에서 제공하는 가상의 네트워크이다. AWS에서 서비스를 사용할 때는 반드시 VPC를 하나 사용해야 하며 VPC를 사용해서 보안성을 증가시킬 수 있다. VPC를 사용하여 설정한 IP대역을 할당받아 사용할 수 있다. 기본적으로 default VPC가 주어지며 아마 172.31.0.0/16으로 설정돼있을 것이다. VPC에 서브넷을 구성할 수 있다. VPC에서 IP영역을 나눠 작은 네트워크로 사용할 수 있다. 보통 서브넷은 기능이나 역할로 구분을 하는데 가장 많이 사용되는 서브넷 패턴은 세 가지 종류가 있다. 1. public 서브넷 2. private 서브넷 3. Intranet Public 서브넷 public 서브넷은 말 그대로 public에 노출되어 있다는 뜻이다. public 서브넷의 ..

[개발] AWS 아키텍처 구성하기

AWS 아키텍처를 구성할 때 어떻게 구성하면 좋을지 그리고 그게 왜 좋은지 단계별로 알아보자. best practice인지는 모르겠지만 그래도 좋은 아키텍처라고 생각했다. 1단계 EC2에 배포하기 가장 생각하기 쉬운 구성이다. EC2에 우리의 애플리케이션을 띄운 후 Route 53으로 도메인을 걸어주는 방식이다. 가장 간단한만큼 문제점도 많다. 일단 오토스케일링이 안된다. 오토스케일링을 위해 EC2를 띄우면 새로운 도메인을 할당해야 하므로 사용하기 힘들다. 오토스케일링이 안되면 대규모 트래픽을 감당하기 힘들기 때문에 어느정도 사용량이 많아지면 상황이 많이 안좋아진다. 2단계 리버스 프록시 사용하기 이제 오토스케일링을 하더라도 도메인은 리버스프록시에만 할당됐기 때문에 문제는 해결됐다. 이제 오토스케일링도 ..