본문 바로가기

전체 게시물

(200)
[JPA] Auditing을 사용하여 시간을 저장하는 방법 DB 컬럼에 누가, 언제 작업을 하였는지에 대한 기록을 반드시 남겨야 한다. 그렇지 않는다면 나중에 문제가 발생하였을 때 언제 문제가 발생하였는지 추적하는 게 매우 어렵게 된다. 그렇다면 엔티티를 다음과 같이 설계를 해야할 것 같다. @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Comment { private String content; // 작성 내용 private LocalDateTime createdDate; // 작성 시간 private LocalDateTime lastModifiedDate; // 수정 시간 } 댓글을 등록한 시간, 수정한 시간을 저장하는 필드가 있다. 이것은 좋은 방법이라고 할 수..
[JPA-Error] Table [DB명.Table명] doesn't exist 해결방법 문제 발생 스프링부트에서 테이블을 생성하여 값을 저장하려고 하면 다음과 같은 오류가 발생했다. org.springframework.dao.InvalidDataAccessResourceUsageException: could not execute statement [Table 'cicd_db.users' doesn't exist] [insert into users (age,username) values (?,?)]; SQL [insert into users (age,username) values (?,?)] 문제 원인 "Table 'cicd_db.users' doesn't exist" 이부분이 핵심인 듯하다. 나는 "Users" 테이블에 데이터를 삽입하려고 하는데 실제로는 "cicd_db.users" 테이블..
[Network] CNAME 레코드와 A 레코드란? A 레코드 A 레코드는 도메인 주소와 서버의 IP 주소를 직접 매핑시키는 방법입니다. naver.com 으로 요청하게 되면 DNS 테이블에 저장된 naver.com을 찾아 223.130.195.200 에 요청하게 됩니다. NAME TYPE VALUE naver.com A 223.130.195.200 장점 도메인에 직접 IP 주소를 설정하여, 도메인을 해당 IP 주소로 연결할 수 있다 CNAME 레코드보다 빠른 조회 시간을 가진다 서브 도메인에 대한 설정이 자유롭다 단점 IP 주소가 변경되면 A 레코드를 직접 업데이트해야 하므로 관리가 번거롭다 CNAME 레코드 캐노니컬 네임 레코드(Canonical Name record)를 줄여서 CNAME 레코드라고 합니다. CNAME은 하나의 도메인 네임을 다른 이름..
[Docker] 도커 볼륨 Statelss 한 도커 컨테이너 도커 컨테이너는 상태를 저장하지 않는 Stateless 특징을 갖습니다. A 이미지로 컨테이너를 실행하다가 삭제하고 다시 컨테이너를 생성하면 이전의 변경사항이 모두 삭제됩니다. 왜냐하면 읽기 전용인 이미지를 컨테이너로 생성하면 R/W 컨테이너 레이어가 생성됩니다. 해당 컨테이너에서 변경사항은 R/W 컨테이너 레이어 위에 추가되기 때문에 컨테이너를 삭제할 시에 변경사항이 모두 삭제됩니다. 예를 들어 Nginx 이미지로 컨테이너를 실행하고, 해당 컨테이너에서 변경사항이 발생하였습니다. 컨테이너에서의 변경사항을 기존의 이미지에 변경사항을 적용하게 된다면 해당 이미지를 사용하는 모든 컨테이너에 변경사항을 적용해야 합니다. 이러한 방식은 stateful 한 방식으로 여러 개의 ..
[Docker] 도커 네트워크 네트워크 기본을 기반으로 도커에서의 네트워크를 알아보겠습니다. Docker에서는 가상 네트워크 개념을 사용합니다. 가상 네트워크란 논리적으로 구성된 네트워크로, 하나의 물리적 네트워크 인터페이스를 기반으로 여러 개의 가상 네트워크를 생성할 수 있습니다. 가상 네트워크는 VLAN(Virtual LAN)과 같은 개념으로 사용될 수 있습니다. 도커도 가상 네트워크 개념을 사용합니다. 공인망으로부터 분리된 사설망 네트워크가 만들어지고, 사설망 내부에는 가상의 네트워크가 존재합니다. 네트워크 브릿지 위 사진을 보면 가상 네트워크 내부에 네트워크 브릿지가 존재합니다. 네트워크 브릿지란 도커 컨테이너 환경에서 네트워크를 관리하기 위한 기능입니다. 호스트와 컨테이너 간의 통신을 가능하게 하며, 컨테이너 간의 통신 또..
[Docker] 네트워크 기본 공인 IP와 사설 IP 인터넷에서 컴퓨터 간에 데이터를 주고받기 위해서는 IP라는 통신 프로토콜이 필요합니다. IP는 전송 계층과 네트워크 계층 사이에서 데이터를 패킷 형태로 분할하고, 각 패킷에 출발지 및 목적지의 IP 주소를 지정합니다. 각 컴퓨터마다 고유한 IP 주소를 갖기 때문에 이를 통해 데이터를 주고받는 컴퓨터를 고유하게 식별할 수 있습니다. 공인 IP 공인 IP는 인터넷 서비스 제공자(ISP)로부터 할당되는 고유한 IP 주소입니다. 고유한 IP 주소이기 때문에 전 세계적으로 다른 인터넷 사용자들과 통신할 수 있습니다. 사설 IP 사설 IP는 내부 네트워크에서 사용되는 IP 주소입니다. 인터넷에 공인되지 않으며, 로컬 네트워크 내에서만 유요한 IP 주소입니다. 일반적으로 가정이나 사무실의 로컬..
[Docker] 이미지 빌드를 위한 Dockerfile 지시어 이미지를 빌드하기 위해서는 build 명령어를 사용해야 합니다. 또한 빌드를 하기 위해서는 Dockerfile을 필요로 합니다. Dockerfile을 사용하여 이미지로 빌드할 때 사용하는 명령어에 대해서 알아보겠습니다. Dockerfile 빌드 기본적으로 Dockerfile을 빌드하기 위해서는 다음 명령어를 입력해야 합니다. Dockerfile이 존재하는 경로를 찾아 원하는 이미지명을 지정하여 이미지를 생성할 수 있습니다. $ docker build -t 이미지명 Dockerfile경로 위의 명령어는 빌드를 할 때 필요로 하는 도커파일의 이름을 Dockerfile로 인지하고 있습니다. 따라서 별도로 도커파일의 이름을 지정해주지 않았습니다. 그러나 도커파일명이 항상 Dockerfile 일 수가 없습니다. ..
[Docker] 이미지 커밋와 이미지 빌드 새로운 이미지를 생성하는 방식으로 commit과 build 2가지 방법이 존재한다. Commit 방식은 현재 컨테이너의 상태를 이미지로 만드는 것이고, Build 방식은 Dockerfile을 만들고 이것을 이미지로 만드는 방식이다. 이미지 Commit Commit 방식은 컨테이너의 현재 상태를 이미지로 만드는 방식이다. 즉 컨테이너의 변경 사항을 이미지로 저장하는 방식이다. 컨테이너에서 변경된 파일 시스템의 스냅샷을 촬영하여 새로운 이미지를 생성한다. 여기서 스냅샷이란 해당 컨테이너의 파일 시스템과 생타를 특정 시점에서 저장하는 것을 말한다. 해당 시잠의 상태를 기록함으로써 컨테이너 상태를 복원하거나 이미지로 저장할 수 있다. Nginx 이미지로 생성한 컨테이너에 대해서 commit을 수행하는 과정은 다..