전체 글 58

스키마:: ORM과 ODM을 사용하기 위해서 이해되어야 할 개념

ORM/ODM은 프로그래밍시 데이터베이스를 객체 처럼 사용할 수 있게 해주는 놈이다. 이게 무슨 말이냐면.. job테이블(컬렉션)이 있다고 치면,job.insert({ title: "개발자" });job.delete({ id: 3 }); 이런식으로 DB연산을 메서드 호출처럼 다룬다. ORM과 ODM 개념은 유사한데, orm은 Rdbms, odm은 몽고 db에서 쓰인다고 이해했다. 여기서 나오는 개념이 스키마이다.먼저 db연결과 더불어 데이터 구조를 어떻게 가져갈 것인지(타입 등) 스키마를 통해서 정의해준다. 그리고 이 스키마를 가지고 모델을 만든다. 클래스와 객체랑 비슷하다고 대략적으로 생각하자.스키마는 붕어빵 틀! 모델은 붕어빵을 실제 사용할 수 있는 붕어빵 사장님!모델을 가지고 인스턴스를 만들어..

DB 2025.08.31

Selenium,Puppeter: 브라우저 조작 라이브러리

크롤링이라는 것을 간단히 말하면 사람이 브라우저( ex 크롬)인척해서 사이트에 요청을 보낸 다음 정보를 받아오는 것이다. 아래 예시코드를 보면 타깃 url, 브라우저 인 척 하는 헤더, 그리고 url에서 원하는 정보만 파싱하기 위한 태그값들을 설정해서 크롤링 요청을 한다. Node 기준으로 axios라이브러리는 브라우저인척 http요청을 보내서 소스코드를 받아오는 것을 도와주고 ,cheerio는 그 소스코드를 분석해서 원하는 태그에서 정보를 추출하게 해준다. async function crawlMisoyaAll: Promise { { const url = `${BASE_URL}&page=${page}`; const { data: html } = await axios.get(url, { ..

[mongoDB]로컬 데이터를 MongoCLI로 올려보기. (gz,bson,json)

RDBMS로 대응해서 이름을 변환하면 이렇습니다.테이블 = 컬렉션로우 = 다큐먼트컬럼 = 필드 몽고 DB에 로컬 데이터를 넣어본다. 몽고 DB 설치되어 있고, 켜져 있음.데이터 타입은 gz(mongodump로 export된 형태) 참고)*압축파일이라면?gz 로 압축되어 있더라도, 알아서 압축 풀어주니 그냥 올리자. *bson이나 metadata처럼 처음 보는 놈들이 딸려왔다면?Mongodump 명령어로 내보내기 된 데이터는 metadata.json, bson 이렇게 두 가지 형태가 같이 있다.ex) a.bson, a.metadata.json 메타데이터는 찐 데이터를 설명하는 용도이므로 실제 데이터가 아니다. (= 데이터를 설명하기 위한 데이터)그래서 몽고디비에 메타데이터, 실제 데이터를 올려준다면 몽고디..

DB/MongoDB 2025.08.31

AI를 대체하는 블로그

기술 블로그를 쓰라는 조언은 n년 전에는 유효했으나,솔직히 지금도 같은 효용을 가지는지는 모르겠다. 아래 두 가지 이유가 있다. 1.사람들은 더 이상 개발하다가 어려움이나 조언을 겪을 때 구글링을 먼저 하지 않는다.- 대신 GPT와 같은 AI를 사용한다. 트러블 슈팅(에러해결)도 초기 셋팅도. 물론 지금은 GPT보다 stackoverflow 가 유용한 경우도 많았으나,따라 잡히는 것은 시간의 문제라고 본다. 2.나 또한 블로그에 글을 작성할시 AI의 도움을 받는다 블로그를 제대로 쓰기 시작한 것은 올해 4월부터이다. 나 또한 초안을 쓰고 기술적으로 틀린 것이 없는지 확인하기 위해 마지막에 AI를 돌리거나,초안을 쓸 때마저도 GPT의 도움을 받는다 . 사실 그럼 나의 블로그를 보는 의미가 없다. ..

혜이드(나) 2025.08.31

[Node,Mongo] DB 연결 및 디스커넥션은 언제 해야할까?

[상황]서버 어플리케이션을 만들다보면, 다양한 함수에서 같은 DB에 접근해서 DB조작을 할 때가 많아진다. 그럼 동시에 DB 접근을 한다면 어떻게 될까? 일관성이 유지 되지 않을텐데? =>mongoose라이브러리는 DB.pool을 제공한다. 한번에 DB접근이 동시에 이뤄져도 , 개별연결인 것처럼 관리한다.=>DB에 한 번에 수정이 이뤄지지 않아서 일관성을 관리해준다~ **참고: Data pool이라는 개념은 몽고디비에서 connection한번 하면자동으로 적용되기에 pool 을따로 실행하지는 않아도 된다. 그렇다고 하더라도 우리는,마음놓고 DB 커넥션 함수를 남발하기 보다는!최소한만 사용하는 것이 좋겠지 ? 함수마다 열고 닫으면 .. 커넥션/디스커넥션이 반복되기에 “리소스 스파이크”를 얻게된다 . 여기서..

[Github]타 계정의 레포지토리로 PR(Pull Request)날리기

올해 4월부터 약 4개월까지 함께했던 신한투자 프로디지털 아카데미를 중도 퇴소하고,스타트업에서 백엔드 개발인턴으로 일하게 되었다. (신한투자증권 프로디지털아카데미 정~말 좋습니다.수강생 전원이 전공자 또는 준 전공자기에, 커리큘럼도 탄탄하고 , 신투 본사와의 소통이 아주 많음!) ---- OJT 를 주셨다. 업무에 빠른 적응을 위해서, 출근전에 한번 해보시면 좋을 것 같다고..최종적으로는 회사의 OJT 계정- 내 과제 전용 레포지토리에 PR을 날리면 되었다. 1.처음에 나는 단순히 내 프로젝트를 git remote 명령어로 회사의 레포지토리에 연결한 후 원격 푸시하려고 생각했다. 2. 그러나 그러면 안되었다. 권한이 없기때문 . 403 에러가 떴다. 그래서 난.. .처음에 팀장님에게 push 권..

Github 2025.08.24

[Java] 객체 생성은 어디서 해요?

*이 포스팅은 김송아 강사님의 강의 기반으로 작성되었습니다. 개요 https://gpdbs9409.tistory.com/70 객체지향이 뭐라고 생각하세요?*이 포스팅은 김송아 강사님의 강의 기반으로 작성되었습니다. 개요개발자는 프로그램 전반을 설계할 줄 아는 사람이어야 한다. 문제를 추상화 해서 핵심을 뽑아 내고 가이드라인을 제공할 수gpdbs9409.tistory.com지난번에 이 포스팅에서 객체는 무엇이고 클래스는 무엇일까?라는 것에 대해 다뤄보았는데, 그럼 실제 프로젝트에서 객체생성을 어디서 해야할지 생각보자. Main class에서 해도 될까? 클래스 분류 클래스는 크게 두 가지로 쪼갤 수 있다. 1.실행용 클래스 : main 메소드를 가지는 클래스 public class Main { ..

HTTP 통신에서의 Req,Res를 정의해보고 네이버 API 명세서 작성해보기

*이 포스팅은 신한투자증권 프로디지털 아카데미 김송아 강사님의 강의를 기반으로 작성되었습니다. 1.통신이 뭔가요? 웹에서의 통신은, 타인에게 정보를 정확하고 일정하게 전달하기 위한 수단이다. 그러려면 규칙이 있어야한다.그렇지 않으면 이해가 되지 않기 때문에 ~ ! 아래 강사님이 써주신 편지를 예로 들어서 , 우리가 왜 규칙이 필요한지 더 직관적으로 알아보자. 1번 편지. 알아들을 수 있다2번 편지. ??????? 이게 바로 우리가 규칙이 필요한 이유이다.그 웹에서의 규칙이 HTTP이다. 2.HTTP가 뭔데요?Hyper Text Trasfer Protocol 웹 통신을 요청(Request)과 응답(Response)으로 주고받게 하는... 약속(프로토콜)이다. 3.본론으로! Req,Res를 정의해..

[아주 짧은 글]How to 대규모처리 ? - 블랙핑크가 인스타그램에 새로운 포스팅을 올린다면?

*이 포스팅은 김송아 강사님의 강의 기반으로 작성되었습니다. 개요대규모 트래픽 처리는 어떻게 해야할까? 예를들어 블랭핑크 제니가 인스타에 글을 올리면 수천만 단위의 알림·피드 갱신이 한 번에 발생한다. 인스타그램은 갑자기 그런 이벤트를 처리해야하는 것이잖아.이런 대규모처리는 어떻게해야할까? 처음 질문을 듣고 난 후의 내 생각 분산 처리 / 멀티 리전: 트래픽을 지역별로 나누고, 여러 서버가 병렬로 나눠 처리한다.트리 구조(계층적 전파): 중앙에서 한 번에 쏘고, 지역/토픽 단위로 단계적으로 쏴진다(?) gpt의 답변메시지 브로커(예: Kafka): “알림 생성”을 바로 처리하지 않고 큐/토픽에 적재 → 소비자(컨슈머) 그룹이 병렬로 처리.비동기 이벤트 기반: API 서버는 “요청 수락”까지만..

[Spring Boot 기초]JVM이란?

*이 포스팅은 김송아 강사님의 강의 기반으로 작성되었습니다. 개요 단순 코더가 아닌 프로그래머가 되기 위해서빌드 과정부터 까보자. 자바 빌드 및 실행 과정은 아래 사진과 같다. 이 사진을 보고 송아샘은 짝꿍과 세줄 정리를 시키셨다! 우리의 답변 컴파일러가 코드의 문법을 검사, 토큰 단위로 분석하고 파악한 후 바이트코드(.class 파일)로 변환한다.(빌드)생성된 바이트코드는 JVM의 Class Loader에 의해 메모리로 로딩되고, 로딩 → 링크 → 초기화 과정을 거친다.이후 실행 단계에서 인터프리터와 JIT 컴파일러가 바이트코드를 실행하며, 가비지 컬렉터가 메모리를 자동으로 관리한다. 참고1.위의 용어들을 좀 풀어보자면 ~ 로딩:메모리에 올림 (클래스) 링크: 우리가 쓴 소스코드만으로는 ..