개발

    [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..

    [Spring]@Transactional과 JUnit Test

    [Spring]@Transactional과 JUnit Test

    JUnit으로 테스트 케이스를 만들어 실험을 하다가 h2 데이터베이스를 사용했을 때는 되던것이 로컬 MySQL서버와 연결하니 되지 않았다. 문제는 primary key가 reset이 되지 않고 @Transaciton에 대한 이해가 부족하여 많은 문제가 발생했기 때문이다. 이에 @Transactional에 대해 정리해보려고 한다. 다음 글은 두가지 질문에 답을 하고자 한다. 1. JUnit에서 @Before~과 @After의 트랜잭션 범위는? 2. JUnit에서 @Transaction에서는 롤백이 되는데 다른 곳에서는 @Transaction은 롤백이 되지 않을까? 트랜잭션 트랜잭션이란 데이터 베이스의 상태를 변화시키기 해서 수행하는 작업의 단위를 뜻한다. 작업의 단위는 단순히 SQL의 질의어 하나만이 아닌..

    [Spring MVC] DispatcherServlet은 어떻게 request랑 controller를 이어줄까?

    [Spring MVC] DispatcherServlet은 어떻게 request랑 controller를 이어줄까?

    DispatcherServlet는 HandlerMapping이라는 중요한 역할을 해준다. HandlerMapping이란 request와 이에 맞는 RequestController를 이어주는 역할을 하는데 어떻게 이어주는지 내부 구조가 궁금해졌다. 먼저 Dispatcher의 변수 선언을 보면 public class DispatcherServlet extends FrameworkServlet { ... @Nullable ... private boolean detectAllHandlerMappings = true; ... ... } 다음과 같이 detectAllHandlerMappings라는 부분이 있다. 해당 플래그가 세워지고 아래 함수가 호출이 되는데 해당 함수에서 BeanFactoryUtils에서 bea..

    [Spring JPA] ORM과 JPA

    [Spring JPA] ORM과 JPA

    [Spring JPA] ORM과 JPA Status: Done ✨ ORM이란? ORM은 객체와 DB 테이블이 매핑을 이루는 것을 의미한다. 즉, 내가 코드 상에서 생성한 객체가 DB상에 어떤 테이블과 연결이 된다는 것을 의미한다. 이렇게 되면 내가 객체를 조작함으로써 DB를 조작할 수 있게 된다. 이러한 예시로 우리는 JPA를 떠올릴 수 있다. 우리는 JPA에서 DB에 대한 접근을 시도할 때 직접 sql 쿼리문을 만들지 않는다. 다만 객체를 이용한 메소드를 통해 이를 관리할 뿐이다. 예시를 보자 SELECT * FROM user → user.findAll() 해당 예시는 user라는 테이블에 모든 정보를 가져오는 것인데 우리는 이를 user라는 객체와 user테이블을 맵핑한 후 findAll이라는 메소드..

    [Spring] Controller request 유효성 검사

    Request 유효성 검사 서버는 client로 부터 값을 받아서 사용할 때 client로 받은 정보가 서버에서 원하는 형식 혹은 값의 조건에 맞는지 검사를 해야한다. 이를 유효성 검사라고 한다. 이러한 유효성 검사는 class내에 method를 사용하여 검사를 진행했었다. 하지만 유효성 검사는 dto마다 동일하게 혹은 비슷하게 적용 될 수 있고 이에 따라 전체적인 코드 내에서 유효성 검사가 이뤄지는 곳이 여러 Controller에 산재할 수 있다. 따라서 Spring에서는 제약 조건이 부여된 객체에 대해 빈 검증기(Bean Validator)를 이용해서 검증하도록 해주는 어노테이션이 존재한다. 이번에는 이에 대해 정리하려고 한다. BeanValidation 우리가 사용하는 dto에는 원하는 형식이 존재..