🍎 프로젝트 관련
- 수영장 정보 삭제 시 오늘 알게 된 Soft Delete를 사용했습니다. 이유는 잠재적인 미래 사용을 생각했기 때문입니다. 잠재적인 미래 사용으론 운영되고 있지 않은 수영장을 사용자가 고르게 되면 다른 체육 활동 시설, 운영되고 있는 수영 시설을 제공하기 위함입니다.
- 좌표계산 부분을 어느 계층에 두어야할 지 고민하고 있습니다. 나중에 리팩토링이 필요한 부분이고 일단 infra에 정의해 진행합니다.
🍏 예외는 정말 예외인 곳에서 사용해야 합니다. 이유는 예외를 생성할 때 스택 추적 전체를 캡처하기 때문에 비용이 많이 발생하기 때문입니다.
🍏 Query Parameter vs Path Variable의 차이
- 위 두 방식은 어디에 어떤 데이터(명사)를 요청하는 것인지 명확하게 정의하기 위해 사용합니다.
- Path Variable : 어떤 자원의 위치를 특정해서 보여줘야 할 경우
- Query Parameter : 정렬하거나 필터해서 보여줘야 할 경우
🍏 Soft Delete와 Hard Delete란 무엇인가요?
- Hard Delete란 DB 테이블에서 레코드가 삭제되면, 해당 레코드는 물리적으로도 삭제가 되는 것을 의미합니다.
- Soft Delete란 DB 테이블에서 레코드가 삭제되었다 하더라도, 물리적으로는 삭제가 되지 않는 것을 의미합니다. 따로 명시를 해줘야 하며 해당 레코드가 삭제되었음을 알려준다.
❓Soft Delete를 사용하면 얻을 수 있는 장점이 무엇인가요?
- ETL(Extract, Transform, Load) 과정에서 Incremental Extraction을 해야 하는 경우, 삭제된 row을 식별해야 하는 경우 Soft Delete를 사용하면 장점을 얻을 수 있습니다. 또한 잠재적인 미래 사용, 감사 또는 규정 준수를 위해 데이터를 보존해야 할 때 사용됩니다.
- 예를 들어, 고객 관계 관리 시스템에서는 감사 또는 규정 준수 목적과 같이 삭제된 고객에 대한 정보를 유지해야 할 수 있습니다. 이 경우 데이터가 여전히 필요하지만 사용자가 볼 수 없기 때문에 Soft Delete가 적절할 것입니다.
❓ Hard Delete를 사용하면 얻을 수 있는 장점이 무엇인가요?
- 데이터가 더 이상 피룡하지 않고 데이터를 보존하거나 복원할 필요가 없는 경우에 사용됩니다. 예를 들어, 시스템이 간단한 할 일 목록 앱이고 사용자가 완료된 작업을 삭제하기로 결정한 경우, 작업이 더 이상 필요하지 않고 복원할 필요가 없으므로 Hard Delete가 적절할 것입니다.
📖 Effective Java
🍎 Null이 아닌, 빈 컬렉션이나 배열을 반환하라
- null이 아닌 빈 배열이나 컬렉션을 반환하라. null을 반환하는 API는 사용하기 어렵고 오류 처리 코드도 늘어난다. 그렇다고 성능이 좋은 것도 아니다.
✅ 실제 서비스 되는 코드에서 이번 아이템이 도움이 될까?
- 현재 내 생각은 그렇지않다. 이유는 값 체크(null)를 확인해 처리하는 것이 더 확실한 방법이라고 생각하기 때문이다.
🍎 Optional 반환은 신중히 하라
- Optional을 반환하는 메서드에서는 절대 null을 반환하지 말자. 이는 Optional을 도입한 취지를 완전히 무시하는 행위이다.
- 컬렉션, 스트림, 배열, 옵셔널 같은 컨테이너 타입은 옵셔널로 감싸면 안 된다.
- 박싱 된 기본 타입을 담은 옵셔널을 반환하는 일은 없도록 하자.
- 값을 반환하지 못할 가능성이 있고, 호출할 때마다 반환값이 없을 가능성을 염두에 둬야 하는 메서드라면 옵셔널을 반환해야 할 상황일 수 있다. 하지만 옵셔널반환에는 성능 저하가 뒤따르니, 성능에 민감한 메서드라면 null을 반환하거나 예외를 던지는 편이 나을 수 있다. 그리고 옵셔널을 반환값 이외에 용도로 쓰는 경우는 매우 드물다.
✅ Contrainer Type을 Optional로 감싸 사용하면 안 되는 이유는 뭔가요?
- Container Type은 자체적으로 Empty를 다루는 메서드들이 존재하기 때문에 Optional을 사용하는 것은 코드의 복잡도만 증가시킵니다.
📚 Reference
'TIL' 카테고리의 다른 글
[Python] Thread 설계 의도를 파악한 성능 개선. 7초에서 3초로 (0) | 2023.04.11 |
---|---|
파이썬 성능을 높이고 싶을 때 알아야 할 것 (0) | 2023.04.06 |
Spring Resolver, Json and ObjectMapper 내부에선 어떤 일들이 발생할까? (0) | 2023.04.03 |
Local 환경에서 프로젝트 인터넷 연결 (0) | 2023.04.03 |
개인 프로젝트 <내 주변에 수영장>, Project Setting (0) | 2023.04.03 |