전체 글

개인 공부 목적으로 작성된 블로그 입니다.
사이드 프로젝트

[Github Action] 로컬환경에서 Github Action 테스트하기

개인 공부 목적으로 작성된 포스팅입니다. 왜곡된 내용이 포함되어 있습니다. 프로젝트에 Github Action Workflow를 추가 수정할때마다, 별도의 프라이빗 테스트 레포를 통해 Github Action을 테스트하는 등 테스트에 불편함이 있었다. 그러던 와중에 Github Action를 로컬에서 테스트하도록 지원하고 있는 기술을 알게 되었다. Acthttps://github.com/nektos/act GitHub - nektos/act: Run your GitHub Actions locally 🚀Run your GitHub Actions locally 🚀. Contribute to nektos/act development by creating an account on GitHub.github.c..

인프라/AWS

[AWS] API Gateway, Lambda 및 DynamoDB를 사용한 CRUD HTTP API 생성

개인 공부 목적으로 작성된 포스팅입니다. 왜곡된 내용이 포함되어 있습니다 HTTP API를 배포해 달라는 요청을 받았다. AWS 공부를 하고 있었던 터라 사용해보지 않는 AWS 서버리스 서비스를 통해 HTTP API 배포하였다. 사용한 AWS 서비스는 API Gateway, Lambda, DynamoDB로 모두 서버리스를 제공하는 서비스를 사용하였다. 각 서비스의 주요 특징을 살펴보고, 실습해보자API GatewayAPI Gateway는 규모와 관계없이 REST및 Websocket API를 생성, 게시 유지, 모니터링 및 보호하기 위한 AWS 서비스이다. API 개발자는 AWS 또는 다른 웹 서비스를 비롯해 AWS 클라우드에 저장된 데이터에 엑세스하는 API를 생성할 수 있다. API Gateway AP..

CS/운영체제

[운영체제 10판(Abraham Silberschatz)] 운영체제 구조

