ALL Post 204

DBMS 개요

데이터베이스와 DBMS 데이터베이스가 단순히 데이터를 저장하는 공간을 의미한다면, DBMS(Database Management System)는 그 공간을 운영하는 소프트웨어라고 할 수 있다. DBMS의 특징 데이터의 무결성 데이터에 오류가 나는 것을 방지하기 위해 데이터베이스는 제약 조건Constraint이라는 특성을 가진다. 이를테면 학생을 데이터화 할 때, 학번은 유일해야 한다. 같은 학번을 가진 학생은 존재할 수 없다. 이럴 때, '학번'은 제약조건이 된다. 이 제약조건을 기준으로 데이터를 저장해두면, 오류가 발생할 확률이 줄어들 것이다. 데이터의 독립성 데이터베이스의 크기를 변경하거나 데이터 파일의 저장소를 변경하더라도, 기존에 작성된 응용프로그램은 전혀 영향을 받지 않아야 한다. 즉, 서로 의존..

MariaDB 2020.09.28

Ubuntu 20.04 IP고정

IP가 자꾸 바뀌는 바람에 EC2서버에 접속도 안 되고 AWS보안 설정도 다시 일일이 바꿔야 했다. IP고정하는 게 귀찮아서 한 번은 그렇게 했는데 또 같은 일이 발생했다. 귀찮다고 미뤘다가 더 귀찮은 일을 하게 된 셈이다. 나중에 같은 작업을 해야 할 때 다시 검색하기 귀찮아서 정리해둔다. 1. ip확인 $ ip address 또는 $ ifconfig 명령어로 이더넷 이름과 아이피를 확인한다. 참고로 ifconfig를 사용하기 위해서 먼저 설치해야 한다. ifconfig설치 $ sudo apt-get install net-tools 빨간색 네모로 표시한 곳이 이더넷 이름이다. 이것을 확인한다. ip는 대역대만 알면 된다. 추가로 $ ip route 해당 명령어로 gateway주소도 확인한다. IP고정 ..

infra 2020.09.25

머스태치Mustache

템플릿 엔진이란? 템플릿 엔진이란, 지정된 템플릿 양식과 데이터를 합쳐 HTML문서를 출력하는 소프트웨어를 말한다. JSP, Freemarker, React, Vue 모두 지정된 템플릿과 데이터를 이용해서 HTML을 생성하는 템플릿 엔진이다. 다만 JSP, Freemarker는 서버 템플릿 엔진이고, 리액트나 뷰는 클라이언트 템플릿 엔진이다. 서버에서 작동하느냐, 클라이언트(브라우저)에서 작동하느냐, 이 차이가 둘을 구분하는 기준이다. 머스태치란? 템플릿 엔진이다. 많은 언어를 지원해서, 어떤 언어로 다루느냐에 따라 서버 템플릿 엔진이기도 하고, 클라이언트 템플릿 엔진이기도 하다. 다른 템플릿 엔진의 단점 JSP, Velocity 스프링부트에서 권장하지 않음 Freemarker 템플릿 엔진치고 기능이 과..

Spring 2020.09.16

JPA Auditing으로 생성 시간/수정시간 자동화

