분류 전체보기 367

[Data Modeling] Apache Cassandra

1. Apache Cassandra란? Apache Cassandra is an open source NoSQL distributed database trusted by thousands of companies for scalability and high availability without compromising performance. Apache Cassandra는 scalability와 high availability에 적합한 수많은 회사들이 사용하고 있는 오픈 소스 분산형 NoSQL 데이터베이스 관리 시스템이다. 하지만 정의를 봐도 잘 이해가 되지 않는다. '분산형 데이터베이스가 뭔지, 어떻게 scalability와 high availability 하길래 최적화 되어있다는 것인지 모르기 때문이다...

[Python] 동시성과 병렬성 문법 - GIL과 Multithreading

1. 멀티 스레드, 멀티 프로세스 개념 [운영체제] Thread 에서 정리한 적이 있음. a. Processs vs Thread Process: 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램, 즉 메모리에 올라와 실행되고 있는 독립적인 프로그램 인스턴스 Thread: 프로세스 내에서 동작되는 여러 실행의 흐름 단위 이렇게 하나의 프로세스 내에서 생성된 thread끼리 해당 프로세스의 영역을 공유한다. - Processs는 독립적, Thread는 프로세스의 서브넷 - Process는 각각 독립적인 자원을 가진다. Thread는 프로세스의 자원을 공유한다. Process는 별도의 Code, Data, Stack, Heap을 독립적으로 가지는 반면 Thread는 Stack만 독립적으로 가지고 Code, ..

깊고 확실하게 알자.

회사에서 개발에 대해서도 배우는 게 많지만 정말 값지다고 생각하는 것은 동료분들의 문제 해결 방식과 그 과정에서의 사고의 흐름을 지켜보고, 나누고, 배울 수 있다는 점이다. 우리 회사의 개발팀은 '깊이'를 정말 중요하게 생각한다. 깊이 있는 이해 깊이 있는 고민 이런 가치관과 문화를 가진 사람들과 일하는 환경에 있으면서 "그렇게 그냥 가져다 쓰고 말면 바보된다" "직접 구현해 본 경험이 있으신가요?" "그걸 알면 보는 시각이 넓어지잖아" "그래서 지금 해야하는게 뭐지? 그러기 위해선 뭐가 필요하지? 어떤 식으로 가야 불필요한 소모를 쉽게 인지하고 피할 수 있을까?" 등과 같은 말들이 주위를 맴돈다. 그리고 나도 모르게 그렇게 중얼거리고 있을 때도 있고, 의식적으로 더 깊이 있게 알아보려고 노력하기도 한다..

Diary/Y2021 2021.08.13

[Github, CI/CD] 특정 파일이나 폴더에 대해서만 Github Actions가 trigger되는 방법

Dockerfile이 변경되었을 때만 build를 다시해서 ECR에 push 하는 작업이 필요했다. Github Actions에서 이렇게 변경 사항이 있는 아티팩트에 대해서만 액션이 트리거되어 CI/CD를 해주는 방법은 paths selector를 사용하는 것이다. name: Deploy Analyzer image to Amazon ECR on: push: paths: # HERE! - "Dockerfile" # HERE! branches: [main, release] jobs: deploy: name: Deploy runs-on: ubuntu-latest 이 방법은 monorepo에서 github actions로 CI/CD를 구성하고자 할 때도 유용하게 사용할 수 있다. https://medium.co..

Dev/DevOps, Infra 2021.08.09

[Shell Script] Bash Shell Script

