본문 바로가기

분류 전체보기150

MyBatis에서 엔티티를 분리해보자 interface MemberRepository { fun findById(id: Long): MemberDto}이번 포스팅에서는 MyBatis에서 엔티티를 분리하는 방법에 대해 알아보겠습니다.여기서 말하는 엔티티는 JPA에서의 엔티티가 아닌 도메인 관점에서의 엔티티를 의미합니다.MyBatis를 예로 들었지만  다른 SQL Mapper에서도 적용가능합니다.예제코드는 코틀린으로 진행합니다.배경왜 분리를 하려고하는지부터 짚고 넘어가면 좋을 것 같습니다.SQL Mapper를 사용하면 필연적으로 비즈니스 로직을 sql로 처리하도록 작성하게 됩니다.이렇게 되면 Mapper가 점점 늘어나게 되고 결국에는 DB에서 모든 비즈니스 로직을 처리하게되어 장애 대응이나 관리가 힘들어집니다.또한  사용하고 있는 DB에 .. 2024. 11. 10.
어느날 갑자기 파트리더가 되었다 최근 좋은 기회를 얻어 회사 내의 백엔드 파트의 리더가 되었다.이번 글은 지난 6개월 동안 파트의 리더로서 경험했던 것들을 정리하고 처음 조직의 리더가 되는 분들에게 도움이 되고자 글을 남긴다.어느날 갑자기..올해 4월 지인분이 팀장으로 있는 회사로 이직하게 되었다. 당시 회사는 개발팀을 새롭게 꾸려나가고 있는 중이었고 개발팀의 규모 역시 커져가는 중이었다.당시 팀 내부는 평균 연차가 낮았고, 근속 연수 또한 1년을 넘은 사람이 없었다.팀 내부에는 각각의 파트가 존재하는 데 나는 백엔드 파트에 합류하게 되었다.어느 날 팀장님이 백엔드 파트장이 되어서 파트를 이끌어보면 어떻겠냐는 제안을 받았다.그렇게 얼떨 결에 파트리더 생활이 시작되었다.반장같은 거 아니야?처음에는 개발 팀장님이 시키는 대로 내가 전달하고.. 2024. 10. 10.
[독서후기] 도메인 주도 설계로 시작하는 마이크로서비스 개발 후기최근 화두가 되는 MSA에 대해 대략적으로 파악하기 위해 해당 책을 읽었다.결론부터 말하자면 초반에는 좋았지만 뒤로 갈수록 원하는 정보를 얻지는 못했다.아무래도 두 가지 개념을 설명하는 책 (도메인 주도 설계, 마이크로서비스)이기 때문에 어쩔 수 없는 듯하다.특히 예제 코드가 상당히 아쉬웠는데 JHipster라는 툴의 대략적인 사용법과 해당 툴이 자동으로 생성해준다는 코드를 조금 수정하는 데 과연 도움이 될지는 의문이다.좋은 점MSA가 어떻게 각광을 받기 시작했고 어떠한 목적으로 사용되고 있는지 설명이 되어있어 좋았다.아쉬웠던 점예제 코드가 상당히 아쉬웠다. 2024. 5. 21.
[독서후기] 도메인 주도 개발 시작하기 후기 회사 내에서 복잡하게 얽힌 도메인을 어떻게 풀어나가야할지, 어떻게하면 개발하기 용이한 구조를 가져갈 수 있을지 고민하던 찰나에 도메인 주도 개발을 읽어보게 되었다. 기존 DDD는 다들 너무 어렵다고 해서 망설여졌는데 도메인 주도 개발 시작하기 는 입문자를 위해 초반 개념을 잡기 수월하다고 추천을 받았다. 책을 읽는 동안 내가 찾았고 원했던 내용이 많이 나왔다. 회사에서 다양한 도메인을 다루고 PM, 기획자와 이야기할 상황에서 업무의 생산성을 높이는 좋은 방법 중 하나라는 생각이 들었다. 명령 모델과 조회 모델을 분리하는 CQRS나 명령 모델에서의 객체지향적으로 개발하는 방법, 도메인 서비스에 대한 내용은 참 많은 도움이 되었다. 기회가 된다면 DDD에 대해 더 깊게 다뤄보면 좋겠다는 생각이 들었다... 2024. 2. 10.
[독서후기]객체지향 사고 프로세스 후기 최근 넥스트스텝 TDD 과정을 수강하면서 처음으로 객체지향적으로 코드를 짜는 방법에 대해 고민해 보고 피드백을 들어봤다. 덕분에 자연스럽게 객체지향적으로 코드를 작성하는데 관심이 생겼고, 객체지향 사고 프로세스 라는 책이 페이지 수도 적당하고 기본 개념을 잡아준다고 해서 읽어봤다. 책은 전반적으로 객체지향 설계와 개념에 대해서 다룬다. 객체지향의 특징인 캡슐화, 다형성, 상속, 합성에 대해 가볍게 다뤘고 설계적으로도 어떤 식으로 접근하는지 다룬다. 어느 정도 개발을 해본 사람이라면 내용이 약간 지루할 수도 있지만 페이지 수가 부담이 되지 않기 때문에 가볍게 읽는 것도 좋겠다. 하지만 일명 객사오 라고 불리는 객체지향의 사실과 오해를 읽었던 사람이라면 그렇게 추천하지는 않는다. 하지만 개인적으로 합성.. 2024. 1. 17.
[우아한유스방 4기] 5차 과제 - 후기 지난 후기에 이어 유스방 마지막 과제인 5차 과제의 후기를 작성해본다. 2023.08.04 - [개발 공부/etc] - [우아한유스방 4기] 4차 과제 - 후기 [우아한유스방 4기] 4차 과제 - 후기 2023.05.26 - [개발 공부/etc] - [우아한유스방 4기] 3차 과제 - 후기 [우아한유스방 4기] 3차 과제 - 후기 2023.04.06 - [개발 공부/etc] - [우아한유스방 4기] 2주차 - 후기 [우아한유스방 4기] 2주차 - 후기 2023.0 pro-dev.tistory.com 꽤 늦은 시간이 지난 후에서야 우아한유스방 4기 5차 과제를 작성한다. 5차 미션 중 가족일정이 겹치는 바람에 과제와 모의 면접을 진행하지 못했고 4기가 끝난 후 혼자 과제를 진행한 후의 후기이다. 과제 이번.. 2023. 10. 5.
맛있는 이력(feat JSON 상하차) 최근 흥미로운 주제로 이야기를 나눴고 거기서 인사이트를 얻어서 글로써 정리해보려고 한다. 이력서 작성시 프로젝트 이력에 대한 주제였다. 이력서를 좋게 쓰고싶지만 내가 했던 프로젝트 경험들은 전부 구현에 치우쳐저 있었다. 개발자에게 프로젝트 구현은 당연한 일이기 때문에 눈의 띄는 이력이 없어서 속상하던 찰나 지인분들께서 좋은 이야기를 많이해주셨다. JSON 상하차 프로젝트를 진행할 때는 각종 버그와 마주치며 개발을 진행하지만 막상 이력으로 남기려다보니 적기가 애매한 경우가 있다. 보통 이력서에는 문제해결이나 개선사례를 적는데 내가 해결한 문제해결은 적기에는 너무 간단하고 단순히 JSON 상하차를 하는 프로젝트였기 때문에 개선사례를 적기에도 애매했다. JSON 상하차라는 단어를 들으면 어떤 느낌인지 감이 올.. 2023. 8. 30.
[우아한유스방 4기] 4차 과제 - 후기 2023.05.26 - [개발 공부/etc] - [우아한유스방 4기] 3차 과제 - 후기 [우아한유스방 4기] 3차 과제 - 후기 2023.04.06 - [개발 공부/etc] - [우아한유스방 4기] 2주차 - 후기 [우아한유스방 4기] 2주차 - 후기 2023.03.07 - [개발 공부/etc] - [우아한유스방 4기] 1주차 - 후기 [우아한유스방 4기] 1주차 - 후기 2023.02.14 - [ pro-dev.tistory.com 4차 과제 후기 정말 많이 늦은 후기이다. 이런저런 잡생각과 많은 체력 소모로 인해 글이 뜸해진다... 기억이 희미해지기 전에 기록으로 남겨야겠다는 생각이 들었다. 4차 과제는 3차 과제와 마찬가지로 개발 과제인데 3차 과제는 페어 프로그래밍으로 진행되었지만 4차 과제의 .. 2023. 8. 4.
Java에서 List 를 테스트해보자 테스트 코드를 작성하다보면 List 를 테스트할 상황이 많이 발생한다. 그 동안은 아무 생각없이 get을 사용해 테스트하는 방식을 주로 사용했다. @Test @DisplayName("List 테스트") void test20230629131424() { List testList = Arrays.asList("test1", "test2", "test3"); assertThat(testList.get(0)).isEqualTo("test1"); }개인적으로 위의 테스트 코드를 작성하며 여러가지 문제점을 겪었다. get 을 사용해 직접 값을 꺼내오기 때문에 List 안의 다른 값들을 테스트하려면 코드의 중복이 발생한다. 순서가 중요하지 않더라도 List 안의 값에 순서가 변경되면 테스트가 실패한다. 0과 같은 매.. 2023. 7. 6.
JPA에서 deleteAll 메서드 사용시 주의할 점 배경회사에서 개발 중 엑셀 업로드에 관한 기능을 구현할 때였다.요구사항은 새로운 엑셀 파일 업로드시 기존에 저장된 내용을 전부 삭제하고 새로운 엑셀 파일의 데이터를 DB에 저장한다는 것이었다.당시에는 아무런 생각없이 데이터 전체삭제를 deleteAll() 을 사용했다.문제는 얼마 뒤 발생했는데 엑셀 업로드시 처리하는 시간이 오래걸려 오류가 발생했다.이런 현상에는 더 많은 복합적인 이유가 있지만 그 중 이번 포스팅에서는 deleteAll() 사용에 대해 알아보려한다.왜 느려지는가? deleteAll() 이라는 이름만 놓고보면 전체를 삭제해줄 것 같다. 하지만 내부적으로는 전혀 다르게 진행되는 걸 확인할 수 있다. /* * (non-Javadoc) * @see org.springframework.data.r.. 2023. 6. 2.
[우아한유스방 4기] 3차 과제 - 후기 2023.04.06 - [개발 공부/etc] - [우아한유스방 4기] 2주차 - 후기 [우아한유스방 4기] 2주차 - 후기 2023.03.07 - [개발 공부/etc] - [우아한유스방 4기] 1주차 - 후기 [우아한유스방 4기] 1주차 - 후기 2023.02.14 - [개발 공부/etc] - [우아한유스방 4기] 0주차 - 후기 [우아한유스방 4기] 0주차 - 후기 스터디에 pro-dev.tistory.com 3차 과제 후기 3차 과제부터는 코딩 과제로 진행되었다. 3주차의 과제는 Wordle 이라는 프로그램을 만드는 것인데 페어 프로그래밍으로 진행되었다. 다음과 같이 동작하도록 프로그램을 개발해야한다. #### 실행 결과 예시 ```light WORDLE을 6번 만에 맞춰 보세요. 시도의 결과는 타일.. 2023. 5. 26.
[우아한유스방 4기] 2주차 - 후기 2023.03.07 - [개발 공부/etc] - [우아한유스방 4기] 1주차 - 후기 [우아한유스방 4기] 1주차 - 후기 2023.02.14 - [개발 공부/etc] - [우아한유스방 4기] 0주차 - 후기 [우아한유스방 4기] 0주차 - 후기 스터디에 지원하다 이러저러한 이유로 이직 준비중에 있지만 혼자서 하기에 슬슬 벅차기 시작할 때쯤 pro-dev.tistory.com 2주차 후기 우아한유스방 4기 2주 차 후기이다. 글에는 2주 차라고 하지만 정확히는 2번째 과제의 후기라고 하는 게 맞겠다. 이번 스터디의 과제는 다음과 같다. [과제 2] 옛말에 지피지기면 백전백승이라고 하였죠. 우아한형제들은 배달의민족 뿐만 아니라 다양한 서비스를 하고 있을 뿐더러, 배달의민족 서비스 안에서도 다양한 부서가 존.. 2023. 4. 6.