분류 전체보기 16

자료구조 모음

공부 하면서 계속 업데이트 예정입니다.큰 틀의 질문에 대한 답변을 공부하며, 해당 질문에 대한 꼬리질문을 공부해나갈 예정입니다. 배열과 링크드 리스트의 차이점더보기더보기배열은 메모리에 할당될 때 연속적인 데이터 공간에 할당이 됩니다.데이터에 접근 할 때 random access가 가능하므로 빠르지만, 삽입 삭제 시에나 배열의 크기를 유동적으로 변하기 어렵습니다. 링크드 리스트는 메모리에 할당될 때 흩어져서 저장됩니다.처음에는 크기를 지정해주지 않아도 되며 삽입 삭제가 빠르지만 검색 시 순차접근을 통해서 접근해야하므로 느립니다.스택과 큐에 대해서 설명해주세요.더보기더보기스택은 후입선출 구조로, 한쪽 끝에서만 삽입과 삭제가 이루어지며 함수 호출 스택이나 실행 취소 기능에 사용됩니다.큐는 선입선출 구조로, 먼..

CS 2026.01.05

Monolith vs Microservices

Monolith 아키텍처 모든 업무 로직이 하나의 애플리케이션 형태로 패키지 되어 서비스애플리케이션에서 사용하는 데이터가 한 곳에 모여 참조되어 서비스되는 형태해당 방식의 문제점 하나의 시스템에 애플리케이션을 구성하고 있는 모든 서비스라든가 요소들이 패키징되어 서비스가 되고 있기 때문에서비스의 일부가 수정되거나 삭제된다 하더라도 전체 애플리케이션을 다시 빌드하고 테스트하고 패키징하고 배포하는 과정을 거쳐야한다는 점 MicroService 아키텍처 여러 개의 작은 서비스 단위로 쪼개져서 개발, 배포가 되고 운영하는 방식작은 단위로 만들어지고 개별적으로 분리되어 있는 서비스개발과 배포와 운영이 각각 독립적인 사이클을 갖고 만들어진다는 것이 가장 큰 특징서로 간의 통신을 위해 HTTP프로토콜 사용 - 필요한..

MSA 2026.01.02

12 Factors

12 Factors 클라우드 네이티브 어플리케이션을 개바하거나 서비스를 운영할 때 고려해야 될 항목을 정리 한 것 Heroku라는 회사에서 자사의 고객들을 상대로 클라우드 서비스 시 발생했던 문제점이라든가 개선점 그리고 시행착오를 바탕으로 해서 이러한 가이드라인을 만들어서 배포를 했다고 함 12 Factors에서는 코드의 통합, 종속성의 배제, 환경설정에 대해서 외부관리, 백업서비스의 분리, 개발환경과 테스트, 운영환경의 통일성 유지, 로그의 분리, 관리 프로세스 등 소개를 하고있음 1. Base Code - 코드베이스하나의 애플리케이션에는 하나의 코드베이스를 사용한다.그런 코드베이스에 의해서 여러 배포 환경으로부터 분기가 가능하도록 구축하는 것이 좋다.2. Dependency Isolation - 의..

MSA 2026.01.02

Cloud Native Application

Cloud Native Application 방식으로는 크게 3가지로 나눠짐 CI/CD + DevOps + Container 가상화 1. CI/CD CI (Continous Integration) : 지속적인 통합통합 서버, 소스 관리(SCM), 빌드 도구, 테스트 도구 ex) Jenkins, Team CI, Travis CI CD : 지속적 배포Continuous Delivery (수동 반영)Continous Deployment (자동 반영)Pipe line배포 전략 : 카나리 배포와 블루 그린 배포카나리 배포95% 사용자를 이전 버전 서비스 사용5% 사용자를 새 버전 서비스 사용블루 그린 배포점진적으로 새로운 버전으로 옮겨갈 수 있는 방식 2. DevOps Development + Operations..

MSA 2026.01.02

EBS

EBSElastic Block Store Volume인스턴스가 실행되는 동안에는 인스턴스에 연결할 수 없는 네트워크 드라이브인스턴스와 EBS 볼륨 간의 통신을 위해 네트워크 사용(지연 있음)EC2인스턴스에서 분리하여 다른 인스턴스에 매우 빠르게 연결할 수 있음(장애 조치할 때 편리)인스턴스가 종료된 후에도 데이터 유지 가능(인스턴스를 다시 생성하고 이전과 동일한 EBS 볼륨을 마운트하면 데이터를 다시 가져올 수 있음)CCP 레벨의 EBS 볼륨은 한 번에 하나의 인스턴스에만 마운트 할 수 있음특정 가용성 영역에 고정되어 있음 (us-east 1a에 생성된 EBS 볼륨을 us-east 1b의 인스턴스에 연결할 수 없음)스냅샷을 수행하면 다른 가용성 영역에서 볼륨을 이동할 수 있음미리 용량을 프로비저닝해야함원..

AWS 2025.12.30

EC2

