TL;DR거의 처음 설계를 하면서 왜 설계를 하는지에 대한 고민을 가지고 mermaid라는 툴을 통해 설계를 시도해보는 글입니다.들어가며지금까지 개발을 해오면서 설계를 제대로 했는지 생각해봤다.ERD말고는 만든 기억이 없다.그렇다고 해서 제대로 만들지는 않았던거 같다.그려면 왜 그렇게 하지 않았을까?그야 편하니까..개발자의 시선이 아닌 비 개발자의 시선으로 개발자를 바라본다면 '종이'가 아닌 '코드'를 먼저 작성한다고 생각한다.난 아직도 비 개발자의 시선으로 개발자를 바라보고 있는것이 아닌가그래서 당연하게 먼저 IDE를 키고, 코드를 작성하는거 같다.솔직히 아직 잘 모르겠다. 설계를 해서 직접적으로 얻은 이득은 아직 잘 와 닿지는 않는다.그럼에도 설계를 공부하고 해보는 이유는시도를 안 해봤기 때문에 어렵..
🧠 이번 주에 새로 배운 것 1. 리뷰 포인트를 재대로 작성을 해야 한다라는것을 배웠습니다. 💭 이런 고민이 있었어요1. 리뷰 포인트에 대해 어떻게 작성을 하면 좋을지 고민을 했던거 같습니다. 1.1 변명이긴하지만, 나중에 pr을 올리고 리뷰 포인트를 작성하려다보니 내가 어떤 포인트에서 고민을 했었는지 전혀 생각이 나지 않더라구요.🤔 아쉬웠던 점 & 다음 주에 해보고 싶은 것1. 리뷰 포인트 작성이 아쉬웠습니다.2. 궁금증이 생기는것이 있으면 코드는 어디든 메모를 해두고 pr을 올릴때 옮겨 적는 방식으로 나의 궁금증을 코치님께 전달드릴 예정입니다.3. 팀원들이랑 자주 소통을 하면서 어떻게 하면 더 좋은 설계 혹은 코드를 작성할 수 있을지 고민을 해보고 거기서 나온 포인트들을 리뷰 포인트로 작성할 ..
개요오늘도 평화롭게 코드를 작성하고 있었어요..저희 팀은 organazation으로 같이 코드를 관리하고 있기에 팀원들의 코드를 염탐해 봤습니다.그런데!!처음보는 코드를 발견하였습니다. 그건 바로 Embedded 요건 멀까?찾아보니 JPA에서 임베디드 타입을 제공하는 방법이었습니다.~~~~~이걸 활용하면 단위 테스트를 사용할때, 생성자 파라미터의 갯수를 줄일 수 있을꺼 같다!!!생각해보니...기존에 사용했었던 빌더 패턴도 생성자 파라미터 갯수를 줄일 수 있지 않나??갑자기 궁금해졌다. 뭐가 좋은걸까???그래서 뭘 테스트 했는데.초반에 다음처럼 단위 테스트를 작성하고 싶었습니다.String userId = "userI123456";CoreException result = assertThrows(CoreEx..
올해는 내 인생에서 제일 바빴던 6달이었다.올해 첫 나는 퇴사를 하게 되었다.Flab작년 11월 나는 내 개생에 중대한 결정을 하게 된다.아무리해도 회사일도 정상적으로 되지도 않았다. 그래서 기본기를 조금더 학습을 하면 좋지 않을까 해서신청하게 되었다. 그 당시 나는 피폐했고, 굉장히 부정적인 인간이었다. 오랜만에 느껴지는 감정이라 이것을 극복하고 싶었다.그러던 어느날 flab 광고를 보게되었다. 비싸긴해도 내가 멘토를 고용한다는 느낌으로 신청하게 되었다.flab을 시작하는 목적이 나는 '자신감'회복이었다. 그래서 이론적으로 강한분을 멘토로 선택하게 되었다.멘토님은 매주마다 질문을 하시고 나는 답변을 하였다.그러다 1월 중순쯤에 나는 퇴사통보를 받게 되었다..퇴사 후착찹했다. 이제 flab목적이 '자신감..
[이력 정리] - 과연 내 이력은 이직하는데 부족한걸까? (경력편) -1 [이력 정리] - 과연 내 이력은 이직하는데 부족한걸까? (경력편) -2 [이력 정리] - 과연 내 이력은 이직하는데 부족한걸까? (경력편) -3 생각보다 시리즈가 많이 나왔다.이제 세세하게 내가 일한 내용이 아니라 저 프로젝트?에 대해서 설명하면 될거 같다.1. 클라우드 관리 플랫폼2.도시 데이터 플랫폼이렇게 작성할 수 있을거 같다.지금까지 생각했을때 나는 코어 도메인은 맡지 않았던거 같다. 첫번째 같은 경우는 대기업에서 수주를 요청해서 제작했던 프로젝트였고 내가 입사했을때 개발을 하였다. 이력의 대부분을 이 프로젝트에 투자했던걸로 기억한다. 아무튼 이 프로젝트에 대해 설명하면 될거 같다.클라우드 관리 플랫폼은 크게 2..
[이력 정리] - 과연 내 이력은 이직하는데 부족한걸까? (경력편) -1. [이력 정리] - 과연 내 이력은 이직하는데 부족한걸까? (경력편) -2이제 내 경력이야기의 마지막일거 같다. SI에 근무했지만 했던 프로젝트가 2개밖에 존재하지 않는다. 그렇다고 해서 엄청많은 이야기가 있었던것도 아니었다. 내 개발 역사는 개발 그리고 문서였다. 의미없는 문서만 적는게 일상이었다. 남는게 아무것도 없다. 남은거라고는 오로지 기억에 의존할뿐이었다. 또, 나는 트러블 슈팅한 경험도 있지않는다. 이유는 모르겠다. 분명 열심히했던거 같은데 아무것도 기억이 나지 않는다. 난 여러가지 방법으로 이걸 선택했고 저걸 선택했고 그러지 않았다. 일단 정신차리고 어떤걸 했는지 깊게 고민하자. 이번에 할 이야기는 오픈소스로 개발을..
[이력 정리] - 과연 내 이력은 이직하는데 부족한걸까? (경력편) -1저번에 iam에 대해 정리를 했었는데 생각보다 많이 했던거 같다. 이제 나머지 config,metering,billing,lincense에 대해 정리를 하면 될거 같다. 얘네 같은 경우는 내가 main으로 가져가는 도메인이 아니기때문에 상대적으로 적을거라 예상한다.아마 정리는 3편까지 할거 같고 4편에는 이력서에 어떻게 적을지 작성해보는 시간을 가질려고 한다.자 본견적으로 시작해서 config부터 시작하자.config: 각 도메인에서 환경설정으로 사용될 서버에 대한 정보가 저장되어있다. 근데 소신발언하자면 초반에는 이 내용들이 나름 잘 지켜진거 같은데 나중에 되니 각 도메인에서 설정 API를 따로 만들었다. 어떤건지 정확하게는 기억이..
난 참 욕심이 많은거 같다. 나는 지금까지 올해만 3개나 듣고 있다. 이제 겨우 6월인데 반년을 교육으로 도배를 하였다.근데 왜 이렇게까지 교육을 듣는걸까?난 스스로 부족하다고 생각하고 있었다. 이게 나쁜건 아닌데 마치 지금까지 했던것들을 부정하고 새로운것으로 뒤엎고 있었다.이게 맞는걸까? 난 내 이력을 무시하고 있는걸까? 다만 아쉬운건 도메인적으로 개발을 열심히 했던거 같은데 특정 문제를 깊게 고민한 기억은 없었던거 같다. 지금 하는 교육으로 만약 그때로 돌아간다면 어떻게 고칠지도 고민해보자.음... 내 이력에 대해 간략하게 소개하면난 2021~2024년까지 근무를 했었다.그리고 거기서 진행한 프로젝트는 총 2개로 클라우드 프로젝트와 공공 데이터 프로젝트를 진행하였다.내가 맡았던 파트는 백엔드 개발를 ..
TDD를 학습하다보면 테스트 더블이라는 말이 나온다. 그렇다면 테스트 더블은 테스트를 두번하는걸까?gpt한테 물어보니 이 용어는 영화 용어에서 스턴트 더블에서 왔다고 한다.그리고 찾아보니 더블이 두배라는 뜻이 있지만 대역이라는 뜻이 있다고 한다.그럼 뜻을 다시 해석해보면 테스트를 하기 위해 대역을 쓰는거라고 이해하면 될거 같다.요런 관점에서 생각을 해본다면테스트 더블에는 총 5가지의 대역들이 존재한다.mock, spy, stub, fake, dummy요렇게 5가지가 있다고 한다.이제 대역이라는 것을 바탕으로 생각을 해보면mock은 구현에 대한 대역spy는 구현에 대한 대역stub은 값에 대한 대역fake은 구현에 대한 대역dummy는 값에 대한 대역요렇게 나눌수 있을거다.근데 이상한건 구현3에 값이2개다..
테스트 코드가 중요한건 개발자라면 누구나 인지하고 있다.하지만 생각보다 테스트 코드를 작성하는게 쉽지가 않다.어디부터 작성을 해야 하는걸까?뭘 어떻게 작성을 해야 하는걸까?그러다 개발이 종료된 이후에 테스트 코드를 도입하게 된다.그러면 의문이 드는게 검증이 되었는데 테스트 코드를 왜 짜는지에 대한 회의감이 들기 시작한다.결국 테스트코드는 작성하지 않는 꼴이 되버린다. 또 문제가 개발을 2번하는 느낌이 든다.이상하다. 분명 테스트 코드를 중요하다고 해서 테스트 코드를 짜는데 이게 따로 일을 하는 느낌이 든다.마치 구현 작업과 테스트 코드 작성 작업이 분리된 느낌이다.이게 나쁘다는게 아니다. QA테스트 같은 경우 개발이 완료된 이후에 QA가 테스트를 하게 된다.그러면 결국 2가지일을 따로 하게 될 수 도 있..
오랜만에 면접 공부를 진행하자.이 내용은 스파르타에서 진행했던 내용들을 토대로 정리한 내용이다.1. @Component, @Service, @Repository, @Controller 차이이 네 가지는 모두 스프링 컨테이너에 빈으로 등록되도록 도와주는 컴포넌트 스캔의 대상 어노테이션입니다.하지만 역할 구분과 내부 동작이 다릅니다.어노테이션설명@Component가장 일반적인 컴포넌트 등록용 어노테이션@Service비즈니스 로직을 담는 클래스에 사용. AOP 적용 시 의미 있는 대상@RepositoryDAO 계층에 사용. 스프링이 JDBC 예외를 DataAccessException으로 변환@Controller웹 요청을 처리하는 컨트롤러 클래스에 사용기존에 생각했을때 확인 목적으로 사용이 된다고 생각헀었다. ..
프로젝트에 선차감 방식을 도입하려고 합니다. 이 방식은 요청이 들어왔을 때 미리 자원을 차감하고, 대기 큐로 메시지를 전달할 수 있기 때문에 효율적인 흐름 제어가 가능합니다.하지만 선차감은 동기 방식으로 작동한다는 점이 고민입니다. 동기 방식 자체가 문제라기보다는, 이를 레디슨(Redisson) 분산 락과 함께 사용할 때 병목이 생길 수 있다는 점이 우려됩니다.레디슨은 분산 환경에서 락을 걸기 위한 네트워크 통신이 포함되어 있고, 여기에 동기 코드가 포함되면, 락 획득까지의 대기 시간이 누적될 수 있습니다.즉, 락을 기다리는 동안 동기 코드가 블로킹되면 전체 처리량이 감소할 수 있는 것이죠.그렇다고 선차감 로직을 비동기로 전환하면, 락 대기 시간은 줄어들 수 있지만, 정합성 문제가 발생하게 됩니다.실제로..