전체 글
-
command line에서 project clone 및 관리 매번 IDE를 통해서 Project 단위로만 git을 사용하다가 여러개의 프로젝트를 하나의 git repository로 관리할 일이 있어서 방법을 정리해본다. git config --list 먼저 나의 상태를 확인해볼 필요가 있다. git config --list 명령을 통해 현재의 환경 정보를 알아보자. $ git config --list user.name=itsmeyjc user.email=사용자@이메일 core.excludesfile=D:\workspaces\.gitignore 여러 정보들이 나오지만 신경쓸 정보는 위 3가지 정도이다. user.name과 user.email은 commit 할 때 가져가는 정보니까 알아둘 필요가 있다. co..
command line에서 project clone 및 관리command line에서 project clone 및 관리 매번 IDE를 통해서 Project 단위로만 git을 사용하다가 여러개의 프로젝트를 하나의 git repository로 관리할 일이 있어서 방법을 정리해본다. git config --list 먼저 나의 상태를 확인해볼 필요가 있다. git config --list 명령을 통해 현재의 환경 정보를 알아보자. $ git config --list user.name=itsmeyjc user.email=사용자@이메일 core.excludesfile=D:\workspaces\.gitignore 여러 정보들이 나오지만 신경쓸 정보는 위 3가지 정도이다. user.name과 user.email은 commit 할 때 가져가는 정보니까 알아둘 필요가 있다. co..
2020.07.21 -
이번 포스트에서는 Authorization Architecture에 대해 살펴보자. Authorization Architecture 권한(Authorization)사용자가 인증되면 Authorization 객체가 생성된다. 이 객체는 사용자가 가진 권한을 나타내는 GrantedAuthority 목록을 포함한다. GrantedAuthority는 사용자(Principal)가 특정 작업을 수행할 수 있는지를 반환하는 역할을 한다.GrantedAuthority 인터페이스의 getAuthority()는 권한을 문자열로 반환한다. 기본적으로 role 기반의 권한 부여 규칙에서는 접두사로 "ROLE_"를 붙인다. 따라서 getAuthority()는 "ROLE_USER", "ROLE_ADMIN" 등의 형태로 권한을..
04. Servlet Authorization Architecture이번 포스트에서는 Authorization Architecture에 대해 살펴보자. Authorization Architecture 권한(Authorization)사용자가 인증되면 Authorization 객체가 생성된다. 이 객체는 사용자가 가진 권한을 나타내는 GrantedAuthority 목록을 포함한다. GrantedAuthority는 사용자(Principal)가 특정 작업을 수행할 수 있는지를 반환하는 역할을 한다.GrantedAuthority 인터페이스의 getAuthority()는 권한을 문자열로 반환한다. 기본적으로 role 기반의 권한 부여 규칙에서는 접두사로 "ROLE_"를 붙인다. 따라서 getAuthority()는 "ROLE_USER", "ROLE_ADMIN" 등의 형태로 권한을..
2020.07.16 -
이번 포스트에서는 Servlet Application에서 Spring Security의 Authentication Architecture에 대해 살펴보자. Authentication Architecture SecurityContextHolderSecurityContextHolder는 인증된 사용자의 정보를 저장하는 보관소이다. 사용자 인증 정보는 SecurityContext가 갖는다.SecurityContextHolder는 ThreadLocal을 이용해서 사용자 인증 정보를 저장한다. 따라서 동일한 요청 스레드 내의 메서드에서 SecurityContext에 자유롭게 접근할 수 있으며 SecurityContext를 메서드의 인자로 명시적으로 전달할 필요가 없다.ThreadLocal은 각 스레드에 대해 독립..
03. Servlet Authentication Architecture이번 포스트에서는 Servlet Application에서 Spring Security의 Authentication Architecture에 대해 살펴보자. Authentication Architecture SecurityContextHolderSecurityContextHolder는 인증된 사용자의 정보를 저장하는 보관소이다. 사용자 인증 정보는 SecurityContext가 갖는다.SecurityContextHolder는 ThreadLocal을 이용해서 사용자 인증 정보를 저장한다. 따라서 동일한 요청 스레드 내의 메서드에서 SecurityContext에 자유롭게 접근할 수 있으며 SecurityContext를 메서드의 인자로 명시적으로 전달할 필요가 없다.ThreadLocal은 각 스레드에 대해 독립..
2020.07.15 -
RestTemplate가끔 REST API를 자바 영역에서 사용해야 할 경우가 있다. ajax로 처리해야 하는데 서비스를 제공하는 서버에서 cross origin에서의 접근을 허용하지 않는 경우가 대표적이다. 이런 경우는 자바 영역에서 일반 요청 형태로 REST 서비스를 호출해서 정보를 받고 이를 다시 ajax로 얻어와야 한다.자바 영역에서 REST 서비스를 편리하게 사용하기 위해 RestTemplate을 사용할 수 있다. 빈 등록RestTemplate은 스프링에서 제공해주는 기본 템플릿이다. 이를 사용하기 위해서는 아래와 같이 빈을 생성해 볼 수 있다.@Beanpublic RestTemplate restTemplate() { return new RestTemplate();} ..
03. RestTemplateRestTemplate가끔 REST API를 자바 영역에서 사용해야 할 경우가 있다. ajax로 처리해야 하는데 서비스를 제공하는 서버에서 cross origin에서의 접근을 허용하지 않는 경우가 대표적이다. 이런 경우는 자바 영역에서 일반 요청 형태로 REST 서비스를 호출해서 정보를 받고 이를 다시 ajax로 얻어와야 한다.자바 영역에서 REST 서비스를 편리하게 사용하기 위해 RestTemplate을 사용할 수 있다. 빈 등록RestTemplate은 스프링에서 제공해주는 기본 템플릿이다. 이를 사용하기 위해서는 아래와 같이 빈을 생성해 볼 수 있다.@Beanpublic RestTemplate restTemplate() { return new RestTemplate();} ..
2020.07.14 -
REST를 위한 단위 테스트 RestController의 단위 테스트에는 com.jayway.jsonpath가 주로 사용된다. https://goodteacher.tistory.com/495 [junit] jupiter 9. Rest Controller Test 이번 포스트에서는 @RestController에 대한 단위테스트에 대해서 살펴보자. REST를 위한 단위 테스트 RestController의 단위 테스트에는 com.jayway.jsonpath가 주로 사용된다. 관련 문서는 https://github.com/json-pat goodteacher.tistory.com 테스트 해보기 전체 국가 조회 다음은 전체 국가 정보를 가져오는 get : /api/countries에 대한 단위 테스트 예이다. 테..
02. REST를 위한 단위 테스트REST를 위한 단위 테스트 RestController의 단위 테스트에는 com.jayway.jsonpath가 주로 사용된다. https://goodteacher.tistory.com/495 [junit] jupiter 9. Rest Controller Test 이번 포스트에서는 @RestController에 대한 단위테스트에 대해서 살펴보자. REST를 위한 단위 테스트 RestController의 단위 테스트에는 com.jayway.jsonpath가 주로 사용된다. 관련 문서는 https://github.com/json-pat goodteacher.tistory.com 테스트 해보기 전체 국가 조회 다음은 전체 국가 정보를 가져오는 get : /api/countries에 대한 단위 테스트 예이다. 테..
2020.07.13 -
No 'Access-Control-Allow-Origin' header is present on the requested resource. 발생상황 주로 REST 서비스를 제공하는데 서버에서 외부 도메인에 대한 접근을 허용하지 않고 있을 때 발생. 대책 스프링의 경우 REST 서비스를 제공하는 Controller에 @CrossOrigin("*) 설정을 추가한다. 만약 이 속성이 있는데도 오류가 발생한다면 아마 경로를 잘못 적었을 확률이 높다.(즉 404 상황)
NNo 'Access-Control-Allow-Origin' header is present on the requested resource. 발생상황 주로 REST 서비스를 제공하는데 서버에서 외부 도메인에 대한 접근을 허용하지 않고 있을 때 발생. 대책 스프링의 경우 REST 서비스를 제공하는 Controller에 @CrossOrigin("*) 설정을 추가한다. 만약 이 속성이 있는데도 오류가 발생한다면 아마 경로를 잘못 적었을 확률이 높다.(즉 404 상황)
2020.07.11 -
REST REST란 Representational State Transfer의 약자로 하나의 URI는 하나의 고유한 리소스와 연결되며 이 리소스를 GET/POST/PUT/DELETE 등 HTTP 메서드로 제어하자는 개념이다. Representational은 웹 상의 상태를 표현할 수 있는 어떤 자원을 의미하고 이 자원의 상태(State) 즉 데이터를 전송(Transfer)하는 것으로 해석해 볼 수 있다. 특히 서버에 접근하는 클라이언트의 종류가 단순히 브라우저를 넘어 스마트폰, 다른 서비스 등으로 다양해지면서 화면에 대한 관심은 없고 데이터, 비즈니스 로직에만 관심 있는 경우가 많은데 이때 사용되는 것이 REST이다. 자바나 C와 같은 언어에서 어떤 기능을 제공하는 것을 API라고 하듯이 REST 형태로..
01.RestREST REST란 Representational State Transfer의 약자로 하나의 URI는 하나의 고유한 리소스와 연결되며 이 리소스를 GET/POST/PUT/DELETE 등 HTTP 메서드로 제어하자는 개념이다. Representational은 웹 상의 상태를 표현할 수 있는 어떤 자원을 의미하고 이 자원의 상태(State) 즉 데이터를 전송(Transfer)하는 것으로 해석해 볼 수 있다. 특히 서버에 접근하는 클라이언트의 종류가 단순히 브라우저를 넘어 스마트폰, 다른 서비스 등으로 다양해지면서 화면에 대한 관심은 없고 데이터, 비즈니스 로직에만 관심 있는 경우가 많은데 이때 사용되는 것이 REST이다. 자바나 C와 같은 언어에서 어떤 기능을 제공하는 것을 API라고 하듯이 REST 형태로..
2020.07.10 -
post /mod의 문제점 페이지 흐름과 관련해서 기존의 post /mod의 문제점에 대해 살펴보자. post로 요청된 /mod가 성공적으로 동작되면 index.html로 연결된다. @PostMapping("/mod") public String doModEmp(Model model, @ModelAttribute("emp") @Valid Employee emp, BindingResult result) { if (result.hasErrors()) { List globalErrors = result.getGlobalErrors(); for (ObjectError ge : globalErrors) { if (ge.getCode().equals(MyPasswordEquals.class.getSimpleName(..
08. Redirection과 flash scopepost /mod의 문제점 페이지 흐름과 관련해서 기존의 post /mod의 문제점에 대해 살펴보자. post로 요청된 /mod가 성공적으로 동작되면 index.html로 연결된다. @PostMapping("/mod") public String doModEmp(Model model, @ModelAttribute("emp") @Valid Employee emp, BindingResult result) { if (result.hasErrors()) { List globalErrors = result.getGlobalErrors(); for (ObjectError ge : globalErrors) { if (ge.getCode().equals(MyPasswordEquals.class.getSimpleName(..
2020.07.09