본문 바로가기

전체 글

(156)
[JPA] Entity 칼럼 상속 테이블을 설계하다보면 칼럼이 많이 중복되는 경우가 있을 수 있다. (정규화를 할 수 없는 경우, 예를 들어 히스토리 성 테이블 같은 경우) 테이블과 매핑하지 않고 부모 클래스를 상속받는 자식 클래스에게 매핑 정보(엔티티 칼럼)만 제공하고 싶으면 @MappedSuperclass를 사용하면 된다. @MappedSuperclass는 비유를 하자면 추상 클래스와 비슷한데 @Entity는 실제 테이블과 매핑되지만 @MappedSuperclass는 실제 테이블과 매핑 되지 않는다. 단순한 상속 목적으로 사용한다. @MappedSuperclass @Data public abstract class BaseEntity { @Id @GeneratedValue private Long id; private String nam..
JPA 테이블 updated_at이 갱신안되는 문제 DDL에 updated_at을 다음과 같이 설정해주었다. `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 하지만, JPA로 데이터를 갱신할 때 updated_at이 갱신안되는 문제가 있었다. JPA로 UPDATE할 때는 보통 findBy~ 로 객체를 조회하고 save를 하는 형식으로 필드를 업데이트하는 형식인데, 객체를 조회할 때 당연히 updated_at도 함께 조회된다. 그럼 이 때 save를 할 때 조회했던 updated_at이 set되서 save가 되므로, 스키마 단에서 ON UPDATE을 해주었더라도 이미 set하서 save하므로 이전에 조회했던 updated_at이 저장됐던 것이다. 해결법은..
@RequestParam 날짜형식 LocalDate 매핑 API에서 Param 타입을 LocalDate로 받았을 때 문제가 발생했다. @RequestBody 로 받았을 때는 Json으로 파싱을 하므로, 보통 전역적으로 걸려있는 Json Serializer 에서 yyyy-MM-dd 포맷 String을 자동으로 LocalDate로 파싱해주는 설정을 해준다. 하지만 @RequestParam 을 사용할 때는 쿼리스트링으로 Param을 받으므로 전역적으로 걸려있는 Json Serializer가 작동하지 않는다. 그렇다는 말은, 쿼리스트링으로 Param이 들어올 땐 String이 LocalDate로 변환되지 않는다는 말이다. 그래서 @RequestParam 어노테이션 앞에 @DateTimeFormat(pattern = "yyyy-MM-dd") 을 붙여서 해결할 수 있다...
mysql auto_increment 초기화 데이터베이스 테이블 데이터를 모두 삭제한 후인덱스 자동증가를 다시 1로 초기화하려면 다음과 같은 명령어 ALTER TABLE tablename AUTO_INCREMENT=1
[SpringBoot] 프로파일(Profile) 설정 Web개발을 하고 배포할 때 로컬 설정과 배포 설정은 다를 수 있다.또한 기능을 테스트할 때의 설정도 다를 수 있다. 하지만 그때마다 properties 설정 파일을 계속해서 수정할 순 없다.이럴 때 프로파일 파일을 만들면 편리하다. application.properties 파일이 있는 위치에서 application-{profile name}.properties와 같이 파일을 생성해주면 된다. 예를 들어 내부 개발 환경인 "local"과 실제 배포 환경인 "production"이 필요하다면 다음과 같이 파일을 만들면 된다.application-local.propertiesapplication-production.properties application.properties 파일은 해당 프로필 파일들이 공통..
[Spring Boot] 스프링부트에서 JSP 사용하기 Java 기반의 Web개발을 할 때 대부분은 Spring Boot를 이용한다. Spring Framework를 기반으로 MVC를 쓸 때와 달리 Spring Boot는 static폴더와 templates폴더가 있어서 리소스 파일이나 템플릿을 폴더에 넣으면 자동으로 경로로 지정되어작동되게 해준다. 그러나 Spring Boot에서 JSP를 사용하려면 따로 설정이 필요하다. 1. 먼저 jasper 라이브러리를 추가해주어야 한다.//JSP compile('org.apache.tomcat.embed:tomcat-embed-jasper') 2. JSP파일은 Spring Boot 기본 templates 폴더 안에서 작동하지 않는다.src/main/webapp/WEB-INF/ 폴더를 직접 생성한 뒤 그곳에 jsp파일을 ..
[JPA] 테이블생성 어디서 할 것인가? JPA를 사용하면서 편한 기능 중 하나는 Query문을 전혀 사용하지 않고도테이블을 생성하고 작성할 수 있다는 것이다. 보통 JPA가 익숙해지기 전까지는 테이블을 자동으로 생성해주는 옵션을 사용한다. 하지만 프로젝트를 진행할 때마다 자동 생성 옵션으로 테이블을 생성할 것인가?아니면 쿼리문을 통해 직접 수동 생성할 것인가? 두가지 옵션 중 고민을 하게 된다. 우선 테이블을 자동 생성했을 때를 알아보자편하게만 보이는 테이블 자동 생성이 운영 중이나 개발 중에 치명적인 오류나 불편함을 초래할 수 있다. 우선 테이블 생성 옵션부터 알아보면 다음과 같다. (설정파일에서 옵션 변경)none : 기본 값이며 아무 일도 일어나지 않는다.create-only : 데이터베이스를 새로 생성한다.drop : 데이터베이스를 d..
git push, pull (fatal: refusing to merge unrelated histories) 에러 원격 저장소를 remote로 설정하고 바로 push를 하면 몇가지 오류가 발생할 수도 있다.예를 들어 아래와 같은 오류 메시지이다.12 ! [rejected] master -> master (non-fast-forward)error: failed to push some refs to 'https://github.com/huusz/test.git' rejected : push가 거부되었다.master -> master : 로컬 저장소의 master 브랜치의 변경 사항을 원격 저장소의 master 브랜치에 반영하려 했는데non-fast-forward : 원격 저장소의 master 브랜치가 로컬 저장소의 버전보다 이전 버전이 아니다. 라는 의미이다. 즉, 오류가 발생한 원인은 github에서 새로운 프로젝트를..