운영체제 10판(Abraham Silberschatz)을 읽고 정리한 글입니다. 일부 내용은 생략 되었습니다.운영체제 서비스운영체제는 프로그램 실행 환경을 제공한다. 운영체제는 프로그램과 그 프로그램의 사용자에게 특정 서비스를 제공한다. 물론 운영체제마다 제공하는 서비스는 다르지만 공통된 부류가 있다는 것을 발견할 수 있다. 운영체제가 제공하는 서비스는 다음과 같다.사용자 인터페이스(user interface): 거이 모든 운영체제는 사용자 인터페이스를 제공한다. (GUI, 터치 스크린, CLI)프로그램 수행(program executive): 시스템은 프로그램을 메모리에 적재해 실행 할 수 있어야 한다. 프로그램은 정상적이든, 혹은 비정상적인든 실행을 끝낼 수 있어야 한다.입출력 연산(I/O opera..

CS/네트워크

OAuth 1.0 부터 OAuth 2.1

getting_started_with_oauth_2.0 책을 읽으면서 정리한 내용입니다. 책 이외의 내용이 포함되어 있습니다. OAuth는 Open Authorization으로 애플리케이션 인증을 위한 접근 관한 개방형 프로토콜이다. 근래 서비스를 보면 OAuth를 표준 인증/인가 프로토콜을 사용하고 있다(자체 로그인은 지원하지 않는 경우도 빈번하다)개발을 공부하다보면, OAuth를 통한 인증 인가를 피하기 어려운데, 단순해보이는 것과 달리 OAuth를 제대로 이해하기 못하면 OAuth 로직 구현에 많은 시간을 할애한다.사이드 프로젝트중 OAuth를 다시 한번 만나게 되었는데, 이번 기회를 통해 OAuth를 정리하고자 한다.OAuth의 발전 과정을 알아보면서 OAuth를 이해해보자OAuth 1.0우리가 ..

CS/데이터베이스

트랜잭션

데이터 중심 애플리케이션 설계 책을 읽으면서 정리한 내용입니다. 책 이외의 내용이 포함되어 있습니다. 다음은 데이터베이스를 운영하는 도중 발생할 수 있는 문제이다.끄기 연산은 언제라도 실패할 수 있다.연산중 데이터베이스가 종료될 수 있다.네트워크에 문제가 생겨 데이터베이스 노드간 통신 문제가 생길 수 있다.동시에 발생하는 쓰기 연산에 대해서 덮어쓸 수 있다.부분 갱신으로 인해 클라이언트가 잘못된 데이터를 읽을 수 있다.race condition으로 인한 버그가 발생할 수 있다.위와 같은 문제를 단순화 하고자 트랜잭션이 도입되었다. 트랜잭션은 읽기 쓰기 연산을 하나의 논리적 단위로 묶는 것이다.트랜잭션 내부에 있는 모든 읽기, 쓰기는 하나의 논리적 단위이다.트랜잭션은 전체가 성공하거나 실패한다.(원자성) ..

사이드 프로젝트

[아워메뉴] ERD 설계 (엔티티 설계)

아워메뉴 프로젝트를 개발하면서 공부한 내용입니다.  아워메뉴를 다시 개발하면서 V1에서 고려하지 못했던 엔티티 설계를 다시 하였다. V1 에서 엔티티 설계를 잘못해서 프로젝트 중반에 예상하지 못한 문제를 많이 만나게 되었는데, 같은 실수를 반복하지 않기 위해  처음부터 다시 설계 하였다.좋은 ERD, 좋은 엔티티어떤 ERD를 좋다고 할 수 있을까?데이터베이스 수업시간에 DB 설계와 관련하여 "정규화"라는 개념을 배우게 된다. "정규화"를 통해 관계형 데이터 베이스의 무결성을 보장하고, 용량을 줄일 수 있다. 그러나 우리가 실제로 만나는 ERD는 이론으로 배웠던 "정규화"와 다르다.일단 실제로 우리가 구성하고자 하는 비즈니스 로직이 생각보다 복잡하다. 크게 문제가 되지 않는 경우 편의성을 위해서 반정규화 ..

사이드 프로젝트

Airflow + docker-compose 환경 구축 (Pycharm)

로컬 환경(window)와 개발환경(linux)환경에서 사용하기 위해 airflow를 docker-compose 환경에서 구축하면서 작성한 포스팅입니다. 참조한 문서입니다 https://airflow.apache.org/docs/apache-airflow/stable/howto/docker-compose/index.html Running Airflow in Docker — Airflow Documentation airflow.apache.org 1. docker compose.yml 다운로드curl -LfO 'https://airflow.apache.org/docs/apache-airflow/2.10.4/docker-compose.yaml'airflow에서 제공하는 docker-compose.yaml을 ..

회고

2024 읽은 책 결산

2024년에 읽은 책을 정리하고자 한다.읽은 책은 다음과 같다.컴퓨터 네트워킹 하향식 접근이펙티브 자바객체지향의 사실과 오해입문자를 위한 병렬 프로그래밍 컴퓨터 네트워킹 하향식 접근 제목과 동일하게 컴퓨터 네트워크에 대해 하향식으로 공부할 수 있다. CS 공부을 하다보면 만나게 되는 연쇄 법칙(계속 해서 키워들 들어가는 것)을 예방할 수 있다. 다만 하향식 접근인 만큼 질문에 대한 답을 뒤로 미루는 경향이 있다. "해당 기술에 대해서는 다음에 알아보자~" 라는 뉘양스가 강하다. 네트워크에 대한 전체 흐름에 대해 학습하기 좋은 책이다. 무선 통신을 제외하고 읽었다.이펙티브 자바 자바 언어에 대한 가이드를 제시한다. "XXX는 지양하자", "XXX는 XXX으로 구현하자" 와 같이 목차마다 대표 가이드가 있는..

인프라

데이터베이스가 계속 꺼지는 경우 (시스템 용량 초과)

이 포스팅은 개인 공부 목적으로 작성된 포스팅입니다. 왜곡된 내용이 포함되어 있습니다. 몽고디비리눅스 환경에서 실행중이였던 크롤링 파이썬 프로그램에서 몽고디비 연결실패 에러가 발생하였다. sudo systemctl status mongod 먼저 몽고 디비가 켜저 있는지 확인하였다.몽고 디비가 꺼져 있었다.. 다시 몽고 디비를 실행하고 파이썬 프로그램을 실행하였다.sudo systemctl startmongod 동일한 몽고디비 연결 실패 에러가 발생하였다. 몽고디비의 문제가 아니라는 것을 직감할 수 있었다. 디스크 사용량혹시나 하는 마음에 디스크 사용량을 확인해봤다.df -h Filesystem Size Used Avail Use% Mounted ontmpfs ..

Java

자바 NIO (Buffer, Selector)

이 글은 개인 공부 목적으로 작성된 포스팅입니다. 왜곡된 내용이 포함되어 있습니다. Java IO자바에서는 IO를 스트림으로 처리한다. OutputStream outputStream = socket.getOutputStream();InputStream inputStream = socket.getInputStream();read() 와 같은 블로킹 메서드를 통해 읽기, 쓰기를 처리한다. TCP 통신의 경우 ServerSocket(환영 소캣)에서 Accept한 socket을 클라이언트에게 전달하여 socket을 통해 클라이언트와 서버간 데이터를 주고 받는다. 이때 소캣에 있는 스트림을 반환 받아 입출력을 처리하게 된다.이러한 IO처리 방식에는 몇가지 문제가 있다. 1. Blocking IOblocking I..

bluesparrow
Bluesparrow