Bean validation에서 기본적으로 제공하는 기능 이상으로 유효성 검증을 해야한다면 커스텀 어노테이션을 만들어서 검증할 수 있다. 커스텀 어노테이션 이외에 검증하는 방법은 여러가지가 있지만, 나는 컨트롤러나 서비스 레이어에서 검증 메서드를 계속 호출하는 것이 메서드의 핵심 코드를 읽기 불편하게 만든다고 생각하기 때문에 DTO의 검증은 DTO 레이어에서 처리하는게 좋다고 생각했다. 나와 비슷한 생각이신 분들을 위해 커스텀 어노테이션과 검증 클래스로 분리해서 DTO 유효성을 검사한 방법을 공유한다. 회원가입 DTO 코드 @NoArgsConstructor @AllArgsConstructor @Getter @ValidSignUpRequest // Dto에 대한 검증은 Dto에서 처리하자 public cl..
전체보기
Docker 사용하면서 기록하는 명령어 복기용 메모장. docker run -p 5432:5432 -e POSTGRES_PASSWORD=비밀번호 -e POSTGRES_USER=유저이름 -e POSTGRES_DB=DB이름 --name 컨테이너이름 -d postgres docker exec -i -t postgres_boot bash su - postgres psql --username 유저이름 --dbname DB이름 \list (데이터 베이스 조회) \dt (테이블 조회) docker run docker run => 새로운 Docker 컨테이너를 생성하고 실행한다 -p 5432:5432 => 호스트의 5432 포트와 컨테이너의 5432 포트를 연결한다 -e => 환경변수를 설정한다. 뒤에 따라오는 POS..

M1 Mac에 Docker Desktop 설치하고 환경 변수에 추가했다. 공식 홈페이지에서 Docker.dmg 파일을 다운로드 받아서 설치했는데, 환경 변수는 자동으로 안 잡아주더라~ 좀 찾아보니 /Applications/Docker.app/Contents/Resources/bin 경로에 있었다. 스크립트로 환경 변수에 추가해주자. echo 'export PATH="/Applications/Docker.app/Contents/Resources/bin:$PATH"' >> ~/.zshrc source ~/.zshrc 아래와 같이 실행된다.
어제 깜박하고 한 일 정리를 안했다 ㅋㅋ... ㅠㅠ 오늘 한 일 DBMS의 트랜잭션은 어떻게 구현되었는지 공부했다. 정리해서 글 써야지.. 알고리즘 문제 1개 풀었다.
멀티미디어 파일을 포함한 글 작성 요청을 처리하는 서버를 개발할 때, 파일 저장소로 AWS S3를 사용하고 있다고 가정하자. 만약 글 작성 요청을 처리하는 중에 서버에 장애가 발생하여 요청이 중단될 경우, 트랜잭션이 실행 결과를 롤백할 때 외부 서비스인 S3의 작업은 함께 롤백되지 않는다. 그렇다면 어떻게 S3의 작업을 롤백해야 할까? 고민하고 검색해서 여러 가지 방법을 찾아봤다. 내가 작성한 메서드의 초기 형태는 아래와 같은 형식이다. S3에 이미지 파일을 올리는게 비즈니스 로직 사이에 있다. @Transactional public PostResponseDto createPost( MultipartFile[] images ) { // 불필요한 코드 지움 Post savedPost = postReposi..
오늘 한 일 Spring Data JPA를 쓰는데 쿼리 메소드로 여러 연관관계를 표시하는게 복잡해서 JPQL을 공부하고 사용했다. 조금 복잡한 조회 조건(좋아요 누른 글 목록을 얻는데, 글 작성자가 비공개 계정이라면 얻을 수 없다)을 쿼리로 작성하려고 하니 서브쿼리 때문에 가독성이 많이 나빠졌다. 그래서 서버에서 글 필터링 조건을 처리할지 고민했는데, 글이 많아지는 경우에 서버가 처리하는 것보다 DB에서 처리할 때 인덱스를 걸어서 가독성은 나쁘지만 조회 속도는 최적화 할 수 있다고 생각했다. 그냥 흘깃 봐도 아래의 쿼리는 보기가 싫어진다.. 더 가독성 좋은 쿼리를 위해서 다음엔 QueryDsl를 사용해야겠다. // 좋아요를 누른 글 목록 조회(글 작성자가 비공개 상태라면 팔로잉 중일 때만 조회) @Que..