해당 게시글은 (케인)멘토님께 멘토링 세션을 통해 주고받은 질의응답의 내용을 정리한 글 입니다.
😲 Q1. 특정 entity에 1:1 관계로 여러 개의 entity가 묶여있는 상황에서 특정 entity를 포함한 연계 entity들을 통합 조회하는 경우, 연계 entity의 값이 없는 경우에 대한 처리방법을 고민하고 있습니다.
특정 entity에 여러개의 entity가 1:1관계로 묶여있습니다. 특정 entity에 1:1 관계로 여러 개의 entity가 묶여있기 때문에 entitygrapth를 이용해 일시에 값을 받아오고자 합니다. 하지만 연계되는 entity가 실제로 존재할지 아닐지는 알 수 없으며, 연계되는 entity값이 아직 생성되지 않았을 수 있습니다.
이러한 상황에서 현재 떠올린 방법은 두가지가 있는데, 첫 번째로는 '결합되는 entity들의 중심 entity에 대한 response를 작성할 때 중심 entity에 대한 toResponse 메서드를 각각의 요소가 존재하는지 아닌지 여부에 따라 작성' 하는 방법이고, 두 번째 방법은 '각각 연계되는 entity의 toResponse 메서드를 작성 할 때 들어온 entity값이 null일 경우, null을 반환하도록 작성'하는 방법입니다.
첫번째 방법은 "혼자 빠르게 개발중인 제 상황에서 빠르게, 한 곳에서 관리 할 수 있다"는 장점이 있어 보이지만, 처음에는 귀찮을지 몰라도 두번째 방법을 사용하는것이 맞다고 생각이 됩니다. 멘토님께서 보시기에는 어떠한 방법이 더 나을것 같은지, 그 이유는 무엇이라고 생각하시는지 궁금합니다..!
👨🎓 A1. 유지보수 관점에서 보면, 두번째 방법이 좋을 것 같습니다.
😲 Q2. 버전관리 시스템을 어떻게 효율적으로 공부하고 사용 할 수 있을까요?
👨🎓 A2. 제 경우엔 cvs 같은 버전관리 시스템을 처음 쓰고, svn으로 넘어갔다가 git으로 넘어왔습니다. CSV나 Git같은 버전관리 시스템을 직접 만든다고 생각해보면서 공부한다면 이해가 빠를 것 같습니다.
😲 Q3. 멘토님께서 가장 즐겁게 참여했던 프로젝트에 대해 들어 볼 수 있을까요?
👨🎓 A2. 정말 고생했던 프로젝트, 데이터베이스에 병목이 생겼던 프로젝트, 클라우드 플랫폼 개발 프로젝트가 기억에 남습니다.
1. 고생한 프로젝트
무난한 프로젝트들은 보통 트래픽이 적었던 프로젝트였습니다. 제 경우에는 트래픽이 많았을 때가 재미있었습니다.
2. 데이터베이스에 병목이 생겼던 프로젝트
스토어드 프로시저라는 정합성을 도배하는 식으로 구현했었습니다.
DB 옵티마이저가 생각보다 우리의 의도를 파악하지 못한다는 것을 깨달았습니다.
따라서 비효율적으로 데이터를 반환하는 상황이 일어났습니다.
지연이 심해지면 DB 요청이 실패하고, 해당 요청이 날아가(사라지)기 때문에 해당 부분을 보완해야 했습니다.
😲 Q3-1. 어떤 식으로 해당 이슈를 처리하셨나요? 카프카 등을 사용하셨을까요?
우선은 실패가 난 쿼리를 로깅했습니다.
후처리 update ⇒ 어드민으로 가져와서 직접 확인 후 set. 동일한 변수로 접근하는 요청이 수행하지 않도록. nq를 적용하고. que에 요청을 날렸습니다.
😲 Q3-2. 효율성을 올리는 쪽으로는 DB 인덱싱이나, 락같은 부분을 커스터 마이징 하신 건가요?
action 성 api spring topic 기반으로 동기로 만들면 성능은 떨어지지만, 서비스레벨은 완벽함.
node사용 시 비동기라서 n+1을 발생시키는 게 효율적 일수 있음
DB에서 발생할 수 있는 비효율을 개선하는 효과가 있을 수 있음.
node : 이벤트 루프 이해도(웹플럭스 등 키워드 확인), 비동기 이해도 필수
애플리케이션에 문제가 없다면 DB에 문제가 생길 확률이 높다.
3. 클라우드 플랫폼 개발 프로젝트
해당 프로젝트에서는 유독 장애가 많이 났습니다.
내부가 깃랩으로 되어있었는데, 팀원들이 블로킹 동작을 많이 했습니다.
따라서 성능체크하고 가이드했던 경험이 기억에 남습니다.
해당 프로젝트에서 비동기와 동기 서비스 경험할 수 있어 기억에 남습니다.
다른 참여자들 질의 응답
- 주니어 백엔드 개발자가 빠르게 성장할 수 있는 회사 또는 팀은 어떤 조건을 갖춘 곳이 이상적 일지 궁금합니다 :) 조건이 여럿이라면 우선순위 별로 말씀해 주시면 더욱 감사하겠습니다!
- 시니어가 있는 회사
- 혼자만 개발을 한다면 과연 내가 잘하고 있는 건지에 대한 고민도 발생할뿐더러, 과연 내가 성장하고 있는 게 맞는지 조차 딜레마에 빠질 수 있기 때문.
- 기업 문화가 개인의 성장을 유도하는 회사
- 제품을 빠르게 만드는 요구사항을 맞은 경험 + 그 와중에도 고퀄리티를 위해 노력한 경험을 쌓는 것이 중요함.
- 시니어가 있는 회사
- 멘토님께서 기억에 남으시는 힘들었던 프로젝트 경험이나 오류 해결 경험에 대해서도 말씀해 주시면 감사하겠습니다!
- c++ 이 왜 아직까지 비주류 언어인가
- 개복치…
- 자바 : 크래시 났을 때 log나 dump가 반드시 남음.
- c++ : 사후분석을 위한 작업도 진행하지 못하고 고장 날 수 있음.
- 플랫폼 개발 시
- 네트워크 장비의 경우 영어화까지만 진행함.
- 따라서, 명세에 굉장히 모호한 표현들이 있음.
- 원하는 곳까지만 네트워크 패킷을 보내는 작업에서
- api 내부에 특정 요소 하나 때문에 모든 장치에서 에러 발생
- 장치를 테스트할 수 있는 환경이 없기 때문에 디버깅이 안됨.
- 눈으로 한 줄 한 줄 라우팅 룰을 읽어서 수정함
- 소프트웨어는 하드웨어를 다루는 것과 다르게 환경 구성이 쉽다.
- 네트워크 장비의 경우 영어화까지만 진행함.
- c++ 이 왜 아직까지 비주류 언어인가
'Web_Backend > DB' 카테고리의 다른 글
야나의 코딩 일기장 :) #코딩블로그 #기술블로그 #코딩 #조금씩,꾸준히
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!