AWS certificate DVA-C02 공부 내용입니다. EC2 Elastic Compute Cloud = Infrastructure as a Service구성요소:ec2인스턴스가상 드라이브 or EBS 볼륨로드밸런서자동확장 그룹, ASG구성 시 옵션운영체제(Linux, Windows, Mac OS)컴퓨팅 성능과 코어(CPU)RAM저장공간(네트워크를 통해 연결할 스토리지: EBS& EFS 또는 하드워드(EC2 Instance Store))네트워크 카드, 공인 ip주소보안그룹부트스트랩 스크립트: EC2 User DataEC2 User Dataec2 사용자 데이터 스크립트를 사용하여 인스턴스를 부트스트랩할 수 있음부트스트랩 : 컴퓨터가 시작될 때 명령을 실행하는 것한번만 실행되고 다시는 실행되지 않음부..

AWS 2025.12.29

💡API도 몰랐던 내가, 팀의 개발 문화를 고민하게 되기까지

🧩 첫 프로젝트 – React로 진행한 스터디 올인원 프로젝트개발을 처음 시작했을 때, REST API의 개념조차 제대로 이해하지 못한 상태였습니다.github도 처음 다뤄보는 상황이었기에, API 명세서를 봐도 무슨 말인지 몰랐고,백엔드 팀원에게 물어봐도 “명세서 보면 된다”는 답변만 들었습니다.(아마 그분도 프론트 연동 방식을 모르셔서 그랬던 것 같습니다.)그 결과, 프론트엔드와의 연동 과정에서 큰 어려움을 겪었고,이때 “전체 구조를 이해해야 제대로 개발할 수 있다”는 깨달음으로 백엔드를 공부하기 시작했습니다. 그래도 해당 프로젝트로 교내 SW 대회에서 우수상을 수상하며 첫 성취를 거둘 수 있었습니다.비록 연동에 어려움이 있었지만, 스스로 한계를 인식하고 개선 방향을 찾았다는 점에서저에게는 '개발자..

실시간 채팅에 커서 기반 페이지네이션 도입하기

이 글을 작성하게 된 이유이번 프로젝트에서는 gRPC 기반의 채팅 서비스를 새롭게 구현하면서, 이미지 전송까지 마무리한 뒤 PR을 올리고 뿌듯해하던 중,팀원으로부터 “페이징을 적용해보면 좋을 것 같다”는 코드 리뷰를 받았습니다.사실 저도 페이징을 고려하고 있었기에 “좋은 기회다” 싶어 성능 개선을 목표로 페이징을 직접 적용했습니다.그리고 여러 페이징 기법 중 어떤 방식을 선택했고, 왜 그렇게 결정했는지를 정리해두면 좋을 것 같아 이 글을 작성하게 되었습니다. 페이지네이션이란?검색결과를 가져올 때 데이터를 쪼개 번호를 매겨 일부만 가져오는 기법입니다. 왜 사용했는가?사용자가 채팅방에 들어올 때, 모든 채팅 내역을 한 번에 조회한다면 어떨까요?채팅이 10개, 20개 정도일 때는 큰 문제가 없지만, 내역이 1..

PROJECT 2025.10.18

트랜잭션(Transaction)

트랜잭션이란?"더이상 분할이 불가능한 업무처리의 단위"를 의미합니다. 하나의 작업을 위해 더이상 분할될 수 없는 명령들의 모음을 의미하며, 한꺼번에 수행되어야 할 일련의 연산모음을 의미합니다. 다음과 같은 상황이 있다고 가정해봅니다. 1. 친구들과 놀고 집에 온 민영이는 정산을 해야합니다. 유진이에게 3만원을 카카오페이를 사용하여 송금했습니다. 2. 그러나 내 통장에서는 3만원이 차감되었는데, 유진이 계좌에는 3만원이 입금되지 않았습니다. 위의 상황과 같이 만약 인출에는 성공했는데, 입금에 실패하면 치명적인 사고가 납니다.따라서 이 두 과정은 동시에 성공하던지 동시에 실패해야 합니다. 이 과정을 동시에 묶는 방법이 바로 트랜잭션입니다. START TRANSACTION 민영의 계좌로부터 인출 ..

CS/DB 2025.10.17

gRPC 채팅 스트림에서 트랜잭션이 적용되지 않았던 이유(feat. 자기 호출, 프록시)

🧩문제 상황 채팅방 목록을 조회할 때, 각 채팅방에 대해 가장 최근 메시지(latestMessage)와 그 시간(lastestTime)을 함께 보여줘야 했습니다.하지만 실제 화면에서는 최근 메시지가 표시되지 않는 문제가 발생했습니다. 🔍 초기 설계채팅 메시지를 보낼 때, 해당 채팅방의 최근 메시지 정보를 함께 업데이트하도록 설계했습니다.이를 위해 채팅 처리 메서드에 @Transactional을 붙이고, 내부에서 updateLatest()라는 메서드를 호출해 채팅방 정보를 갱신하도록했습니다. ⚠️ 이상 현상하지만 로그를 확인해보니 메시지 저장(INSERT)은 정상적으로 수행되었지만,채팅방의 최근 메시지 업데이트(UPDATE)는 실행되지 않았습니다.아래 쿼리를 보면 메시지를 inser..

PROJECT 2025.10.16