본문 바로가기

★ 프로젝트 + 트러블 슈팅 ★46

헥사고날 아키텍처 구조, 사용이유 및 부가정보 이번에 진행 중인 DDD+헥사고날 프로젝트를 하며 아래 서적을 읽었다.- 만들면서 배우는 헥사고날 아키텍처 설계와 구현 책에 정의된 헥사고날 아키텍처의 구조 및 사용이유에 대해 정리해두면 추후 요긴하게 사용할 것 같아, 해당 문서에 기술해둔다. 헥사고날 아키텍처비즈니스 코드를 기술 코드로부터 분리기술 측면이 비즈니스 측면에 의존하는지도 확인하여, 비즈니스 측면이 비즈니스 목표를 달성하는 데 사용되는 기술에 대한 우려 없이도 발전할 수 있게 함관련된 비즈니스 코드에 피해를 주지않고도 기술 코드를 변경할 수 있게 함⇒ 이를 위해 도메인 헥사곤을 생성 (엔티티 + 값 객체) ⇒ 엔티티 >> 식별자를 할당할 수 있는 것을 의미 ⇒ 값 객체 >> 엔티티들을 합성하기 위해 사용하는 불변 컴포넌트  도메인 헥사곤실 .. 2024. 11. 20.
[DDD] 도메인, 바운디드 컨텍스트, 애그리거트 개념 정의 현재 조직 내에서 특정 도메인을 DDD (도메인 주도 개발)와 헥사고날을 접목하여 Java API로 재구축하는 프로젝트를 맡았다. 해당 프로젝트를 진행하면서 느낀 가장 큰 점은,프로젝트 인원끼리 특정 용어를 사용하여 의사소통할 때, 동일한 의미로 알고 있지 않으면 의사소통에 있어서 큰 어려움을 겪는 다는 것이였다. 그런 의미로 추후 다른 도메인으로 API 재구축을 진행하게 될 인원들을 위해,그리고 현재 내부 인원들이 계속 통일되게 인지하고 있으면 좋을 주요 개념들에 대해 미리 해당 페이지에 정리해둔다. 도메인(Domain)정의사전적 의미 : 영토, 분야, 영역, 범위, 책임범위인터넷 용어 : 인터넷 주DDD 용어 : 소프트웨어로 구현하고자 하는 현실의 문제 또는 상황웹소설 플랫폼을 위한 소프트웨어를 만.. 2024. 11. 5.
[FCM] AOS / IOS 푸시 메시지 미수신 및 액션링크 미작동 이슈 이슈 내용FCM deprecated API 이슈를 위해 FCM Admin SDK로 기능을 변경하였으나, AOS 혹은 IOS에서 푸시 메시지가 미수신되고, 푸시 메지시를 눌렀을 때 연동되도록 의도하는 주소지로 이동이 안되는 이슈가 발생하였다. 이슈 파악개발기간이 짧아, 시간을 지체시킬 수 없어 FCM은 모바일에서 관리하고 있으니, 모바일 팀측에 아래와 같은 사항을 곧바로 문의하였다. * 기본 전제 : 현재 백엔드 팀에서는 FCM Admin SDK를 사용하여 요청을 전달할 예정임1. 보내는 파라미터에 따라, AOS에서는 수신이 되나 IOS에서는 수신이 안되는 발생하고 있음2. AOS 및 IOS에서, 유저가 푸시 메시지를 클릭했을 때 의도하는 페이지로 연동되지 않고 있음 => 어떤 파라미터에 어떤 값을 줘야하.. 2024. 9. 14.
[FCM] Firebase Cloud Messaging deprecated API 이슈 이슈 내용평소와 다름없이 업무를 하던 중, 사업팀 측에서 CS 문의가 왔다. 내용인즉, 현재 관리자 운영툴에서 유저에게 이벤트 푸시 메시지를 보내고 있는데, 18만명에게 메시지를 보내는 일이 있어도 읽은 사람이 0에 수렴하는 결과가 보인다는 것이였다. 10건을 보냈는데 0명이 봤다하면 기능에 이상이 있다고 의심하지는 않겠지만 18만명은 좀... 현재 FCM을 사용하고 있는데, 실제로 푸시 메시지를 발송하고 있는 지 테스트를 해본 결과deprecated api 라는 결과가 떴다.  아! 정상작동할 수 있도록 바꿔야겠다. 이전에는 대규모 푸시 메시지 발송을 하면 유저에게 도착하기까지 시간이 꽤 지연된다는 이슈가 있었는데, 이것도 고려해야 하는 상황이 왔다. 헌데 추석 기념으로 대규모 유저에게 이벤트 푸시 메.. 2024. 9. 13.
[DDD 헥사고날 아키텍처] 도메인 -> 엔티티 변환간 baseEntity 내 createdDateTime 초기화 현상 트러블 슈팅 이슈 내용1. DDD 구조 (헥사고날 아키텍처)를 통해 엔티티와 도메인을 분리한 상황에서, 게시글 수정 작업이 필요하여 아래 코드를 실행public void patchPost(Long id, ModifyPostReq modifyPostReq) { PostEntity postEntity = postRepository.findById(id).orElseThrow( () -> new IllegalArgumentException("해당 게시글이 존재하지 않습니다.") ); Post post = postMapper.toDomain(postEntity); post.updatedPostInfo(modifyPostReq); pos.. 2024. 7. 14.
[DB ORM] INSERT DEFAULT 트러블 슈팅 이슈 내용- flyway를 통한 DB 마이그레이션 툴을 이용하던 중, 특정 기능 구현으로 인해 post 테이블에 view_count와 likes_count를 추가해야하는 상황이 발생하였다. public class PostEntity extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "post_id") private Long id; private String userId; private String title; private String content; private String image; private String category; .. 2024. 7. 7.