Spring, Java 개발자 입니다

개발 공부/SOLID 원칙

SOLID 원칙 과 컴포넌트 설계 원칙 ②

Component 단위의 설계 원칙배포 가능한 가장 작은 단위를 컴포넌트라고 정의하면 컴포넌트를 구성하기 위해서 SOLID 원칙을 잘 활용하여 설계 하는것이 중요하다.이후 배포 과정에서 여러 컴포넌트 또한 상호작용을 하며 하나의 어플리케이션을 구성하게 된다면 컴포넌트가 지향해야 하는 원칙또한 존재한다. REP : 재사용/릴리스 등가 원칙 Reuse/Release Equivalence Principle컴포넌트의 재사용 단위는 릴리스 단위와 같다.새로운 릴리스가 나온다는 소식을 통해서 개발자는 새로운 변경 사항을 살펴보고 기존 버전을 계속 사용할 것인지에 대한 여부를 결정하기 때문에 릴리스 절차에 적절한 공지와 함께 릴리스 문서 작성도 포함되어야 한다. 재사용을 쉽게 하기 위해서 하나의 컴포넌트로 묶인 클래..

개발 공부/SOLID 원칙

SOLID 원칙 과 컴포넌트 설계 원칙 ①

소스코드 레벨의 설계 원칙좋은 소프트웨어를 설계하기 위해서 실천해야 하는 원칙들을 SOLID 원칙이라고 한다.좋은 벽돌로 좋은 아키텍처를 정의하는 것으로 비유하곤 한다. 변경에 유연하고 이해하기 쉬우며 많은 소프트웨어 시스템에 사용될 수 있는 컴포넌트의 기반이 되는 많이 원칙들이 존재했고 시간이 지나면서 원칙들이 교체되거나 변경되었다.2000년대 초반에 오면서 안정화된 최종 버전이 나타났고 각 원칙의 첫 번째 글자들로 SOLID 라는 단어를 만들어 SOLID 원칙이 탄생했다. SRP : 단일 책임 원칙 Single Responsibility Principle단일 책임 원칙은 프로그램의 작은 수행단위를 모듈이라 하면 모듈은 단 하나의 일만 해야 한다는 의미다. 하지만 위와 같은 설명은 단일 책임 원칙의 핵..

개발 공부/상속 : 서브클래싱, 서브타이핑

상속 : 서브클래싱과 서브타이핑

객체지향을 조금이라도 자세히 공부했다면 상속은 객체지향의 가장 중요한 특징중 하나인 캡슐화를 방해하는 요소라는 것을 알 수 있을 것이다. 그럼에도 불구하고 상속또한 객체지향의 대표적인 특징으로써 존재하고 있다. 상속을 이용하여 코드를 재사용함으로써 중복코드를 없애는 방향으로 개발을 하고 있지만 상속의 본질적 목표는 중복코드를 제거하는 것이 아니다. 서브클래싱 과 서브타이핑 상속을 사용하는 목적을 크게 두 가지로 구분해서 확인 할 수 있다. 첫 번째는 위에서 설명한 것 처럼 중복코드를 줄임으로써 코드의 재사용 성을 높이기 위함이다. 이것이 서브클래싱의 개념이다. 하지만 첫 번째보다 더 중요한 두 번째 목적은 타입 계층을 구현하여 서브클래스가 수퍼클래스를 대체하기 위함이다. 이것이 서브타이핑의 개념이다. 부..

개발 공부/함수형 프로그래밍

함수형 프로그래밍 Functional Programming

함수형 프로그래밍은 명령형 프로그래밍의 패러다임에서 벗어나 선언형 프로그래밍의 패러다임에 발을 딛는것을 의미한다. 구체적으로 어떤 방식으로 할 것인지 how 가 아닌 무엇을 할 것인지 what 에 집중하는 프로그래밍 설계 패러다임을 의미하는 것이다. 프로그래밍은 항상 유지보수의 가능성을 열어두고 설계를 진행해야 한다. 노련한 개발자들 사이에서는 synchronized 라는 키워드의 사용 여부에 따라서 해당 시스템이 함수형 프로그래밍의 패러다임을 적절히 사용했는지를 판단한다는 말이 있을 정도로 함수형 프로그래밍에 대한 필요성이 중요시 된다. 함수형 프로그래밍을 사용 한다는 것은 시스템의 각 부분이 상호 의존성을 가르키는 결합성과 시스템의 다양한 부분이 서로 어떤 관계를 갖는지 가르키는 응집성이라는 소프트웨..

개발 공부/MSA

MSA 구조 : Micro service, Monolithic Architecture

