본문 바로가기

전체 글128

오브젝트 05 - 책임 할당하기 오브젝트 05 - 책임 할당하기 5.1 책임 주도 설계를 향해 5.1.1 협력이라는 문맥 안에서 책임을 결정하라 객체에게 할당된 책임이 협력에 어울리지 않는다면 그 책임은 나쁜 것이다. 객체의 입장에서는 책임이 조금 어색해 보이더라도 협력에 적합 하다면 그 책임은 좋은것이다. 협력을 시작하는 주체는 메시지 전송자이기 때문에 좋은 책임이란 메시지 전송자에게 적합한 책임을 의미한다. 메시지를 먼저 결정하면 메시지 수신자에 대한 정보가 없기 때문에 전송자의 관점에서 메시지 수신자가 깔끔하게 캡슐화된다. 5.2 책임 할당을 위한 GRASP 패턴 - 대중적으로 가장 널리 알려진 객체지향 패턴 5.2.1 도메인 개념에서 출발하기 설계를 시작하기 전 도메인에 대한 모습을 대략적으로 그려 보는것은 유용하다. 도메인 개.. 2024. 2. 20.
오브젝트 04 - 설계 품질과 트레이드오프 오브젝트 04 - 설계 품질과 트레이드오프 가끔 좋은 설계보다는 나쁜 설계를 통해 통찰을 얻기도 한다. 특히 좋은 설계와 나쁜 설계를 비교할 때 효과가 좋다. 이번 장에서는 영화 예매 시스템을 책임이 아닌 상태를 표현하는 데이터 중심의 설계를 살펴보고 객체 지향적으로 설계한 구조와 어떤 차이점이 있는지 살펴보자. 4.1 데이터 중심의 영화 예매 시스템 데이터 중심 설계에서 객체는 자신이 포함하고 있는 데이터를 조작하는데 필요한 오퍼레이션을 정의한다. 데이터 중심 설계에서는 객체를 독립된 데이터 덩어리로 바라본다. 상태가 객체 분할의 중심이 되면 구현에 관한 세부사항이 객체의 인터페이스에 스며들게 되어 캡슐화가 무너진다. 결과적으로 상태 변경은 인터페이스의 변경을 초래하여 해당 인터페이스에 의존하는 모든 .. 2024. 2. 19.
오브젝트 03 - 역할, 책임, 협력 오브젝트 03 - 역할, 책임, 협력 3.1 협력 객체지향의 핵심은 역할, 책임, 협력이다. 이를 고민하지 않은 채 구현에 초점을 맞추는 것은 변경하기 어렵고 유연하지 못한 코드를 낳는다. 3.1.1 영화 예매 시스템 돌아보기 객체지향 원칙을 따르는 애플리케이션의 제어 흐름은 하나에 의해 통제되지 않고 다양한 객체들 사이에 균형있게 분배된다. 다양한 객체들은 기능을 구현하기 위해 메시지를 주고 받으며 상호작용하는데 이를 협력이라고 한다. 객체가 협력에 참여하기 위해 수행하는 로직은 책임이라고 한다. 객체들이 협력 안에서 수행하는 책임들이 모여 객체가 수행하는 역할을 구성한다. 3.1.2 협력 두 객체 사이의 협력은 하나의 객체가 다른 하나에게 도음울 요청할 때 시작된다. 메시지 전송은 객체 사이의 협력을.. 2024. 2. 13.
오브젝트 02 - 객체지향 프로그래밍 오브젝트 02 - 객체지향 프로그래밍 2.1 영화 예매 시스템 - 영화, 상영, 할인 정책, 할인 조건이 있는 영화 예매 시스템이 존재한다. 2.2 객체지향 프로그래밍을 향해 2.2.1 협력, 객체, 클래스 진정한 객체지향 패러다임으로의 전환은 클래스가 아닌 객체에 초점을 맞출 때에만 얻을 수 있다. 이를 위해서는 아래의 두 가지에 집중해야 한다. 어떤 클래스가 필요한지를 고민하기 전에 어떤 객체들이 필요한지 고민하라. 클래스는 공통적인 상태와 행동을 공유하는 객체들을 추상화한 것이다. 따라서 클래스의 윤곽을 잡기 위해서는 어떤 객체들이 어떤 상태와 행동을 가지는지를 먼저 결정해야 한다. 객체를 중심에 두는 접근 방법은 설계를 단순하고 깔끔하게 만든다. 객체를 독립적인 존재가 아니라 기능을 구현하기 위해.. 2024. 2. 6.
오브젝트 01 - 객체, 설계 오브젝트 01 - 객체, 설계 1.1 티켓 판매 애플리케이션 구현하기 조건 초대장을 가진 사람은 티켓으로 교환 후 입장 가능 일반 입장객은 티켓을 구매 후 입장 가능 간단하고 예상대로 동작하지만 몇가지 문제점이 있는 프로그래밍 public class Theater { private TicketSeller ticketSeller; public Theater(TicketSeller ticketSeller){ this .ticketSeller = ticketSeller; } public void enter(Audience audience) { if (audience.getBag().hasinvitation()) { Ticket ticket = ticketSeller.getTicketOffice().getTic.. 2024. 2. 6.
[EC2 / linux] springboot 배포 오류 : Failed to start bean 'webServerStartStop, java.net.SocketException: Permission denied [EC2 / linux] springboot 배포 오류 : Failed to start bean 'webServerStartStop, java.net.SocketException: Permission denied 기존 개발 서버 포트를 8080으로 사용하고 있었는데, ssl을 붙여주려고 포트를 80으로 변경하고 AWS EC2 code deploy를 진행했다. 근데 에러가 쫙 나면서 배포가 자꾸 안됨.. 그래서 찾아보니, 1024 이하의 port는 sudo(root)의 권한이 필요하다고 하는데, code deploy로 배포할 경우 ubuntu 권한으로 배포가 되기 때문에 배포에 권한이 없어서 아래와 같은 에러를 뱉으며 실패하게 된다. 2023-03-03 21:35:56.443 DEBUG 20106 --- .. 2023. 3. 3.
[데이터 중심 애플리케이션 설계] 12. 데이터 시스템의 미래 [데이터 중심 애플리케이션 설계] 12. 데이터 시스템의 미래 데이터 시스템은 미래에 어떻게 되어야 할까? 신뢰할 수 있고 확장 가능하며 유지보수하기 쉽게 만드는 데이터 시스템의 미래를 고찰해보자. 1. 데이터 통합 1.1 파생 데이터에 특화된 도구의 결합 1.1.1 데이터플로에 대한 추론 같은 데이터의 사본을 여러 저장소 시스템에 유지해야 할 때 입력과 출력을 분명히 해야한다. 어디서 데이터를 처음으로 기록하는지, 어떤 표현형이 어떤 원본에서 파생되는지, 데이터를 모두 올바른 장소로 올바른 형식으로 어떻게 넣는지 등에 대해 충분히 고려해야 한다. 파생 데이터 시스템은 이벤트 로그를 기반으로 갱신하면 결정적이고 멱등성을 지녀 결함에서 복구하기가 상당히 쉬워진다. 1.1.2 파생 데이터 대 분산 트랜잭션 .. 2023. 2. 15.
[데이터 중심 애플리케이션 설계] 11. 스트림 처리 [데이터 중심 애플리케이션 설계] 11. 스트림 처리 1. 이벤트 스트림 전송 이벤트 특정 시점에 일어난 사건에 대한 세부 사항을 포함 일반적으로 일기준 시계를 따르는 타임스탬프 포함 이벤트의 부호화, 저장, 전송 텍스트 문자열이나 JSON 또는 이진 형태 등으로 부호화 가능 파일 및 관계형 테이블에 삽입 및 문서 데이터베이스로 기록하거나 저장 가능 다른 노드에서 처리하게끔 네트워트를 통해 전송 가능 생산자와 소비자 생산자(producer = publisher) : 이벤트를 만든다. 소비자(consumer = subscriber) : 이벤트를 처리한다. 스트림 시스템에서는 토픽(topic)이나 스트림으로 관련 이벤트를 묶는다. 1.1 메시징 시스템 메시징 시스템은 새로운 이벤트에 대해 소비자에게 알려준다.. 2023. 2. 11.
[Spring boot] swagger 에러 - Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException [Spring boot] swagger 에러 Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException implementation("io.springfox:springfox-boot-starter:3.0.0") Spring boot 2.7.8 버전에 swagger 3.0.0 버전을 붙이고 실행을 시켰는데 아래와 같은 에러가 발생했다. Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException 해당 에러는 Spring boot 2.6버전 이후.. 2023. 2. 2.
728x90
반응형