Spring 16

[Security] 현재 로그인한 사용자 정보 가져오기

문제 회원가입 시 인증 메일을 전송하고, 인증 키를 데이터베이스에 보관한다. 인증 API는 URL은 /member/auth/{key}다. {key}와 회원 DB에 저장된 key를 비교하는 절차를 거쳐야 한다. 회원이 인증 API에 요청했을 때 서버는 어떤 회원의 요청인지 알아야 한다. 알아본 방법은 총 세 가지다. 첫 번째 방법 Principal 보다시피 java.security가 제공하는 Pincipal은 로그인한 회원의 아이디(getName())정도만 받아올 수 있다. 회원 아이디로 데이터베이스에서 회원 정보를 불러와서 회원이 가진 인증 키를 사용할 수 있다. 제법 쓸만해 보이지만 한 번 더 셀렉트 해야 한다는 단점을 가지고 있다. 두 번째 방법 @AuthenticationPrincipal 이 애노테..

Spring 2021.01.23

머스태치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