SW Engineering
-
Google Gemini CLI 설치 방법SW Engineering 2025. 11. 1. 21:23
1단계: 사전 준비 (Homebrew 설치)가장 쉽고 편리한 설치를 위해 Homebrew라는 패키지 관리자를 사용할 거예요. 맥북 사용자 대부분이 사용하는 필수 도구입니다.터미널 열기Command + Space를 눌러 Spotlight를 열고 '터미널'을 검색한 뒤 실행하세요.Homebrew 설치 확인Bash터미널에 아래 명령어를 입력하고 Enter를 누르세요.brew --version만약 버전 정보(예: Homebrew 4.x.x)가 나오면 이미 설치된 것이므로 2단계로 바로 넘어가세요.command not found와 같은 오류가 발생하면 Homebrew가 설치되지 않은 것입니다.Homebrew 설치 (필요시)아래 명령어를 터미널에 복사하여 붙여넣고 Enter를 누르세요. 설치 과정에서 비밀번호를 요..
-
JPA Entity를 Http Response Dto로 절대 사용하지 말아야 하는 이유SW Engineering 2023. 7. 17. 17:04
몇몇 개인 블로그에서 JPA Entity를 Http Response로 리턴하는 사례를 보고 이런 Anti-Pattern은 꼭 알려야 겠다는 생각이 들었습니다. 그 잘못된 정보의 포스팅을 보고 개발 업무에 적용하는 사례가 생기면 안되니 꼭 제대로 정정했으면 하는 바램입니다. 왜 Http Response Dto로 Entity를 사용하면 안되는 이유를 알아보시죠. Entity 객체를 Json으로 Serialize할때 Query의 실행으로 시스템 부하가 올라갑니다. Entity Entity 간 양방향으로 Relationship이 걸린경우 무한루프가 발생하면서 시스템이 Down 상태가 됩니다. Entity를 Serialize하기 위해서 추가하는 코드가 아키텍처링 혼선을 만듭니다. Client에 전달해서는 안되는 ..
-
데이터는 쌓는 것보다 분석 대상을 먼저 정해야 한다.SW Engineering 2023. 6. 21. 22:13
전문가들은 데이터는 분석 대상과 목적을 먼저 정하고 데이터를 쌓아야 한다고 합니다. 그런데 현업에서 일하다보면 많은 분들이 데이터를 일단 쌓고 분석 대상을 나중에 생각하는 모습을 자주 목격할 수 있었습니다. 그래서 오늘은 '왜 데이터는 쌓는 것보다 분석 대상을 먼저 정해야 하는지'를 이야기하고자 합니다. 1. 데이터는 많이 쌓는 것보다 필요한 것만 쌓아야 한다. 과거에 PM(Product Manager) 팀 리더가 데이터 적재에 대한 업무를 요청했었습니다. 내용인즉, 모든 화면에 있는 요소(버튼, 텍스트, 페이지)에 대해서 모든 이벤트(클릭, 성공/실패, 이동, 마우스 오버 등)를 로그로 쌓아달라는 것이었습니다. 그래서 우선순위는 차치하더라도 업무의 목적과 효과에 대한 질의응답하는 과정에서 '모든 요소에..
-
평균(Average)의 함정 - 편차SW Engineering 2023. 6. 2. 00:16
우리는 아주 어렸을 적부터 '평균'이라는 데이터 산출법으로 대화하고 성적에 대한 기준으로 사용합니다. 하지만 성인이되고 직장생활을 하면서 여러 지표를 다룰때도 마찬가지로 평균을 사용합니다. 아마도 20세이상 모든 인류가 피타고라스 정리는 몰라도 평균은 알거라고 생각합니다. ㅎ 오늘 이야기하고 싶은 주제는 '평균으로 인해 빠지기 쉬운 함정'입니다. 학교 성적으로 평균을 사용하는 것은 아무 문제가 없었는데 지표로 평균을 사용할때는 주의해야 한다니... 어떤 이야기인지 알아보시죠. :) 평균이란, '모든 항목의 합을 항목의 개수로 나눈 값입니다.' 즉, 중간값을 구하는 것입니다. 바로 중간값이라는 특성때문에 함정이 빠지는 것이고 자기가 함정에 빠졌는지도 모르고 지나가는 것입니다. 평균이 왜 위험한 것일까요? ..
-
Spring WebFlux 사용시 InvalidDefinitionException 처리 방법SW Engineering 2020. 12. 5. 20:04
start.spring.io에서 WebFlux를 다운로드 받아서 기본적인 세팅을 하고 실행하는데 아래 에러가 나온다. 그래서 검색해보니 web과 webflux 모듈이 충돌이 나는듯 하다. 그래서 해결책은 web 제거! 끝. 에러: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `reactor.core.publisher.Mono` (no Creators, like default constructor, exist): abstract types either need to be mapped to concrete types, have custom deserializer, or contain add..
-
[Android] Koin Test로 테스트 코드 작성하기SW Engineering 2020. 5. 12. 23:26
이 글은 이미 Koin 세팅을 하셨다는 전제하에 기술하였습니다. 아직 Koin을 세팅하지 않았다면 이전 세팅 방법에 대해서 포스팅을 참고하시기 바랍니다.https://simplifyprocess.tistory.com/5 이번에는 Koin을 사용해서 테스트 코드를 작성할때 사용하는 KoinTest에 대해서 기술하고자 합니다. Gradle 세팅일단 어느 라이브러리를 사용하던지 gradle 세팅을 안할 수는 없겠죠. 이부분도 아주 간단합니다.먼저 다음과 같이 MavenRepository에 jCenter를 추가합니다.// build.gradle at Project Levelbuildscript { repositories { jcenter() }} 그리고 Module Gradle에 KoinTest를 추가합니다...
-
[Android] Koin vs Dagger2SW Engineering 2020. 4. 21. 23:20
이전 아티클을 보시면 아래의 내용을 이해하는데 도움이 됩니다. Koin으로 의존성 주입하기 [ https://simplifyprocess.tistory.com/5 ] 오늘은 민감한 주제입니다. Koin vs Dagger2. Dagger는 안드로이드에서 가장 많이 사용되고 있는 DI Framework이고, 구글에서 직접 유지보수하는 오픈소스입니다. 하지만 두가지를 경험해본 저는 Koin에 손을 들어주고 싶습니다. 왜냐하면 서로 바라보는 지향점이 아주 다르고 Layering, 사용 편의성으로 따져봤을때 Koin이 더욱 우세하다고 생각합니다. Koin과 Dagger의 구동방식 이해를 돕기 위해 아래의 그림을 봅시다. 위 그럼처럼 Koin은 Module에서 선언한 DI를 Cache에 저장하고 있습니다. 그렇기 ..
-
[Android] Mockito Plugin 세팅 - MockMakerSW Engineering 2020. 4. 19. 16:07
TDD를 해야 한다는 것은 굳이 설명할 필요가 없을 정도로 잘 알고 계시리라 생각합니다. 그중에서 DI 환경에서 테스트 코드를 작성할때 사용하는 Mock은 필수라고 할 수 있습니다. 그중에서 Mockito와 PowerMock을 많이 사용합니다. 개인적으로 테스트 코드를 작성할때 Mock 라이브러리는 심플하고 쉽게 사용할 수 있는 것을 선호해서 Mockito를 사용합니다. 안드로이드에서 Mockito를 이용해서 유닛 테스트 코드를 만들때 사전에 해줘야 하는 세팅을 알려드리고자 합니다. Mockito를 사용하는 분이라면 한번 맞닥뜨렸을 오류.. Could not initialize plugin: interface org.mockito.plugins.MockMaker 아래의 그림처럼 잘 나가다가 갑자기 오류가..