본문 바로가기
반응형

전체 글10

mac M1에서 메모리 힙 덤프 떠서 분석하기 이전 회사에 다닐 때 카테고리 구조를 바꾼 큰 프로젝트가 배포가 나갔는데요, 그 때 같이 변경 되었던 부분이 실시간 polling 기능이었습니다. 전 회사는 미술품 경매가 주 사업이었는데요, 응찰 할 때마다 가격 갱신이 즉시반영이 되지 않아 고민 끝에 socket에서 1초 polling 방식으로 변경했습니다. 이 기능은 목록 조회, 상세페이지 조회 시 자동으로 1초마다 현재 최고가 데이터를 갱신합니다. 그런데 그 이후, 서버 어플리케이션이 이틀에 한번씩 갑자기 OOM이 발생하여 다운되는 현상이 지속됩니다. 개발자 전원이 다 붙어서 확인을 해보지만 별다른 성과가 없자, 메모리 덤프를 떠서 분석을 해보자는 의견이 나오게 됩니다! 서비스 환경 저희 서비스를 아래 환경이었기 때문에 참고 부탁드립니다 :) Mac.. 2023. 12. 10.
Git flow 이해하기 Intro 회사에서는 Git과 Git-flow를 매우 익숙하게 사용하고 있지만.. 버튼 몇 번만 누르면 다 해주는 방식을 계속 써왔다 보니(fork 사랑해요) 또 아무 생각 없이 사용하는 나 자신을 발견하게 되어 팀장님에게 말로 맞은 겸 정리할 겸 오랜만에 글을 작성해보았습니다. git flow의 시작, git flow init 우리가 처음 깃허브에 레파지토리를 만들 때 맨 처음 git init 명령어를 사용하는 것을 보았을 겁니다. git flow init은 이 보다 확장 된 명령어 이며, develop브랜치를 생성하여 분기처리를 하는 것 이외에는 아무런 영향을 주지 않습니다. git init은 새로운 깃 레파지토리를 생성을 하게 됩니다. 프로젝트 root directory에서 숨겨진 파일목록 보기를 .. 2022. 5. 10.
Codecov로 code coverage 확인해보기 매번 단위테스트가 현재 프로젝트에 대해 얼마나 커버를 하는지 메서드 line 단위로 확인을 하고 싶어 code coverage에 대해 알아보게 되었습니다. 그 중에서도 다른 레퍼런스에 비해 많이 검색되고, 자체 docs를 잘 관리하고 있는 Codecov 를 최종적으로 선택하게 되었습니다. PR에 보기 편하게 report를 해주고, Github Actions와 쉽게 연동할 수 있도록 기능을 제공하고 있었기 때문입니다. Codecov 회원가입 깃허브 레파지토리와 연동이 필요하다면 반드시 깃허브 계정으로 로그인이 되어야 합니다. 깃허브 계정으로 소셜로그인을 했다면, 다음 창으로 현재 내 깃허브 레파지토리에 접근하겠다는 Access Authorize 관련 창이 뜨게 됩니다. 혹시 슬랙과 깃허브를 연동해보셨다면 .. 2021. 12. 15.
Funtional Programming은 어떻게 가능하게 되었을까? Overview Java 8 버전 이상을 사용하는 분들이라면 아마 Functional Programming 을 적극적으로 이용하시는 분들이 많을 거라 생각합니다. 자바 8버전 부터 Stream API와 함께 추가 된 대표적인 기능 중 하나이죠. 저 또한 개발 중에 함수형 프로그래밍으로 코드를 많이 짜고 있는데요, 처음 사용했을 때 가장 신기했던 것은 -> (람다식)을 사용하여 추가적인 메서드를 생성하지 않아도 익명함수를 활용하여 내부 값을 불러올 수 있다는 점이었습니다. 그러다보니 자연스럽게 코드도 간결해지게 되었죠. 그러다 하나 의문점이 생겨나게 되었는데 그 점은 바로 아무거나 함수형 프로그래밍으로 사용할 수 있는걸까? 하는 궁금증이었습니다. 만약 아무거나 함수형으로 쓸 수 없다면 내부 구현은 어떻게 .. 2021. 11. 15.
AWS S3 이미지 업로드 Spring으로 사용해보기 대부분의 이미지 서버를 구축할 때는 AWS S3를 보편적으로 사용합니다. 저희 또한, S3를 애플리케이션 이미지 업로드 및 다운로드 서버로 선택하게 되었습니다. 큰 이유가 있기 보다는.. 서버를 사용하는데는 항상 비용문제가 따라오기 마련인데 마침 공짜 크레딧이 생겨(!!) 무리 없이 이용할 수 있게 되었습니다. 스프링으로 사용하지 않는 경우에는 보통 API Gateway - AWS Lambda - S3 식의 구조로도 많이 발견이 됩니다. 이는 트래픽이 많이 몰릴 수 있는 상황이거나 앞으로의 확장성을 많이 고려해야 할 때 사용하는 방식입니다. 하지만 어드민 페이지를 구축하거나(보통 사진업로드가 많지않음) 저희처럼 MVP한 모델로 신규 서비스를 런칭하는 것이라면 크게 트래픽이 몰리지 않기 때문에 오히려 서버.. 2021. 11. 14.
Junit 단위테스트에서 AutoParams 사용해보기(feat. TDD) Overview 기능을 개발하다 보면, 내가 만든 로직이 제대로 돌아가는지 항상 테스트를 해보게 됩니다. 물론 매번 서버를 실행시켜서 API 테스터를 활용해 해볼 수 있지만, 매번 서버를 재실행하여 확인하는 건 시간이 매우 오래걸립니다.(실무급으로 가면.. 프로젝트가 상당히 크기 때문에 재기동에도 시간이 걸리게 되죠..ㅠ) 해서, Service layer에 한정하여 특정 값을 넣었을 때 잘 돌아가는지 빠르게 확인하고 이후 CI/CD에서 테스트 자동화를 위해 Junit으로 단위테스트를 작성하고 있는데요, 테스트 코드를 실행할 때는 미리 값을 전부 셋팅을 해주어야 합니다. 어쩌다 돌아보면 코드를 쓰는 것 보다 값을 셋팅하는데 더 많은 시간을 쏟고 있더군요😂😂 그래서 드는 생각: 아, 이런 값은 내가 항상 지.. 2021. 11. 6.
반응형