JPA Auditing으로 생성 시간/수정시간 자동화 Java8버전부터 LocalDate와 LocalDateTime이 등장했다. LocalDate가 나오기 전 Date나 Calendar클래스에는 다음과 같은 문제가 있었다. 불변 객체가 아니어서 멀티 쓰레드 환경에서 문제가 발생할 수 있었다. Calendar는 월(month) 설계가 잘못 되었다. 10월을 나타내는 Calendar.OCTOBER의 숫자 값이 10이 아니고 9였다. 이러한 문제점을 LocalDate가 해결했다. JPA Auditing사용하기 @Getter @MappedSuperclass @EntityListeners(AuditingEntityListener.class) public class BaseTimeEntity { @CreatedDa..

Spring 2020.09.15

등록/수정/조회 API

이전 글에서 이어지는 글입니다. 등록/수정/조회 API 해당 API를 만들기 위해 3개의 클래스가 필요하다. Request 데이터를 받을 DTO API 요청을 받을 Controller 트랜잭션, 도메인 기능 간의 순서를 보장하는 Service 서비스 계층에서 비즈니스 로직을 처리해야 한다는 생각은 오해다. 서비스는 트랜잭션, 도메인 간 순서만 보장한다. DTOs DTO(Data Transfer Object)는 계층 간 데이터 교환을 위한 객체를 말한다. Domain Model 도메인이라 불리는 개발 대상을 모든 사람이 동일한 관점에서 이해할 수 있고, 공유할 수 있도록 단순화시킨 것을 도메인 모델이라고 한다. 택시 앱이라면 배차,탑승,요금 등 모두 도메인이 될 수 있다. @entity가 사용되는 영역 역..

Spring 2020.09.14

Spring Boot 게시판 만들기

참고 도서 : 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 Spring Boot 게시판 만들기 요구사항 분석 기능 조회 등록 수정 삭제 회원 구글 / 네이버 로그인 로그인한 사용자만 글 작성 본인이 작성한 게시물 권한 관리 사용 기술 Spring 2.3.3 H2 JPA Hibernate Entity를 만들 때 참고 사항 PK는 Long타입으로 잡고 Auto_increament로 잡는 게 좋다. 복합 키나, 유니크 키 기타 다른 키를 PK로 잡을 경우 아래와 같은 문제가 발생할 수 있다. FK를 맺을 때 다른 테이블에서 복합키 전부를 갖고 있거나, 중간 테이블을 하나 더 둬야 하는 상황이 발생한다. 인덱스에 좋은 영향을 끼치지 못한다. 유니크한 조건이 변경될 경우, PK전체를 수정해야 할 수도 있다. ..

Spring 2020.09.14

Spring Data JPA

JPA 스프링 레거시 프로젝트에서는 MyBatis를 이용해 Mapper를 만들고 직접 쿼리를 만들었다. 쿼리를 만들 때는 그 쿼리가 제대로 작동하는 지, 우선 해당 데이터베이스에서 직접 테스트하고, 코드에 적용했다. 간단한 CRUD 정도는 문제가 되지 않았지만, 그것도 쌓이면 나름 시간이 걸리는 일이다. 무엇보다 여러 개의 테이블을 join해서 작업하는 경우에는 쿼리를 짜는 데에만 꽤 오랜 시간이 걸렸다. 책에서도 "실제 개발 시간보다 SQL을 다루는 시간이 더 많았"다. "테이블 모델링에만 집중하고 객체를 단순히 테이블에 맞추는 기형적인 형태"였다고 설명한다. 내가 생각하기에 데이터는 거의 모든 것이다. 복잡하게 생각할 것도 없이 자명하다. 객체를 이용해 데이터를 운반하지만, 객체는 할 일을 마치면 가..

Spring 2020.09.14

스프링 시큐리티 어노테이션

스프링 시큐리티 어노테이션 주로 사용하는 세 가지 어노테이션 @Secured 스프링 시큐리티 초기부터 사용했다. ()안에 'ROLE_ADMIN' 같은 문자열 또는 문자열 배열을 이용한다. @PreAuthorize, @PostAuthorize 스프링3버전부터 지원한다. ()안에 표현식을 사용할 수 있어서 최근에는 더 많이 사용한다. http.authorizeRequests() .antMatchers("/sample/all").permitAll() .antMatchers("/sample/member").access("hasRole('ROLE_MANAGER')") .antMatchers("/sample/admin").access("hasRole('ROLE_ADMIN'..

Spring legacy 2020.09.13

JSP에서 스프링 시큐리티 사용하기

JSP에서 스프링 시큐리티 사용하기 스프링 시큐리티 관련 정보를 출력하려면 시큐리티 관련 태그 라이브러리를 선언해야 한다. 태그는 과 principal이라는 이름의 속성을 사용한다. 사용 예제 admin.jsp ... principal : MemberVO : 사용자 이름 : 사용자 아이디: 사용자 권한 : .. ...결과 표현식을 이용하는 동적 화면 어떤 페이지에서, 일반 사용자로 로그인했을 때 보여지는 내용과, 관리자로 로그인 했을 때 보여지는 내용이 달라야 한다면(이를테면 관리자용 메뉴 같은 것) 표현식을 이용하여 동적으로 구성할 수 있다. 표현식 설명 hasRole([role]) hasAuthority([authority]) 해당 권한이 있으면 true hasAnyRole([role,role2]) ..

Spring legacy 2020.09.13