Today I Run 43

[SpringBoot] Interface 기반 Projection

관련 repository사건의 발단 :실무에서 테이블 5개를 조인해 여러가지 정보를 모아 보여줘야하는 일이 생겼다. 하나하나 findBy로 찾은다음 service단에서 합쳐줘도 되지만, 한 번의 쿼리로 해결하면 멋진 개발자 같아 보인다. 또한 앞선 글에서 보았듯 entity를 부르는 것보다 성능적인 면이 크다. 조인관계가 복잡해 querydsl로는 마음대로 튜닝이 어렵기 때문에 native query를 사용하기로 결정했다.서: Projection이란쿼리 하나로 다양한 컬럼 값을 select하고, 이것을 넘겨주기 위해서는 DTO가 필요하다. 하지만 repository에서는 entity만 받는데.. 이것을 해결해 줄 수 있는 것이 Projection이다. 관련글 : projection in querydsl ..

Today I Run 2024.05.09

[SpringBoot] Projection in querydsl

Projection는 JPA를 이용한 select는 entity를 불러온다. 그래서 대체로 필요없는 컬럼도 불러오게 되고 성능에 영향을 미친다. 하지만 프로젝션은 원하는 컬럼만 조회할 수 있기때문에 성능적으로도, 코드효율적으로도 좋다.Projection을 사용하는 방법은 setter를 사용하는 .bean, field, 와 생성자를 사용하는 constructor가 있다.지정된 type과 expressions에 대해 Bean을 만든다. 타입이 일치하면 바인딩해준다.예시 : UserDTO dto = query.select( Projections.bean(UserDTO.class, user.firstName, user.lastName));생성자를 호출해 지정된 type과 expressions을 thi..

Today I Run 2024.05.09

[SpringBoot] Unknown column 'c1_0.country_code' in 'field list'

Unknown column 'c1_0.country_code' in 'field list'어디서 본듯한 익숙한 오류.. JPA는 Entity를 기반으로 DB 스키마를 만들 때 단어 사이에 _ 언더바를 넣는다. 나는 분명 @Column(name = "CountryCode") private String Countrycode;이렇게 컬럼명까지 지정해줬는데도 불구하고 country_code로 찾으려한다! 그래서 이것을 강제로 내가 적은데로 찾으라고 하는 설정이 필요하다.다음과 같이 추가하면 바로 해결.#application.propertiesspring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNami..

Today I Run 2024.05.09

[SpringBoot] Swagger 설정

API문서를 손쉽게 만들어주는 착한 친구 swaggerpostman도 쓰긴 하지만 swagger의 편리함을 따라올자는 없다.. 둘다 쓰는것이 최고 편하긴하다. postman은 입력값 저장도해주고 따로 configration할것도 없고 json으로 export도 해준다! 하지만 개발할땐 swagger를 쓰는게 편리하다.스프링부트 3에서는 swaggerfox가 지원되지않으니 주의할것.pom.xml에 추가 org.springdoc springdoc-openapi-starter-webmvc-ui 2.2.0 implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.1.0'SwaggerConfig.javaimport org.spr..

Today I Run 2024.05.09

[Git] Stash 알아보기

브랜치를 이동할때 작업내용을 커밋하지 않으면 이동이 불가능하다. 하지만 커밋단위가 정해져있기 때문에 하나고치고 커밋하는건 불가능할때가 많다. 따라서 변경사항의 임시저장이 필요하다.스태시는 stack 구조이다명령어git stash변경내용 임시저장하기git stash liststash했던 내용 보기git stash apply가장 최근 stash 가지고오기git stash applt stash@{name}특정 stash 가지고오기git stash drop가장 최근 stash 지우기git stash drop stash@{name}특정 stash 지우기git stash clear한번에 모든 stash 모두 지우기git stash pop가장 최근 stash를 적용하고 동시에 stack에서 지우기git stach p..

Today I Run 2024.05.09

[SpringBoot] jpa-ddl-auto

jpa-ddl-auto을 update로 설정했는데, 왜 DB스키마가 바뀌지않을까? 의문스러워서 다시 공부해봤다.createentity에 등록된 클래스와 매핑되는 테이블을 자동으로 생성해준다. 테이블이 이미 존재한다면 drop하고 생성한다.create-dropcreate와 같지만 애플리케이션을 종료할 때 테이블을 삭제한다.update기존 테이블이 존재하면 테이블을 삭제하지 않고 컬럼을 변경한다. 하지만 모든 변경사항을 반영하는것이 아니라 기존에 존재하는 칼럼의 속성(nullable, 크기, 데이터타입)등은 건드리지않고, 새로운 컬럼이 추가되는 변경사항만 반영한다.validateDDL을 작성하여 테이블을 생성하거나 수정하지 않고, entity클래스와 테이블이 정상적으로 매핑되는지만 검사한다. 만약 테이블이 ..

Today I Run 2024.05.08

[CS] 2의 보수

2의 보수란? → 양수를 음수로, 음수를 양수로 바꿔주는 연산.💡 -N = ~N + 1컴퓨터는 덧셈연산 밖에 못한다!10 : 0000 1010 → ~10 : 1111 0101 (NOT 연산)10의 보수 +1 : 1111 011010 + 10의 보수 : 1 0000 0000 → 1은 오버플로로 삭제됨 = 01의 보수 → 컴퓨터에서 1의 보수는 1과 0을 반전시켜주는 역할을 한다.0001 0111 → 231110 1000 → 23의 1의보수1111 1111 → 결과: 2561111 1111의 보수 : 0000 0000 → 1의 보수1의 보수만을 사용해 연산을 할 시 비트반전을 너무 많이 해야한다는 단점이 있다. 그래서 2의 보수 등장!1의 보수를 사용하면 2n번의 비트반전.2의 보수를 사용하면 4비트의 공..

Today I Run 2024.05.08

[JAVA] String에서 +를 하면 안되는 이유

https://pingu0130.tistory.com/81 이 문제를 풀면서 String +연산의 난관에 부딛쳤다.기존의 다른 언어에서는 문자열을 char형의 배열로 다루지만 자바에서는 문자열을 위한 클래스를 제공한다!immutable ClassString클래스에는 문자열을 저장하기 위해서 문자형 배열 참조변수(char[]) value를 인스턴스 변수로 정의해놓고 있다. 인스턴스 생성 시 생성자의 매개변수로 입력받는 문자열은 이 인스턴스변수에 문자형 배열로 저장되는 것이다.한번 생성된 String인스턴스가 갖고 있는 문자열은 읽어 올 수만 있고 변경할 수는 없다. 따라서 + 연산자를 이용해 문자열을 결합하는 경우 인스턴스 내 문자열이 바뀌는 것이 아니라 새로운 문자열이 담긴 String인스턴스가 생성된다.

Today I Run 2024.05.08