본문 바로가기

전체279

Vuex 의 상태 값의 변화를 감지해서, data 에 반영하는 방법 이번 사내에서 Vue.js 를 활용한 웹 프로젝트를 진행하면서 echart 라이브러리를 통해 깊숙하게 활용하게 되었습니다. 한 페이지에 수십개의 차트 라이브러리가 만들어지고, 이를 사용자에게 보여주는 프로젝트입니다. 여기서 처음 Vue.js와 Vuex를 활용하면서 vuex에 state 값을 어떻게 하면 data에 있는 값에 반영시킬 수 있을까? 라는 고민을 하루 이상했습니다. 이 과정에서 computed 와 watch에 대해서 이해할 수 있는 기회도 얻었고, 동시에 조금 더 보람찬 개발을 할 수 있지 있었습니다. 포스팅의 제목처럼, "Vuex 의 상태 값의 변화를 감지해서, data에 반영하는 방법"이란? computed: { changedParams: function () { const params =.. 2020. 11. 6.
제가 무엇을 안다는 것은 어떤 것일까요? - 면접 후기 Photo by Daniel Lincoln on Unsplash 면접을 간단히 리뷰하면서, 포스트 주제와 같은 생각을 하게 되었습니다. 이제 만 2년차를 넘어 넘어 3년차를 향하던 저에게 이번 면접은 뼈로 와닿는 면접이 아니였을까 싶습니다. 평소에도 사실 작은 기업들은 제 자신의 위치를 테스트 해볼겸 면접을 봐왔었는데- 이번에는 규모가 있는 면접을 보면 어떠할까? 싶어 도전장을 내밀었습니다. 저를 스스로 평가한다면 면접이라는 것에 나름대로의 자부심이 있었습니다. 그 부분은 스스로도 자랑스럽게 여겼던 부분이였습니다. 그러나, 그런 자부심도 최근 산산히 조각나는 기분을 느끼고 있습니다. 그렇게 느꼈던 이유는 아래와 같았습니다. 첫번째,실무의 실용적인 경험을 끊임없이 물어봤습니다. 지난 2년간 회사에서 겪었던.. 2020. 10. 31.
네트워크의 기능을 계층별로 간략하게 설명해보자. 계층 모델이란 무엇인가? Layer(계층) 이라는 것은 무엇인가? N계층과 다른 노드의 N계층과의 관계, 같은 노드의 N계층과 N-1계층간의 관계 OSI 7 Layer(계층) 모델 물 / 데 / 네 / 전 / 세 / 표 / 응 네트워크 시간에 빈 도화지에 OSI 7Layer의 개념을 모두 적으라는 것이 시험문제였다. 아직도 각각의 계층이 내 머리속에 기억이 나는걸 보면 분명 그 교수님은 대단하시다. 1. 물리계층 물리 계층은 노드를 전송매체와 연결하기 위한 인터페이스 규칙과 전송매체의 특성을 다룹니다. 이는 물리적 / 전기적 / 기계적인 약속을 포괄합니다. 예를 들면, 동축 케이블의 규격이나, 신호의 전압등이 될 수 있습니다. 2. 데이터 링크 물리적 전송 오류(예: 잡음)을 해결합니다. 오류를 제어하는.. 2020. 10. 29.
01. 네트워크의 기초 2 01 노드 02 호스트 03 클라이언트 : 서비스를 요청하는 시스템 호스트의 경우 - 클라이언트가 될 수도 있고, 서버가 될 수도 있습니다. 04 서버 : 특정 서비스를 제공하는 시스템 일반적으로 클라이언트보다 먼저 실행되어 대기 상태, 계속 살아 있으면서 요청이 오면 서비스 제공. 2020. 10. 29.
01. 네트워크의 기초 1 네트워크관련기초용어 - 1 01 시스템 - 체제/체계, 내부 규칙에 따라 능동적으로 동작하는 대상을 말합니다. - 내부 정보와 외부 입력 처리를 통한 외부 출력이 가능합니다. - 작은 시스템이 모여 더 큰 시스템의 구성을 가능하게 합니다. 02 인터페이스 - 시스템과 시스템을 연결하기 위한 표준화된 접근 방식, 대등한 관계, 상하관계를 말합니다. 03 전송매체 - 시스템끼리 데이터를 전달하기 위한 물리적인 전송 수단(동축케이블, 광케이블, 공기, 전파) - 인터페이스에 정해진 규칙은 매체를 통해 전송됨으로써 구현되고 동작됩니다. 04 프로토콜(protocal) - 시스템이 데이터를 교환할 때 따르는 임의의 통신 규칙 - 상호 연동되는 시스템이 전송매체를 통해 데이터를 교환할 때 따르는 특정 규칙 - 일반.. 2020. 10. 29.
Eventuate.io 간단 파헤치기 https://eventuate.io/ 요즘 일주일에 2시간이상의 시간을 들여, 학습 중인 프레임워크입니다. 해당 프로젝트의 저자는 마이크로 서비스 패턴 라는 이름의 책으로 출판되었습니다. 이 책을 발견하기 전에, 마이크로서비스에서 메세지 알고리즘을 좀 더 쉽게 쓸 수 없을까? 라는 물음표를 시작으로 Eventuate 프레임워크를 알게 되었고, 점차 MSA의 문제점을 해결하는 Eventuate에 매료되었습니다. 그럼, Eventuate는 어떤 프레임워크일까요? 모놀리식에서 MSA로 변경시 가장 문제가 되는 부분은 분산 데이터 관리 문제라고 합니다. 여기서 말하는 분산 데이터 관리 문제란? 각 마이크로 서비스에는 자체 개인 데이터베이스가 있습니다. 여러 서비스에서 데이터를 검색하는 쿼리뿐만 아니라 여러 서.. 2020. 10. 29.
[책] 도메인 주도 설계 철저 입문 - 나루세 마사노부 리뷰 아마도 올해 초부터였을까? Slipp 커뮤니티에서 사이드 프로젝트를 하기 위해 지인에서 Join을 부탁했을 때부터 도메인 주도 설계는 끊임없이 나의 꼬리표를 달게 되었습니다. 사이드프로젝트내에서 먼저 도메인 주도 설계론을 창시한 에릭 에반스의 책을 처음 접하게 되었습니다. 이 책을 읽으면서 느꼈던 점은 도메인 주도 설계라는 것은 서비스내에서 정말로 중요한데, 코드로서 이를 표현하는 방법은 무엇이 있을까- 어떻게 해야될까? 라는 고민이 있었습니다. 이 책을 어느 정도 읽었을 쯤, 그 다음 책으로 반 버논의 '도메인 주도 설계 구현' 를 읽기 시작했습니다. 제가 필요로 했던 드디어 코드로서 도메인 주도 설계를 설명해주면서 개념 하나하나를 이해해 나갔습니다. 그러나, 읽으면서도 정말 포기하고싶다는 생각을 10.. 2020. 10. 29.
생명주기를 갖는 객체 - 엔티티(Entity)란? 엔티티라는 용어는 소프트웨어 개발에서 다방면으로 사용된다. 예를 들면 JPA에서도 도메인을 지정할 때 Entity라는 애노테이션을 붙이고, 어떤 식별자를 가진 객체를 만들때 이를 엔티티라고도 부른다. 물론 ORM과 같은 JPA에서 말하는 JPA와 도메인주도설계에서 말하는 엔티티는 조금 다른 의미를 가진다. 1. 엔티티란? 도메인 주도 설계에서 말하는 엔티티를 설명할 때는 식별성또는 개별성, 동등성 비슷하지만 다른 명칭으로 설명하는데, 여기서 저는 에릭에반스의 저서에서 나오는 식별성으로 엔티티를 설명하고자 합니다. 어떤 객체를 일차적으로 해당 객체의 식별성으로 정의할 경우 그 객체를 ENTITY라 한다. ENTITY에는 모델링과 설계상의 특수한 고려사항이 포함돼 있다. ENTITY는 자신의 생명주기동안 형.. 2020. 10. 28.
도메인 모델링이란? 에릭에반스의 도메인 주도 설계에서는 소프트웨어 시스템의 일부를 설계할 때는 도메인 모델을 있는 그대로 반영해서 설계와 모델의 대응을 분명하게 하라. 또한 모델을 재검토해서 더욱 자연스럽게 소프트웨어로 구현될 수 있게 수정하라. 도메인에 관한 심층적인 통찰력을 반영하려 할 때도 마찬가지다. 이렇듯 견고한 UBIQUITOUS LANGUAGE를 지원하는 것과 더불어 분석과 설계의 두 가지 측면을 충분히 만족하는 단 하나의 모델을 만들어내야 한다. 모델로부터 설계와 기본적인 책임 할당에 사용한 용어를 도출하라. 코드를 작성할 때 그러한 용어를 사용하면 코드가 모델을 표현한 것이 되고, 코드의 변경이 곧 모델의 변경으로 이어질 수 있다. 그 효과는 프로젝트의 나머지 활동에도 퍼져나가야 한다. 구현을 모델과 그대로.. 2020. 10. 25.
4. Gradle 프로젝트에서 Swagger Codegen 적용하기. SwaggerCodeGen CLI 에 대한 설명은 이전에 했었습니다. 이제부터는 Gradle 프로젝트에 SwaggerCodegen을 적용하는 방법에 대해서 알아보겠습니다. 먼저 Gralde SwaggerCodegen Plugin 을 알아야 합니다. 저 또한 여기 나온 메뉴얼대로 진행했습니다. 당연히 우선적으로 행해져야 하는 부분은 의존성을 추가하는거겠죠? plugins { id 'org.hidetake.swagger.generator' version '2.18.2' } repositories { jcenter() } dependencies { swaggerCodegen 'io.swagger:swagger-codegen-cli:2.4.2' // Swagger Codegen V2 swaggerCodegen .. 2020. 10. 18.
3. Swagger CodeGen CLI 는 무엇인가? API First Design 를 외치면서 활용했던 도구로, Swagger Codegen CLI를 활용했습니다. 해당 도구를 활용한 프로젝트 소스코드는 여기를 참조해주시면 됩니다. Swagger Codegen CLI은 OPEN API Spec을 기반으로, Yaml 파일로 어떤 API 를 Request 하고 Response 할 지 정의를 해놓으면, Swagger Codegen CLI은 정의해놓은 Yaml 파일을 통해, 각 클라이언트에서 사용되는 통신 라이브러리를 활용해 코드를 생성해줍니다. 이는 개발자로 하여금, 개발의 편의성을 한껏 높일 뿐만아니라, 어떤 API를 사용하고 있는지에 대해서 변경되어야 하는 부분은 유연하고, 신속하게 대응할 수 있고, 개발자가 구현해야 되는 부분은 최소화로 만들어줍니다. 이.. 2020. 10. 18.
'규칙 없음' No Rules Rules 책을 읽고 나서 "넷플릭스, 지구상 가장 빠르고 유연한 기업의 비밀" 이라는 부주제로, 저의 마음을 사로잡은 책 하나가 있습니다. 바로 넷플릭스의 CEO 리드 헤이스팅스가 작성한 규칙 없음 이라는 책입니다. 이 책을 읽으면서 느꼈던 첫번째는, 제 주변 환경을 돌아보게 만들었습니다. 더불어, 제가 있는 이 환경이 얼마나 근로자로 하여금 답답하게 만들고 있는지 여부를 판단할 수 있었습니다. Top-down 방식의 의사결정, 전자결재라는 것이 주는 통제, 휴가라는 것이 주는 통제, 관례라는 것을 따라야만 하는 현실. 차마 포스팅으로는 남기지 못하는 대외비 같은 이야기들... 이러한 환경을 탓하는 행위는, 잘못된 행위입니다. 그러나, 이 규칙없음 이라는 책을 통해 생각해볼 수 있는 거름을 만들어 준게 아닐까? 라는 생각이 듭니.. 2020. 10. 18.
마틴 파울러의 UnitTest 이해하기 - 번역본 원본 사이트 - martinfowler.com/bliki/UnitTest.html bliki: UnitTest Unit Tests are focused on small parts of a code-base, defined in regular programming tools, and fast. There is disagreement on whether units should be solitary or sociable. martinfowler.com 단위 테스트는 소프트웨어 개발에서 자주 언급되며 프로그램을 작성하는 동안 제가 익숙한 용어입니다. 그러나 대부분의 소프트웨어 개발 용어와 마찬가지로 매우 잘못 정의되어 있으며 사람들이 실제보다 더 엄격하게 정의되었다고 생각할 때 종종 혼동이 발생할 수 있습니다... 2020. 10. 18.
오케스트레이션(orchestration)과 코레오그래피 (choreography) 배경 저에게 마이크로서비스라는 것은 익숙하지 않은 분야입니다. 그래서 마이크로 아키텍처 구축 이라는 책을 읽으며, MSA에 입문하던 중, 이전에 봤던 용어인데, 익숙하지 않아서 몰랐던 용어 2가지. 오케스트레이션과 코레오그래피에 대해서 이해해보려고 합니다. 위 2개 용어는 최근 관심가는 프레임워크 eventuate.io/을 이해하던 중에 나와서 이렇게 다시 정리해볼까 합니다. 앞서 말했던 eventuate.io/프레임워크는 약결합을 통해 Saga와 CQRS 를 해결하는 좋은 오픈소스라고 판단되, 학습중에 있습니다. 어느 정도 정되면 포스팅 하겠습니다. 위 다이어그램을 활용해 오케스트레이션과 코레오그래피를 설명하겠습니다. 오케스트레이션 오케스트라 지휘자처럼 프로세스를 안내하고 구동하는 하나의 중앙 두뇌에 .. 2020. 10. 17.
Hibernate, JPA, Querydsl는 과연 좋은 도구일까? Photo by Annie Spratt on Unsplash 오늘도 여전히 사이드프로젝트를 진행하며 함께 하는 형님과의 대화에서 또다른 깨달음을 얻었습니다. 들어가기 최근 회사에서 시간이 남아, Querydsl 을 사내서비스에 적용하는 방안을 고려하기 위해서 학습하던 중, 나왔던 이야기입니다. Querydsl, SwaggerCodegen, ProtocalBuffer 등의 도구들은 이전에 가졌던 문제를 제 3의 관점으로 넘겨, 개발자는 비지니스 로직에만 집중 할 수 있게 해준다는 관점에서 좋은 도구라는 이야기를 남겼었습니다. 그러나, 이전에 지인과 식사를 하면서 가볍게 Querydsl과 Jpa 의 단점을 이야기 하면서 나눴던 부분에 대해서 내용을 남겨두면 좋겠다 싶어 이렇게 포스팅하게 되었습니다. 우리가 .. 2020. 10. 16.
@Fetch(FetchMode.SUBSELECT) 과 IN subquery 는 왜 느릴까? 들어가기 JPA 를 활용하다가 문제를 하나 맞딱뜨렸습니다. 퇴근하기 10분전, 동료분의 호출로 위 그림처럼 시간이 오래걸리는 경우가 발생했습니다. 처음 보는 코드에서 어디서 발생했는지 알 수 없는 상황에서 겉으로 보기에는 아무런 문제가 없었습니다. 그러던 중, 코드를 살펴보던 중 처음 보는 어노테이션 @Fetch(FetchMode.SUBSELECT) 가 있었습니다. @Fetch(FetchMode.SUBSELECT) 이란? JPA를 활용하다보면, N+1 문제는 늘 발생할 수 있는 문제입니다. N+1 문제를 해결하기 위해 다양한 방법 있습니다. 그리고, 그 가운데 Fetch(FetchMode.SUBSELECT) 이 있습니다. 그럼 이 애노테이션은 어떻게 N+1 문제를 해결할까요? 백기선님의 블로그를 참고하.. 2020. 10. 14.
Richardson Maturity Model (번역본) 아래 내용은 마틴 파울러 블로그에서 가져온 글을 번역했습니다. steps toward the glory of REST REST 접근 방식의 주요 요소를 세 단계로 나누는 모델 (Leonard Richardson이 개발). Resources, http Verb 및 hypermedia controls을 소개합니다. 최근에 저는 Rest In Practice의 초안을 읽었 습니다. 동료 부부가 작업하고있는 책입니다. 그들의 목표는 기업이 직면하는 많은 통합 문제를 처리하기 위해 Restful 웹 서비스를 사용하는 방법을 설명하는 것입니다. 책의 핵심은 웹이 정말 잘 작동하는 대규모 확장 가능한 분산 시스템의 존재 증명이라는 개념이며, 우리는 통합 시스템을 더 쉽게 구축하기 위해 아이디어를 얻을 수 있습니다. .. 2020. 10. 4.
LazyInitializationException 를 벗어나기 위해서는 어떻게 해야될까? JPA에서 최적의 쿼리를 보내는 방법은 무엇일까? Photo by Jan Antonin Kolar on Unsplash 들어가기 JPA의 연관관계를 사용하다 사용하지 않으니까, 금방 까먹고, 또다시 공부하는 제 모습을 보면서, 이 부분은 어느 정도 정리해야겠다는 마음으로 포스팅을 작성합니다. 이 글은 실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화 학습한 뒤, 일부 내용을 편집했습니다. 리뷰 전체적으로 김영한 강사님의 노하우가 '녹아내려있다' 라는 생각은 강하게 들었습니다. 당연하다고 여겨지는 부분이라도 직접 동작하는 코드로 이해하지 않는다면, 이해하지 않은 것이라고 했습니다. 그런 측면에서 이번 강의는 당연하지만 실행해보지 않았기에 몰랐던 부분을 잘 집어주는 부분이 많았습니다. LazyInitializationException 는 왜.. 2020. 10. 3.
대체 JPA에서 Proxy 로 초기화된다는 말이 뭔데? 들어가기 인프런에서 JPA관련 학습 동영상을 듣다가 LazyInitalization 의 경우, null로 Porxy가 초기화 된다는 말을 했었습니다. 그래서, 코드를 찬찬히 보니 어떤 가짜 객체를 만드는 것처럼 보였습니다. 이건 대체 무엇일까? 라는 고민으로 "다이나믹프록시" 에 대한 학습을 하게 되었습니다. 대부분의 내용은 백기선님의 더 자바, 코드를 조작하는 다양한 방법에서 발췌한 부분을 베이스로, 이를 제가 이해한 방식으로 풀어 적어내려가볼까 합니다. 스프링부트에서 디버깅을 하다 보면 자주 마주치는 이름이 바로 cglib 이라는 라이브러리입니다. 이 라이브러리는 코드를 생성해주는 것이라고 이해하고 있었고, 자세히는 몰랐었습니다. 인터넷에 검색을 해도 생각했던 것 만큼 자세히 나오지는 않았습니다. 그.. 2020. 10. 2.
마이크로서비스란? 해당 내용은 마이크로서비스 아키텍쳐 구축 책의 내용을 일부분을 정리한 포스트입니다. 들어가기 제가 근무하는 회사에서는 여전히 모놀리틱으로 구축되어 있고, 아직도 기억이 생생합니다. 근무중인 회사에서 인턴 당시, 어떤 팀장님께서 저를 시험하듯이 이런 질문을 했던적이 있었습니다. "마이크로서비스의 반대가 무엇인지 아는가?" 모놀리틱이라고 대답해서 칭찬을 받았었는데, 지금 생각해보면- 조금 기분이 언짢은 질문이라는 생각이 든다. 지금의 회사에 근무한지 2년이 지난 시점에 단, 한번도 MSA를 접해본 적도 없고, 이해하기 위한 노력이 필요하지 않았습니다. 그러나, 점차 서비스 개발 양상이 MSA로 번지고 있고, 이제는 커다란 줄기를 형성하고 있다고 생각했습니다. 그래서 주변에 추천을 받아 마이크로서비스 아키텍쳐.. 2020. 9. 30.