스터디 & 프로젝트
-
[Spring Boot] 어떻게 DTO를 재구성할까?스터디 & 프로젝트/Init Cloud 팀 프로젝트 2023. 3. 20. 16:19
요즘 주변에서 들은 얘기나 하나 둘 본 자료, 강의에서 뭔가 떠오르는게 있었다. 바로 끔찍하게 구성된 DTO를 다시 만드는 것이었다. 공식적으로는 끝난 프로젝트임에도 맘에 안드는 부분을 바꾸고 싶었다. 중복을 제거하려고 무자비하게 상속관계로만 작성한 DTO 클래스는 너무나도 유지보수가 힘들다는 것이었다. 그래서 이 DTO를 재구성해보기로 했다. 문제 상황 대충 이런식으로 구성된 DTO 패키지가 있었다. 비즈니스로직마다 각각의 DTO를 가지고 있고 부모인 UserDto부터 내려오는 구조다. 이게 너무 난잡하다고 생각했다. 어떻게 개선할까? 우선 UserDto라는 부모 클래스는 유지하기로 했다. Dto를 보면 Profile, Retrieve 등등 회원 정보를 관리하기 위한 Dto가 있고 Signup, Aut..
-
[Spring Boot] 서비스 레이어 리팩터링하기스터디 & 프로젝트/Mineme 프로젝트 2023. 3. 15. 20:38
늘 일을 벌이는 나다. 욕심만 그득그득해서 그런가보다. 사이드 프로젝트하면서 내가 구현한 비즈니스 로직을 함께 협업하는 친구 개발자에게 전달해야 했다. 내가 맡은 파트에서 구현된 메서드를 래핑해서 사용하고자 하는데 거기에 요구한 클래스와 메서드 인터페이스는 유지해달라는 요청이 있었다. 그에 따라서 내가 어떠한 방식으로 메서드를 추가하고 어떻게 구조를 변경하는 편이 좋을지 고민했다. 요구사항과 현재 상태 확인 우선 내가 맡은 파트는 사용자, 인가 쪽 도메인이다. 친구가 맡은 파트는 만들고자하는 서비스가 제공하는 핵심 기능 중 하나인 글 쓰기 관련 도메인이다. 요구사항 사용자가 글을 작성할 때 사용자가 정상적인(권한, 가입여부) 사용자인지 파악하는 로직이 필요 사용자가 글을 작성할 때 사용자가 정상적인 상태..
-
[MariaDB] 인덱스로 성능 향상 체감하기스터디 & 프로젝트/Init Cloud 팀 프로젝트 2023. 3. 3. 22:40
이유 프로젝트로 백엔드 API를 만들고 있었다. 이미 기능은 모두 완성되었고 리팩토링이나 버그 수정 등등 만이 남았다. 예전부터 DB 성능 개선을 한번 해보고싶어서 해볼까 했다. 그래서 가장 많이 들어왔던 적절한 Index 적용을 통한 조회 성능 개선을 하고싶었다. 근데 문제는 DB 자체의 레코드가 많지 않다는 것이었다. 진행하는 프로젝트 특성 상 일반적인 웹 서비스처럼 Insert, Update 쿼리가 많이 발생하지는 않고 DB에 저장된 기본 데이터를 조회하는 로직이 많았다. 그래도 뭐 일단 진행해보기로 했다. 인덱스는 PK가 아닌 UNIQUE VARCHAR 필드에 지정했다. 최초 시도 정말 규모가 작은 DB이다보니 솔직히 성능 향상을 체감하기는 어려울 것이라 생각했다. 그도 그럴 것이 히스토리를 관리..
-
[Spring Boot] Apple OAuth 적용하기스터디 & 프로젝트/Mineme 프로젝트 2023. 2. 26. 16:00
지금까지 Github, Google, 카카오에서 제공하는 OAuth API를 사용했었다. 하지만 별도로 진행하는 사이드 프로젝트에서 Apple 인가를 사용하기로 결정났고 내 파트로 정해졌다. 다른 API 벤더에 비해서 더 많은 로직을 요구하긴 한다. 하지만 그래도 천천히 따라해보면 크게 어렵진 않다. 우선 iOS 앱에서 최초 인가 이후 Access Token과 Authorization Code(인가 코드)가 함께 API로 넘어온다. 우리가 아는 일반적인 리디렉션과 콜백을 통한 OAuth 프로토콜 동작 플로우는 여기까지는 동일하다. 공개키를 통한 검증 API 요청으로 받은 액세스 토큰과 인가 코드를 통해서 액세스 토큰의 유효성을 검증해야 한다. 보통 내가 확인할 때에는 다른 벤더의 경우 OAuth API를..
-
[Swagger] NullPointerException 잡기스터디 & 프로젝트/Init Cloud 팀 프로젝트 2023. 2. 23. 00:43
오류 발생 java.lang.NullPointerException: null at springfox.documentation.builders.ParameterMerger.lambda$mergedParameters$2(ParameterMerger.java:87) ~[springfox-core-3.0.0.jar!/:3.0.0] at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source) ~[na:na] at java.base/java.util.ArrayList$ArrayListSpliterator.tryAdvance(Unknown Source) ~[na:na] 스프링 부트 프로젝트를 빌드하고 실행하니 앱 런타임 시점에서 NPE가 발생했..