목록개발 공부/Spring (10)
Just Do IT!
월요일부터 JWT 실습을 하고 있는데 token을 두 가지로 발급하는 이유에 대해 정리해보고자 한다. JWT 토큰 인증 방식어제 블로그글에도 정리했지만 JWT 토큰 인증 방식은 비밀키로 암호화를 해서 안전하게 통신한다.JWT 토큰이 유저의 신원이나 권한을 결정하는 정보를 담고 있는 데이터 조각이니까. JWT는 헤더, 페이로드, 서명 세 가지 정보를 base64로 인코딩한 값을 콤마('.')를 사이에 두고 이어붙인 형태로 생성된다.헤더: JWT 서명에 사용된 알고리즘을 담는다.페이로드: 토큰에 담긴 주체(Subject), 만료일(exp), 생성자(iss) 등을 담는다.시그니처: 헤더와 페이로드를 각각 base64로 인코딩한 후 콤마로 이어붙인다. 그리고 이를 헤더에 명시된 알고리즘으로 암호화한 값을 담는다..
토큰 기반 인증이란?토큰 기반 인증은 토큰을 사용하는 방법이다.토큰 : 서버에 요청을 받을 때, 요청을 보낸 클라이언트를 구분하기 위한 유일한 값서버가 토큰을 생성해서 클라이언트에게 제공하면, 클라이언트는 해당 토큰을 보관하고 있다가 여러 요청을 토큰과 함께 보내게 된다.그러면 서버는 토큰을 보고 해당 클라이언트가 유효한 사용자인지 검증하고, 요청을 처리해주게 된다. JWT?발급받은 JWT를 이용해 인증을 하려면 HTTP 요청 헤더 중에 Authorization 값에 Bearer + JWT 토큰값을 넣어서 보내야 한다.JWT는 .을 기준으로 헤더(Header), 내용(Payload), 서명(Signature)으로 구성되어 있다.JWT 구성헤더 : 토큰의 타입과 해싱 알고리즘을 지정하는 정보내용 : 토큰과..
작년 이맘때쯤, 멋쟁이 사자처럼 동아리에서 팀 프로젝트를 진행했었다.그 때 나는 프론트엔드 팀원으로 참여했었고, 백엔드와 협업이 처음이라서 삽질을 많이 했었다.그리고 그때, jar 파일에 대해 처음 알고 postman을 써보고 등등...그런데 기간 내에 프로젝트를 완성했어야 하는 터라 야매(?)로 라이브 코딩을 하듯이 백엔드 팀원들과 소통했었다. https://daydream-sy.tistory.com/274 백엔드 서버와 연결하기 (jar 파일 공유)멋쟁이 사자처럼 팀 프로젝트를 진행하면서 처음으로 백엔드 서버와 연동해서 프로젝트를 했었다. 나중에 비슷한 프로젝트를 할 때도 여기저기 흩어진 메모장을 보면서 진행할 것 같아서 블로daydream-sy.tistory.com 이 글을 보면,내가 얼마나 백엔드..
이제 단순 CRUD가 아니라 로그인, 회원가입 기능을 배우고 있는데...spring security에 들어가니까 너무 복잡하고 강의 내용을 그대로 따라치고 있는 것 같아서 내 나름대로 정리를 해보려고 한다.기본 개념부터 정리하기로.... Spring Security란?스프링 기반의 애플리케이션의 보안(인증과 권한, 인가 등)을 담당하는 스프링 하위 프레임워크즉, 인증(Authenticate)과 인가(Authorize)를 담당하는 프레임워크주로 서블릿 필터(filter)와 이들로 구성된 필터체인으로의 구성된 위임 모델을 사용한다. 간단 용어 정리인증(Authentication) : 사용자가 누구인지 확인하는 과정인가(Authorization) : 특정 부분에 접근할 수 있는 권한을 확인하는 과정접근 주..
JPA를 공부하면서, 확실히 그냥 mybatis를 사용하는 것보다 훨씬 편하다는 걸 느낀다.그렇지만 정해진 시간 내에 진도를 나가야 하니까 너무 정신 없어서...공부가 더 필요함을 느끼기도 한다(ㅋㅋㅋ)아무튼,오늘 블로그 CRUD 실습을 하면서 새로운 걸 배우게 되어서 블로그에 기록을 하려 한다.어차피 계속 테이블을 생성하면서 쓸 거 같아서... 우선!데이터를 생성하거나 수정할때 생성일과 수정일을 항상 포함시켜서 테이블을 설계한다.수업에서 배웠던 실습을 예시로 들어서 설명해보자면,글을 작성할 때 title, content, created_at, updated_at이 필요할 것이다.(id는 필수이므로 굳이 언급하지 않겠다.) 그러면 테이블에는idtitlecontentcreated_atupdated_atd..
JPA package 구조는 위의 그림과 같다.dao 역할을 repository가 하는 것이다. MyBatis package이전에 배웠던 mybatis에서는 mapper를 사용하기 때문에 따로 dao를 만들지 않고 mapper package를 생성했었다. package com.kosta.mapper;import java.util.List;import org.apache.ibatis.annotations.Mapper;import com.kosta.dto.User;@Mapperpublic interface UserMapper { void save(User user) throws Exception; void deleteById(int id) throws Exception; User findByI..
수업 실습 중에, 이미지를 화면에 뿌려주고 싶었다.file_tbl에 따로 fileList를 저장해두었고 해당 글에 포함된 이미지 파일들이 나오게 하고 싶은 것이었다. 우선 관련 내용을 설명해보자면 다음과 같다.(참고로 thymeleaf를 사용하여 웹 페이지를 구현하고 있다.) 글을 작성하면 해당 글이 community_tbl에 저장된다.글에 포함된 이미지들은 따로 file_tbl에 저장된다.이미지가 저장될 때 이미지가 저장되는 경로도 함께 저장된다.stored_file_path를 통해 파일이 저장된 경로를 알 수 있다.글의 detail page에 들어가면 해당 글의 내용을 볼 수 있다.그 중, 이미지도 함께 구현하려고 한다. 여기서 필요한 게 바로 WebMvcConfigurer이다. WebM..
수업 실습 중에 파일 업로드와 다운로드 기능을 하고 있었다.다운로드 기능 구현하면서 ResponseEntity라는 새로운 객체를 배웠는데, 뭔지 잘 모르겠어서 블로그에 정리해보려고 한다. HTTP(HyperText Transport Protocol)웹서비스에서 보내는 요청 및 데이터의 형식 Client 와 Server 사이에 요청과 응답을 처리하기 위한 규약이다.HTTP 요청의 세 가지 요소Start Linemethod, URL, 그리고 version으로 이루어져 있다. 서버에서 요청을 받아들이는 첫 줄Headers요청에 대한 접속 운영체제, 브라우저, 인증 정보와 같은 부가적인 정보를 담고 있다Body요청과 관련된 json, html과 같은 구체적 내용을 포함한다.HTTP 응답Status LineHTT..
log4jdbc-log4j2란?자바 어플리케이션에서 JDBC 드라이버를 사용할 때 SQL문의 실행 로그를 자동으로 기록해주는 라이브러리이다.MyBatis를 사용하는 경우 Query Formatting을 지원하여 실제 실행되는 쿼리에 대해 문자열로 확인이 가능하다.MyBatis는 내부적으로 JDBC의 PreparedStatement를 이용해서 SQL을 처리한다.따라서 SQL에 전달되는 파라미터는 JDBC에서와 같이 '?' 로 치환되어서 처리된다.SQL 로그를 제대로 보기 위해서는 이 라이브러리를 사용해야 한다.구현체인 Slf4j에서 사용이 가능하며 SQL문을 실행할 때마다 자동으로 로그를 남겨 디버깅과 모니터링을 할 수 있다. 개발 단계에서 SQL문을 편리하게 보거나 중요한 쿼리의 수행을 보기 위해 사용한..
spring을 배우는 과정에서 db를 연동하는데 콘솔에이런식으로 연동되는 걸 볼 수 있었다.그래서 Hikari란 무엇인지, 그리고 정확하게 DB Connection이 무엇인지 정리해보려고 한다. DataSource란?데이터소스(DataSource)는 물리적인 데이터 베이스에 연결하기 위한 팩토리이다.데이터베이스에 연동하기 위해 username, password, url을 사용한다.mySQL을 사용을 예시로 들면, driver class name, url, username, password를 알아야 DB에 연동할 수 있다. DB Connection Pool 일반적인 데이터 연동과정은 웹 어플리케이션이 필요할 때마다 데이터베이스에 연결하여 작업하는 방식인데, 필요할 때마다 연동해서 작업하면 데이..