SpringEvent / EDA
·
SpringBoot
이벤트 기반 아키텍처(Event Driven Architecture) 를 IT 쪽을 학습하는 사람이라면 한번쯤은 들어보셨을 겁니다.그런데 이를 어떠한 상황에서 사용하는 것이 좋고, 도입할 때 고려해야할 부분은 무엇인지, 장단점은 무엇인지와 실제 사용방법을 코드를 통해 알아보도록 하겠습니다. 1. EDA란 ?우선 위에 작성한 것처럼 번역은 이벤트 기반 아키텍처를 의미합니다. 이벤트를 중심으로 시스템이 동작하는 아키텍처를 의미합니다. ( 이벤트란 상태가 변하는 것을 의미합니다. ) 이 아키텍처를 서비스에 실적용을 많이 합니다. 그이유는 이벤트를 기반으로 동작하기 때문에 도메인간 결합도 혹은 생산자와 소비자의 결합도가 낮아지기 때문입니다. 분리된 아키텍처란 왜 중요할까요?➡️ 분리하여 결합도 / 의존도를 떨..
@Enumerated VS @Converter VS 테이블 분리
·
카테고리 없음
이번 팀 프로젝트에서 DB설계, ERD 작성, GIT 초기 전략 등등.. 초기에 필요한 부분들을 담당해서 만들었습니다. 그러한 설계 과정에서 했던 고민과 어떻게 해결해나갔는지, 선택이유와 차이점 등에 관해서 글을 작성해보겠습니다. 우선 필수적으로 존재할 테이블은 아래와 같습니다 - User- Task- Log- Comment Task 테이블에는 priority("LOW", "MEDIUM", "HIGH"), status("TODO", "IN_PROGRESS", "DONE")이 존재합니다. 저 값들만이 존재하는 요구사항이 있습니다. 이런 경우에는 몇가지 방법이 있을 것 같습니다. 분리를 하는 것이 좋은 방법일까요? 정규화를 하기 위해 분리를 하다보면 Task, PRIORITY, STATUS와 같은 테이블을 ..
QueryDsl에 관하여
·
카테고리 없음
오늘은 다들 많이 쓰는 queryDsl을 개인 프로젝트에 적용해보겠습니다 항상 프로젝트에 어떠한 라이브러리 의존을 추가할 때에는 어떤 필요성에 의해 추가를 하고 적합한 이유인지를 본인 스스로 알아야 하기에 이를 작성해보고 사용법을 알아보겠습니다. QueryDsl이란 ?QueryDsl 은 Java 기반의 코드를 이용하여 쿼리를 작성할 수 있게 하는 프레임워크이다.QueryDsl 을 사용하는 이유는 무엇인가 ?JPQL을 사용하면 되는데 왜쓸까? 그 이유는 안정성 이다. 어째서 안정성이 그저 문자열 쿼리를 날리는 다양한 방법보다 높은걸까? 그 이유는 내가 앞에 적은 것처럼 문자열이기 때문에 휴먼에러가 발생할 확률이 높고 컴파일 단계에서 문자열 쿼리를 확인할 수 없기 때문이다.하지만 QueryDsl은 자바기반으..
단위 테스트 코드 정리
·
카테고리 없음
이전 프론트 개발을 할 때도 테스트 코드의 필요성을 알았고 현재 백엔드를 공부하면서도 테스트 코드의 중요성을 알지만 실천하기 어렵다 생각합니다. 코드를 작성하다보면 어느새 많이 작성해서 그에 관한 테스트 코드를 또 작성하자니 시간이 걸리고 올바른 테스트 방법을 몰라서 그럴수도 있다고 생각합니다. (저도 그래왔기 때문에) 하지만 이제부터는 테스트 코드 작성을 몸에 새기려 합니다. 추후에 테스트를 하지 않아서 발생하는 문제를 직면하기 보다는 지금부터라도 차근차근 작성해 나가는게 좋다고 생각합니다. JUnit && Mockito대표적으로 Springboot를 단위 테스트할 때 사용되는 프레임워크입니다. JUnit 공식 가이드 문서를 참고하여 작성했습니다.공부 목적이 크기 때문에 주요하게 본 부분 위주로 작성되..
N+1 문제 파헤치기
·
카테고리 없음
N+1 문제 해결방법1. N+1 문제란 무엇인가?SpringBoot / Jpa를 이용해서 개발을 하다보면 N+1 문제 라는 것은 널리 알려져있습니다.저 또한 들어봤고 개념을 알고 있지만 명확한 해결방법과 개인 토이 프로젝트에서 테스트 및 해결을 해보기 위해 글을 작성합니다.N+1 문제란 연관관계가 있는 엔티티를 조회할 때 조회하는 개수 N개만큼 추가로 쿼리가 의도치 않게 발생하는 것을 의미합니다. 현재 저의 DB의 테이블 일부 구조입니다. board 테이블이 존재하고 board_like, board_view 테이블에서 식별자를 참조하고 있습니다.물론 단방향으로 연관관계를 이루어도 되지만 저는 board를 조회할 때 조회수, 좋아요수를 한번에 응답 객체로 반환하고 싶기에 양방향으로 JPA 는 구성이 되어있..
SpringBoot 뉴스피드 팀프로젝트 과제 회고
·
카테고리 없음
지금까지는 Spring 개인프로젝트를 진행했었다. 한주간이지만 4명이서 팀프로젝트를 진행했다. 나는 팔로우기능을 맡아서 개발했고 추가적으로 게시판 작업 리팩토링/추가기능 개발, Git 작업 플로우, 단위테스트 기능을 맡았다. 사용기술 - Java 17 - Mysql 8 - Spring security - Jwt - Redis - Jpa ERD 발표자료 링크https://teamsparta.notion.site/1ba2dc3ef51481539903e1714d083dc0 발제/특강 자료 | Notion📚 Chapter 1 미니 프로젝트teamsparta.notion.site GIT 링크https://github.com/Feeda-Project/spring-feeda GitHub - Feeda-Project..
String 과 LocalDateTime 변환에서의 트러블 슈팅
·
카테고리 없음
글을 작성한 계기는 프로젝트에서 수정날짜를 통한 기간 조회를 하여 게시물을 작성하는 기능을 구현해야 해서 코드를 작성했습니다.컨트롤러의 초기 코드는 다음과 같습니다.@GetMapping public ResponseEntity> findAllPost( @RequestParam(defaultValue = "1") @Min(1) int page, @RequestParam(defaultValue = "10") @Min(1) int size, @RequestParam(defaultValue = "") String keyword, @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") L..
동시성 문제에 관하여
·
카테고리 없음
오늘은 튜터님과 코드리뷰를 하며 나온 "동시성" 이라는 주제에 대해서 글을 작성해보겠습니다. 동시성 이슈란 ?동시성 문제란, 동일한 하나의 데이터에 2개 이상의 스레드, 혹은 세션에서 가변 데이터를 동시에 제어할 때 나타는 문제로써 누군가가 데이터를 수정 및 처리할 때 타 세션에서 데이터를 조회함으로써 정합성이 깨지는 것을 말합니다. *정합성 : 어떤 데이터들이 값이 서로 일치하는 상태를 의미합니다. 상황은 이렇습니다. 만약 게시판이 있고 좋아요를 구현한다고 할 때 저희는 몇가지 방법을 생각할 수 있습니다. 게시판 테이블 내부 칼럼에 그대로 좋아요를 넣어서 관리하는 것.좋아요 테이블을 분리하여 관리하는 것. 두가지 방법 모두 장단점이 존재합니다. 우선 좋아요 테이블을 분리했을 때의 경우 게시판을 조회할 ..