본문 바로가기

전체273

@DataJpaTest 흟어보기 Spring JPA에서 Repository 테스트를 하기 위한 애노테이션으로 @DataJpaTest 를 사용합니다. 왜 Repository 를 테스트 해야 하는걸까? 반버논의 도메인 주도설계에서 테스트를 하는 이유는 아래와 같은 이유라고 합니다. "#리파지토리의 테스트를 바라보는 두 가지 방향 1. 리파지토리 자체가 바르게 동작하는지 증명하기 위해서 2. 그들이 생성하는 애그리게잇을 저장하고 기존의 애그리게잇을 검색하기 위해 리파지토리를 사용하는 코드를 테스트한다. 첫번째 유형의 테스트에선 완전한 프로덕션 수준 품질의 구현을 사용해야 한다. 그렇지 않으면 프로덕션 코드가 작동할지 알 수 있는 방법이 없다. 두번 째 유형의 테스트에선 프로덕션 구현을 사용하거나 그 대신 인메모리 구현을 사용할 수 있다." .. 2020. 12. 12.
개발자로서 부족한 점은 무엇이 있을까? 최근, 재택근무로 시간이 많아졌다. 재택근무를 시행하게 되면서, 집에 있는 시간이 많았다. 그만큼 할 수 있는게 많을 줄 알았는데, 그게 아니였다. '시간이 많다' == '공부할 시간이 많다.' 라는 법칙은 설립되지 않는다. 그보다도, 목표가 중요하다는 사실을 꺠달았다. 더 나아가 목표가 명확할 때, 내가 무엇을 원하는지 구체적일 때 시간이 빛나더라. 어...? 이거 안되네? 안되나보다! 개발을 하다보면, 라이브러리,프레임워크 라는 것에 많이 의존해 사용하게 된다. Spring, Vue.js 를 개발하면서도 마찬가지이다. 최근 이런 글을 우연히 알았다. 이 글은 JPA가 DDD에 적합한 도구가 아니기 때문에, JPA의 이점을 가져가면서도 DDD처럼 활용할 수 있도록 도와주기 위해서 개발되고 있는 오픈소스.. 2020. 12. 11.
[Vue] vue-router에서 Hash Mode Vs History Mode 차이점은 무엇인가? 들어가기 최근 Vue 를 사용하게 되면서 Hash Mode와 History Mode에 대해서 의문점을 가지게 되었습니다. Vue.js에 router 관련된 설정을 추가하면서 다음과 같은 설정에 직면하게 되었습니다. import Vue from 'vue' import Router from 'vue-router' Vue.use(Router) export default new Router({ mode: 'history', base: process.env.BASE_URL, routes: [ { .... } ] }) 여기서 history와 hash를 String으로 작성하여 설정할 수 있습니다 그렇다면 이 둘의 차이점은 무엇일까? 대체 무슨 차이이지? Hash mode Hash mode는 모든 URL을 HASH(.. 2020. 12. 8.
[개발자의 글쓰기] 1장 개발자가 알아야 할 글쓰기 기본 01. 문장과 단락을 구조화하는 법 문자을 구조화하는 법 색상 RGB 값을 각각 사용하기 때문에 입력 데이터는 3차원 벡터다 > 입력데이터는 색상 RGB 값을 각각 사용하기 때문에 3차원 벡터다. > 입력데이터는 색상 RGB 값을 각각 사용한다. 그래서 입력데이터는 3차원 벡터다. > 입력 데이터는 3차원 벡터다. > 입력 데이터는 3차원 백터다. 색상 RGB 값을 각각 사용하기 때문이다. 문장을 쉽게 쓰기 위해서는, 간단한 문장 구조로 핵심을 만한 뒤, 필요에 따라 부가 설명을 하면 된다. 서술식, 개조식, 도식의 차이 서술식 '~다' 로 끝나는 완전한 문장으로 구성 된 글 개조식 '~했음, 종결어미' 로 끝내는 문장 도식 사물의 구조나 관계, 상태를 그림이나 서식으로 보여주는 것 개조식을 활용해 문장.. 2020. 12. 2.
Java Garbage Collection 다시 살펴보기 출처: d2.naver.com/helloworld/1329 docs.google.com/presentation/d/1wkTP8YaSsxK-Zjd_cv9ofBEgihz1-ZiZfXNWYo3oRPM/edit#slide=id.g8c711dc557_1_92 과정 GC에 대해서 알아보기 전에 알아야 할 용어가 있다. 바로 'stop-the-world'이다. stop-the-world란, GC을 실행하기 위해 JVM이 애플리케이션 실행을 멈추는 것이다. stop-the-world가 발생하면 GC를 실행하는 쓰레드를 제외한 나머지 쓰레드는 모두 작업을 멈춘다. GC 작업을 완료한 이후에야 중단했던 작업을 다시 시작한다. 어떤 GC 알고리즘을 사용하더라도 stop-the-world는 발생한다. 대개의 경우 GC 튜닝이.. 2020. 11. 25.
JVM 이해하기 - 3 (JVM 구조 - 클래스로더, 런타임 데이터 영역, 실행 엔진) 참고자료 - d2.naver.com/helloworld/1230 위 페이지에서 가져온 내용입니다. 클래스 로더(Class Loader)가 컴파일된 자바 바이트코드를 런타임 데이터 영역(Runtime Data Areas)에 로드하고, 실행 엔진(Execution Engine)이 자바 바이트코드를 실행. 클래스 로더 자바는 동적 로드, 즉 컴파일 타임이 아니라 런타임에 클래스를 처음으로 해당 클래스를 로드하고 링크하는 특징이 있다. 이 동적 로드를 담당하는 부분이 JVM의 클래스 로더이다. 자바 클래스 로더의 특징은 다음과 같다. 계층 구조: 클래스 로더끼리 부모-자식 관계를 이루어 계층 구조로 생성된다. 최상위 클래스 로더는 부트스트랩 클래스 로더(Bootstrap Class Loader)이다. 위임 모델.. 2020. 11. 25.
JVM 이해하기 - 2 (자바의 바이트 코드) Write Once, Run anywhere(WORA) 자바의 바이트 코드 WORA를 구현하기 위해 JVM은 사용자 언어인 자바와 기계어 사이의 중간 언어인 자바 바이트코드를 사용합니다. 이 자바 바이트코드가 자바 코드를 배포하는 가장 작은 단위입니다. JVM을 이야기 할 때에는 자바 바이트코드를 빼놓을 수 없다. JVM은 자바 바이트코드를 실행하는 실행기이다. 자바 컴파일러는 C/C++등의 컴파일러처럼 고수준 언어를 기계어, 즉 직접적인 CPU명령으로 변환하는 것이 아니라, 개발자가 이해하는 자바 언어를 JVM이 이해하는 자바 바이트코드로 번역한다. 따라서 자바 바이트코드는 플랫폼 의존적인 코드가 없기 때문에 JVM이 설치된 장비라면 CPU나 운영체제가 다르더라도 실행할 수 있고, 컴파일 결과물의 크기.. 2020. 11. 24.
JVM 이해하기 - 1 (JVM 특징 이해하기) 자바를 이용하는 개발자라면 자바 바이트 코드가 JRE위에서 동작됨을 이해한다. 그러나, JRE에서 가장 중요한 요소는 자바 바이트 코드를 해석하고 실행하는 JVM(Java Virtual Machine) JVM은 하나의 개념이고, 스펙이다. 이를 구현한 객체가 Java VM, Delvik VM 등이 있다. JRE는 자바 API와 JVM, Native Method으로 구성되며, JVM의 역할은 자바 애플리케이션을 클래스 로더(Class Loader)를 통해 읽어 들여서 자바 API와 함께 실행하는 것 JVM의 특징 스택 기반의 가상 머신 : 대표적인 컴퓨터 아키텍처인 인텔 x86아키텍처, ARM 아키텍처와 같은 하드웨어가 레지스터 기반으로 동작하는 데 비해 JVM은 스택 기반으로 동작한다. 심볼릭 레퍼런스 .. 2020. 11. 24.
HTTP Caching에 대해서 좀 이해해보자!!! 이번에 HTTP Code 중 304 에러 코드에 대해서 이해하는 과정에서 WebCache에 대한 정보를 일부 활용했다. 304 에러 코드는 웹 캐시에 저장된 데이터가 같은 데이터를 Get하려고 한다면, 이를 웹 브라우저가 변경되지 않은 데이터라는 것을 인지한다. 그럼 WebCache에 대해서 한꺼풀씩 이해해봅시다. HTTP Caching이 뭘까? 우리는 일반적으로 웹서버에 정적 파일을 다운로드 받습니다. 예를 들어, '/login' page 라고 했을 때, 로그인 페이지에는 css, js, html 등의 파일을 가져와야 합니다. 이때, http, css, js 등 여러 HTTP요청을 만드는 것이 일반적입니다. 그러나, 이제 이러한 페이지를 매우 자주 요청하면 네트워크 트래픽이 많이 발생하고 이러한 페이지.. 2020. 11. 14.
HTTP 304 Not Modified의 이해 및 예제(with. spring) 1. HTTP 상태 코드 1.1 응답 메시지 & 상태라인 After receiving and interpreting a request message, a server responds with an HTTP response message. 요청 메시지를 받고 해석한 뒤에, 서버는 HTTP 응답 메시지를 보낸다. Example: HTTP/1.1 304 Not Modified Date: Fri, 07 Sep 2012 14:51:43 GMT Server: Apache/2.2.22 (Win32) mod_jk/1.2.37 Connection: Keep-Alive Keep-Alive: timeout=5, max=94 ETag: "d00000001f216-1e7-4c908f1fc4d6e" The first line o.. 2020. 11. 14.
클린 소프트웨어 책에서 말하는 VISITOR PATTERN이란? 이 책에서 가장 서두에 쓰여져 있는 VISITOR PATTERN을 쓰기 위해서 문제를 제기하는데, 그 문제는 바로 이것입니다. "클래스 계층 구조에 새로운 메소드를 추가할 필요가 있지만, 그렇게 하는 작업은 고통스럽거나 설계를 해치게 된다." 이런 문제는 흔하게 발생합니다. 이전 포스트했던 클린 소프트웨어 책에서 말하는 어탭터패턴은 무엇인가?에서도 마찬가지의 문제로 어탭터 패턴을 통해서도 해결방안을 찾았다면 이번에는 비지터 패턴을 활용해서 해결하는 방법을 살펴봅시다. 우리는 흔히 SOLID 원칙이라 불리는 객체지향 원칙이 있습니다. 디자인패턴은 이런 SOLID 원칙을 보다 더 SOLID 하게 만들기 위한 하나의 패턴입니다. 비지터는 변경해야 할 계층 질서에 새로운 파생형을 자주 추가할 필요가 없는 프로그.. 2020. 11. 8.
HTTP에서 HTTPS로, 그렇다면 왜 HTTPS일까? HTTP는 우리에게 친숙하다. 개발자이든, 아니든 언젠가 한번쯤은 들어봤을 법한 용어라고 생각합니다. 왜냐하면, 지금 이곳을 접속했을때, 변하는 URL(URL은 Uniform Resource Locator로 네트워크 상에서 자원이 어디있는지 알려주는 규약)을 활용해 이곳에 왔을 것이기 때문입니다. HTTP(HyperText Transfer Protocal)는 웹 브라우저를 뜻합니다. HTTP는 인터넷에서 웹 서버와 사용자 컴퓨터에 설치된 웹 브라우저 사이에 문서를 전송하기 위한 통신 규약(protocal)입니다. 곧, HTTP는 인터넷에서 하이퍼텍스트(HyperText)를 전송(Transfer)하기 위해 사용되는 통신 규약(Protocal)입니다. HTTP에 대해서 더 학습하게 된다면, HTTP는 단순합.. 2020. 11. 8.
클린 소프트웨어 책에서 말하는 어탭터 패턴이란? 디자인 패턴중 어탭터 패턴이라는 것이 있습니다. 위키에서 말하길 어탭터 패턴은 어댑터 패턴(Adapter pattern)은 클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는 패턴으로, 호환성이 없는 인터페이스 때문에 함께 동작할 수 없는 클래스들이 함께 작동하도록 해준다. 클린 소프트웨어 예시로 설명하는 어탭터 패턴을 활용하는 예시는 아래와 같습니다. 위와같은 상황에서 Light가 서드파티에서 사온 것이라서, 소스코드가 없을 수도 있습니다. 아니면 Switch로 제어하고 싶은 다른 클래스가 있는데, 그 클래스가 Switchable로부터 파생받을 수 없다면 어떻게 해야 할까요? 여기서 ADAPTER 패턴이 등장합니다. 아래 그림은 클라이언트가 제어할 수 없는 Light 라는 클래스가 등장할.. 2020. 11. 8.
HTTP 상태 코드 이해하기. 일반적으로 HTTP 응답 상태 코드의 목록. 1xx(정보-조건부 응답) : 요청을 받았으며 프로세스를 계속한다. 2xx(성공) : 요청을 성공적으로 받았으며 인식했고 수용하였다. 3xx(리다이렉션) : 요청 완료를 위해 추가 작업 조치를 필요하다. 4xx(클라이언트 오류): 요청의 문법의 잘못되었거나 요청을 처리할 수 없다. 5xx(서버 오류) : 서버가 명백히 유효한 요청에 대해 충족을 실패했다. 1xx (조건부 응답) 100(계속) 요청자는 요청을 계속해야 한다. 서버는 이 코드를 제공하여 요청의 첫 번째 부분을 받았으며 나머지를 기다리고 있음을 나타낸다. 101(프로토콜 전환) 요청자가 서버에 프로토콜 전환을 요청했으며 서버는 이를 승인하는 중이다. 102(처리) 2xx(성공) 200(성공) 서버가.. 2020. 11. 7.
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.