본문 바로가기

전체 글

(76)
[Querydsl] 프로젝션 프로젝션이란? select 절에 어떤 것을 가져올지 결정하는 것을 프로젝션이라고 한다. - 프로젝션 대상이 하나인 경우 타입을 명확하게 정할 수 있다. // String 값인 member.username 하나만 조회해 올때 List result = queryFactory .select(member.username) .from(member) .fetch(); - 프로젝션 대상이 둘 이상인 경우 튜플이나 DTO로 조회해온다. List result = queryFactory .select(member.username, member.age) .from(member) .fetch(); 이때 Tuple은 Querydsl에서 제공하는 Tuple이기 때문에 repository 계층에서 사용하는 것은 괜찮지만 servi..
[Querydsl] Querydsl 적용하기 Querydsl 사용이유 SpringBoot와 Spring Data JPA의 조합으로 개발자가 직접 SQL 문을 작성할 필요없이 메소드로 동일한 기능을 제공해주기 때문에 매우 편리해졌지만 아직도 복잡한 쿼리와 동적 쿼리를 작성하는데는 한계가 있다. Querydsl은 위와 같은 문제점을 해결해주고 여러가지 편리한 기능들을 제공해준다. 아래 코드는 member1이라는 username을 갖는 Member를 조회하는 기능을 JPQL과 Querydsl을 이용하여 테스트한 코드이다. 먼저 JPQL의 경우 sql문을 String 타입으로 작성했지만 Querydsl은 자바코드로 작성됐다. 그렇기 때문에 JPQL은 해당 기능을 사용하기 전에는 무엇이 잘못되었는지 확인할 수 없지만(런타임 에러) Querydsl은 컴파일 ..
[Spring] @AuthenticationPrincipal null 문제상황 @PostMapping() public ResponseEntity
도커 컨테이너 컨테이너란 호스트 OS상에 논리적인 구획(컨테이너)을 만들고, 애플리케이션을 작동시키기 위해 필요한 라이브러리나 애플리케이션 등을 하나로 모아, 마치 별도의 서버인 것처럼 사용할 수 있게 만든 것 도커 Docker(도커)는 애플리케이션의 실행에 필요한 환경을 하나의 이미지로 모아두고, 그 이미지를 사용하여 다양한 환경에서 애플리케이션 실행 환경을 구축 및 운용하기 위한 오픈소스 플랫폼. 내부에서 컨테이너 기술을 사용하고 있는 것이 특징 도커는 인프라 환경을 컨테이너로 관리한다. 애플리케이션의 실행에 필요한 모든 파일 및 디렉토리들을 컨테이너로서 모아버린다. 컨터이너의 바탕이 되는 Docker 이미지를 Docker Hub와 같은 리포지토리에서 공유한다. 도커의 특징 - 확장성/이식성 도커가 설치되..
동시성 이슈 해결방법 (Synchronized, DB Lock, Redis Lock) 문제 상황 Stock.class @Entity @NoArgsConstructor @Getter public class Stock { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private Long productId; private Long quantity; public Stock(Long productId, Long quantity) { this.productId = productId; this.quantity = quantity; } public void decrease(Long quantity) { if (this.quantity - quantity < 0) { throw new RuntimeException("..
[DB] 데이터베이스 정규화 정규화란? 정규화는 릴레이션 간의 잘못된 종속 관계로 인해 데이터베이스 이상 현상이 일어나서 이를 해결하거나, 저장 공간을 효율적으로 사용하기 위해 릴레이션을 여러 개로 분리하는 과정입니다. 정규화는 무결성을 충족시키기 위해 같은 의미를 담는 릴레이션을 더 좋은 구조로 만들면서 자료의 중복은 최소화하고 독립적인 관계는 별개의 릴레이션으로 표현해야 하며, 각각의 릴레이션은 독립적인 표현이 가능해야 합니다. 이상 현상 삽입 이상(insertion anomalies) : 원하지 않는 데이터가 삽입되거나 필요한 데이터가 삽입되지 않아 발생하는 문제 삭제 이상(deletion anomalies) : 하나의 데이터를 삭제할 때 다른 필요한 데이터까지 같이 삭제되는 문제 수정(갱신) 이상(modification an..
리팩토링 리팩토링이란? 새로운 소스코드를 만들어 내는 것이 아니다. 외부 동작은 변경하지 않고, 내부 구조를 변경하는 작업이다. 코드의 가독성을 좋게 한다. 개발자들마다 결과가 다를 수 있다. 리팩토링 주의사항 기능 추가 구현과 동시에 리팩토링을 하는것을 권장하지 않는다. 기능을 추가하기 전, 리팩토링을 먼저 하는 것을 추천 리팩토링 팁 아래 코드를 리팩토링하면서 리팩토링 팁을 알아보겠습니다. public class Main { public static int splitAndSum(String text) { int result = 0; if (text == null || text.isEmpty()) { result = 0; } else { String[] values = text.split("-"); for (S..
[Git] Git Advanced Git undoing Git 작업 되돌리기(Undoing) Git에서 되돌리기는 작업 상태에 따라 크게 세 가지로 분류 Working Directory 작업 단계 Working Directory에서 수정한 파일 내용을 이전 커밋 상태로 되돌리기 git restore Working Directory에서 수정한 파일을 수정 전 (직전 커밋)으로 되돌리기 이미 버전 관리가 되고 있는 파일만 되돌리기 가능 git restore를 통해 되돌리면, 해당 내용을 복원할 수 없으니 주의할 것! git restore {파일 이름} Staging Area 작업 단계 Staging Area에 반영된 파일을 Working Directory로 되돌리기 (== Unstage) git rm —cached (root-commit이 ..