최근에 shell script를 접할 기회가 많았다. Shell script를 접하면서 든 생각은 1. 어떤 언어이고, 왜 쓰지?? 2. 코드를 이해하고 싶다.. 3. shell script를 작성해야 하는데 어떡하지? 지금이 공부해야 할 시간이라고 생각했고 도 참고해서 3일 정도? 빠르게 훑어보았다. 1. Kernel? Shell? Shell Script? Terminal? [운영체제] 운영체제 구조 - 시스템콜, 사용자 모드, 커널 모드 여기에도 정리해 둔 적이 있는데, 이 개념들을 다시 확실히 정리하고 시작하고 싶다. 여기서 응용 프로그램, 운영체제, 컴퓨터 하드웨어(시스템 리소스)를 도서관에 비유해보면 운영체제 - 도서관 응용 프로그램 - 시민 컴퓨터 하드웨어 - 책 - 그래서 응용 프로그램(시민..

[글또] 글또 6기 시작

개발자들의 글쓰기 역량을 강화하고, 글을 꾸준히 쓸 수 있도록 돕는 커뮤니티인 글또(6기)에 참여하게 되었다. 글 작성의 마음가짐 정말 '벌써 21년도 절반이 지나갔다' 이젠 그만 게을러질 때도 된 것 같다. 삶에는 무수한 아름다운 순간들이 지나가는데, '백엔드 개발자'로서의 나는 이 아름다움을 종종 어디서 느끼곤 하냐면 무엇인가를 배우고 공유할 때, 그래서 어제의 나보다 오늘의 내가 더욱 성장했음을 느낄 수 있을 때 그리고 내가 배운 것을 어딘가 구현시켜보았을 때, 팀원의 협업에서 나타나는 재미있는 시너지가 곧 우리의 프로덕트, 일하는 방식에 어떤 방식으로든 개선을 가져올 때. 이다. 예전에는 이러한 순간들을 그냥 흘려보내기 아쉽다는 생각이 들어서 적은 글들이 이 블로그에 남아 있는데 언젠가부터 더 정..

Diary/Y2021 2021.07.25

[HTTP, AWS] 3xx 대 Status와 Lambda@Edge

3xx - Redirection 서버가 클라이언트의 요청을 완료하기 위해 유저 에이전트(웹 브라우저)의 추가 조치가 필요할 때 3xx 대 status code와 함께 client 에게 다시 보내는 것이다. 리다이렉션의 이해 웹 브라우저는 3xx 대 status code 가 있는 응답 결과에 Location 헤더가 있으면 Location 위치로 자동 이동하는데, 이를 리다이렉트라고 한다. 리다이렉트의 흐름을 보면, 3xx status code 300: Multiple Choices 사용하지 않는다. 영구 리다이렉션: 특정 리소스의 URI가 영구적으로 이동하여 이 리다이렉션은 영원히 지속된다. 그리고 검색 엔진도 이런 리다이렉션을 인지한다. 301: Moved Permanently 리다이렉트시 요청 메서드가..

Dev/DevOps, Infra 2021.06.24

[Coding Style] Return Early Pattern

본 글은 Leonel Menaia의 “Return Early Pattern” 글을 번역한 것입니다. Return Early Pattern 프로그래밍에 대해 배우고 함수를 만들 때의 기본적인 사고방식은 '함수를 만들 때, 어떤 결과를 도출하기까지 어떤 조건에 맞는지 검사'해나가는 것이었다. public String returnStuff(SomeObject argument, SomeObject argument2){ if(argument1.isValide()){ if(argument2.isValide()){ SomeObject otherVal1 = doSomeStuff(argument1, argument2) if(otherVal1.isValid()){ someObject otherVal2 = doAnothre..

[TDD] Python Testing Framework 1 - Pytest, unittest

1.Installation and Getting Started (unittest / pytest) 1) Unittest unittest는 python에 내장되어있어 따로 설치하지 않아도 되는 표준 라이브러리 입니다. 그래서 바로 import해서 사용할 수 있습니다. import unittest 2) Pytest pytest는 설치를 하고, import하여 사용합니다. $ pip install pytest import pytest 2. Naming Conventions (unittest / pytest) 1) Unittest 파일명: test로 시작 Unittest에서는 지정된 파일은 반드시 모듈로 import 가능해야 합니다. 메소드명: test로 시작 단위 테스트의 기본 구성 블록인 TestCase를 ..

Dev/SW Engineering 2021.05.21