본문 바로가기

Dev Note/else6

Protocol Buffers 로 Java - NodeJs 통신시키기 왜 REST Api 에 Protocol Buffer 를 적용했는가? 얼마전 신규 오픈한 기능의 실시간 통신을 위해 구축해놓은 서버가 정상수치가 아니라는 인프라팀의 제보가 왔다. 정확히는 nginx 에서 무리가 왔기 때문에 소켓 서버를 타겟으로 들어오는 부분에서 문제가 있다는 추측이다. PM2 로그를 통해 본 서버로그에 아래와 같은 문구가 엄청나게 많이 찍히고 있고 파일이나 크기가 큰 리스트를 주고받는 경우도 많았기 때문에 실시간 서버에 들어오는 데이터의 크기를 의심하고 리퀘스트 파라미터를 처리하는 개선 작업을 진행해보려고 가닥을 잡았다. 어떻게 request entity 를 줄일 수 있나? 처음에는 빨리 해결하는 방법과 제대로 해결하는 방법 2가지의 안을 가지고 있었다. 회사의 상황상 기능 개발이 아닌 .. 2024. 2. 4.
효과적인 코드 리뷰를 향한 여정 (ft. aws codecommit, space) 현재 제가 몸담고있는 개발팀에서는 space라는 리뷰툴을 활용해 코드리뷰 진행 검토를 진행중입니다. space 라는 툴이 선택되기까지 정말 많은 과정이 있었고, 그럼에도 불구하고 아직 개선하고 정해야할 프로세스도 많습니다. 제가 저희 조직에 도입하기 위해 거쳐온 이 경험들이 얕은 경험에 불과할 수도 있겠지만, 아직 코드 리뷰를 정착하지 않은 팀이나 조직이 있다면 중간 공유가 인사이트가 될 수도 있을 것 같아 사용 후기를 공유합니다. 왜 space 를 쓰게 되었나 처음엔 flow task로 pull request 시작. 작년 이맘때쯤까지 저희 팀에서는 플로우 협업툴 업무 게시글을 활용한 pull request 를 진행했었습니다. 하지만 당시에는 아래와 같은 문제로 인해 자~연 스럽게 역사속으로 사라졌습니다.. 2023. 12. 24.
intellij 에서 git 으로 인식되지 않는 브랜치 해결 ( /.idea 폴더의 역할) intellij 사용중에 특정 레포에서만 몇몇 브랜치에서 git 으로 인식되지 않는 문제가 발생했다. 원인 자체는 간단하지만, 인텔리제이 사용자라면 협업중에 비슷한 경우가 생길 수 있는 부분이라 기록한다. 현상 일반적인 경우 git, commit ,history 등 intellij 에서 제공하는 탭들이 보여야 정상인데, 아래처럼 git 이 아닌 일반 프로젝트로 나오고 있었다. 특정 브랜치에서만 인텔리제이를 활용한 풀리퀘,커밋,깃 코드 분석과 히스토리를 전혀 볼 수가 없었지만 터미널을 통해 다른 브랜치로 체크아웃을 한 후엔 정상적으로 작동하고 있었다. 원인 원인은 인텔리제이를 사용하지 않는 다른 협업자가 불필요한 폴더를 삭제하는 과정중에 /.idea 폴더를 삭제한 뒤 push 를 한게 원인이었다. 위 문제.. 2022. 8. 8.
컴퓨터에서 생성하는 난수는 진짜 난수가 아니다? 코드를 짜다보면 '난수'를 사용해야하는 경우가 많다. 습관적으로 Random클래스나 Math클래스의 random() 매소드를 쓰곤 했는데 정확한 차이를 모르고 썼는데, 알고리즘 공부를 하던 중 난수가 진짜 난수가 아니라는 글을 보고 이참에 컴퓨터가 난수를 생성하는 과정을 정확히 알고싶어졌다. 난수란? 난수(亂數)란 정의된 범위 내에서 무작위로 추출된 수를 일컫는다. 난수는 누구라도 그 다음에 나올 값을 확신할 수 없어야 한다. 하지만 컴퓨터 과학 분야에서 말하는 난수는 보통 결정론적인 방법으로 생성된 난수이다. 특정 입력이나 조건에 따라 무작위로 선택된 것처럼 보이는 난수 또는 난수열이 생성되며 그 생성 조건이나 입력이 같다면 그 결과값은 항상 같다. 진정한 의미에서의 난수는 아니지만 그 결과값이 충분히.. 2020. 10. 22.
정적 바인딩(Static binding) vs 동적 바인딩(Dynamic binding) 바인딩(binding)이란? 네이버 지식백과에서 찾아보면 바인딩은 '컴퓨터 프로그래밍에서 각종 값들이 확정되어 더 이상 변경할 수 없는 구속(bind) 상태가 되는 것' 으로 설명되어있다. 즉, 프로그래머가 ​코딩을 해서 컴파일을 하게 되면 각각의 코드가 메모리 어딘가에 저장되고, 함수를 호출하는 부분에는 그 함수가 저장된 메모리의 주소값이 저장되며 프로그래머가 값을 변경할 수 없는 상태가 된다. 여기서 함수를 호출하는 부분(호출부)에 함수가 위치한 메모리 번지(정의부)로 연결시킨 것을 바인딩이라고 한다! 정적바인딩(Static binding)이란? 실행 이전에 값이 확정되면 정적 바인딩이라고 한다. 컴파일 타임에 호출될 함수가 결정되는 것으로, 함수는 기본적으로 정적 바인딩된다. 컴파일러는 선언되어있는.. 2020. 10. 7.
객체 지향 프로그래밍을 파해쳐보자! 처음 객체에 대해 배웠을 때 '객체'에 대해 설명하기 위해 노력하는 글들을 수도없이 읽었고, 나도 그 글을 이해하고 내 입으로 설명해보기 위해 몇일간 끙끙 앓았던 기억이 있다...🤣 수도없이 '객체'를 쓰고 있지만 아직도 그게 뭐야? 라고 물어보면 선뜻 대답하기가 쉽지 않다. 뭔지도 모르고 쓰지도 못했던 그때와는 달리 다행(?)히도 지금은 뭔진 정확히 몰라도 아주 유용히 쓰고 있으나 머리속에는 난해한 무언가만 남아있는 찝찝함😂😥 객체 지향 프로그래밍이 뭔지 간단명료하게 정리해보자!🕵🏻‍♀️ 객체지향프로그래밍(OOP : Object Oriented Programming) 이전에는? 객체 지향 프로그래밍 이전의 프로그래밍 패러다임을 살펴보면, 중심이 컴퓨터에 있었다. 프로그램이 어떤 일을 하고나서, 그 다음.. 2020. 10. 5.
반응형