MicroService Achitecture, MSA 누군가가 어떤 서비스를 개발하고 싶냐는 질문을 했었는데 그 때 간단하게 예전에 본 흥미로웠었던 B2C 서비스를 얘기했더니 MSA 에 대해서 공부를 해보라는 얘기를 들었다. 처음 들어본 용어라서 바로 무엇인지 물어봤더니 하나의 서비스를 독립적인 서비스로 분리하는 방식을 의미한다고 했다. 독립적으로 분리한다? WAS 와 WS 가 분리되어 있는 지금의 상태가 MSA 아닙니까 라는 질문에 WAS 를 더 작은 독립적인 단위로 쪼갠다는 얘기를 해줬다. 현재 내가 개발하고 있는 아키텍처 와는 좀 다른 형태로 구성을 한다는 것인데 궁금해졌다. Monolithic Architecture, 모놀리식 구조 애플리케이션 현재 우리 시스템을 간략하게 설명해보면 위와 같은 구..

개발 공부

클라이언트에서 서버로 데이터 전달 방법

여러가지 방법들이 있겠지만 다음의 3가지 방법을 주로 사용한다. HTTP 요청 데이터 1. GET 쿼리 파라미터 url을 통해서 메세지 바디 없이 쿼리 파라미터에 데이터를 포함해서 전달한다. 검색, 필터, 페이징등에서 많이 사용하는 방식이다. 2. POST-HTML Form 메세지 바디에 쿼리 파라미터 형식으로 전달한다. 회원 가입, 상품 주문 등을 할 때 사용한다. 3.HTTP message body HTTP API에서 주로 사용하는 방법으로 데이터 형식은 주로 JSON을 사용한다.

개발 공부

동시 요청 멀티 쓰레드

클라이언트에서 서버에 요청을 하면 응답이 된다. 이때 WAS 에서 Servlet 을 호출하게 되는데 쓰레드가 바로 이 역할을 맡게된다. 쓰레드는 애플리케이션 코드를 하나하나 순차적으로 실행하게 되는데 자바 메인 메서드를 처음 실행하면 main이라는 이름의 쓰레드가 실행된다. 쓰레드가 없다면 자바 애플리케이션은 실행이 불가능하며 한 번에 하나의 코드 라인만 수행 할 수 있다. 또 동시 처리가 필요하다면 쓰레드를 추가로 생성하게 된다. 하나의 쓰레드만 있다고 가정할 때 요청이 오게 되면 쓰레드가 할당 된후 요청을 보내면 된다. 다중 요청일 경우 먼저온 요청을 처리 한 후 응답을 보내고 다음 요청을 수행하면 되지만 첫 번째 요청이 지연될 경우 두번 째 요청을 실행할 수 없을 뿐더러 첫 번째 요청까지 수행이 불..

개발 공부

Spring QueryDSL 빌드 설정 작성하기

실무에선 조건에 따라 실행되는 동적 쿼리가 많이 사용 된다. 복잡해져서 답 없는 미친 쿼리들을 작성하지 않기 위해 QueryDSL을 이용해보자. 우선 설정정보의 디펜던시에 querydsl을 추가 한다. dependencies { implementation 'com.querydsl:querydsl-jpa' implementation 'com.querydsl:querydsl-apt' } def querydslDir = "$buildDir/generated/querydsl" querydsl { library = "com.querydsl:querydsl-apt" jpa = true querydslSourcesDir = querydslDir } gradle 에서 compileQuerydsl을 활성화 시키면 새로운..

개발 공부

URI vs URL vs URN 비교 분석

URI : Uniform Resource Identifier URI로 식별할 수 있는 모든 것(제한 없음) URL : Uniform Resource Locator 리소스가 있는 위치를 지정 [프로토콜(https) + 호스트명(www.google.com) + 포트 번호(생략가능) + 경로 + 쿼리 파라미터] 와 같은 구성 URN : Uniform Resource Name 리소스에 이름을 부여

개발 공부

좋은 객체 지향 프로그래밍 ②

SOLID 클린코드로 유명한 로버트 마틴이 좋은 객체 지향 설계의 5가지 원칙을 정리 SRP : Single Responsibility Principle 단일 책임 원칙 한 클래스는 하나의 책임만 가져야 한다. 하나의 책임이라는것이 모호한데 클 수 도 있고 작을 수도 있으며 문맥과 상황에 따라서 다르다. 따라서 중요한 기준은 변경이다. 변경이 있을 때 파급 효과가 적으면 단일 책임 원칙을 잘 따른것이다. OCP : Open/Closed Principle 개방-폐쇄 원칙 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있다. 다형성을 활용하여 인터페이스를 구현한 새로운 클래스를 하나 만들어서 새로운 기능을 구현한다. 이 부분에서 문제점이 약간 발생하는데 구현 객체를 변경하려면 클라이언트 코드를 변경해..

수달하나
'개발 공부' 카테고리의 글 목록