좋은 API Response 만들기 그래야하지 않을까? 싶었지만 하지 않았던 습관들에 대해 지적해주는 글이 아닌가 싶다. 최소 스펙 유지하기 가능한 API 크기를 최소화 한다. 즉, DTO를 중복적으로 사용하지 않는게 중요한 듯 하다. 회사에서 레거시한 프로젝트들을 관리하다 보면 하나의 통합적인 DTO(예를들면 상점 도메인에 사용하는 모든 데이터(!!)를 적어둔 ShopDTO)를 만들어 놓고 중복적으로 사용하며 Response에는 null 값이 숭숭 뚫려있는 프로젝트들이 있었다. 이게 참 백엔드 개발자로써는 중복된 코드를 지양하고(!) 객체지향인것(!) 싶지만 단순히 레이어 간의 파라미터의 역할을 하는 객체를 객체지향 코드로 격상시켜 버린 것이 아닐까 싶다.(그리고 이런 response api를 받으면 ..
서비스 코드에 Response 등 응답객체 반환 금지 테스트 코드 작성시 진행하기 어려운 부분이 있음 반환타입에 따라 Controller에서 응답객체로 감싸기 테스트 코드 작성 시 Controller는 Mock테스트, 그 외 Junit 단위테스트로 패키지 구조는 'api'와 'global'로 나눈다. api의 패키지는 도메인별로 나눈다.(기능별 x) exception의 경우 global 패키지 내의 도메인으로 나눈다.(팀 컨벤션에 따라 변경) 디자인패턴을 적용시켜야 할 경우 Service 패키지를 작성하여 그안에 보관한다. api 패키지 내에 특정 도메인만 사용하게 되는 util 패키지를 만들지 않는다.(생길 경우 디자인패턴으로 보관) util의 경우 특정 도메인의 컴포넌트를..

목표 - 테스트코드의 습관들이기 - 천천히 하더라도 꼭 완주 - 기존 구성에 따라, 내 힘으로 구현 -> 피드백 확인 -> 리팩토링의 과정을 거친다. 객체지향 생활체조원칙 한 메서드에 오직 한 단계의 들여쓰기만 한다. else 예약어를 쓰지 않는다. 모든 원시 값과 문자열을 포장한다. 한 줄에 점을 하나만 찍는다. 줄여 쓰지 않는다(축약 금지). 모든 엔티티를 작게 유지한다. 3개 이상의 인스턴스 변수를 가진 클래스를 쓰지 않는다. 일급 컬렉션을 쓴다. getter/setter/프로퍼티를 쓰지 않는다. 문제는 혹시나하는 저작권 때문에 공개할 순 없다는 점.. TEST 코드 ..test코드 public class StringCalcTest { @BeforeEach public void setUp() { S..

뭔가 올드해 평소에 나는 디자인패턴에 대해서 회의적인 느낌을 받았다. '헤드퍼스트 디자인패턴'이란 책이 개발자라면 필수로 구입해야 하는 책이라고 듣고 서점에서 이 책을 들춰봤을때. 생각했다. '아 디자인패턴을 알아야 할 이유가 없구나' 책에서 소개하는 싱글톤은 이미 스프링 컨테이너 내에서 객체를 싱글톤으로 관리한다고 알고 있고 프록시 패턴의 경우도 마찬가지. @ControllerAdvice, @RestControllerAdvice 이 두개의 어노테이션이 프록시패턴을 구현하고 있다고 배웠다. 그러니 책에서 소개하는 팩토리, 옵저버, 커맨드 등의 디자인패턴은 분명 스프링부트에서 사용하는 'MVC패턴'이나 Controller-Service-Repository의 레이어가 위의 역할을 대신해서 동작할 것이다.라고..

회사에서 결제모듈을 구현해야 된다고 했을땐 막연히 겁이 났던것 같다. 당연하지만 남의 돈을 다룬다고 하는 것에 작은 죄책감(?) 때문인지도 모르겠다. PG 결제모듈은 여러 회사가 있지만 그 중에 토스페이먼츠를 지정해주었다. https://developers.tosspayments.com/ 토스페이먼츠 개발자센터 토스페이먼츠 결제 연동 문서, API, 키, 테스트 내역, 웹훅 등록 등 개발에 필요한 정보와 기능을 확인해 보세요. 결제 연동에 필요한 모든 개발자 도구를 제공해 드립니다. developers.tosspayments.com 5분 연동 가이드만 보아도 굉장히 쉽게 구현되어있었고 api나 샘플 코드들이 참고하기 쉬웠다는게 마음에 들었다. https://github.com/tosspayments/pa..
최근 QueryDsl로 회사 프로젝트를 진행하면서 까다로운 상황을 잘 해결해왔다고 생각했는데 이번에 겪은 상황을 해결하는데만 대략 일주일이 걸렸다. 코드를 대략적으로 설명하자면 @Getter @Setter @Entity public class Movie { @Id @GeneratedValue private Long id; @Column(name = "title") private String title; } @Getter @Setter @Entity public class Actor { @Id @GeneratedValue private Long id; @Column(name = "name") private String name; @ManyToOne @JoinColumn(name = "movie") priv..
- LEVEL2
- 책리뷰
- JWT
- 함께모으기
- java 플레이그라운드
- 알고리즘
- 객체 지도
- script setup
- 리눅스마스터2급
- 토스페이먼츠
- 맥 error
- for
- 타임리프
- Vue.js3
- 프로그래머스
- vuex
- CompositionAPI
- 다음 큰 숫자
- it책 리뷰
- mybatis구현
- 한권으로끝내기리눅스마스터2급
- 정수형으로 변환
- 객체지향
- 스프링부트
- 짝지어제거하기
- springboot
- pinia
- vue.js
- SpringSecurity
- 객체지향의 사실과 오해
- Total
- Today
- Yesterday