서버가 이상하다?! 최근에 만든 토이 프로젝트를 외부에서 접속해 보고 싶어서 스마트폰에서 접속을 시도했다. 화면을 제대로 나왔지만 서버에서 데이터를 제대로 가져오지 못 하는 것 같았다. 이 때까지만 해도 오라클 프리티어 인스턴스에 젠킨스 + 서버 + DB가 동시에 실행 중인 상태라 리소스 부족으로 DB가 비정상 종료 됐다고 생각했다. 해킹을 당했구나!! 예상대로 DB는 inactive 상태였다. DB를 다시 켰지만 데이터가 제대로 나오지 않았다. DB에 직접 접속해서 DB를 열어 보았다. 내가 만든 DB는 없어지고 RESTORE_DATA_...의 DB가 생성되어 있었다. 내용을 조회해 보니 대략 "데이터를 복구하고 싶으면 0.08 BTC를 달라"는 내용의 글이 들어 있었다. 구축한지 며칠도 되지 않아서 ..
정규화란? 정제되지 않은 데이터(표)를 관계형 데이터베이스에 어울리는 표로 만들어 주는 방법 제1정규화(1NF) : 각 컬럼이 단일 값을 가져야 한다. Unnoramalized form에서 SELECT * FROM topic WHERE tag = 'free' 또는 SELECT * FROM topic ORDER BY tag와 같은 쿼리를 하려고 할 때 문제점가 발생한다. 아래와 같이 표를 수정하면 제1정규화을 만족할 수 있지만 정보의 중복이 발생하거나 테이블 구조를 변경해야 하고 컬럼을 사용하지 않는 낭비가 발생할 수 있다. Topic과 Tag의 관계는 카디널리티가 M:N이다. M:N은 테이블을 나누는 것으로 끝나지 않고 매핑 테이블을 만들어 주어야 한다. topic의 title과 tag의 id를 키로 가..
Entity Manager Factory Entity Manager를 만드는 공장 만드는 비용이 크기 때문에 애플리케이션 전체에서 하나만 만들어서 공유하도록 설계 Entity Manager 만드는 비용이 거의 들지 않는다. 여러 스레드가 동시에 접근하면 동시성 문제가 발생하므로 스레드 간에 절대 공유하면 안 된다. 영속성 컨텍스트(persistence context) Entity Manager를 생성할 때 하나 만들어진다. Entity Manager를 통해 영속성 컨텍스트에 접근하고 관리한다. 영속성 컨텍스트는 Entity를 식별자 값으로 구분하기 때문에 식별자 값이 반드시 있어야 한다. transaction을 commit하는 순간 영속성 컨텍스트에 저장된 entity를 데이터베이스에 반영한다.(flus..
DB 접속 mariadb –h호스트명 –uDB계정명 –p 데이터베이스이름 ex) mariadb -h 127.0.0.1 -u connectuser -p connectdb root 계정은 설치시 입력한 비밀번호 Database 생성 create database DB이름; 권한 부여 grant all privileges on db이름.* to 계정이름@'%' identified by '암호'; flush privileges; db이름 뒤의 * 는 모든 권한을 의미. @'%'는 어떤 클라이언트에서든 접근 가능하다는 의미이고, @'localhost'는 해당 컴퓨터에서만 접근 가능하다는 의미. flush privileges는 DBMS에게 적용을 하라는 의미. db 종료 exit or quit 현재 버전과 날짜 구하..