안녕하세요. 오늘은 Nexus Repository를 설치해보겠습니다. Nexus Repository에 대한 자세한 설명은 해당 참조를 확인해보시면 이해하시는데 도움이 될 것 같습니다. (https://dev-youngjun.tistory.com/105) 이를 위해 아마존 EC2 서비스를 하나 열어서 진행해보겠습니다. 우선 Nexus가 메모리 2GB를 요구하기 때문에 프리티어 스펙으로는 이를 설치할 수 없을 것 같습니다. 따라서 1. AWS console에 접속하셔서 ec2 t2.small 사이즈의 서버를 만들어줍니다. 또한 보안그룹에서 넥서스 서비스 기본 포트인 8081 포트를 열어두시는 것을 함께 진행해주시기 바랍니다. 2. jdk 1.8과 wget 을 설치해줍니다. sudo yum update -y ..
SOLID 원칙에서 'D'에 해당하는 의존 역전의 원칙에 대해서 간단히 확인해보겠습니다. 또한 이 원칙을 깨는 코드에 대해서 어떻게 리팩토링 하는지에 대해 확인해보겠습니다. 지금까지 SOLID 원칙 중 단일 책임의 원칙, 개방 폐쇄의 원칙, 리스코프 치환의 원칙, 인터페이스 분리의 원칙에 대해서 알아봤었습니다. 의존 역전의 원칙은 마지막 원칙으로 내용은 아래와 같습니다. 1. 고수준 모듈은 저수준 모듈에 의존해서는 안됩니다. 두 모듈 모두 추상화에 의존해야합니다. 2. 추상화는 디테일에 의존해서는 안되며 디테일은 추상화에 따라 달라집니다. 엥 뭔소리..? 하실겁니다.. 저도 그랬으니까요.. 일단 해당 원칙을 깨는 코드를 한번 볼까요?? 당신은 현재 소프트웨어팀의 일원이고 프로젝트를 구현해야 합니다. 현재..
해당 내용에서는 인터페이스 분리의 원칙을 구현하는 가장 좋은 시기와 방법에 대한 내용을 담았습니다. 지난 시간에는 리스코프 치환의 원칙에 대하여 설명했었습니다. 이번 시간에는 인터페이스 분리의 원칙을 이야기해보려 합니다. 인터페이스 분리의 원칙에서의 기본은 클라이언트가 사용하지 않는 메소드에 대한 강제가 있어서는 안된다는 것입니다. 많은 메서드가 있는 인터페이스와 해당 메서드 중 일부만 정상적으로 사용되고 있지만 많은 클래스가 이 인터페이스를 구현한다고 가정해 보겠습니다. Athlete 인터페이스는 운동선수의 일부 동작이 있는 인터페이스입니다. package com.blackdog.solid.segragation; public interface Athlete { void compete(); void sw..
리스코프 치환의 원칙을 깊게 공부하고 Solid 원칙에 대해 공부해봅시다! 이미 알고 계신 분들은 한번 리프레쉬 해보는 건 어떨까요? 이전 시간에 단일 책임의 원칙과 개방 폐쇄의 원칙을 알아 보았습니다. 리스코프 치환 원칙(LSP)은 (강한) 행동 하위 유형이라고 불리는 하위 유형 관계에 대한 정의를 나타냅니다. 객체 S가 객체 T의 하위 유형이라고 가정하면, T의 본질적인 특성을 변경하지 않고 T형의 객체들을 S형 객체로 대체할 수 있다는 것을 나타냅니다. 해당 내용을 글로 이해하긴 어려우니 코드로 볼까요? Employee 클래스가 있다고 가정해보겠습니다. package com.blackdog.solid.liskov; public class Employee { public String getTitle(..
이번 solid 원칙은 'O'에 해당하는 개방폐쇄의 원칙입니다. 확장에는 열려있고 수정에는 닫혀있는 코드 디자인에 대하여 탐구해보도록 하겠습니다. 이전 글에서 solid 원칙의 'S' 인 단일 책임의 원칙을 다뤄보았습니다. 개방 폐쇄의 원칙은 solid 원칙의 두번째 원칙입니다. 소프트웨어의 엔티티(클래스, 모듈, 함수 기타 등등)는 확장을 위해서는 열려있어야하지만, 수정을 위해서는 닫혀있어야 합니다. 해당 원리를 이용함으로써 목표는 해당 모듈의 소스코드를 수정하지 않고도 모듈의 행위를 확장하는 것입니다. 상품에 할인을 적용하는 시나리오를 생각해보겠습니다. 할인 서비스는 지정된 금액을 할인하고 할인된 금액을 되돌려주게 됩니다. 아래의 예제에서는 모든 성인에 대해서 적용하는 한가지 할인에 대한 값만 있다고..
현재 solid 원칙에 대해서 리프레쉬하기에 좋은 시기인 것 같습니다. Solid의 S인 Single Responsibility Principle (단일 책임의 원칙) 부터 살펴보겠습니다. 단일책임의 원칙(Single Responsibility Principle)은 solid 원칙의 첫번째 원칙입니다. 하나의 클래스를 변경하는 이유는 반드시 하나여야만 한다 모든 모듈 혹은 클래스는 소프트웨어에 제공해야할 하나의 기능에 대한 책임을 가져야 합니다. 해당 책임은 클래스라는 단위로 캡슐화되어야 합니다. 단일책임의 원칙에 위배된 경우 예를 들어, 네비게이션 소프트웨어를 생각해보세요. 주어진 방향(동서남북)에 따라 위치가 변경되어야 합니다. Position 클래스는 xAxis와 yAxis의 값을 가집니다. pac..
트랜잭션의 고립성에 대한 오해는 어플리케이션에서 아주 심각한 사이드 이펙트를 겪을 수 있다. 이런 이슈들을 디버깅하는 과정은 매우 고통스럽기까지 하다. 표준 SQL은 네가지 트랜잭션 격리성을 정의하였다. 각각의 격리수준은 만약 두개의 동시 프로세스가 동작하고 있을 때, 어떤 일이 일어날지에 대해서 정의한다. 해당 게시글은 어떻게 PostgreSQL이 기본적으로 어떤 격리수준을 가지는지 탐구하고 대체적으로 선택할 수 있는 데이터 정합성 기반으로 확신할 수 있는 옵션은 어떤것이 있을지 설명한다. 또한 다양한 격리 수준에 대한 성능 수준에 대해서도 탐구해볼 예정이며 각각 사용 케이스들을 보고자 한다. 동시 트랜잭션의 격리 이론적인 설명에 들어가기 전에, PostgreSQL의 기본적인 수행을 살펴보자. 일단 동..
일류 개발자는 FIRST를 사용하여 테스트 우선적으로 코드를 작성합니다. 테스트는 빠르고 독립적이며 반복 가능하고 자체 검증이 가능하고 시기적절해야 합니다. 단위테스트는 코드의 일부분을 테스트하기 위해 필요합니다. 자바에서는 대부분 클래스일 것입니다. 테스트는 프로그래머로 하여금 자신의 코드에 확신을 갖게 함은 물론 변경이 가능합니다. 개발하는 동안 테스트를 진행함으로써 프로덕션 코드가 수정되거나 테스트를 통과하도록 변경되는지 여부에 관계없이 테스트를 방해하는 모든 변경사항을 재평가할 수 있습니다. 이 포스팅에서는 언클 밥 마틴이 쓴 Clean Code 에 정의된 FIRST 규칙에 대해 설명합니다. Fast : 테스트는 사용하는데 있어 주저함이 없도록 빨라야합니다. 몇가지 테스트가 있는 메소드 혹은 클래..