Home

[DB/Infra] Mongodb(몽고DB)에서 사용하는 BSON(binary JSON) 이란? JSON 과의 차이점과 개념정리

1. JSON(JavaScript Object Notation) JSON(JavaScript Object Notation)은 데이터를 저장하거나 전송할 때 많이 사용되는 데이터 형식 Javascript의 객체 형태가 곧 JSON 입니다. JSON 표현식은 사람과 기계 모두 이해하기 쉽습니다. 기존에는 XML을 많이 사용했으나, 현재는 JSON 이 대체해서 많이 사용되고 있습니다. 아래와 같은 형식으로 많이 사용됩니다. { "users": [ { "name": "James", "age": 20 }, { "name": "Mark", ...

Read more

[AWS/Infra] EC2 서버 instance(인스턴스)가 운영 중 죽을 때, Out of memory: kill process 메모리 부족 해결 방법(swap memory)

1. 문제 AWS 서버 호스팅(혹은 다른 클라우드 서비스도 동일합니다)을 사용하다보면, EC2 서버 instance(인스턴스)가 운영 중 죽을 때가 있습니다. 저는 이전에 다른 클라우드 서비스와 aws ec2 를 사용하면서 이러한 문제를 겪었습니다. aws 의 첫 가입자들에게는 ec2 t2.micro 를 1년 무료로 제공해주는데, 이 때 대여해주는 서비스의 자원이 넉넉하지 않다보니 이러한 현상을 겪을 가능성도 더더욱 높아지는 것 같습니다. 저는 기존 서비스 운영의 경우에 트래픽이나 서비스가 무겁지 않은 서비스인데 이러한 현상이 발생하여, 원인을 찾아보게 되었습니다. 처음에는 이유를 잘 모르는 상태에서 서비스가 ...

Read more

[Spring Boot] 스프링 서버 Persistence(영속성), ORM, JPA, Hibernate, JDBC 이란? 용어/개념정리

스프링이나 스프링 부트를 사용하면서 프로그래밍을 하면 Persistence(영속성), ORM, JPA, Hibernate, JDBC 에 대한 이야기를 많이 들을 수 있습니다. 이러한 개념들에 대하여 간단하게 이해할 수 있게 한 포스팅에서 정리해보았습니다. 1. Persistence(영속성) 프로그램이 데이터를 생성하고 종료되었을 때, 메모리에만 가지고 있으면 데이터가 보존되지 않습니다. 데이터를 생성한 프로그램이 종료되더라도 데이터가 사라지지 않는 특성을 Persistence(영속성)이라고 합니다. 대부분의 프로그램들은 지속적으로 데이터를 보유하고 있어야 되는 필요성이 있어, Persistenc...

Read more

[AWS/Infra] EC2 서버 instance(인스턴스) 종류(크기/사양/타입/유형) 변경하는 방법

1. instance 변경 방법 AWS 에서 EC2 를 생성한 후에 필요한 성능이 기존보다 커지거나 작아져서 EC2 사양을 변경해야 하는 종류(사양/타입/유형)가 있습니다. 사이즈를 적절히 교체해야 각 서비스에 맞는 비용을 적절하게 지출하면서 효율적으로 운영할 수 있습니다. aws에는 아래와 같이 수많은 EC2 타입(맨 처음 사용하는 T2.micro 1년 무료 이외에도 매우 많이 존재함)들이 존재합니다. 기존의 EC2 내부의 이미지(os 및 다양한 환경 세팅)를 동일하게 유지하면서 EC2 를 교체하려면 어떻게 해야 할까요? 하기와 같은 방법으로 손쉽게 해결할 수 있습니다. 1.1. 인스턴스 정지 후 변경 ...

Read more

[Server/MSA] RabbitMQ, Redis, Kafka 란? 메시지/이벤트 브로커 비교, 특징 및 개념정리

요즘 많은 서비스들은 메시지/이벤트 브로커(RabbitMQ, Redis, Kafka) 를 사용합니다. 메시지/이벤트 브로커(RabbitMQ, Redis, Kafka) 에 대한 개념을 정리해보았습니다. 0. 핵심 서버에서 많은 요청이 한 번에 들어오면 처리하지 못할 수 있습니다. 처리하지 못한 데이터는 손실되어 서비스에 치명적인 영향을 줄 수 있습니다. 따라서, 유저의 요청이 들어오면 일단 요청을 Queue에 넣어 놓고(요청을 쌓아놓고), 서버가 처리할 수 있을 때 데이터를 가져갑니다. 메시지는 삭제되지만 이벤트는 삭제하지 않습니다. 메시지 브로커는 이벤트 브로커가 될 수 없으나, 이벤트 브로커는...

Read more

[Javascript/js] 문자열(string) 내부(안)에 변수/상수 값 넣는 방법, 삽입하기. Template literals과 여러줄 문자열, 백틱(`)

1. 문제점 Javascript 를 사용하면서 문자열 내부(안)에 변수/상수 값을 넣고 싶은 케이스가 존재합니다. 가장 간단하게는 아래와 같이 사용할 수 있는데요. let a,b; a = 1111; b = "any value"; console.log("a = " + a + ", b = " + b); // 결과 // a = 1111, b = any value 이렇게 사용하면 문자열이 많아지면 사용하기도 복잡해지고 가시성도 떨어집니다. 어떻게 해야 손쉽게 문자열 내부에 변수를 사용할 수 있을까요? 2. 해결방법 JS가 ES6 버전부터는 더 사용하기 쉽게, 문자열에서 변수명을 사용할 수 있도록 하는 기...

Read more

[Javascript] json (js object) 값을 String으로 만들기(toString), JSON.stringify 사용과 console 출력하는 방법

1. 문제점 json 형태로 얻은 data 값을 출력할 때, 정상적으로 출력이 되지 않고 [object Object] 와 같이 출력되는 경우가 있습니다. toString을 하면 아래와 같이 출력되는 것을 확인할 수 있습니다. let abc = { "name": "james", "age": 29, "powers": [ "1", "2", "3" ] } const result = abc.toString() '[object Object]' // 결과 // '[object Object]' console에 원하는 json을 출력하거나, json...

Read more

[DB/Infra] 레이드(RAID)란? 개념정리 및 백업(BACKUP) 과의 차이, NAS와 백업

1. 레이드(Raid)란? 1.1. 개념정리 레이드(Raid, Redundant Array of Independent Disk)란 2개 이상의 디스크를 병렬로 처리하여 성능 및 안정성을 향상시키는 방식입니다. 저장장치를 하나만 쓰면 고장이 날 수 있습니다. 하나의 저장장치만 사용하면 서비스 운용이 정지되는 문제가 발생합니다. 구글과 같은 서비스에서는 저장장치가 고장나서 서비스가 중단되면 안되는데, 하나만 사용하면 문제가 발생합니다. RAID 는 성능과 안정성을 향상시킬 수 있습니다. 성능 여러개의 저장장치를 병렬로 사용하여, 데이터를 분산하여(나...

Read more

[Python] Selenium 크롤링 할 때, 현재 창에서 크롤링하는 방법(Debugging Mode)

1. 문제 Python을 사용하여 크롤링을 할 때 Selenium 을 많이 사용합니다. 이 때, 매 번 새로운 브라우저를 띄우는 과정이 필요하게 됩니다. 원하는 크롤링에서 로그인이 필요하면, 코드에서 새로 로그인하는 과정이 많이 필요하며 로그인 할 때 봇을 감지하기 위한 인증 문자 입력이나 추가적으로 MFA 와 같은 2차 인증이 필요할 수 있습니다. 로그인이 많으면 해당 서버에서 접속이 막힐 수도 있고, 생각보다 코드 작성이 다소 복잡해집니다. 이 때, 현재 사용 중인 브라우저에서 크롤링을 시도한다면 이러한 문제를 손쉽게 해결할 수 있을 것입니다. 사용중인 창에서 바로 크롤링 하는 방법은 무엇일까요? 2. 해...

Read more

[Python] BeautifulSoup 파이썬 크롤링 할 때, html tag 데이터 값이 안 읽어와질때 해결법(Selenium)

1. 문제 다른 사이트의 데이터를 수집할 때 주로 Python 을 사용합니다. Python 크롤링시에 requests 를 사용하여 api를 호출하고 data를 요청한 후에, BeautifulSoup 를 사용하면 Crawling 을 쉽게 할 수 있는데요. Crawling 을 하다가 데이터가 불러와지지 않는 경우가 있습니다. import requests from bs4 import BeautifulSoup req = requests.get('데이터를 얻고 싶은 url') html = req.text soup = BeautifulSoup(html, 'html.parser') soup.select('찾고 싶은 htm...

Read more