목록분류 전체보기 (32)
dev-sohee 님의 블로그
개발자들은 일반적으로 외부 라이브러리를 많이 활용합니다. 이때 라이브러리를 효율적으로 활용하기 위해서는 의존성 관리를 자동화 해주는 빌드 도구 사용이 필수적입니다. 빌드 도구를 사용하면 라이브러리를 자동으로 다운로드하고 빌드 과정에 포함시켜줌으로써, 개발 작업 효율성을 크게 높일 수 있습니다. 빌드 도구가 없으면 개발 생산성이 크게 떨어질 수 밖에 없기 때문에, 대부분의 자바 프로젝트에서는 ‘Maven’이나 ‘Gradle’ 같은 빌드 도구를 사용합니다. 오늘은 두 빌드 도구의 차이에 대해 알아보겠습니다.* Maven* Gradle Gradle과 Maven을 설명하기 전에 우선 빌드와 빌드 도구가 무엇인지에 대해서 알아보겠습니다. ‘빌드’란 프로그램을 실행 가능 한 배포 파일을 만들어 내는 것을 의미합니다..
Git Flow는 Git을 기반으로 한 브랜치 관리 모델로, 소프트웨어 개발에서 효율적인 버전 관리와 협업을 위해 등장했습니다. Git이 등장하기 전의 버전 관리 시스템(VCS)은 여러 개발자가 동시에 작업하는 데 제한이 있었고, 분기 관리가 불편했습니다. 소프트웨어 개발이 복잡해짐에 따라 여러 기능을 동시에 개발하고, 버그를 수정하며, 릴리스를 관리하는 일이 점점 더 어려워졌습니다. 팀원들이 동시에 작업할 때 충돌을 방지하고 체계적으로 관리할 수 있는 방법이 필요했습니다. Git Flow는 이러한 요구를 충족하기 위해 만들어졌습니다. Git Flow에서는 총 5개의 브랜치를 사용합니다. 각 브랜치에 대해 간단하게 알아보도록 하겠습니다.**브랜치란? : Git에서 코드의 독립적인 작업을 수행할 수 ..
RESTful(Representational State Transfer) API는 2000년도에 로이 필딩의 박사학위 논문에서 최초로 소개되었습니다. 로이 필딩은 HTTP 사양의 주요 저자 중 한 사람으로 HTTP/1.1의 설계와 관련된 작업 과정에서 웹 아키텍처와 REST의 개념을 발전시켰습니다. REST는 자원(Resource)을 중심으로 설계된 아키텍처로, HTTP와 URI 기반으로 자원에 접근할 수 있도록 하는 인터페이스입니다. HTTP 프로토콜로 API만들 때 URL(URI)로만 API의 역할을 알 수 있게 설계한 것을 RESTful API라고 합니다. 예를 들어, 다음과 같은 URL이 있을 때, https://search.shopping.naver.com/best/today?rankedDat..
개발자에게 아키텍처는 추상적인 개념으로 정의를 내리기가 쉽지 않을 수 있습니다. 그래서 아키텍처의 내용을 먼저 설명해보자면, 시스템 구성 및 동작 원리를 나타내고, 구성 요소 간의 관계 및 시스템 외부 환경과의 관계를 묘사하고, 시스템 구성 요소에 대한 설계 및 구현을 기술한 것 정도라고 할 수 있습니다. 즉, 아키텍처란 하나의 서비스가 어떻게 구성되며 어떻게 동작하는지를 표현한 것입니다. 좋지 않은 디자인의 소프트웨어는 추후에 기능을 추가하거나 변경하기가 어렵기때문에 유지보수가 점점 어려워집니다. 반면에 좋은 디자인을 가진 소프트웨어는 기능을 추가하고 관리하기가 수월합니다. 소프트웨어가 잘 컴포넌트화 되어 있기 때문입니다. 이것이 바로 소프트웨어 아키텍처가 중요한 이유입니다. 과거에는 어플리케이션이..
다이나믹 프록시와 CGLIB는 Java에서 프록시를 생성하는 방법입니다. 이 두 가지는 비슷한 목적을 가졌지만, 그 구현 방식과 사용되는 상황이 조금 다릅니다. 이 글에서는 각각의 특징과 장단점을 자세히 살펴보겠습니다.*다이나믹 프록시*CGLIB(Code Generator Library) 먼저 다이나믹 프록시를 알아보기에 앞서, 프록시가 무엇인지부터 짚고 넘어가겠습니다. 프록시(Proxy)는 '대리자'라는 뜻으로, 클라이언트가 사용하려고 하는 실제 대상인 것처럼 위장해서 클라이언트의 요청을 대신 받아주는 역할을 합니다. 프록시가 실제 대상인 것처럼 위장함으로써 이를 사용하는 클라이언트는 구체 클래스를 알 필요가 없어집니다. 또한 실제 타겟 오브젝트는 프록시를 통해 최종적으로 요청을 받아 처리함으로써 자신..
소프트웨어 개발의 세계는 점점 복잡해지고 있습니다. 이런 환경에서 개발자들은 품질 높은 코드를 작성하기 위해 다양한 방법론을 도입하고 있습니다. 오늘 다룰 내용인 TDD, BDD, DDD가 그 예시입니다. 이번 글에서는 스프링 프레임워크를 활용하여 이 세 가지 방법론을 효과적으로 적용하는 방법을 살펴보겠습니다.*TDD(Test Driven Development)*BDD(Behavior Driven Development)*DDD(Domain Driven Development) #TDD TDD(Test Driven Development)는 테스트를 먼저 작성하고, 그 테스트를 통과할 수 있도록 최소한의 코드를 개발하는 방식입니다. 이로 인해 코드의 품질과 완성도에 대한 신뢰도가 높아집니다. 1990년대 말,..
테스트 없이 개발되는 애플리케이션은 없고 테스트를 안거친 코드는 존재 가치가 없다고 봐도 무방할 정도로 개발자와 테스트는 뗄레야 뗄 수 없는 관계입니다. 만약 애플리케이션을 개발 및 확장할 때 테스트를 안한다면 개발자가 예상치 못한 상황이 생겼을 때 시스템이 중단된다거나, 원래 잘되던 기능이 새로운 버전에서는 정상 동작을 안하는 등의 심각한 문제가 발생할 수 있습니다. 이 글에서는 이렇게 중요한 테스트를 쉽게 할 수 있도록 자바가 지원하는 도구인 자바 테스팅 프레임워크 JUnit에 대해 알아보겠습니다. 단위 테스트작은 단위의 특정 코드에 대해 의도한 대로 잘 작동하는지 검증하는 것을 단위 테스트라고 합니다. 단위의 크기가 작을수록 테스트의 복잡성이 낮아지고, 테스트하려는 대상이 명확하여 그 대상에만 집..
'Spring의 3대 프로그래밍 모델 : 스프링 삼각형(IoC/DI, AOP, PSA) 1탄'에 이어서 AOP와 PSA에 대해 알아보겠습니다. # AOPAOP(Aspect-Oriented Programming)란 프로그램의 핵심 로직과 부가적인 관심사를 분리하여 코드의 중복성을 낮추고, 유지 보수성을 높이는 프로그래밍 기술입니다. 중복되는 공통 코드 부분을 별도의 영역으로 분리하고, 코드가 시행 되기 전이나 이후의 시점에 해당 코드를 붙여 넣음으로써 소스 코드의 중복을 줄이고, 필요할 때마다 가져다 쓸 수 있게 객체화하는 기술입니다. 구성 요소핵심 관심(Core Concerns): 시스템의 핵심 가치와 목적이 드러난 관심 영역횡단 관심(cross-cutting concern): 여러 핵심 관심에 걸쳐..