안녕하세요. 오늘은 제 인텔리제이 프로젝트에 구글 자바 스타일 가이드를 적용시켜 코드를 통일화할 수 있는 방법을 소개하고자 합니다. 평소에는 팀원들간의 약속된 코드를 유지하는게 더 중요하다고 생각하고 스타일 가이드에 대한 다소 불필요하지 않나? 라는 생각이 있었으나 최근에는 생각이 바뀌어 강한 규칙을 통해 코드의 일관성을 유지하는 방법이 좀 더 탄탄한 개발조직에는 필요하다는 것을 느껴가고 있습니다. 이직이 잦은 개발자라는 직업의 특성상 계속해서 새로운 개발자분이 오실때마다 코드 스타일을 공유하고 코드리뷰때마다 비즈니스 로직이나 불필요한 로직이 아닌 코드 스타일을 리뷰하는 것이 매우 불필요하다는 생각이 들기도 했었는데 마침 다행이라고 생각했습니다. 우선 제 생각은 여기까지로 하고 적용하는 방법을 공유드리겠..
이번 포스팅에서는 스프링 프레임워크에서의 트랜잭션 관리에 대해 자세히 알아보고 @Transactional 어노테이션에 대해서 살펴보겠습니다. 트랜잭션 관리에 대해서는 매우 방대한 분량이므로 두개의 섹션으로 구분하여 진행하도록 하겠습니다. Spring Transaction Management : 스프링이 트랜잭션 관리하는 방법에 대해 깊게 탐구합니다. @Transactional 어노테이션 : 해당 어노테이션의 사용법과 주의사항에 대해서 탐구합니다. Spring Transaction Management 트랜잭션은 완전히 성공하거나 완전히 실패하는 일련의 논리적 작업단위입니다. 은행 계좌이체를 생각해보시면 됩니다. 여기서 작업단위는 A의 계좌에서 출금하는 금액과 B의 계좌에서 입금하는 금액입니다. 둘중 하나라..
오늘은 오랜만에 개발글이 아니라 새벽감성을 가지고 키보드를 잡아본다. 최근에 면접준비(이직준비가 아닌 좋은 개발자와의 면접, 인터뷰를 진행하기 위한)를 위해 괜찮은 채널을 하나 발견했고, 누워서 유튜브 알고리즘에 의해 아래 영상을 보게되었다. https://www.youtube.com/watch?v=8MbXyX3rMfs&t=540s 뭐 주제는 당연히 지금 내가 쓸 내용과 관련이 있지만 전혀 나와의 경험과는 맞지 않았다. (하지만 결론에 대해서는 흐름이 일치했다.) 지금 나는 해당 주제에 대해서 나의 이야기해보려 한다. 최근에 나에게서 많은 관성들이 무너졌다. 코로나 확진자가 하루 최대 60만까지 치솟으면서 잠시 헬스장 이용을 중단했을 때부터는 운동과 관련된 관성이 무너졌고, 직장인으로써의 월급 관리 및 ..
안녕하세요. 오늘은 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 원칙의 두번째 원칙입니다. 소프트웨어의 엔티티(클래스, 모듈, 함수 기타 등등)는 확장을 위해서는 열려있어야하지만, 수정을 위해서는 닫혀있어야 합니다. 해당 원리를 이용함으로써 목표는 해당 모듈의 소스코드를 수정하지 않고도 모듈의 행위를 확장하는 것입니다. 상품에 할인을 적용하는 시나리오를 생각해보겠습니다. 할인 서비스는 지정된 금액을 할인하고 할인된 금액을 되돌려주게 됩니다. 아래의 예제에서는 모든 성인에 대해서 적용하는 한가지 할인에 대한 값만 있다고..
* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.