전체 글

모르는 내용 및 아는 내용 모두 꼼꼼히 복습하여 익숙해지는 그 날까지 꾸준히 공부하겠습니다.
개발 도서/만들면서 배우는 클린 아키텍처

클린 아키텍처 설계 1단계 - 단일 책임 원칙, 의존성 역전 원칙 적용하기

SRP - 단일 책임 원칙단일 책임 원칙은 거의 대다수가 “하나의 컴포넌트는 오로지 한 가지 일만 해야 한다”라고 알고 있다.하지만, SOLID에 S 단일 책임 원칙의 실제 정의는 “컴포넌트를 변경하는 이유는 오직 하나뿐이어야 한다”이다. SOLID를 공부하면서 나도 단일 책임 원칙은 하나의 일만 수행해야 한다라고만 알고 있었는데, 해당 책을 읽으면서 컴포넌트를 변경해야 하는 이유가 하나여야 한다는 정의가 좀 더 알맞는다고 생각이 들었다. 변경해야 하는 이유가 하나인 것은 즉, 하나의 일만 수행한다는 것을 의미한다.! 컴포넌트 A는 다른 모든 컴포넌트에 의존하고 있어서 다른 컴포넌트에 변경이 생길 때 같이 변경되어야 한다.컴포넌트 A는 하나의 역할만 수행하는 게 아니라, 여러 역할을 수행하고 있다.여러 ..

Spring Framework/Spring

Spring AttributeConverter로 엔티티와 DB 컬럼 간 데이터 변환하기 - 엔티티와 DB 컬럼 매핑

Converter란DB에서 어떤 값을 저장할 때 전/후 처리가 필요한 경우가 있습니다.이를 Spring AttributeConverter 인터페이스를 구현하여 처리할 수 있습니다. 사용 예시로, 자바 코드에서는 성과 이름을 따로 관리하고, 데이터베이스에서는 성이름을 그대로 저장하려는 경우 어떻게 처리하는지 보겠습니다. AttributeConverterpublic interface AttributeConverter { public Y convertToDatabaseColumn (X attribute); public X convertToEntityAttribute (Y dbData);}convertToDatabaseColumn : 데이터베이스 컬럼으로 변환해주는 메서드이며, 자바 객체를 어떻게 변..

Spring Framework/QueryDSL

Querydsl 날짜 연산 문제 해결 : Interval 예약어 미지원 - Java 날짜 객체를 사용하기

문제 상황Querydsl을 통해 MySQL에 날짜 함수를 적용하려고 하는데 이슈가 있었다.날짜 함수를 적용하기 위해서는 Expressions.stringTemplate 을 이용하면 원하는 mysql 함수를 적용시킬 수 있다고 생각했다.날짜 연산이 들어간 조건문을 만들어 디버깅을 하는데 해당 조건을 인식할 수 없다고 에러가 발생했다. reasonHibernate에서 아직 INTERVAl 예약어를 지원하지 않는다. QueryDsl 코드는 컴파일 이후 Hibernate로 변경되어 실행되므로, Hibernate에서 지원하지 않는 예약어는 사용할 수 없다!! (Querydsl은 HQL(Hibernate Query Language) 쿼리를 Type-Safe 하게 유지보수해야 할 필요로 탄생했다.) Querydsl ..

Infra/Kubernetes

Helm 차트란, helm 구조 이해하기

helm search 차트 찾기# 1. Helm Hub에서 검색helm search hub workpress# 2. Local에 추가된 저장소에서 검색helm search repohelm search hub는 여러 저장소들에 있는 헬름 차트들을 포괄하는 helm hub 를 검색합니다.helm search repo는 helm repo add를 사용하여 로컬 헬름 클라이언트에 추가된 저장소들을 검색한다. 검색은 로컬 데이터 상에서 이루어지며, 퍼블릭 네트워크 접속이 필요하지 않습니다. helm install# 1. 패키지 설치helm install happy-panda stable/mariadb# 2. 상태 확인helm status happy-panda# 3. 릴리스 제거helm uninstall happy..

