백엔드
[ Mybatis / 마이바티스 ] <sql>, <include> 공통 쿼리 묶기
1. 사용법 sql 태그를 이용해 공통으로 사용할 영역을 지정하고 해당 id를 지정한다 (ex: id="user") 쿼리를 붙여야하는 부분에 include 태그를 사용하고 refid에 에 sql태그에 id를 지정한다 (refid="user") 2. 쿼리 SELECT USER_ID, USER_NM FROM USER WHERE 1=1 ORDER BY USER_ID
[ 스프링부트 / Spring Boot ] Swagger 간단히 구현
작업 환경 IDE: intellij JDK: 11 Spring: Spring Boot 2.5.1 + Gradle 1. 들어가기전 Swagger REST 웹 서비스를 제공하려면 프론트엔드 개발자에게 전달해줄 API문서가 필수적이다. 그런 문서를 작업해서 전달해주는건 수고로운 일이다. 그래서 나타난게 Swagger이며, 이것은 문서뿐 아니라 빌드, 테스트 케이스, 등도 작성할 수 있다. 스웨거(Swagger)는 개발자가 REST 웹 서비스를 설계, 빌드, 문서화, 소비하는 일을 도와주는 대형 도구 생태계의 지원을 받는 오픈 소스 소프트웨어 프레임워크이다. 대부분의 사용자들은 스웨거 UI 도구를 통해 스웨거를 식별하며 스웨거 툴셋에는 자동화된 문서화, 코드 생성, 테스트 케이스 생성 지원이 포함된다. / 위키..
[Spring Security + JWT + Swagger] 로그인 구현 - 1. 프로젝트 세팅
작업 환경 IDE: intellij JDK: 1.8 Spring: Spring Boot 2.5.1 + Gradle 1. 들어가기 전 JWT(JSON Web Token)란 무엇인가? 위키백과에서는 아래와 같이 정의한다. 즉 로그인 정보, 등 선택적인 데이터를 암호화하여 JSON으로 보관한다. JSON 웹 토큰(JSON Web Token, JWT)은 선택적 서명 및 선택적 암호화를 사용하여 데이터를 만들기 위한 인터넷 표준으로, 페이로드는 몇몇 클레임(claim) 표명(assert)을 처리하는 JSON을 보관하고 있다. / 위키 백과 JWT 공식 사이트: https://jwt.io/ JWT.IO JSON Web Tokens are an open, industry standard RFC 7519 method ..
[ 스프링부트 / Spring Boot ] Interceptor
#시작하기 전.. 이전 글 - [ 스프링부트 / Spring Boot ] Filter 위에 글에도 언급했지만, Spring Life Cycle 에는 Filter, Interceptor, AOP, 등 많은 기능들이 존재한다. 그 중 Interceptor에 대해 이해한 것에 대해 정리를 한거라 부족한게 많을 수 있다.. 1. Interceptor는 무엇인가? Interceptor 단어 그대로 데이터를 가로채서 처리하는 영역이다. Interceptor는 컨트롤러에 접근하기 전 request, response를 받아 처리가 가능하다. 그럼 여기서 의문이 생길 수 있다. Filter와 Interceptor는 같은 역할인 것이 아닌가? 그러나 두개는 큰 차이가 있다. 그것은 바로 스프링 컨테이너에 포함 여부다. 아..
[ 스프링부트 / Spring Boot ] Filter
#시작하기 전.. 현재 온라인 강의와 토비의 스프링 책를 통해 스프링 기초에 대해 공부를 시작하고 있다. 역시 내가 모르는 것들이 너무 많았고, 그 중 Spring MVC 라이프 사이클을 모르는 내 자신에 부끄러웠다. Filter, Interceptor, AOP를 이해하려면 Spring MVC 라이프 사이클이 너무 너무 중요하다. 그것을 이제서야 깨닫고 있으며, 공부하는 중이다... 1. Filter란 무엇인가? 필터를 설명하기 전에 스프링 MVC가 작동하는 원리에 대한 사전 지식이 필요하다. 내가 아는 얕은 지식으로 예로 든다면, 1. 사용자는 웹사이트에 접속을 한다. 2. 특정 버튼, 등을 통해 서버에 정보를 조회하거나, 등록, 수정, 등을 요청한다. (Request) 3. 서버는 요청을 받는다. 일..
[ 스프링부트 / SpringBoot] Exception 처리
첫번째 방식, Global(전역)처리 방식 1. Global(전역)처리 방식 - @RestControllerAdvice (rest), @ControllerAdvice (view) - 화면을 리턴하지 않고 Rest방식으로 사용할 경우 @RestControllerAdvice, 화면(jsp, html)을 리턴하는 @ControllerAdvice를 사용하면 된다. - basePackages 속성을 지정하면, 해당 패키지 내에서만 Exception 처리가 가능하다. - basePackageClasses 속성을 지정하면, 해당 클래스 내에서만 Exception 처리가 가능하다. - @ExceptionHandler에 value를 통해 어떤 Exception을 처리할 것인지 지정할 수 있다. @RestControlle..
[ Spring / 스프링 ] 프로퍼티(.properties) 읽는 방법
토비의 스프링을 보다가 다음에 원리를 설명해 줄 때 필요할 것 같아, 글을 적어 정리를 한다. 스프링에선 설정을 할때 대표적인 파일형태로 properties파일과 최근엔 yaml파일을 사용한다. properties파일은 .properties파일로 키=값으로 설정 후 꺼내서 쓰면 된다. db.driverClass=com.mysql.jdbc.Driver db.url=jdbc:mysql://localhost:3306/testdb?serverTimezone=UTC db.username=root db.password=root 정의한 properties파일은 @PropertySource 어노테이션을 이용하여 사용할 수 있다. @PropertySource("/properties/database.properties")..
[ Spring / 스프링 ] 컨테이너 빈 등록 정보 확인
스프링 컨테이너는 모두 BeanFactory라는 인터페이스를 구현하고 있다. BeanFactory의 구현 클래스 중에 DefaultListableBeanFactory이 존재한다. DefaultListableBeanFactory는 거의 대부분의 스프링 컨테이너는 이 클래스를 이용해 빈의 등록하고 관리하고 있다. 스프링에서는 DefaultListableBeanFactory 오브젝트를 @Autowired로 주입받아서 이용하게 해준다. 이 객체에서 getBeanDefinitionNames() 메소드가 있어 등록된 모든 빈 이름을 가져올 수 있다. 빈 이름을 이용해서 실제 빈과 빈 클래스 정보 등도 조회할 수 있다. @ExtendWith(SpringExtension.class) public class BeanTe..