전체273 나는 AssertJ와 같이 'Fluent API' 유사 라이브러리 만들기 를 왜 실패했을까? 들어가기 지난 시간에 JCenter() 에 Assertion 라이브러리를 올리는 행위를 했었습니다. JCenter()에 올린 Assertion 을 'fluent' API와 같은 AssertJ 라이브러리를 컨셉으로 잡고, 만들기를 시도했습니다. 결과적으로는, 사실 실패했습니다. 만들수 있지만, 그 코드량이 간단하지 않아서 문제였습니다. 그 과정중에 겪었던 내용에 대해서 공유하는 시간을 갖도록 하겠습니다. AssertJ 란 무엇인가? joel-costigliola.github.io/assertj/ AssertJ / Fluent assertions for java AssertJ Fluent assertions for java joel-costigliola.github.io Fluent API란 쉽게 생각하면,.. 2020. 9. 19. 자바의 리플렉션(Reflection)을 코드와 함께 이해하기 Photo by Maria Teneva on Unsplash 리플렉션 이해하기 해당 세미나는 외부교육으로 들은 더자바를 수강하고 시작하는 강의입니다. 우리의 최종 목표는 Spring에서 사용되는 DI의 동작원리를 이해하는 것입니다. 내용에 나오는 코드는 여기에서 좀 더 자세히 보실 수 있습니다. 1. 스프링의 Depedency Injection은 어떻게 동작할까? spring init 으로 프로젝트 만들기 book, bookSerivce, bookRepository 생성후 DI 하기. 2. 리플렉션 API - 클래스 정보 조회 Branch> 01-reflection-api-클래스-정보-조회 리플렉션의 시작은 Class https://docs.oracle.com/javase/8/docs/api/java/l.. 2020. 9. 16. 자바의 직렬화(serialization)를 코드와 함께 이해하기 Photo by Casey Horner on Unsplash 회사 사내세미나를 했던 자료를 옮겨왔습니다. 자세한 소스코드는 여기를 참고해주세요. 1. 직렬화란 무엇일까요? serialization (or serialisation) is the process of translating data structures or object state into a format that can be stored (for example, in a file or memory buffer) or transmitted (for example, across a network connection link) and reconstructed later (possibly in a different computer environment.. 2020. 9. 16. 반버논이 말하는 Repository 란? 책, 이벤트 주도 설계 내용과 저의 의견을 섞어 내용을 적어내려갑니다. 들어가기 저에게 Repository 라는 말은 Android 을 개발 할때도 MVVM 패턴을 언급하면서 Repository 라는 용어가 처음 등장했습니다. 이후에 JPA를 학습하면서 Repository 라는 용어에 대해서 좀 더 친숙하게 다가왔고, 처음에는 단순하게 '어떤 저장소' 라는 의미로 다가왔습니다. 그러나, 도메인 주도 개발을 학습하면서 Repository 에 대해서 좀 더 깊이 있는 고찰을 할 수 있었습니다. 그럼 반버논의 책 DDD에서는 Repository 을 무엇이라 정의했을까요? Repository? 무슨 의미인가? 앞서 언급했던 Repository 라고 하면 딱 떠오르는, 그 의미 저장소. DDD에서도 Reposit.. 2020. 9. 15. [나만의 라이브러리 제작기-3] versioning SNAPSHOT 에 대한 고찰 배경 Bintray에 배포를 위한 준비를 마칠 쯤, Snapshot 에 대한 의구심이 들었습니다. 왜냐하면, SNAPSHOT 이란? 아직 배포되기 전 임시로 만들어 놓는 버전으로서, SNAPSHOT 은 개발 중이라는 버전을 의미한다고 알고 있었습니다. 그렇다면, 버전 이름을 SNAPSHOT으로 한다면 같은 이름으로 override되서 배포되지 않을까? 라는 호기심으로 진행되었습니다. Snapshot 이란? "A snapshot version in Maven is one that has not been released." stackoverflow.com/questions/5901378/what-exactly-is-a-maven-snapshot-and-why-do-we-need-it 즉, 개발중인 버전을 표.. 2020. 9. 12. [나만의 라이브러리 제작기-2] JFlog Bintary는 무엇이고, 어떻게 라이브러리를 올렸는가? 들어가기 JFlog Bintray는 자바 의존성을 추가하기 위한 공개 저장소 중 JCenter에 배포하기 위해 존재하는 플랫폼 중 일부입니다. 그 부분에 대해서 좀 더 자세히 살펴보고, 올리는 과정에서 겪었던 이슈를 적어볼까 합니다. JFlog Bintray? 사실 위에서 언급한 것과 같이, JFlog는 그저 배포를 위한 플랫폼 중 일 부분입니다. Bintray는 "Software Distrubutuin as Service" 로서 홈페이지 설명에 따르면, - 단 한번의 배포로, 다양한 주요 패키지(docekr, debian, npm, maven ... )들을 한번에 배포할 수 있게 도와준다. - REST API를 활용하기 때문에 Jenkins와 같은 배포 도구에도 손쉽게 붙여 사용할 수 있다. - 그리고.. 2020. 9. 12. [나만의 라이브러리 제작기-1] JCenter, MavenCentral 은 무엇인가? 들어가기 이번에 같이 스터디하는 햇님들과 함께 이야기를 나누다, 우리가 프로젝트를 진행시 자주 사용되는 Utility 성격의 Module은 라이브러리로 만든다면 어떠할까? 라는 질문으로 라이브러리를 제작하게 되었습니다. Assertion 이라는 라이브러리를 만들기 위한 여정으로, 그 시작은 JCenter, MavenCentral 등 흔히 Repository 라 불리는 것이 무엇인지에 대해서 이해해보려 합니다. 'Repository라 불리는 것은 무엇인가?' , 'gradle을 사용하지만, Maven Repository에 올릴 수 있는것인가?' 'Repository에 어떻게 올리는 것인가?' 등등 궁금한 부분이 많았습니다. 궁금증도 해결할 겸 나중에 이런 행위를 했었다는 것을 기억하기 위해 포스팅합니다. .. 2020. 9. 12. 로버트 마틴이 말하는 Factory Pattern 이란 무엇인가? Photo by Joshua Sortino on Unsplash 반 버논의 도메인 주도 설계에서 팩토리 패턴에 대한 설명이 나옵니다. 반버논이 말하는 팩토리 패턴이란? 이 때와 반버논 책과 중복된 내용도 있지만, 평소 팩토리패턴에 대해서 생각하던 부분과 마침 책에서 다시와서 읽으면서 느낀바를 다시금 정리하고자 관련 내용을 적습니다. 배경 클린 소프트웨어 라는 책은, 객체지향프로그래밍 원칙인 SOLID에 입각한 샘플 프로젝트 코드와, 물론 SOLID도 설명하구요. 마찬가지로 SOLID 원칙 중, 의존 관계 역전 법칙(DIP)에 해당하는 부분을 설명하기 위해 팩토리 패턴을 언급합니다. 개인적으로, DIP를 위해서 다양한 방법이 존재하는데, 템플릿 메소드 패턴- 전략패턴등 여러 방법이 있다고 생각합니다. 팩토.. 2020. 9. 9. PayrollSystem 프로젝트에서 디자인 패턴은 어떻게 사용되었는가?(feat. 클린 소프트웨어) 들어가기 '클린 소프트웨어 - 로버트 마틴 저자' 에서 payroll 아키텍처 코드를 보고... Slipp 스터디에서 디자인패턴에 대한 학습을 하면서, 클린 소프트웨어 책을 학습하고 있습니다. (이 책의 좋은 점은 따로 또 포스팅하겠습니다.) 책의 일부분으로 로버트마틴이 PayrollSystem 코드가 나오는데, 그 부분을 보고 이해한 부분을 적어볼까합니다. 어떻게 만들어졌을가? 이 책에서는 총 5가지의 명세가 나오고 이를 해결하기 위해 다음과 같은 패턴을 활용합니다. 1. 커맨드 패턴와 액티브 오브젝트 패턴 2. 템플릿 메서드와 스트레티지 패턴 3. 퍼사드 패턴 4. 싱글톤과 모노스테이트 패턴 5. 널 오브젝트 패턴 코드에서 어떻게 사용되고 있는지 확인해봅시다. 각 패턴에 대한 자세한 설명은 스킵하고,.. 2020. 9. 9. 안정성:패키지 결합도의 원칙 Photo by Scott Webb on Unsplash 패키지 설계의 아키텍쳐에 작용하는 힘은 기술적이기도 하고, 정치적이기도 하며, 쉽게 변화하는 힘이기도 하다. 어쩌면, 로버트.C 마틴은 위 문구를 절실하게 이야기 하고 싶었던 것일수도 있다는 생각을 했다. 책을 읽으면 읽을수록, 기술적인 관점에서의 아키텍쳐와, 정치적으로, 그리거 빠르게 변화되는 요구사항은 언제나 우리의 아키텍쳐의 변경을 강요하게 만든다고 생각합니다. 로버트 마틴의 클린 소프트웨어의 책 내용을 발췌하여, 정리 후 저의 내용과 함께 적어내렸습니다. 들어가기 이번에는 패키지의 결합도와 관련된 법칙 3가지에 대해서 알아볼 예정입니다. 이 부분을 읽으면서, 느꼈던 것은 내가 유지보수 하고 있는 서비스의 경우에 충분히 적용해볼수 있고, 아래.. 2020. 9. 5. 단위 크기:패키지 응집도의 원칙 Photo by Scarbor Siu on Unsplash 로버트 마틴의 클린 소프트웨어의 책 내용을 발췌하여, 정리 후 저의 내용과 함께 적어내렸습니다. 들어가기 여기서 우리는 앞서 언급한 6가지 원칙 중, 패키지 응집도와 관련된 원칙 3가지를 살펴볼 예정입니다. 패키지 응집도 원칙 세 가지는 개발자가 어떻게 클래스를 패키지에 분류해 넣을지 결정할 때 도움이 됩니다.이 원칙을 적용하기 전 클래스와 클래스 상호 관계가 일부분이라도 밝혀져 있어야 한다. 즉, 이 원칙들은 클래스를 분류할 때 '상향식'접근 방법을 따릅니다. 1. 재사용/릴리즈 등가 원칙(Release-Reuse Equivalency Principle) -REP 재사용의 단위가 릴리즈의 단위다. 이 부분을 읽으면서 가장 먼저 드는 생각은, ".. 2020. 9. 5. 패키지 설계의 원칙 이란 무엇일까? Photo by Scott Webb on Unsplash 클린 아키텍쳐의 Ch20 - 패키지 설계의 원칙을 내용을 읽고, 저의 주관과 합쳐 아래 내용을 적었습니다. 혹시라도 잘못된 부분, 잘못 이해된 부분에 대해서는 댓글 남겨주시면 반영하도록 하겠습니다. 들어가기 우리가 객체지향 프로그래밍을 할 때 흔히 SOLID 원칙이라 불리는 내용이 있습니다. SOLID 원칙을 잘 지켜내면서, 코딩을 한다라면- 그 코드는 흔히 질좋은 코드다. 라고 이야기할 수 있습니다. 마찬가지로, 패키지를 구성하는 방법에서도 SOLID 와 같은 원칙이 존재한다고 생각했습니다. 그런 부분이 궁금해고, 그 부분을 해결할 수 있는 요소로서 로버트 마틴의 클린 아키텍처 책을 살펴보게 되었습니다. 저와 같은 고민을 가진 사람들에게 조금이나.. 2020. 9. 5. 서비스 지향 아키텍쳐?? Service-Oriented Architecture 서비스 지향 아키텍쳐는 무엇일까? 토마스 얼에 의해 정의된 SOA의 몇 가지 원리를 이해하고 간략하게 서비스 지향 아키텍쳐에 대해서 이해하자. 서비스는 언제나 상호 운용성(interoperable)이 있다. 그 외 서비스의 설계 원리를 살펴보면 서비스 설계 원리 내용 1. 서비스 계약 서비스는 그 목적과 기능을 하나 이상의 설명 문서에 계약으로써 표현한다. 2. 서비스의 느슨한 결합(Serivce Loose Coupling) 서비스는 의존성을 최소화하고 오직 서로에 대해서만 알고 있다. 3. 서비스 추상화(Serivce Abstraction) 서비스는 그들의 계약만을 게시하고, 클라이언트로부터 내부 로직을 숨긴다. 4. 서비스 재사용성(Service Reusability) 서비스는 좀 더 대단위(coar.. 2020. 9. 4. build.gradle 에서 다양한 방식으로 변수 사용하기. 들어가기 다양한 방법들 build.gradle 에서 변수를 사용하는 방식은 아래와 같습니다. 사실 위 System.xxx 의 경우 gradle에서 제공하기 보다는 Java에서 제공한다는 말이 맞습니다. 그러나 제목과 같이 build.gradle 에서 사용하는 방법이므로, 포함시키겠습니다. task printTask(){ println(System.getenv("X_USER")) println(project.getProperties()["X_USER"]) println(System.getProperty("X_USER")) } > "xxx" ./gradlew printTask "xxx" 여기서 xxx 하는 것에 따라서 변수를 다르게 넣을 수 있습니다. System.getenv("X-USER") // 시스템의.. 2020. 9. 4. 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. 이전 1 ··· 8 9 10 11 12 13 14 다음