개발/Spring

    [Spring] SpringSecurity와 Jwt : 이론편

    [Spring] SpringSecurity와 Jwt : 이론편

    이번 글에서는 SpringSecurity를 이용한 Jwt방식의 인가 처리에 대한 방식과 관련 용어를 정의해보겠다. 용어 설명 우리가 SpringSecurity를 이용해서 client 요청에 대해서 인증을 하고 권한을 부여하기 위해서 이를 위해 노력하는 등장인물들에 대해 먼저 알아봐야한다. 1. Filter Spring Security는 request에 대해서 Dispatcher servlet이 처리하기 전에 Filter를 통하여 request에 대한 검사를 진행하고 해당 request에 대해서 권한을 부여해준다. 권한을 부여해주는거는 다르게 말하면 request에 대해서 SecurityContext를 부여한다고 이야기할 수 있다. 2. SecurityContext SecurityContext란 무엇일까?..

    [Spring ] SLF4J을 이용한 스프링 로그 작성

    [Spring ] SLF4J을 이용한 스프링 로그 작성

    서버에서 로그를 상세히 적어두면 디버깅이나 서버 오류가 발생했을 때 쉽게 파악할 수 있어 유지보수에 있어서 중요하다. 로그는 총 7단계로 나뉘는데 설명을 요약하자면 아래와 같다. 로그 레벨과 설명 레벨 설명 ALL custom level을 포함한 모든 로그를 저장하는 레벨이다. DEBUG 프로그램 상 아주 단위의 행동들을 기록하는 레벨이다. INFO 프로그램 상 큰 단위, 덩어리채로 정보를 기록하는 레벨이다. WARN 잠재적으로 위험할 수 있는 상태가 될 수 있는 정보를 기록하는 레벨이다. ERROR 원래 설정된 error로 프로그램 구동에는 영향을 미치지 않을 수 있는 것들을 기록하는 로그레벨이다. FATAL 원래 설정된 error이긴 한데 프로그램 중단을 야기시키는 것만 기록하는 로그레벨이다. OFF..

    [Spring]JUnit에서 Async메소드의 비정상적인 종료 - 2편

    이전 글에서 Async로 정의된 메소드를 실행하는 걸 JUnit으로 테스트 하던 중 비정상적으로 테스트가 빨리 끝나는 것을 확인 할 수 있었다. 이는 멀티쓰레드로 돌고 있는 비동기 메소드들이 프로세스 종료에 따라 Thread interrupt가 걸려서 생기는 문제였었다. 이번 글에서는 해당 문제를 해결하는 과정을 서술해보고자 한다. 문제 해결에 핵심 비동기로 선언된 메소드들이 끝나는 것을 알 수 있어야한다는 것이였다. 따라서 이를 위해 비동기 함수의 반환값을 Future로 처리하였다. Future Future는 Java에서 비동기로 처리된 메소드들에 대하여 미래에 받아올 수 있는 방식을 정의하는 사용된다. 모르겠는거에 최고는 공식 문서나 소스코드를 읽는거라 생각이 든다. 이번에는 소스코드를 까보도록 하겠..

    [Spring]JUnit에서 Async메소드의 비정상적인 종료 - 1편

    [Spring]JUnit에서 Async메소드의 비정상적인 종료 - 1편

    API를 만드는 중에 JUnit으로는 Async로 된 메소드가 제대로 작동을 하지 않고 실제 프로그램을 구동시켰을 때 메소드가 정상적으로 작동하는걸 확인했다. 해당 상황을 재현해보고 분석해보는 시간을 가지겠다. 상황은 다음과 같다. Controller에서 Service layer에 있는 메소드를 총 N 번 호출한다. Service Layer의 해당 메소드는 비동기로 처리가 되고 해당 메소드는 0부터 100까지 Count를 한다. 매 카운트마다 100밀리초를 Thread.sleep을 한다. 사실상 코드는 아무 문제가 없어 보인다. 코드는 다음과 같다. 1. Controller public class AdminController { @Autowired TestService testService; @PostM..

    [Spring] Rest Docs 빌드 부터 사용까지

    [Spring] Rest Docs 빌드 부터 사용까지

    우리가 Api를 개발하고 이에 대한 스펙을 다른이에게 공유하기에 앞써 우리는 Api문서라는 것을 만들어야한다. Api 문서를 만드는 데에는 직접 markdown을 작성하거나 postman을 이용하거나 등등의 여러 방법이 존재하지만 오늘은 RestDocs에 대해서 이야기 해보려고 합니다. 왜 Rest Docs인가? 그럼 왜 굳이 Postman처럼 편한 방법이 있는데 다른거를 쓰려고 할까? 자동화라는 점도 매우 큰 장점이지만 테스트 케이스를 강제한다는 것이 매우 큰 이점이자 매력인거 같다. 테스트를 만들고 코드를 만들어야한다는 점은 누구나 알지만 바쁘다 보면 혹은 귀찮다는 이유로 잘 안 만들게 되는게 사실인 것 같다. 주변에 다른 개발자 분들께 물어보면 만들어야하는데 하면서 가끔은 안 만드신다고 하신다. 이..

    [Spring] Spring과 Paging  - [1]

    [Spring] Spring과 Paging - [1]

    이번 글도 역시 생각없이 공부했던 나에게 반성하는 의미가 있다. 생각 없이 쇼핑몰 게시판을 만들다가 문뜩 Page라는 것에 대한 찜찜한이 생겼다. Page, 맨 처음에 공부했을 때 그냥 데이터 잘라서 보낼 때 사용하는 것 정도만 이해했다. 이렇게만 생각하고 공부하다가 문뜩 누가 나한테 Spring에서 page, pageable클래스가 뭐에요? 라고 물어보면 머릿속이 하얗게 될 것이 분명했다. 과연 이 Page라는 녀석은 왜 무엇일까? Spring data와 domain 우리가 page를 import시켜서 사용할 때 이런 식으로 사용하게 된다. 그럼 Page를 이해하기 위해서는 spring의 data가 무엇인지 부터 알아야할 것이다. Spring데이터는 여러 데이터 베이스에 접근을 할 때 spring에서 ..

    [Spring] Spring Security의 이해

    [Spring] Spring Security의 이해

    Spring Security는 자바 어플리케이션에서 인가와 인증을 제공하는 것에 초점을 맞춘 프레임 워크이다. 스프링에서 주장하기로는 Spring security의 확장성이 매우 큰 장점이라고 한다. 근데 사실 Spring security를 사용하면 상당히 추상적이라 어떻게 접근 권한을 부여하는지에 대한 이해가 부족한 채로 그냥 사용하는 경우가 많다. 쇼핑몰을 만드는 프로젝트를 하면서 관리자 페이지랑 사용자 페이지랑 구분하면서 Spring security를 사용했다. 근데 너무 이해가 안되고 어떤 방식으로 굴러가는지도 파악이 안되서 아키텍쳐를 뜯어 봐야겠다는 생각이 들어 글을 쓰게 되었다. 먼저 그림을 보고 그림을 바탕으로 글을 진행하겠다. 1. Authentication Filter request가 들..

    [Spring] Spring 을 이용한 웹 서비스 구조

    [Spring] Spring 을 이용한 웹 서비스 구조

    Spring으로 여러 서비스를 만들면서 Controller, Service, Repository등의 레이어드 아키텍쳐만을 생각하고 코딩을 진행했었다. 근데 문득 공부했었던 Web server와 WAS등의 개념과 같이 생각하려고 하니깐 Web Server가 controller인가? 그럼 템플릿은 정적컨텐츠가 아닌데? MVC구조에서 Web server는 어디있지? 라는 생각에 아직 개념이 확실하지 않다는 생각을 하게 되었고 이에 글을 쓰게 되었다. 웹 서버 아키텍쳐 웹 서버의 아키텍쳐가 다양할 수 있다는 생각을 가지고 공부를 진행하면 좀 더 유연하게 공부를 진행할 수 있다. 먼저 대략적인 웹 서버와 WAS에 대한 내용을 잡고 싶으면 아래 글을 참고해주면 너무 좋을거 같다. 구독과 좋아요 부탁드립니다.🤗 ht..