생성 시간과 수정 시간을 상속만으로 간단하게 추가할 수 있도록 한다. BaseEntity @EntityListeners(AuditingEntityListener.class) 해당 클래스에 Auditing 기능을 추가해준다. (Jpa가 자동으로 시간 등을 기록해주는 기능) MappedSuperclass 해당 클래스 상속 시 createdAt과 updatedAt을 칼럼으로 인식하게 한다. SpringApplication에 @EnableJpaAuditing을 적용하면 활성된다. @Getter @EntityListeners(AuditingEntityListener.class) @MappedSuperclass public abstract class BaseEntity { @CreatedDate @Column(up..
작년에 프로젝트를 진행할 때는 각 서비스와 컨트롤러 단에서 if로 체크해서 예외처리를 해줬다. 불편하다고 생각하고는 있었는데 전체를 다른 방식으로 바꿀 정도로 불편한건 아닌거 같아서 그대로 사용하다가 올해 프로젝트를 새로 하면서 전역 예외 처리를 사용하면서 이 방식에 대해 알게되었고, 지금 새로 시작한 프로젝트에서 전역 예외 처리를 구현해서 티스토리에 정리한다. 체크 예외, 언체크 예외 체크 예외 컴파일러가 처리하는 RuntimeException을 상속받지 않는 예외로 이를 처리하지 않으면 CompileError가 발생한다 (IOException, SQLException) 언체크 예외 RuntimeException을 상속받는 예외로 예외처리가 필수는 아니며 Transaction 롤백 대상이다. (비즈니스..
3월에 시작한 프로젝트부터 공통 response를 구현해 사용했고 마침 새로운 프로젝트를 진행하면서 조금 변형하는 김에 티스토리에 정리하고자 한다. 사실 이전까지는 프론트에게 response를 넘겨줄 때 포멧을 생각하지 않았다. 그냥 응답 data가 잘 보내지면 그것에 만족하는 삶을 살았는데 생각해보니 data 말고도 넘겨주면 좋은 것들이 있었고, 특정 포멧으로 모든 response를 보내면 더 통일감이 있을 것 같았다. Json 포멧 성공과 실패 상황일 경우에 상태를 알려주는 status, response code 값, message, data, timestamp를 항상 같은 형식으로 보내주게끔 했다. 사실 이전 프로젝트에서는 code 값을 httpStatus code로 사용했는데 성공과 실패일 경우에..
문제 https://www.acmicpc.net/problem/3190 3190번: 뱀 'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임 www.acmicpc.net 사과를 먹으면 몸이 길어지는 뱀을 이동시키면서 자신의 몸에 닿거나 벽에 닿으면 종료되는 게임의 끝나는 시간을 구하는 문제였다. 문제 풀이 뱀의 머리가 먼저 이동하고 꼬리와 닿는지 확인 후에 꼬리를 이동해야 했고, 범위 지정을 N보다 클 때만 break하도록 했는데 이부분을 나중에 깨달아서 시간이 조금 걸렸다. 전체 map이 있고, 사과가 있다면 2, 뱀이 있으면 1, 아무것도 없으면 0으로 지정했다..
문제 구현 문제로 NxN 자물쇠를 MxM 열쇠로 푸는 문제였다. https://school.programmers.co.kr/learn/courses/30/lessons/60059 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 풀이 두 번에 걸쳐 문제를 풀었는데 처음에는 열쇠를 4번 회전하고, 각각의 상황에서 dfs를 이용해 한 칸씩 옮겨가며 unLock을 확인해 주도록 구현했는데 시간 초과로 인해 60점이 나와서 다른 방법으로 다시 풀었다. dfs보다 훨씬 간단한 방법이었는데, N+(2*M) 사이즈의 비교용 map을 만들어 가운데에 자물쇠를 놓고 열..
docker-compose.yml으로 빌드 (image 변경) docker-compose up docker-compose up -d --force-recreate --build 안쓰는 docker image, container 전체 삭제 docker system prune docker image 이름, 태그 변경 docker image tag [변경할 이미지] [바꿀 이름, 태그] docker push docker push [docker hub에 올릴 이미지 이름] 그 외 로그인, pull docker login docker pull [이미지 이름] pull 할 이미지는 public이거나 private일 경우 권한을 가지고 있어야 접근 가능(login)하다.
static을 사용하면 해당 필드는 Heap 영역이 아닌 Static 영역에 할당되며 프로그램이 종료될 때까지 프로그램이 메모리에 올라와 있는 동안 계속 존재하게 되어 시스템에 엄청난 부하를 주고 성능 이슈를 유발하게 된다. final 까지만 써서 재할당이 일어나지 않게만 해주고 멤버 필드에 static은 되도록이면 사용하지 말것! + util은 static으로 만드는게 좋다고 한다. 참고 링크 https://gf0308.tistory.com/m/14 [Spring] 스프링에서 멤버 필드에 의존성 주입을 표현할 때 'final'은 괜찮지만 'static final'은 안되는 (참조: https://djkeh.github.io/articles/Why-should-final-member-variables-b..
원래 하던데로 mySQL 정보를 properties에 저장하고 실행했는데 public key retrieval is not allowed ... 라는 오류가 발생했다. 뭔가 했더니 8.0 이후 버전부터는 jdbc 주소에 allowPublicKeyRetrieval=true의 설정까지 해줘야 한다고 한다.