본문 바로가기

Java & Spring

(11)
spring + JWT + Angular 프로젝트 (3) - 회원가입을 위한 백엔드 개발 이번 포스팅에서는 회원가입을 위한 백엔드 DB 설계 및 유저등록 로직을 추가하겠다. Spring 서버와 DB 연동을 하기 위하여 ORM인 Hibernate 기반의 Spring JPA를 이용할 것이다. 회원가입의 가장 기본이 되는 유저 엔티티와 권한 엔티티를 설계하고 프론트에서 REST로 유저의 정보를 받아 패스워드를 암호화하고 권한을 설정하여 DB에 적재하는 로직을 정리할 것이다. 이 프로젝트에는 H2 DB를 사용하고 hibernate.ddl-auto 설정을 create-drop으로 설정하였기 때문에 코드에 엔테티를 정의해놓으면 애플리케이션 구동시 h2에 자동으로 스키마가 생성된다. 기본적으로 user, authority, user_authority 테이블이 필요하다. 1. Authority 엔티티 생성..
spring + JWT + Angular 프로젝트 (2) - Security 설정 이번 포스팅에서는 스프링 시큐리티 기본적인 설정과 JWT를 연동하는 과정에 대해 정리한다. 1. pom.xml 설정하기 Spring Security와 Jwt를 이용하기 위한 라이브러리 추가를 위해 pom.xml에 아래와 같이 추가한다. jjwt 라이브러리는 jwt 토큰을 생성하고 검증하는 기능등을 제공한다. org.springframework.boot spring-boot-starter-security org.springframework.security spring-security-test test org.springframework.security spring-security-data io.jsonwebtoken jjwt ${jjwt.version} 2. 자바 config 설정하기 스프링 시큐리티 설정..
spring + JWT + Angular 프로젝트 (1) - JWT란? 이번 프로젝트에서는 서버사이드의 Spring boot와 클라이언트 사이드의 Angular와의 연동시 로그인 및 API 인증을 위하여 전통적인 세션을 통한 관리를 하지 않고 Stateless한 RESTful API를 구현하기 위하여 JWT 기반의 인증을 이용할 것이다. 그에 먼저 JWT에 대해 간단히 정리하면 아래와 같다. JWT (JSON Web Token) 란? JWT는 JSON 객체로서 안전하게 정보를 전송할 수 있는 작고 self-contained 방법을 정의하는 표준이다. 이 정보는 디지털로 서명되어 있기 때문에 신뢰할 수 있으며 HMAC 알고리즘 또는 RSA를 사용하는 공개 / 개인키 쌍을 사용하여 서명할 수 있다. 주로 회원 인증이나 작은 데이터 전달에 사용된다. JWT 구조 JWT는 “.”을..
spring + JWT + Angular 프로젝트 (0) - 프로젝트 시작 Spring Boot와 Angular4를 활용하여 RestFul한 서비스를 만드는 스터디 프로젝트를 진행한다. 백엔드는 Spring boot와 security 그리고 JWT(JSON Web Token)을 이용하여 HTTP Stateless한 토큰 기반의 인증을 구현하고 프론트엔드는 Angular4, Bootstrap등을 연동하여 대시보드 형태의 애플리케이션을 개발해보겠다. 개발 스택을 요약하면 아래와 같다. Component Tech Frontend Angular 4+ Backend Spring Boot, Java 8+ Security Spring Security, JWT Database H2 Database Persistence JPA API Documentation Swagger-UI Client B..
[java] Collections.emptyList와 Collections.emptyMap API를 개발하다 보면 외부 저장소 혹은 Http Client에서 데이터를 조회해서 결과를 받아 처리하는 경우가 있다. 이 때 외부에서 반환한 데이터가 없거나 내부로직에 의해 빈 데이터가 반환되어야 하는 경우 NullPointerException을 방지하기 위하여 반환 형태에 따라 List나 Map의 인스턴스를 생성하여 반환하여 처리해야 하는 경우가 있다. 후속 로직에서 size 메소드 등으로 체크를 하고 추가적인 값을 변경하지 않는 경우 Collections.emptyList()이나 Collections.emptyMap() 메소드를 사용하면 매번 동일한 정적 인스턴스가 반환되므로 각 호출에 대해 불필요한 인스턴스 생성이 되지 않아 메모리 사용량을 줄일 수 있다. 주의할점은 Collections.empt..
[java] Spring boot 손쉬운 test 코드 작성하기 spring에서는 3.2버전부터 MockMvc를 지원하여 매우 편리하게 컨트롤러 테스트 코드를 작성할 수 있었다. spring boot에서는 spring-boot-starter-test 모듈에 일반적으로 spring-test 모듈과 같이 사용하는 hamcrest, mokito-core, json-path등의 라이브러리가 같이 모듈화 되어 조금 더 편리하게 테스트를 할 수 있다. 이번 포스팅에서는 간단한 상품 정보를 조회하는 데모 어플리케이션을 이용하여 스프링 부트에서 테스트를 진행하는 방법을 알아보겠다. 먼저 메이븐을 사용한다면 pom.xml에 spring-boot-starter-test 모듈을 추가하자. spring-boot-starter-test 모듈에는 spring-test모듈 외에 hamcrest..
[Java] 자바 8 Default method 정리 자바 8에서는 Interface에 Body를 가진 메소드를 추가할 수 있는데 이를 디폴트 메소드(Default method)라고 한다. 자바 8 이전의 인터페이스에서는 API를 추가할 경우 기존 인터페이스를 구현하여 만든 애플리케이션에서는 호환성 문제가 발생하게 된다. 이를 해결하기 위해여 별도의 버전의 API를 만들어 버전을 관리하는 방법등 다양한 방법이 있으나 불편한 점이 많았다. 디폴트 메소드를 이용하면 기존 클라이언트에서도 자동으로 기본 구현이 되므로 기존 코드를 고치지 않아도 되는 장점이 있다. 아래는 자바8 Collection 인터페이스에 sort 메소드가 추가된 것을 확인할 수 있다. Collection 인터페이스를 구현하는 자바의 클래스들은 소스의 변경 없이 sort 메소드를 이용할 수 있..
자바 Map을 Json으로 변환시 키로 정렬하기 json object는 정렬되지 않는 key,value의 집합이다. 일반적으로 자바에서 json library를 이용하여 map을 json형태의 string으로 변환시 정렬이 이루어지지 않는다. jackson library를 이용하는 경우 키를 이용하여 정렬된 형태로 구성하고 싶다면 아래와 같이 ObjectMapper 클래스의 configure 메소드를 이용하여 다음과 같이 설정하면 된다. configure(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS, true); 다음은 샘플 코드이다. Map map = new HashMap(); map.put("park", "17"); map.put("kim", "15"); map.put("lee", "23"); map.put(..