본문 바로가기

전체 글

(190)
해커톤을 준비하며 해커톤 준비에 임한 지 약 일주일이 지났다. 팀원들끼리 많은 회의를 진행하며 거듭해서 아키텍처 개선안에 대해 논의하고 있는 요즘이다. 종강 후 AWS SAA를 준비하고 있었기에 현재 진행 중인 인프라 설계에 조금 더 수월했던 것 같다.   물론 진행하며 답답함을 겪는 일도 많았는데, 가장 답답한 점은 인프라 설계에 명확한 정답은 없다는 점. 끊임없이 수정하고 수정해도 완벽한 정답인지 우리끼리 결론내릴 수 없다는 점이다. 이 점이 어쩌면 현재하는 작업이 매력적으로 느껴지기도 하는 이유일 것이다. 갈피를 잡을 수 있도록 멘토님께서는 특정한 서비스에 대해 말씀해주시기 보단, 스스로 생각할 수 있도록 유도하는 피드백을 많이 해주시는데 아마 끊임없이 사고하는 과정에서 많은 것을 배울 수 있을 것이라 생각하시기 때..
대규모 시스템 설계 기초(12장 발췌독) 위 책에서는 페이스북 메신저와 유사한 채팅 앱을 설계하고자 함 요구 사항은 다음과 같다  - 1:1채팅, 그룹 채팅 앱 둘다 지원 - 모바일 앱, 웹 앱 둘 다 지원 - DAU(Daily Active User) 기준으로 5천만명 처리 가능- 그룹 채팅 최대 100명- 1:1 채팅, 그룹 채팅, 사용자 접속상태 표시, 텍스트 메시지만 주고 받을 수 있다 - 메시지 길이에 제한 : 100,000 자 이하- 채팅 이력은 영원히 보관- 응답지연이 낮은 일대일 채팅 기능- 최대 100명까지 참여할 수 있는 그룹 채팅 기능 - 사용자의 접속상태 표시 기능- 다양한 단말 지원, 하나의 계정으로 여러 단말에 동시 접속 지원- 푸시 알림  채팅 서비스는 아래 기능을 제공해야 한다 - 클라이언트들로부터 메시지 수신- 메시..
1차 회의를 마치며 1차 회의를 마친 뒤, 먼저 감사한 마음이 들었다. ACC(Amazon Cloud Club)에서 주관하는 좋은 대회에 참여할 수 있음에, 그 대회에서 훌륭한 팀원들을 만난 것 같기 때문이다. 백엔드에서 최근 인프라 및 클라우드에 대한 관심이 생겼었지만 이렇다 할 기회가 없어서 고민이 많은 상황이었는데 이런 좋은 기회에 인프라에 대한 깊은 공부를 할 수 있는 계기가 생긴 것 같아 매우 감사하다. 시작한지 얼마되지 않았지만 관련 케이스 스터디 및 리서치를 진행하며 이전보다 많은 지식들을 배우게 되었다. 앞으로 남은 기간동안에도 적극적으로 참여하여 개인적인 성장과 팀 공동의 목표를 위해 열심히 임할 계획이다. -1차 회고 마침-
C<->어셈블리어 어셈블리↔C C언어 컴파일 과정 전처리기 → 컴파일러 → 어셈블리어 → 링커 test.c → test.exe 전처리기 : test.i 본격적 컴파일 전 준비 외부에 선언된 소스코드, 라이브러리 포함 (include) 매크로 변환(define) 컴파일할 영역 명시 컴파일 전처리가 완료되어도 여전히 소스코드 소스코드를 어셈블리어로 변환 어셈블러 어셈블리어를 기계어(0과1로 표현)로 변환 완료하면 목적 파일(0과1로 이루어짐)이 됨 링킹 각기 다른 목적코드를 하나의 실행파일로 묶어주는 것 컴파일언어 고급언어(소스코드) → 컴파일러 → 저급언어(목적코드) https://www.youtube.com/watch?v=B8TDaBp3UWo GCC C 컴파일러는 기계어 코 드를 문자로 표시한 어셈블리 코드의 형태로 출력..
DB replication 사용이유 DataBase 안정성을 위해 사용됩니다 리플리카 서버는 아주 약간의 딜레이가 있지만 거의 실시간으로 마스터 서버와 동일한 데이터를 가지고 있기 때문에 장애 복구 시 데이터 소실이 최소화됩니다. 특징 리플리카 서버는 마스터 서버로 승격이 가능하기에 마스터 서버로 승격시켜 기존 마스터 서버를 대체하는 방식으로 복구가 진행됩니다 복제서버인 리플리카는 기본적으로 읽기 전용입니다 마스터 서버는 SQl 명령을 수신하면 그 SQL 명령을 리플리카 서버에도 똑같이 보냅니다 그러면 마스터 서버와 리플리카 서버의 데이터가 동일한 상태로 유지합니다 MySQL의 Replication은 기본적으로 비동기 복제 방식을 사용하고 있습니다. Master 노드에서 변경되는 데이터에 대한 이력을 로그에 기록하면 Relicat..
Swagger을 통해 OpenAPI 문서화하기 OAS에 대해 알아보기 OAS에 대해 알기 전 선행되어야 하는 개념들이 있다 REST Representational State Transfer의 약자로 자원을 이름으로 구분하여 해당 자원의 상태를 주고 받는 모든 것 HTTP Method를 통해 CRUD Operation을 적용하는 것을 의미한다 EX) DB의 게시글 정보가 자원일 때, posts로 표현함 RESTful API란? REST 기반으로 서비스 API를 구현한 것 기본 규칙 resource는 동사보다는 명사를, 대문자보다는 소문자를 사용한다 resource의 도큐먼트 이름으로는 단수 명사를 사용해야 한다 resource의 컬렉션 이름으로는 복수 명사를 사용해야 한다 resource의 스토어 이름으로는 복수 명사를 사용해야 한다 자원에 대한 행위..
N+1문제 N+1문제를 위해 필요한 기본 개념들에 대해 먼저 설명하겠습니다 ORM(Object-Relatonal Mapping) 우리가 일반 적으로 알고 있는 애플리케이션 Class와 RDB(Relational DataBase)의 테이블을 매핑(연결)한다는 뜻이며, 기술적으로는 어플리케이션의 객체를 RDB 테이블에 자동으로 영속화 해주는 것이라고 보면됩니다 장점 SQL이 아닌 Method를 이용하여 DB조작할 수 있어, 비지니스 로직을 구성하는데만 집중할 수 있습니다 객체지향적인 코드 작성 가능 -> 생산성 증가로 이어집니다 DB 종류를 변경할 경우에 ORM을 사용하면 쿼리를 수정할 필요가 없습니다 JPA • JAVA에서 ORM 기술 표준으로 사용하는 인터페이스 모음입니다 • 자바에서 관계형 데이터베이스를 사용하는..
recursive(1) Recursion - 자기 자신을 호출하는 함수(메서드) - 통제를 통해 무한루프에 빠지지 않게 할 수 있다 무한통제 방지 구조 - 적어도 하나의 recursion에 빠지지 않는 경우가 존재해야한다 -> base case - Recursion을 반복하다보면 결국 base case로 수렴해야한다 대표적인 예시 1) 팩토리얼 2) 피보나치수열 3) 최대공약수 M>=N인 두 양의 정수 M과 N에 대해서 M이 N의 배수이면 gcd(M,N) = N이고, 그렇지 않으면 gcd(M,N) = gcd(n,M%N)이다. 코드) Public static double gcd(int m, int n){ If(m 길 1-> 벽 2-> 가봤지만 목표지점까지 갈 수 없는 곳임이 확인된 곳 3-> 가봤지만 목표지점까지 갈 수 있는지 ..