개발 도서/만들면서 배우는 클린 아키텍처

클린 아키텍처란 무엇인가, 계층형 아키텍처의 문제점과 함정

일반적인 계층형 아키텍처계층형 아키텍처의 흐름은 간단하게 설명하면웹 계층에서 클라이언트 요청을 받습니다.요청을 받아 도메인 혹은 비즈니스 계층에 있는 서비스로 요청을 전달합니다.서비스 계층에서 필요한 비즈니스 로직을 수행합니다.도메인 엔티티의 현재 상태를 조회하거나 변경하기 위해 영속성 계층의 컴포넌트를 호출합니다.위에서 설명했듯이, 웹에서 도메인 그리고 영속성 방향으로 요청이 흘러감을 알 수 있습니다. 여기서 생기는 문제점이 있습니다. 자연스럽게 웹 계층은 도메인 계층에 의존하게 되고, 도메인 계층은 영속성 계층에 의존하게 되어, 결론적으로 데이터베이스에 의존하게 되는 문제가 발생합니다. 이것이 왜 문제가 되냐면,애플리케이션의 목적은 비즈니스를 관장하는 규칙이나 정책을 반영한 모델을 만들어서 사용자가 ..

JAVA

Java if문 최적화와 가독성 향상 방법 - 클린코드 작성 방법

If 문은 프로그래밍을 하면서 사용할 수밖에 없는 문법 중 하나이다.If 문을 사용할 때 보다 가독성 좋고 최적화된 코드로 작성하기 위해 If 문 클린 코드 방법에 대해 정리해보고자 합니다.단축 평가자바에서 and와 or 은 &&, || 연산으로 처리합니다.&&if(condition1 && condition2 && condition3 && condition4) {}&& 연산자는 여러 개의 boolean 조건이 있을 때, 하나의 조건이라도 false가 있으면 결과는 false가 됩니다.즉, 위 조건 식에서 condition1이 false이면 뒤에 있는 조건을 확인하지 않고 조건문을 벗어나게 됩니다. ||if(condition1 || condition2 || condition3 || condition4) {..

Git

[Git] Git reset, revert 이용해서 commit 없애기, 되돌리기

Git reset & revertreset : 과거의 특정 커밋으로 완전히 되돌린다. (변경 내용 없어짐)revert: 현재에 있으면서, 과거의 특정 커밋들만 없던 일로 만든다. (변경 내용 유지)Git resetgit reset 명령어는 현재 브랜치가 예전의 커밋을 가리키도록 이동시켜 변경 내용을 리셋합니다.reset은 revert와 달리 애초에 커밋하지 않은 것처럼 예전 커밋으로 브랜치를 옮기는 작업입니다.추가 설명git reset - -hard a0fvf8 을 통해 B Commit으로 돌아간다.C, D Commit은 없어진다.reset 세부 옵션git reset --soft [commit ID]git reset --mixed [commit ID]git reset --hard [commit ID]gi..

Spring Framework/Spring

[Spring] Optional 주요 메서드 활용법 - map, orElse, orElseGet, isPresent, ifPresent

OptionalOptional은 값이 있을 수도 있고 없을 수도 있는 상황을 처리할 때 사용합니다.이를 통해 null을 직접 다루지 않고, 값의 유무를 명시적으로 처리할 수 있습니다.NullPointerException을 방지하면서 코드 가독성을 높일 수 있다. Map()Optional.map() 은 값이 있으면 해당 값을 꺼내와서 코드 블럭을 실행합니다.map() 함수는 간단히 A type을 B type으로 변경하는 역할을 합니다.Optional을 사용하면서 메서드 체이닝을 사용해 처리할 수 있습니다.public String getTeamNameFromDevice(Optional optDevice){ return optDevice .map(Device::getOwner) .map(Use..

kylo
오늘도 열심히 - BE