본문 바로가기

전체 글137

만들면서 배우는 클린아키텍처 => 엔티티와 도메인의 분리 얼마전 만들면서 배우는 클린아키텍처 책을 봤다. 사실 예전에도 본적이 있는데 그때는 서평을 적지 않았다. 저는 책 내용을 정리하는게 아니며 다른 개발자분들이 정리한 블로그글이 있으니 참고하면 됩니다. 한가지 가르침을 받아서 내용을 정리하려고 한다. 엔티티와 도메인의 분리 그동안 업무와 공부를 하며 엔티티와 도메인을 분리해본적이 없다. 엔티티에 직접 비즈니스 코드를 채우고 서비스가 적절히 호출하여 만든 api가 다수였다. 예를 들어 Q&A 서비스를 만든다는 가정하에 간단한 질문테이블과 엔티티(question)를 코드이다. @Entity @Table(name = "question") public class Question extends BaseTimeEntity { @Id @GeneratedValue(st.. 2024. 3. 6.
'소프트웨어 아키텍처 101' 서평 안녕하세요. 올해 첫 완독한 책을 소개하고자 글을 적습니다. 그건 바로 소프르웨어 아키텍처 101 인데요. 작년인가 재작년쯤 사서 23년 겨울부터 24년쯤까지 읽었던 책입니다. 이책은 목차는 24개지만 크게 3가지로 구성되어 있는데 처음은 아키텍처의 기초 즉 정의와 특성 및 거버넌스 , 커네이선스(품질 측정 기준) 등을 다루고 있고 두번째는 레이어드 아키텍처부터 마이크로서비스 아키텍처 까지 아키텍처 토폴로지(컴퓨터 네트워크의 요소들(링크, 노드 등)을 물리적으로 연결해 놓은 것, 또는 그 연결 방식)와 그 전반을 설명해줍니다. 마지막으론 테크닉과 소프트스킬 파트로 아키텍트가 되기위한 소프트스킬 기술등을 알려줍니다. 잘 추상화 되어 있어 어떤서비스를 구성할때 이 책을 보고 바이블처럼 선택 할 수 있도록 도.. 2024. 1. 30.
2023 방구석 개발자 회고 안녕하세요. 방구석 개발자입니다. 오랜만에 블로그를 적어요. 벌써 23년 한해가 마무리되어가는 시기 잘 보내고 계신가요? 벌써 여러 회고 블로그가 포스팅 되고 있네요~ 저도 올 한해를 마무리하고자 회고록을 작성해봅니다. 차량 예약 시스템 개발 및 파트장fms모빌리티 회사에서 차량 예약하는 시스템을 개발했습니다. 예약기능을 개발하였고 비관락을 이용하여 동시성을 처리도 하고 예약 타임라인을 응답해주는 api등 중요한 api들을 개발을 맡아서 진행했습니다. 동시성 처리는 재고시스템으로 알아보는 동시성이슈 해결방법 인프런 강의를 공부하여 비즈니스에 적용해보았습니다. 그리고 chatgpt를 이용했는데요. 타임라임을 만들어 줄 알고리즘을 chatgpt에게 문의해서 풀었고 테스트 코드 또한 만들어 달라 요청해서 실제.. 2023. 12. 29.
Mysql Docs 맛보기 최근 공부로 Real MySql을 읽고 있었다. 문득 이런 생각이 들었다. "java, spring docs는 많이 보는데 mysql docs를 왜 한번도 안봤을까?" 그렇다 RealMySql 책에서도 레퍼런스로 dev.mysql이 있었지만 찾아보지 못했다. 아니 안할걸지도.. 개발자로써 부끄러운 일이지만 이제라도 Mysql Docs를 보려 한다. 같이 찍먹해보자! dev.mysql.com으로 접속하면 Reference Manual 로 접속한다. 필요한 부분을 검색해서 Docs를 살펴본다. 난 최근 옵티마이저가 궁금하니 찾아봐야겠다. mysql docs에서는 쿼리 최적화에 대한 고려 사항을 꽤나 디테일하게 알려 준다. 인덱스를 추가 할 수 있는지 여부를 확인해보기, 인덱스는 검색 속도를 높여준다. 오래 .. 2023. 7. 31.
Spring Cloud Service Discorvery 서비스 디스커버리란? MSA로 구성되어 있는 서비스들은 각자 ip와 포트를 가지고 있고 이런 정보를 관리할 필요가 생기는데 이런 관리 서비스를 Service Discorvery라고 합니다. 스프링에서 서비스 디스커버리를 유레카 클라이언트를 이용해 구현했는데요. 공식 문서를 자세히 보면 나와 있습니다. https://docs.spring.io/spring-cloud-netflix/docs/4.0.0/reference/html/#netflix-eureka-client-starter Spring Cloud Netflix This project provides Netflix OSS integrations for Spring Boot apps through autoconfiguration and binding t.. 2023. 3. 25.
4장: 부호화의 발전 부호화란? 어플리케이션에서는 메모리에 데이터를 저장할 때 객체, 구조체, 배열 등의 구조로 저장한다. 보통 CPU가 효율적으로 접근할 수 있도록 ‘포인터'를 사용하는데, 이는 다른 언어를 사용하는 프로세스에서는 이해하지 못할 수 있다. 그러므로 데이터를 파일에 쓰거나 네트워크로 전송하려면 바이트 형태로 저장한다. 부호화: 인메모리 → 바이트 (직렬화, 마샬링) 복호화: 바이트 → 인메모리 (역직렬화, 언마샬링, 파싱) 정리하면, 데이터 부호화는 통신 주체(프로세스 또는 서버)가 다른 언어의 데이터 구조를 사용해도 상대 프로세스가 이해할 수 있도록 데이터를 전환하는 것을 말한다. 더 쉽게 말하면 어플리케이션 환경에 구애받지 않는 데이터 형식으로 전환하는 과정을 말한다. 데이터 부호화, 왜 알아야 하는가 데.. 2022. 12. 26.
자바 커맨드(Command) 패턴 설명 커맨드 패턴은 요청을 객체의 형태로 캡슐화하여 사용하는 패턴입니다. 객체의 행동을 변화시키는 요구나 명령을 클래스로 표현하는 패턴입니다. 왜 사용해야 하는지 다양한 요청을 안전하게 처리할 수 있다. 각각의 커맨드들은 특정 객체에 의존하지 않도록 만들어지므로 재활용성이 매우 높습니다. 예시 저희는 이제 리모컨을 만들어 보겠습니다. 리모컨에는 4개의 버튼과 4가지 기능이 있는데요. 우선 커맨드를 인터페이스로 정의해보겠습니다. public interface ButtonCommand { public void run(); } 그다음 4가지 버튼의 기능을 만들어 보겠습니다. public class PowerOnButton implements ButtonCommand { @Override public void .. 2022. 12. 12.
2장:데이터 중심 애플리케이션 설계 이번 챕터를 읽고 얻고 싶은 목표 어플리케이션 개발자로써 적합한 데이터 모델을 선택 할때 도움을 얻고 싶다. 다양한 범용 데이터 모델 역사적으로 데이터 모델이 많이 생기고 사라졌지만 현대에 주로 사용하는 데이터 모델은 3가지 입니다. 관계형 데이터베이스 문서 데이터베이스 그래프 데이터베이스 그리고 각 데이터 베이스는 장단점이 있고 각각의 특화된 질의언어(Query Language)를 가지고 있습니다. 관계형 데이터베이스 오늘날의 가장 잘 알려진 데이터 모델 : 1970년 에드가 코드(Edgar Codd)가 제안한 관계형 모델이다. 관계형 데이터베이스의 근원은 비즈니스 데이터 처리에 있다. 트랜잭션 처리와 일괄 처리 등등을 할수 있다. 문서 데이터베이스 NoSQL은 관계형 모델의 우위를 뒤집으려는 가장 최.. 2022. 12. 12.
1장:데이터 중심 애플리케이션 설계 데이터 중심 애플리케이션 설계 책을 읽고 정리하였습니다. chapter 단위로 내용을 정리해서 올릴 예정입니다. 서문 급격한 기술 변화에도 변하지 않는 원리가 있다. 이 원리는 사용하는 도구의 버전과도 상관이 있다. 이 책은 성공적인 데이터 시스템을 예로 들어 여러 유명 애플리케이션의 기반 기술을 설명하고 서비스 환경에서 확장성과 성능, 그리고 신뢰성 요구사항을 항상 충족하기 위해 사용하는 기술을 설명한다. 데이터 시스템의 동작 방식뿐만 아니라 왜 그런 식으로 동작하며 어떤 질문을 해야 하는지를 알아본다. 이 책을 다 읽고 나면 특정 목적에 어떤 기술이 적합한지 결정하는 능력과 좋은 애플리케이션 아키텍처의 기반을 만들기 위해 도구를 조합하는 방법을 이해하는 능력이 생긴다. 이 책에서 다루는 내용 데이터 .. 2022. 12. 6.
자바 데커레이터(Decorator) 패턴 설명 Decorator 뜻은 장식으로 주어진 상황 및 용도에 따라 어떤 객체에 책임을 덧붙이는 패턴입니다. 객체의 결합을 통해 기능을 동적으로 유연하게 확장 할 수 있게 해주는 패턴입니다. 왜 사용해야 하는지 상속을 통한 기능의 확장은 각 기능별로 클래스를 추가해야하는 단점이 있습니다. 각 추가 기능별로 개별적인 클래스를 설계하고 기능을 조합할 때 각 클래스의 객체 조합을 이용하면 됩니다. 그리하여 이 설계는 추가 기능의 수가 많을수록 효과가 좋습니다. 예시 까페 레시피를 프린트하는 프로그램을 만들어 보겠습니다. 먼저 커피 재료를 리턴하는 메서드를 지닌 인터페이스를 만듭니다. public interface Coffee { String recipe(); } 그다음 커피데코레이터 추상클래스를 만듭니다.(커피.. 2022. 11. 15.
자바 상태(State) 패턴 설명 상태를 객체로 만들어서 각 상태 별 동작을 처리하는 패턴입니다. 클라이언트 코드가 직접 호출하는 Context class에서 상태별로 다른 State 구현객체를 사용하여 상태별로 다른 처리가 가능하도록 합니다. 구성요소 💡 - State Interface - State Concrete Class : State Instance (implement each State Concrete Class) - Context Class 상태 Interface : 기능만 명세화 상태 구현클래스 (Concrete Class) : 각 상태별 기능을 구현 컨텍스트 클래스 : 클라이언트 코드에서 직접 호출하는 클래스 로직구현코드가 없고, 상태객체를 호출하여 기능을 수행 → 클라이언트 코드에게 결과를 반환한다. 필드로 상태 .. 2022. 11. 8.
자바 전략 패턴 설명 및 왜 사용해야 하는지 알고리즘을 클래스화해서 객체의 행동을 쉽게 변경할 수 있는 패턴입니다. 실시간으로 객체의 행동을 변경해야 할 필요가 있을때 사용합니다. 전략의 수정과 추가에 따른 클라이언트의 의존성을 제거하여 전략을 쉽게 변경 할 수 있습니다. 실시간으로 전략을 선택하여 객체의 행동을 변경 할 수 있습니다. 예를 들어서 포토샵에서 작업한 이미지를 여러 포맷(jpg,gif,png)로 저장할때 게임 캐릭터의 공격무기를 다양하게 선택 할때 입니다. 예시 저희는 이제 포토샵 개발자가 되었습니다! 포토샵에서 이미지를 저장할때 pdf, jpg, 클립보드 등 다양한 포맷으로 저장을 하게 하는데요. 저장 방식을 전략패턴으로 한번 코딩해보겠습니다. 우선 추상클래스로 Image가 있습니다. public abs.. 2022. 11. 3.
반응형