전체 글

기록하며 공부하는 기술 블로그
Study

캐시 버스팅(Cache busting)이란?

캐시 버스팅이란 웹 개발에서 캐시(Cache)를 우회하여 새로운 콘텐츠를 불러오는 기술입니다. 그렇다면, 캐시 버스팅은 왜 사용하는걸까요? 웹 페이지나 어플리케이션은 자주 업데이트 되지 않는 정적 파일(이미지, 스타일시트, 자바스크립트 등)을 캐시에 저장합니다. 이를 이용해 사용자의 브라우저에서 캐시를 저장하여 더 빨리 로드되도록 합니다. 하지만 새로운 버전의 파일이 업데이트 되는 경우에 그 파일을 가져와야 하는데 지난 버전의 파일이 캐시를 통해 가져옵니다. 이런 경우에 브라우저에게 캐시된 파일이 최신 파일이 아니라는 것을 알리는 기술을 말합니다. 즉, 캐시된 파일을 우회하고 새로운 파일을 불러오기 위해 캐시 버스팅 기술을 사용합니다. 캐시 버스팅의 대표적인 방법은 3가지가 있습니다. 파일 경로를 통해 ..

Error/개발환경

[SpringBoot Data JPA] 'Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set' 오류

'Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set' db 변경도중 이런 오류가 발생하였습니다. hibernate dialect 즉 방언을 설정해주지 않아서 발생한 문제였고, h2 db이용시에는 아무런 문제가 없었지만, mysql 사용시에는 해당 문제가 발생하였습니다. 해결 방법으로는 아래와 같이 작성하면 됩니다. [application.properties] spring.jpa.database=MYSQL [appcation.yml] spring: jpa: database: MYSQL

Languege/Java & Spring

스프링부트 Could not find mysql:mysql-connector-java:.

Could not find mysql:mysql-connector-java:. h2-db에서 erd를 뽑으려고 mysql로 전환하던 도중 위의 오류가 발생하였습니다. 원인은 간단합니다. 아래와 같이 gradle에 설정하였을텐데 최신 버전에는 변경되어 runtimeOnly 'mysql:mysql-connector-java' 아래와 같이 작성하면 정상 동작합니다. runtimeOnly 'com.mysql:mysql-connector-j'

Languege/Java & Spring

스프링부트 어노테이션이란? 커스텀 어노테이션 추가하는 방법

어노테이션이란? 어노테이션은 소스 코드에 메타데이터를 추가하기 위한 것으로, 스프링부트에서는 다양한 용도로 사용됩니다. 1.스프링 빈(Bean) 등록을 위한 어노테이션 - @Component, @Controller, @Service, @Repository 등 - 해당 어노테이션이 붙은 클래스는 스프링 컨테이너에서 빈으로 관리됩니다. 2.의존성 주입(Dependency Injection)을 위한 어노테이션 - @Autowired, @Resource 등 - 해당 어노테이션이 붙은 필드나 생성자 등에 의존성 주입이 자동으로 이루어집니다. 3.스프링 MVC에서 컨트롤러(Controller)를 위한 어노테이션 - @RestController, @RequestMapping, @GetMapping, @PostMapp..

Error

[Error - Spring Jpa] javax.persistence.EntityNotFoundException: Unable to find 에러와 해결방법 3가지

javax.persistence.EntityNotFoundException: Unable to find ~~~ 에러가 발생할때는 해당 entity를 연관관계를 통해 가져올때 없는 값일때 (중간에 삭제되었거나, 애초부터 없던 값) 발생하게 된다. 예를 들어서 A라는 엔티티와 ManyToOne으로 연관관계가 맺어진 B라는 테이블이 있을때 A안에 B라는 필드가 null이 아니면서 참조할 수 없는 잘못된 값인 경우에 발생하게 된다. B테이블 bseq bname 1 hello 2 world A테이블 aseq aname bseq 1 홍길동 1 2 김길동 3 박길동 3 위의 테이블을 entity로 변환해본다면 대략 아래와 같은 형식이 될텐데 Public Class A { private String aseq; priv..

Error

[Error - Spring JPA] Caused by: org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save()

Caused by: org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save() 에러는 Entity의 Id에 해당하는 값에 데이터를 넣지 않아 발생한 문제입니다. save하려는 entity에 @Id 어노테이션이 있는지 확인하고 @GenratedValue(staragy= [ID 생성 전략])를 붙여주거나 직접 entity의 id에 데이터를 입력해준다면 오류가 해결됩니다. mysql에 Auto Increament을 설저한 경우에는 @GeneratedValue(staragy= GenerationType.IDENTITY)를 붙여주면 해결됩니다. @Entity @Tabl..

Languege/Java & Spring

[JAVA] 리스트 null로 초기화

🎈 Q & A 오카방을 통해서 자바, 스프링에 대해서 나도 기초를 쌓고, 공부도 하고, 사람들에게 도움을 주기 위해 자바 스프링을 알려주는 카톡방을 몇달전에 열어뒀는데 오늘은 한분이 나도 처음에 많이 헤맸던 예제를 물어보셔서 그것에 대해서 적으려고 한다. 항상 질문하실때마다 모르는걸 물어보면 좋겠다(?)라는 생각을 하게 되는데, 오늘 질문은 아 이거 블로그 포스팅 해두면 좋겠다 싶어서 먼저 말씀을 드리고 포스팅을 한다. 🎈 문제 간단하게 이 분의 말은 로직 작성 중 에러가 나는 부분이 있는데 그게 뭔지 도저히 모르겠다는 말... 그리고 stream을 사용하셨는데 이게 문법적으로 상관없는지.. 를 물어보셨고 나는 stream의 foreach 통해서 add해도 괜찮지만 stream의 원래 사용 목적을 생각하..

Languege/Java & Spring

[JPA] DynamicUpdate 안되는 문제

현재 JPA를 사용하며 간단한 사이드 프로젝트를 만들고 있던 중 리펙토링을 진행하고 있는데 update시 DynamicUpdate가 걸려있는 entity를 update 할 때 문제가 발생하였습니다. 🎈 Paper Entity @NoArgsConstructor(access = AccessLevel.PROTECTED) // new 클래스() 제한 @ToString(callSuper = true) @EqualsAndHashCode @Getter @Entity @DynamicInsert // null로 들어가야 하는 경우 대응(기본값) @DynamicUpdate // 변경한 필드만 대응 @Table(name = "tbl_paper") public class Paper { @Id @GeneratedValue(st..

mntdev
MNT_Dev