개발
-
MongoDB aggregation: $lookup, $unwind, $project개발/백엔드 2022. 9. 29. 21:04
1. 문제상황 가령 블로그 사이트를 만든다고 생각한다. 셀 수 없이 수많은 요소들이 필요하지만.. 유저, 본문, 댓글 정보로 한정해서 다루어보겠다. MongoDB와 같은 NoSQL기반 데이터베이스에는 다음과 같이 저장이 될 것이다. 일단은 '유저'라는 하나의 컬렉션 안에 모두 표현하고자 시도했다. - '유저' 컬렉션 - [ { "_id": ObjectId("..."), "이름": "최재휘", "별명": "jaytsol", "국가": "대한민국", "이메일": "jaytsol@naver.com", "글": [ { "id": "1", "제목": "JavaScript 입문", "본문내용": "JavaScript는 어쩌구저쩌구.....", "생성일시": "2022-09-08 07:13:25.914Z", "수정일..
-
JavaScript에서의 객체 순서 보장법개발/백엔드 2022. 9. 26. 13:12
{ "id": 1, "name": "jaytsol", "address": "경기도 성남시 ...", "phone_number": "010-..." } 흔히 사용하는 object.assign() 등으로 객체를 생성하면 키의 삽입 순서에 따라 객체의 형태가 정해진다. 기능적으로는 순서가 어떤들 아무 상관이 없겠으나, 프론트로 넘겨주려는 객체를 생성할 때 각 객체의 특징을 한눈에 알아보기 좋게 정렬하고 싶다. 가장 중요한 id값이나 name 등이 중요한 정보에 해당하므로 위쪽으로 올리는 식이다. 이는 팀의 개발 효율성을 높일 수 있다. 1. object.key()를 이용 Object.keys({ 2: true, 1: true, '00': true, 'b': true, 'a': true, '3': true, }..
-
Param, Query, Body개발/백엔드 2022. 8. 17. 17:26
그동안 특히 param과 query에 대한 명확한 구분 없이 혼용해서 사용했던 것 같다. 제대로 정리해서 보다 명확하고 보기 좋은 API를 생산해야겠다. 1. req.param 주소에 포함된 변수. e.g) https://jaytsol.tistory.com/entry/이미지에-속지-마라 이 경우 entry와 '이미지에-속지-마라'가 param이 되겠다. 2. req.query 주소 바깥의 ? 이후의 변수. e.g) https://www.youtube.com/results?search_query=%EC%BF%BC%EB%A6%AC 유튜브에 '쿼리'를 검색했을때 나오는 주소. 이 경우 search_query=%EC%BF%BC%EB%A6%AC 가 query가 되겠다. 3. req.body XML, JSON, M..
-
카오스 몽키 (Chaos monkey)개발/기타 개발 이야기 2022. 7. 31. 14:11
그 이름부터 흥미로운 '카오스 몽키'는 비디오 대여업을 하던 넷플릭스가 비디오 스트리밍 서비스로 전환하던 초기에 자사 시스템의 탄력성과 회복성을 제고시키기 위해 고안한 소프트웨어 도구이다. 카오스 몽키가 하는 일은 서비스를 공급하는 인스턴스를 무작위로 셧다운시켜버리는 것이다. 이렇게 함으로써 엔지니어는 추후 예상치 못한 장애가 발생했을 때 시스템이 스스로 복구할 수 있게 하는 등의 작업을 미리 할 수 있게 된다. 이는 이후 '카오스 엔지니어링'이라는 방법론으로 발전하여 현대 소프트웨어 개발의 원칙 중 하나로 자리잡게 된다. 참고 : https://github.com/Netflix/chaosmonkey
-
Kafka - Acks 옵션개발/백엔드 2022. 7. 26. 10:50
메시지의 손실을 방지하기 위한 전달 완료 확인 옵션인 acks 옵션. 간단히 말하면, acks = 0 이면 메시지 전달을 확인하지 않는다. acks = 1 이면 브로커 중 리더에 대해서만 메시지를 수신했는지 확인한다. acks = -1 이면 리더와 팔로워 브로커 모두에 대해 메시지를 수신했는지 확인한다. 몇 개의 팔로워까지 확인을 하는지는 추가적인 옵션(min.insync.replicas)에 따라 설정 가능하다. 자세한 내용은 다음 링크의 글쓴이분이 자세히 설명을 해주셨으니 참고바람. https://www.popit.kr/kafka-%EC%9A%B4%EC%98%81%EC%9E%90%EA%B0%80-%EB%A7%90%ED%95%98%EB%8A%94-producer-acks/
-
Transaction에 대해개발/백엔드 2022. 7. 18. 21:39
여러 읽기/쓰기를 논리적으로 하나로 묶은 단위 트랜젝션 시작 - 여러 쿼리 실행 - 커밋(DB에 반영) 또는 롤백 모두 커밋(DB에 반영) 또는 롤백 이러한 트랜젝션(최소 단위)가 없다면, 클라이언트가 요청을 보내고 다시 그 결과를 받기 전까지 여러 쿼리문이 실행될 텐데, ex) 1.1: select - 1.2: update - 1.3 insert .... 여기서 1.3에만 문제가 발생한다면?... 위의 쿼리문이 실행되는 도중 문제가 발생해 중단된다면 원상복귀를 위해 1.3을 제외한 1.1, 1.2만 revert해야하는 참사가 발생함. 이러한 상황을 그저 하나의 트랜젝션을 롤백해주는 것만으로 해결. 트랜젝션의 범위는 커넥션 기준. 여러 메서드 호출이 하나의 커넥션으로 묶여야함. 그렇지 않으면 이미 특정 ..