본문 바로가기

전체 글61

1.1 다중화의 기본 다중화란? 다중화(Redundancy)란, 장애가 발생하더라도 예비 운용장비로 시스템의 기능을 계속할 수 있도록 하는 것을 말한다. 다중화의 본질 시스템의 다중화란 다음의 단계들을 실천하는 것이다. 장애를 상정한다. 가령 다음 그림과 같은 시스템이 있다고 하자. 이러한 시스템에서 발생할 수 있는 장애는 다음을 가정해 볼 수 있다. ∙ 라우터 장애로 서비스가 정지한다. ∙ 서버 장애로 서비스가 정지한다. 장애에 대비해서 예비 운용장비를 준비한다. 위의 그림에 예비 운용장비를 추가한 것이 다음의 그림이다. 장애가 발생했을 때 예비 운용장비로 교체할 수 있는 운용체제를 정비한다. 라우터 장애 시 대응 Cold Standby 예비 운용장비를 평소에는 사용하지 않고, 현재 운용장비에 장애가 발생하면 그 때 예비 .. 2019. 9. 8.
contribute 할만한 Java open-source 프로젝트 모음 Java 공부 용도로 오픈 소스 프로젝트의 코드를 분석해보고, 기회가 되면 contribute도 해보면 좋겠다 싶어서 괜찮다 싶은 프로젝트들을 모아 두려 한다. 일단 MunGell/awesome-for-beginners 이 링크에 잘 정리되어 있으니, 하나하나씩 볼 예정. 아래 목록은 Quora - "What are some good open source projects in Java to contribute to and start learning Java?" 질문에 달린 답변에서 가져왔다. War Worlds – Strategy based game – Java server and Android client. OpenWorm – neuromechanical model of a small nematode .. 2019. 9. 2.
클린코드 3장 — 함수 의도를 분명히 표현하는 함수를 어떻게 만들 수 있을까? 함수에 어떤 속성을 부여해야 처음 읽는 사람이 프로그램 내부를 직관적으로 파악할 수 있을까? 작게 만들어라! • 함수를 만드는 첫번째 원칙 => 작게! • 함수를 만드는 두번째 원칙 => 더 작게! 무조건 작은 함수가 좋다. 각 함수가 명백하게 하나의 이야기를 표현해야 한다. 얼마나 짧아야 할까? public static String renderPageWithSetupsAndTeardowns(PageData pageData, boolean isSuite) throws Exception { boolean isTestPage = pageData.hasAttribute("Test"); if (isTestPage) { WikiPage testPage = p.. 2019. 6. 14.
Spring MVC — HandlerMethodArgumentResolver 사용하기 Spring MVC의 Controller에서 parameter를 받을 때 흔히 다음과 같이 한다. @GetMapping(path = "user/{userId}/post/list") public ApiResult posts( ... @RequestParam("offset") int offset, @RequestParam("limit") int limit) { ... return new ApiResult(...); } @RequestParam을 통해 URL 상의 매개변수를 직접 받아 사용하는 모습이다. 위와 동일한 방법으로, 더 많은 수의 값들을 받을 수도 있다. @GetMapping(path = "user/{userId}/post/list") public ApiResult posts( ... @Reques.. 2019. 5. 3.
@Transactional의 noRollbackFor 속성 대개 Service layer에서, @Transactional 애노테이션을 붙여서 특정 메소드의 작업을 하나의 트랜잭션으로 처리하도록 할 수 있다. 이 때 한 @Transactional 메소드 내부에서 또 다른 @Transactional 메소드를 호출하면, 호출된(callee) 트랜잭션은 호출한(caller) 트랜잭션에 병합된다. 또한 호출된 트랜잭션을 수행하다가 에러가 발생했을 경우, 기본적으로 트랜잭션이 모두 rollback 처리 된다. 때에 따라서는 특정 트랜잭션은 rollback이 일어나지 않도록 하고 싶을 수도 있는데, 이 때 @Transactional의 'noRollbackFor' 라는 속성을 사용할 수 있다. 사용하는 방식은 다음과 같다. @Transactional(noRollbackFor .. 2019. 5. 2.
Validation(입력값 검증)의 최적의 장소는 어디일까? 일반적인 3-Tier 구조로 웹 애플리케이션을 만든다고 가정할 때, Controller - Service - Repository 모두에서 입력값 검증(Validation)을 수행할 수 있다. Controller에서 @Valid annotation을 사용한다던지.. 그런 것들 말이다. 그렇게 해도 문제는 없다. 그러나 각 계층에서의 검증 코드는 사실 비슷비슷한데, 그 비슷한 코드들을 모든 계층에 위치시키는 것은 생산성 측면에서 불편하기도 하고, 오류 발생 가능성도 높아진다. 사실 입력값에는 아무 문제가 없는 상황이었는데, 검증 코드 어딘가에서 잘못 작성한 코드가 있어서 오류가 발생한 것임을 알게 된다면 짜증나지 않겠는가? 그리고 비슷한 작업을 모든 계층에서 여러번 수행하니 성능 측면에서도 손해보는 부분이 .. 2019. 4. 25.
버그 문서화 팁 (vue.js Issue Helper) https://new-issue.vuejs.org/ 2019. 4. 11.
JVM 아키텍처 / Garbage Collection 모든 Java 애플리케이션은 JVM 환경에서 작동된다. 본 포스트에서는 JVM 아키텍처와 구성 요소, 그 중에서도 특히 Garbage Collection(이하 GC)와 관련된 Heap area에 대해 자세히 알아보고, GC의 기본적인 원리에 대해서도 정리해보고자 한다. JVM 아키텍처 JVM은 Java Virtual Machine의 줄임말이며, Java Compiler에 의해 컴파일되어 생겨난 Bytecode(.class 파일)를 OS에 맞게 해석하고 실행하는 역할을 수행한다. 즉 "Java에서 프로그램을 실행한다"는 것은, 컴파일 과정을 통하여 생성된 class 파일을 JVM으로 로딩하고 Bytecode를 해석(interpret)하는 과정을 거쳐 메모리 등의 리소스를 할당하고 관리하며 정보를 처리하는 .. 2019. 4. 5.