Programming/Spring, SpringBoot
![](http://i1.daumcdn.net/thumb/C400x400/?fname=https://blog.kakaocdn.net/dn/cZSaOo/btsD4ldXsVX/UYzx0PVOdF4r878nAUINk0/img.png)
![](https://tistory1.daumcdn.net/tistory/6581516/skin/images/no-image.jpg)
JSON (JSON Web Token) 1. JWT - JSON으로 표현된 사용자 정보를 안전하게 주고받기 위한 Token의 일종. - JWT 내부에 사용자 확인 인증정보가 담기며, JWT를 받으면 위변조가 되었는지 알아차릴 수 있기 때문에 Token 기반의 인증 시스템에서 많이 활용. - 상태를 저장하지 않기 때문에 서버의 세션 관리가 불필요!! - 토큰 소유가 곧 인증 >> 여러 서버에 걸쳐서 인증이 가능 cf) 쿠키는 요청을 보낸 클라이언트에 종속됨. / 토큰은 쉽게 첨부 가능(주로 header에) - 로그인 "상태"라는 개념이 사라져서 로그아웃이 불가하다. (기본적으로는.. 로그아웃하려면 프론트에서 토큰 폐기.) header.payload.signature header : 이 JWT의 부수적인 정..
![](http://i1.daumcdn.net/thumb/C400x400/?fname=https://blog.kakaocdn.net/dn/EBg0V/btsD2GvI1jE/JNW7ke3Xz8myx74vkoDkgK/img.png)
![](https://tistory1.daumcdn.net/tistory/6581516/skin/images/no-image.jpg)
1. HandlerInterceptor & Filter - 핵심 기능을 실행하는데 반드시 필요하지는 않지만, 여러 핵심기능에 걸쳐서 동일하게 작동하는 기능이 존재할 수 있다. (ex. 한 메서드가 실제로 실행하는데 얼마나 시간이 걸렸는지 확인하는 메서드.) - 핵심 기능 관리 코드는 건드리지 않으면서 여러 핵심 기능들이 활용할 수 있는 기능! >> 요청과 응답의 전후로 코드를 실행할 수 있는 방법 >> 이것이 바로 HandlerInterceptor & Filter 1) HandlerInterceptor : Spring Framework의 일부분. - DispatcherServlet이 HandlerMethod로 요청을 넘기기 전에 실행. = 컨트롤러를 호출하기 전과 후에 요청과 응답을 참조하거나, 가공할 ..
![](http://i1.daumcdn.net/thumb/C400x400/?fname=https://blog.kakaocdn.net/dn/mlQiw/btsD3lq5tPS/b1pLEaKGZRY3cuTgwIl8v1/img.jpg)
![](https://tistory1.daumcdn.net/tistory/6581516/skin/images/no-image.jpg)
🎀Dispatcher Servlet🎀 매번 서블릿 관련이 나오면 아ㅏ... 음... 그래 서블릿 너무 많이 들어봤는데... 근데 정확하게 뭔지를 모르겠다!!! 답답허다!!!!싶었다. 그래 오늘이 바로 그날이다.... 서블릿을 조져버리는날~..~ 간단한 걸 매일 미뤄버려 오늘은 꼭 흩어져있는 지식들을 헤쳐모여 시켜서 합체시켜서 이해해야겠다. 1. what's Dispatcher Servlet? : HTTP 프로토콜로 들어오는 모든 요청을 가장 먼저 받아 적합한 컨트롤러에 위임해주는 프론트 컨트롤러이다. 만약, 클라이언트로부터 요청이 오면 > 톰캣과 같은 서블릿 컨테이너가 요청을 받는다. > 이 모든 요청을 디스패처 서블릿이 가장 먼저 받게 된다 > 이친구가 공통적인 작업을 먼저 처리한 후, 해당 요청을 처..
![](http://i1.daumcdn.net/thumb/C400x400/?fname=https://blog.kakaocdn.net/dn/bsya4S/btsD0ImRMKG/U4D0OAYZwHeNBb3rKnNfe0/img.png)
![](https://tistory1.daumcdn.net/tistory/6581516/skin/images/no-image.jpg)
JPA를 활용해서 직접 사용자 정보를 관리해 보자. >> UserDetailsManager 인터페이스 구현. 1) JPA, SQLite 관련 의존성 추가 // build.gradle implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.xerial:sqlite-jdbc:3.41.2.2' runtimeOnly 'org.hibernate.orm:hibernate-community-dialects:6.2.4.Final' // application.yaml spring: datasource: url: jdbc:sqlite:db.sqlite driver-class-name: org.sqlite.JDBC u..
![](http://i1.daumcdn.net/thumb/C400x400/?fname=https://blog.kakaocdn.net/dn/bNZw58/btsDWIGCXVW/2myOKlQ0XNJgxLiIpCQnG1/img.png)
![](https://tistory1.daumcdn.net/tistory/6581516/skin/images/no-image.jpg)
1. Spring Security 설정 - 인증(Authentication) : 사용자가 자신이 누구인지를 증명하는 과정 (로그인) - 권한/인가(Authorization) : 사용자가 어떤 작업을 수행할 수 있는지를 결정하는 과정. 1) 인증 필요 설정. (인증 필요/ 인증 불필요) @RestController public class RootController { @GetMapping public String root() { return "hello"; } @GetMapping("/no-auth") public String noAuth() { return "no auth success!"; } @GetMapping("require-auth") public String reAuth() { return "..
![](http://i1.daumcdn.net/thumb/C400x400/?fname=https://blog.kakaocdn.net/dn/yLzdT/btsDUMWbSdq/60btThSabhQZj8vvWPEjMk/img.png)
![](https://tistory1.daumcdn.net/tistory/6581516/skin/images/no-image.jpg)
1. 소프트웨어 개발의 테스트 - 단위 테스트 : Controller, Service, Repository의 개별 메서드 - 통합 테스트 : Controller부터 Repository까지 이어진 기능. ~> 이들을 자동화하기 위한 테스트 코드를 작성할 수 있다. 장점 - 잘못된 방향의 개발을 막는다 (이전에 작동하던 기능이 작동하지 않는 상황 등) - 전체 코드 품질이 상승 - 최종적으로 오류 상황에 대한 대처가 좋아져 전체적인 개발 시간이 줄어든다. 단점 - 코드 작성 = 개발 시간이 늘어난다. - 테스트코드 유지 보수가 필요하여 유지보수 비용이 늘어난다 - 테스트 작성법을 따로 배워야 한다. ~~> 테스트 코드를 언제 써야할지, 언제 쓰지 말지 상황에 따라 판단하며 테스트 코드를 짜자. (변화가 큰 ..
![](http://i1.daumcdn.net/thumb/C400x400/?fname=https://blog.kakaocdn.net/dn/bmClaZ/btsDJB3eITb/YwWGz5h4z2TCHYPP5Tbrqk/img.png)
![](https://tistory1.daumcdn.net/tistory/6581516/skin/images/no-image.jpg)
1. 예외 처리 Exception Handling : 예측하지 못한 상황이 발생했을 때, 프로그램은 예외를 발생시킨다. 1) ResponseStatusException : 간단한 예외처리 방법. - 간편하게 사용할 수 있다 - 다만, 전체 프로젝트 단위에서 예외 처리를 적용하기 어려운 구조/ 똑같은 코드를 여러번 반복한다는 단점. public UserDto updateUser(Long id, UserDto dto) { Optional optionalUser = repository.findById(id); if (optionalUser.isEmpty()) throw new ResponseStatusException(HttpStatus.NOT_FOUND); ... try { Files.createDirect..
![](http://i1.daumcdn.net/thumb/C400x400/?fname=https://blog.kakaocdn.net/dn/bbx3OT/btsDKOUJio0/o1Te7hKHEbfBPMI85jh1y1/img.png)
![](https://tistory1.daumcdn.net/tistory/6581516/skin/images/no-image.jpg)
1. 정적 파일 : 사용자에게 변환 없이 전달되는 파일. (사용자에 따라 변할 필요가 없는 것들) - CSS, 이미지, 영상파일, 몇몇 HTML - resources/static에 추가 - 정적 파일은 Spring Boot 기본 설정으로 정적 파일을 전달할 수 있다. http://localhost:8080/image.jpg http://localhost:8080/script.js http://localhost:8080/styles.css - 설정을 바꾸면 요청 경로도 변경 가능하다. >> application.yaml 파일에 설정 http://localhost:8080/static/image.jpg http://localhost:8080/static/script.js http://localhost:808..