[Spring] 프로젝트에 DDD 도입하기 (Feat. 도메인 모델 설계)
·
spring
오늘은 프로젝트에 DDD를 도입하며 고민하고 공부했던 적용기를 다뤄보려 한다. 도메인 주도 개발이란DDD(Domain-Driven Design) 또는 도메인 주도 설계라고 부르며 도메인 모델을 중심에 놓고 설계하는 방식을 일컫는다. 도메인이란 무엇일까도메인은 특정 문제 영역을 의미하며, 소프트웨어가 해결하려는 비즈니스 영역을 의미한다. 예를 들어, 이커머스 플랫폼을 개발한다면 이커머스 플랫폼은 개발해야하는 대상이 되고 이를 도메인이라고 한다. 도메인은 또 하위 도메인으로 나눠질수 있는데, 주문, 결제, 배송, 고객 관리 등이 해당 도메인에 포함될 수 있다.   각 하위 도메인은 독립적으로 기능을 제공할 수도 있고, 다른 하위 도메인과 연동하여 기능을 제공하기도 한다. 예를 들어, 카탈로그 도메인은 상품 ..
[SpringBoot] Sentry On-premise 구축기
·
spring
Sentry는 on premise로 직접 sentry를 띄우면 무료로 팀 계정을 사용할 수 있게 해주는데 이 구축기를 공유해보려한다.도입 배경뽀각 서비스를 운영하면서 기존 에러 추적을 위해서 Sentry를 개발 계정으로 한 명이서 관리를 하고 있었다.무료 계정이다보니 팀원 모두가 사용할 수 없어 불편함이 있어 이를 on premise로 옮기기로 결정! 최소 권장 사양4 CPU Cores16 GB RAM20 GB Free Disk SpaceAWS에서 제공하는 프리티어 사양으로는 돌릴 수 없기 때문에 리눅스 컴에 직접 돌리기로 결정하였다.설치 방법git clone https://github.com/getsentry/self-hosted.gitcd self-hostedsudo ./install.shsudo ..
Java reflection을 통해 RestDocs 생성 테스트 코드 작성 시간 1/2로 줄이기
·
spring
취준 관리 서비스 뽀각을 개발하면서 Spring REST Docs를 도입해 API 문서 생성을 하고 있었다. REST Docs의 장단점은 명확하다.장점 : 프로덕션 코드에 어노테이션 등이 침투하지 않는다.단점 : 테스트 코드가 성공해야만 문서 생성이 가능하다. 테스트 코드도 강제로 짜고 좋지 뭐.. 하며 호기롭게 시작한 REST Docs 적용은 테스트 코드 지옥에 우리를 빠트렸다..문제점 뽀각에는 노션의 페이지처럼 마크다운 문법으로 글을 작성할 수 있는 카드라는 아이템이 있는데 이를 단건조회하는 테스트 코드이다.API 하나에 미친 듯한 코드 줄의 양이 보이는가..? 이는 JSON 상하차를 해야하는 서비스 초반 우리 개발 속도에 발목을 잡았다. 팩토리 클래스 생성이를 REST Docs 문법에 맞는 테스트 ..
[스프링] service 인터페이스 도입과 접근제한자
·
spring
고민의 시작백기선님의 이펙티브 자바 완벽 공략의 “아이템 15. 클래스와 멤버의 접근 권한을 최소화하라”에는😄 : “public, protected 접근 제한자를 가지는 API는 하위호환성을 지키고 싶다면 영원히 관리해야하는 코드가 된다” 라는 말이 나옵니다. 응? 나는 스프링에서 지금까지 모든 클래스를 거의 public으로 박아놨는데…. 라는 생각이 들었습니다.여기서 하위호환성을 지킨다는 것은 버전이 올라갈 수록 이전 jar 파일로 배포해두었던 public으로 노출시킨 나의 코드를 누가 언제 어디서 쓰고 있는지 모르기 때문에 다음버전에서도 쉽게 바꾸지 못한다는 것을 의미합니다. 만약 바꾼다면 클라이언트에서 해당 코드에 해당하는 부분을 모두 바꾸어야하는 문제가 생깁니다. 그리고 말하시길😄 : “정답은..
[spring security] 왜 500번 에러도 401(Unauthorized)에러가 될까?
·
spring
문제상황spring security에서 filterChain을 설정하면서 "/member/signUp" url에 대한 request는 permitAll()을 해주고 싶었다. 이 과정에서 분명 permitAll()를 해주었지만 401 error가 발생하였고 이를 해결하는 과정을 포스팅한다. 본문String[] allowUrls = {"/", "/swagger-ui/**", "/member/signUp"};@Beanpublic SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http .csrf(AbstractHttpConfigurer::disable) .cors(Abstra..
이미지 저장/조회 서버 만들기(3) - AWS Presigned URL 이미지 업로드
·
spring
https://preparingfor.tistory.com/7 [일주일 프로젝트] 이미지 저장/조회 서버 만들기(2) - 이미지 파일 어떻게 받아오지?https://preparingfor.tistory.com/6 [일주일 프로젝트] 이미지 저장/조회 서버 만들기(1) - 저장 어디에..? 공지사항 기능을 만들던 중 이미지를 저장해야하는 상황이 생겼습니다. 그 김에 첫번째 일주일 프preparingfor.tistory.com저번 글에 이어서 서버를 거쳐 이미지를 aws s3에 저장하는 방식이 아닌 presigned-url을 통해 프론트에서 직접 s3 업로드 하는 방식을 알아보겠습니다. Presigned-URLPresigned-url은 AWS의 S3(Simple Storage Serivce)가 지원하는 기능..
이미지 저장/조회 서버 만들기(2) - 이미지 파일 어떻게 받아오지?
·
spring
https://preparingfor.tistory.com/6 [일주일 프로젝트] 이미지 저장/조회 서버 만들기(1) - 저장 어디에..? 공지사항 기능을 만들던 중 이미지를 저장해야하는 상황이 생겼습니다. 그 김에 첫번째 일주일 프로젝트로 이미지 저장/조회 api를 만들어보려고합니다. 일단 이미지 처리 api를 만들려고하니 받 preparingfor.tistory.com 저번 글에 이어서 이제는 구상하였던 이미지 저장/조회 서버를 코드로 옮겨보려고 합니다. 이미지를 Controller로 받아오기 위해서 이미지는 무슨 데이터 타입으로 받아와야하는지 알아봐야했습니다. 찾아보니 Spring에서는 MultipartFile 타입으로 이미지를 받아온다고 합니다. MultipartFile type Multipart..
이미지 저장/조회 서버 만들기(1) - 저장 어디에..?
·
spring
공지사항 기능을 만들던 중 이미지를 저장해야하는 상황이 생겼습니다. 그 김에 첫번째 일주일 프로젝트로 이미지 저장/조회 api를 만들어보려고합니다. 일단 이미지 처리 api를 만들려고하니 받아온 이미지를 어디에 저장해야할지 고민이 되었습니다. 고민 1. 이미지 저장은 어디서 해야할까? 기존에 data들은 모두 database에 저장을 하였으니 database에 저장을 그래도 하면 되는걸까? 아무래도 이건 아닌 것 같았습니다. 서버 배포할 때 database의 용량의 크기가 이미지를 저장하는 용도는 아닐것이라 생각을 했거든요. 그래서 이미지는 보통 어디에 저장하는지 구글링을 해보았습니다. 크게 저장 장소가 3가지 있었습니다. 1. database 2. 서버 컴퓨터의 disk 3. 외부 storage 하니씩..