전체279 Spring PSA(Portable Service Abstraction) 란 무엇인가? "잘 만든 인터페이스 하나가 열 클래스 부럽지 않다" PSA = 잘 만든 인터페이스 Spring 에서 제공하는 대부분의 인터페이스는 PSA 입니다. PSA가 적용된 코드라면 확장성이 좋고, 기술에 특화되어 있지 않는 코드를 의미합니다. 트랜잭션(Transaction) 대표적인 예시로 @Transactional > PlatformTransactionalManager 의 인터페이스가 중요하다. PlatformTransactionalManager 의 구현체들이 바뀌더라도 그 PlatformTransactionalManager 의 코드는 변경되지 않습니다. docs.spring.io/spring-framework/docs/current/spring-framework-reference/data-access.htm.. 2020. 9. 1. 핵사고날 아키텍처에서 Port(Adapter)의 의미는 무엇일까? 이전 포스팅에서 말했던 어탭터 패턴 이렇게도 쓰일 수 있구나? 를 이해하면서 핵사고날 아키텍처에 대해서도 동시에 어느정도 이해할 수 있었습니다. 같이 스터디를 도와주시는 분들과 이야기하며 아주 사-알짝 핵사고날 아키텍처에 대해서 발을 담가볼 수 있는 이야기로 접근해보겠습니다. 0. 들어가기 안드로이드 모바일 프로그래밍을 했을 적에도 클린 아키텍처라는 말은 많이 들었지만, 코드로서 표현되는 프로젝트는 보기 힘들었습니다. 그러던 중 백엔드로 전향 이후, IDDD 프로젝트를 분석하며, 코드로서 핵사고날을 드러나는 아키텍쳐를 이해할 수 있었습니다. 핵사고날 아키텍처를 이해하는 것은 단순히 하나의 그림으로서 설명될 수 부분이 아니라고 생각합니다. 다이어그램과 더불어 코드, 그리고 그 외 도메인에 대한 이해와 의존.. 2020. 8. 29. Ioc(Inversion of Controller) Ioc(Inversion of Controller) 란 무엇인가? "제어권을 역전시킨다." 라는 말의 의미 0. 들어가며 스프링프레임워크를 비교적 손쉽게 사용하고, Service layer에 퍼사드로서 다양한 객체들을 합쳐 코딩할때쯤 IoC에 대해서 조금더 명확하게 알아야 겠다는 생각이 들었습니다. Inversion of Controller 이라는 말은 간단히 생각하면 제어권을 역전시킨다. 의 의미로 쉽게 받아들여질 수 있습니다. 그러나, IoC에 대해서 다른 사람들은 어떻게 정의내리는지 확인하고, 좀 더 깊은 고찰로 이끌어내보자. 1. Ioc에 대한 간략한 설명 인프런의 백기선님의 강의에서 IoC의 설명을 빌리면, "내가 쓸 놈은 내가 만들어 쓸게" 라는 식의 일반적인 의존성이 뒤집혀진다는 것을 의미합.. 2020. 8. 26. Java에서 Jar 와 War 와 의 차이는 무엇일까? 1. 들어가기 스프링 이니셜라이저를 통해 생성하기 위한 선택사항으로 중간에 package 에 Jar, War 가 있다. 여기서 Jar 와 War의 차이를 이해해보려 한다. 2. Jar? War? Jar(Java Archive) / War(Web Application Archive) 위키의 내용을 참고하면 JAR(Java Archive, 자바 아카이브)는 여러개의 자바 클래스 파일과, 클래스들이 이용하는 관련 리소스(텍스트, 그림 등) 및 메타데이터를 하나의 파일로 모아서 자바 플랫폼에 응용 소프트웨어나 라이브러리를 배포하기 위한 소프트웨어 패키지 파일 포맷이다. ... JAR 파일은 자바 런타임이 효율적으로 애플리케이션을 배치(디플로이)할 수 있는 수단으로 설계되었다. 자바 애플리케이션을 구성하는 클래스.. 2020. 8. 24. Spring5 를 왜 사용해야되는건가?(with Tody Lee) 우연히 재미있는 유튜브 동영상을 시청했습니다. 구글 알고리즘에 의해서 노출되었는데, 제목에 이끌러 재생 버튼을 눌렀습니다. "자바9와 Spring5로 바라보는 Java의 변화와 도전" youtu.be/BFjrmj4p3_Y 해당 동영상에서 말하는 내용에 제가 느낀바 추가해서 중요하다고 생각되는 부분만 정리했습니다. 그리고 실제로 코드로 작성하는 행위까지 이어질 예정입니다. Spring 5 가 2017년 9월 27일출시됐는데, 지금이 2020년이니까, 3년이 지난 시점에서 여전히 Spring5는 사용하는 곳보다 사용하지 않는 곳이 더 많습니다. 이 글을 쓰는 저 또한 Spring5를 사용해본 경험이 없습니다. 애노테이션 기반의 스프링 버전 4.x 를 베이스로 하는 SpringBoot만 사용해왔습니다. 스프.. 2020. 8. 23. adapter 패턴, 이렇게도 쓰일수 있구나(with IDDD) 디자인 패턴의 착각 중에 모든 코드는 디자인 패턴에 나온 코드가 마치 책에서 나온 내용처럼 나올 것이라는 부분에 존재합니다. 오늘도, 다시한번 위와 같은 디자인 패턴의 착각을 느낍니다. IDDD_sample 코드 중, 서비스 단에서 팩토리의 사용 예를 설명하는 부분에서 흥미로운 부분을 발견했습니다. 레이어드 아키텍처에서 TranslatingCollaboratorService.java 의 존재는 이름과 같이 Collaborator 라는 협력 객체를 해석시켜주는 역할을 하는 클래스입니다. 어떻게 해석할 수 있는가에 대한 질문은, 이 글에서 논외이기 때문에 제외하겠습니다. 우리가 흔히 아는 adapter 패턴이 사용하는 client입장에서는 factory로서 동작할 수 있다는 것이 이 글의 요지입니다. 그럼 .. 2020. 8. 23. 왜 DDD 에서 팩토리 패턴을 사용하는 걸까? Photo by Christopher Burns on Unsplash 팩토리 패턴은 애그리게잇을 생성하는 책임을 가지는 메소드나 객체를 말한다. 도메인 주도 설계에서 팩토리 패턴을 사용되는 곳은 1. 도메인 모델 내의 팩토리 2. 애그리게잇 루트상의 팩토리 메소드 3. 서비스의 팩토리 그리고 에릭 에반스가 말하는 팩토리 패턴을 사용하는 주된 동기는 아래와 같다. 복잡한 객체와 애그리게잇 인스턴스를 생성하는 책임을 별도의 객체로 이동시키자. 여기서의 책임은 도메인 모델과 관련이 있진 않지만, 여전히 도메인 설계를 구성하는 한 요소다. 모든 복잡한 조립 과정을 캡슐화하고, 클라이언트가 인스턴스화된 객체의 구체적 클래스를 참조할 필요가 없도록 인터페이스를 제공하자. 전체 애그리게잇을 하나의 조각으로 생성하고,.. 2020. 8. 22. 회사에서 그렇게 쓰는 VPN 이해해보자. 최근 코로나의 영향으로 VPN ? 특히 회사에서는 FortiClient 라는 VPN Client를 사용합니다. 그런데, VPN이라고 하면 뭔가, 우회해서 무엇을 한다. 라고 생각만 들 뿐, 실제로 어떻게 동작되는지 모르겠다. 한번 이해하기 위한 시도를 해보자. VPN의 약자부터 생각해보자. VPN(Virtual private Network -가상 사설망) VPN 이전에는 PN(Private Network) 라는 용어를 사용했었다. 그럼 PN이란 무슨말일까? 즉, 전용으로 사용하는 망(전용망)이라 할 수 있다. 가상사설망? 이란 가상 전용망(선)을 의미합니다. 집 - 회사 로 이어지는 전용망이 있다고 생각하면 됩니다.(Private Network) 망이라는 어떤 Mash가 있다면, 그 중앙에는 선이 있어야.. 2020. 8. 22. [동영상 정리]의존성을 이용해 설계 진화시키기 - 조영호 님 의존성을 어떻게 관리하는가? 그것이 핵심☢️ 의존성의 정의란 무엇일까? A가 B에 의존할수록 위 그림과 같이 점선으로 그린다. 이 그림의 의미는 B가 변경될 때 A도 같이 변경 될 수 있다. 라는 것을 의미한다. 그러므로, B가 뭐가 됐던 A가 같이 변경 될 수 있음을 의미합니다. B클래스의 변경에 따라서 A에 영향을 줄수 또는 안줄 수도 있다. 클래스 의존성의 종류 패키지 의존성 패키지에 포함된 클래스 사이의 의존성 import에 다른 패키지의 이름이 있다면 디팬던시가 있다고 생각하면 된다. 설계 할 때 좋은 규칙이 몇가지 있다. 양방향일 경우, 싱크를 맞추는데- 비용이 많이 든다. 패키지 세계에 사이클이 돈다라는 것은 하나의 패키지라고 봐야 한다. 의존성을 가장 쉽게 이해할 수 있는 방법은 역시 코드.. 2020. 8. 21. [동영상 정리]애플리케이션 아키텍처와 객체지향 - 조영호님 영화관에서 영화를 상영하는 도메인을 예제로 OOP를 설명합니다. 아키텍처 프로젝트에 참여하는 개발자들이 설계에 대해 공유하는 이해를 반영하는 주관적인 개념 : 주관적이다... 중요한것? 변경하기 어려운 것? 일찍 변경 하기 어려운 것? 관심사의 분리 서로 다르고 관련이 없는 책임들을 분리 좀 더 세분화할수 있다.그러나 우리는 위 3가지로만 나눠서 시작하겠습니다. 여기서 가장 중요한 레이어는 도메인 레이어입니다. 대부분 2가지 종류의 도메인 레이어를 설계합니다. Transaction Script와 Domain Model의 차이점은 무엇일까? 도메인 레이어가 주도하기 때문에 도메인 레이어는 중요합니다. 아래는 도메인 컨셉입니다. 할인을 2가지 정책을 가질 수 있다. 퍼센트 또는 고정 할인가로 할 수 있다... 2020. 8. 21. 반버논이 말하는 Value Object 란? 반버논의 도메인 주도 개발 서적에서 발췌 값 객체(Value Object) DDD의 필수적인 구성 요소. 왜? 값의 이점에 대해 이해하라. 측정하고 수량화하거나 설명해주는 값 타입은 생성,테스트, 사용, 최적화, 유지 관리가 더 쉽다. 가능한 위치에선 엔티티 대신 값 객체를 사용해 모델링하도록 노력해야 한다는 사실을 알게 되면 놀랄지도 모른다. 심지어 도메인 개념이 엔터티로 모델링돼야할 때도 엔티티의 설계는 자식 엔티티의 컨테이너보다는 값의 컨테이너로 동작하는 쪽으로 기울어야 한다. 배울 내용 값으로 모델링하기 위해 도메인 개념의 특징을 이해하는 방법을 배우자 통합의 복잡성을 최소화하기 위해 값 객체를 활용하는 방법을 살펴보자 값으로 표현된 도메인 표준 타입의 사용을 확인하자. 사스오베이션은 어떻게 값의.. 2020. 8. 12. 코드 리뷰를 왜 해야될까? 백명석님 유튜브 강의을 듣고 정리한 내용입니다. www.youtube.com/watch?v=FJNV_qoRRks 코드리뷰에 대해 왜? 코드리뷰를 해야되나??? 시장과 비즈니스의 요구사항 개발 리소스 증가 추이 동일 기간별 개발 생산성 릴리즈가 증가함에 따른 개발 비용 Release별 생산성 Architecture란? SW의 속성 Software Craftmanship 릴리즈에 따라서 스탭들이 커진다. 릴리즈가 증가함에 따른 개발 비용 첫번째 릴리즈의 40배 Release별 생산성 2개의 중복까지는 괜찮다? - 켄트백 Big Ball of Mud 뚜렷한 아키텍처없이 구현된 시스템 미는건지, 끄는건지? 프로덕션 코드와 테스트 코드 중 어느것이 망가지는 것이 좋은가? 테스트 코드가 살아남는게 좋다. 같은 설계.. 2020. 8. 11. Notification 구현 in IDDD_Samples - 메시지에 기반한 알림 발행 NotificationService는 메시징 인프라를 통해 DomainEvent 인스턴스를 발행하는 한 가지 방법을 제공. - 책에서 말하는 Notification 구현 - 실제 프로젝트에서 Notification 구현 public class NotificationService { public void publishNotifications(){ PublishedMessageTracker publishedNotificationTracker = this.publishedMessageTracker(); List notifications = this.listUnpublishedNotifications( publishedNotificationTracker.mostRecentPublishedNotificationI.. 2020. 8. 8. Notification 구현 in IDDD_Samples - 리소스풀 방식 - 책에서 말하는 Notification 구현(리소스풀 방식) - 실제 프로젝트에서 Notification 구현 - 그림으로 이해해보기 앞서 설명했던 메세지 전달 방법중 리소스풀을 활용한 전달 방법 책에서 말하는 Notifiaction 구현 책에서 시작은 NotificationService에 대한 언급으로 시작한다. 이벤트가 모델로부터 발생한 알림으로써 발행될 때, 도메인의 관심사가 아닌 애플리케이션의 관심사라는 것을 강조. public class NotificationService { @Autowired private EventStore eventStore; @Autowired private NotificationPublisher notificationPublisher; public Notificati.. 2020. 8. 8. 도메인 주도 설계에서 Notification 이란 무엇인가? 목차 - 들어가며 - Notification이란? - 왜 EventStore를 활용한 Notification이 필요해진걸까? - 그림으로 이해해보는 Notification - 조금 더 생각해보기 들어가며... 토이 프로젝트에 참여하며 EventSouring에 대한 이야기를 이야기를 햇님과 이야기를 나눴습니다. 그러나, 이야기 중간중간에 "이벤트소싱과 Notification은 다른것이다." 라는 것을 끊임없이 말씀하셨고, 저는 이 둘을 비교할 수 있는 대상이라고 생각했습니다. 그러나, 몇차례의 티키타가로 이 둘의 관계를 좀 더 면밀히 살펴보는 시간을 가졌습니다. Notification이란? 반 버논 책의 8장 도메인 이벤트 부분에 Notification에 대한 이야기가 있습니다. repository에서 애.. 2020. 8. 8. 코딩은 어떻게 해야하는가? - 1 항상 피플웨어라는 책을 교보문고에서 찾아본다면, 그 책은 개발서적 가운데에 꽂혀있다. 왜일까? 왜 '피플웨어' 책은 개발서적 사이에서 '나를 읽어주십시오~' 하는걸까? 실제 그책은 경영/관리 주제로 분리되어 있음에도 불구하고? 그 답은 내마음대로 정의내려보고싶다. 심지어 '피플웨어' 책은 10년전에 우리나라가 개발은 3D라 외치던 시절에 출간되었다. 왜일까? 그 당시 프로젝트 하나라도 더 빨리 출시하기 위해 사람을 갈아?서 마셨다는 시절에 미국에서는, 이미 피플웨어라는 책이 출시되 많은 인기가 있었다. 어쩌면, 사람이 우선순위라는 사실에 대해서 인지하고 있었을 수도 있다. "인간 관계는 복잡할 뿐만 아니라 그 파급 효과가 절대로 깔끔하고 명확하지 않지만 업무의 어느 측면보다 더 중요하다." - 피플웨어 .. 2020. 7. 25. 왜 Enum을 아래와같이 작성했을까? /** * Created by joenggyu0@gmail.com on 4/7/20 * Github : http://github.com/lenkim */ package net.slipp.moim.domain.model.recruit; public enum Status { BEGIN { public boolean isBegun() { return true; } }, WORKING { public boolean isWorking() { return true; } }, FINISH { public boolean isFinished() { return true; } }; public boolean isBegun() { return false; } public boolean isWorking() { return .. 2020. 7. 15. 10- 메모리 메모리 메인 메모리란 명령어 집합에 의해 정의된 메모리로서 실행될 프로그램과 데이터가 머무는 장소를 의미한다. 메모리는 프로그래머에게 보이는 시스템의 속성 중 하나로 조작할 수 있는 명령어가 존재한다. 예를 들어, 대부분의 아키텍처는 메모리에 접근할 수 있도록 적재 명령어와 저장 명령어를 프로그래머에게 제공한다. 1. CPU와 메모리 CPU와 메모리는 물리적으로 메인보드의 노스브리지를 통해 서로 연결. CPU와 노스브리지 사이를 연결하는 통로는 전면버스(FSB front-side bus)라 하고, 노스브리지와 메모리 슬롯 사이를 연결하는 통로는 메모리버스(memory bus)라고 한다. 전면버스와 메모리버스는 일반적으로 동일한 클럭으로 동작하며, 메모리 슬롯에 장착되는 메모리의 클록 속도는 이 속도에 의.. 2019. 9. 8. 09-파이프라이닝 파이프라이닝? 오늘날의 컴퓨터에서 프로세서의 성능을 개선하는데 사용하는 가장 보편적인 구현 기술. 명령어를 읽어 순차적으로 실행하는 프로세서에 적용되는 기술로, 한 번에 하나의 명령어만 실행하는 것이 아니라 하나의 명령어가 실행되는 도중에 다른 명령어 실행을 시작하는 식으로 동시에 여러 개의 명령어를 실행하는 기법이다. 프로세서의 성능에 영향을 미치는 요소로 프로그램에 포함된 명령어의 수, 하나의 명령어 실행에 필요한 평균 사이클의 수인 CPI, 클록 사이클 시간 명령어의 수 : 좋은 알고리즘 또는 컴파일러를 통한 최적화 클록 사이클 시간 : 최신 하드웨어 기술 평균 CPI : 병렬 처리, 파이프라이닝, 슈퍼스칼라 파이프라이닝, 슈퍼파이프라이닝, VLIW(very long instruction word).. 2019. 9. 5. 01-연산장치부터 제어장치까지 [문제만들어 풀어보기] 문제 만들기 연산장치의 구성 요소 그리고 레지스터의 역할 Booth 알고리즘 0011 x 0110 ㅡㅡㅡㅡ. 복원 알고리즘과 비복원 알고리즘 0011 을 1로 나눈 것을 복원 알고리즘과 비복원 알고리즘으로 구해보기. 가드 디지트란? 단일 사이클 방식과 다중 사이클 방식의 차이(결론) 데이터 경로의 구성 요소 다중 사이클 방식의 데이터 경로에 대한 설명이 아닌 것은? 다음 사이클을 위하여 현재 내용을 임시 저장소에 저장해야 한다. 메모리를 2번 접근하기 위하여 데이터 메모리와 명령어 메모리로 분할해야 한다. 단일 사이클 방식에 비하여 일반적으로 클럭 사이클 시간이 짫다. 단일 사이클 방식에 비하여 파이프라인 기법에 더 적합하다. 고정결선식 제어와 마이크로프로그래밍 제어 다음 중 마이크.. 2019. 9. 5. 이전 1 ··· 9 10 11 12 13 14 다음