개요프로젝트를 진행하던 중 nginx를 이용하여 웹 서버를 만들면서 SSL/TLS를 적용한 방식을 설명한다.프로젝트의 서버 구조는 다음과 같다.netlify에 프론트를 배포하고 백엔드와의 통신을 위해 HTTPS를 적용하기로 했다!본론SSL/TLS(HTTPS 적용) 절차letsencrypt로부터 인증서를 발급받는다.발급받은 키(인증서)를 nginx에 적용한다.nginx에 스프링 부트로 리버스프록시를 설정한다.인증서를 발급받기 전에 해당 인증서를 발급받기 위한 준비를 먼저 하자!0. 인증서 발급 전 준비 (nginx 실행)sudo docker run -d --name nginx --network {네트워크명} -p 80:80 -p 443:443 \ -v /home/ubuntu/conf:/etc/ngin..
Spring Boot
개요 QueryDSL을 통해서 JPQL을 동적으로 구성할 수 있는 법을 공부하고 Spring Boot에 적용하는 방법을 찾아보고 적용시킨 방법을 기록한다. QueryDSL은 JPA에서 공식적으로 제공하는 JPQL 빌더가 아니기 때문에 따로 구성해주어야 한다. 적용시킨 Spring Boot 버전과 의존성들은 다음과 같다. version : 3.2.4 java version : 17 Spring Data JPA lombok MariaDB Driver Spring MVC 환경이 다르면 문제가 발생할 수 있다는 점, 안된다면 댓글을 남겨주세요 본론 Gradle에 QueryDSL 의존성 추가 // query dsl 버전 명시해야 jakarta사용 (javax X) implementation 'com.queryds..
개요 프로젝트를 진행하던 도중 Spring JPA를 사용해서 데이터베이스 테이블을 일대다 관계를 만들어야 했지만 방법을 몰라 알아보고 만든 것을 작성하겠다. 먼저 Spring JPA는 자바에서 사용하는 객체의 개념과 데이터베이스에서 사용하는 테이블간의 다른 차이점을 해소시켜서 매핑해주는 API이다. 즉, JPA가 하고자하는 방향은 객체지향적인 방법으로 데이터베이스를 만드는 것이다. 따라서 데이터베이스 테이블의 관계도 객체지향적인 개념으로 접근해야 했지만 이해하기가 정말 어려웠다. 연관관계 단방향과 양방향 먼저 JPA에서 테이블의 연관관계를 만들어주는 방법은 단방향과 양방향으로 나뉜다. 단방향 class A{ private B b; } class B{ private int number; } 단방향 : 객체..
원인 서비스 계층의 테스트를 작성하면서 assertJ로 테스트를 작성했다. Service계층은 DAO에 종속되어 메소드를 사용하기 때문에 DAO를 통해서 새로 만들어진 객체를 삭제해주어야 했고 DAO를 통해서 작업을 수행한다. 따라서 Service의 단위 테스트는 DAO에 종속되어 있었고 DAO 빈을 가져와서 일일히 값을 삭제하면서 테스트를 진행했다. 이런 불편한 점을 제거하고 단위 테스트가 DAO에 종속되지 않도록 만들기 위해서 Mockito 프레임워크를 적용해서 DAO에 대한 Mock 객체를 만들어 사용했다. @SpringBootTest public class AuthServiceTest { private UserDTO user1; private UserDTO user2; private UserDTO..
JWT를 모르시는 분들은 지난 포스트 ()를 간단하게 읽고 와주세요! JWT는 Header, Payload, Signature 3가지로 나뉩니다. Header는 토큰의 타입과 Signature에 사용된 서명 알고리즘을 정의합니다. Payload는 Registered, Public, Private 3가지 클레임으로 나뉩니다. 각각은 여러 정보들을 담고 있습니다. Signature는 Base64Url로 인코딩된 헤더, 페이로드를 합쳐 SecretKey로 서명된 값을 저장합니다. 이번 포스트에서는 Spring Boot에서 로그인을 위한 JWT를 발급하는 방법에 대해서 살펴보도록 하겠습니다. Dependency 저는 https://github.com/jwtk/jjwt를 사용하여 JWT를 발급하였습니다. MAVE..