Spring
RestDocs, Swagger 조합해서 사용하기 (RestDocs + Swagger)
RestDocs와 Swagger를 같이 사용하는 방법 Swagger Vs Spring Rest Docs 스웨거(swagger)나 rest docs 둘다 코드를 통해 API 문서를 만들어주는것은 동일하다. 그러나 다음과 같은 차이점과 장단점이 있다. Spring Rest Docs Swagger 장점 - 프로덕션 코드에 영향이 없다. - 테스트 코드가 성공해야(Controller Layer) 문서 작성이 가능하다. - 문서상에 API를 테스트할 수 있는 기능이있다. - 테스트 코드가 필요없으므로 적용이 쉽다. (어노테이션을 적용 안해도 Controller를 읽고 자동으로 적용. 어노테이션을 추가하면 추가 설명을 적을 수 있다.) 단점 - 테스트 코드를 작성해야 하므로 적용이 불편하다. - 문서를 위한 테스트..
Spring Rest Docs - Spring Boot V2...
Spring Rest docs - in springboot v2 API를 개발하고 이에 대한 스펙이나 문서를 다른이에게 공유하기에 앞서서 우리는 API문서라는 것을 만들어야한다. API 문서를 만들어야 팀원들끼리 공유, 또는 타 엔지니어들과 공유할 수 있다. API문서를 만드는 법은 크게 다음과 같이 나뉜다 직접 markdown 또는 wiki 작성 postman 이용 swagger 사용 spring rest docs 사용 그 중, swagger와 rest docs는 직접적으로 코드 실행시 자동으로 문서를 만들어 준다. 먼저 이 둘을 비교하고, restdocs에 대해 정리해보고자 한다. 이 글은 springboot 버전 2점대에서 사용하는 방법을 정리한 글이다 3점대부터는 공식홈페이지에 정확한 설정 방법이..
JPA Entity의 Field Data Type은 primitive, Wrapper 중 어떤것을 사용해야 할까?
Jpa Entity Data Type Entity의 filed Data Type을 Primitve로 지정해야 할까 Wrapper Type으로 지정해야 할까? 결론 1. PK에는 Long(Wrapper Class) 을 사용하자 Wrapper Class 를 사용함으로써 Null을 대입해놓을 수 있는데, 명시적으로 PK가 아직 할당되지 않았음을 의미할수 있다. 반면 primivite type은 null 을 표시할 방법이 없다 JPA에서 Wrapper 클래스가 Number의 하위 타입인 경우(int, long 등)에는 해당 값이 0인 경우에만 이를 새로운 엔티티라 판단한다. 0이 아니라면, save 시 merge가 동작하여 select + insert 쿼리 2번을 실행하게 된다. 2. Null이 필요한 컬럼인지..
@NotNull vs @Column(nullable = false), JPA에서 INSERT 전에 Null 검사하는 방법
@Column(nullable=false) 옵션은 기본적으로는 INSERT 시 null값 삽입을 막아주지 못한다. 결론부터, @Column(nullable = false) 만 필드에 사용하면, INSERT시에 Null 검사 를 하지 않는다 이것은 기본 정책이며 바꿀 수 있다. @Column(nullable = false) 만 사용해서 null값 방지를 하려면 spring.jpa.properties.hibernate.check_nullability=true 옵션 사용. 아래를 참고하자. Null검사를 하고 싶다면 @NotNull 어노테이션을 사용하여 @Column(nullable = false) 와 함께 정의하면, INSERT 전에 방지한다. JPA @Column(nullable = false) JPA 에..
JdbcTemplate OneToMany, 1:N Join - InSpring
JdbcTemplate의 사용법은 다음 링크에 자세하게 나와있다. * https://blog.outsider.ne.kr/882 JdbcTemplate OneToMany, 1:N JdbcTemplate을 이용해서 1:N 상황의 엔티티를 Join하는 방법을 알아보자. 먼저 다음과 같은 1:N 관계의 도메인이 있다. Order (1) OrderItem (N) @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @AllArgsConstructor public class Order { private Long orderId; private String user; private List items = new ArrayList(); } @Getter @NoArgsC..
JpaRepository에서 save시 select 쿼리가 먼저 실행되는 이유
Spring Data Jpa - JpaRepository에서 save시 select 쿼리가 먼저 실행되는 이유 Entity의 id가 GeneratedValue가 sequence(또는 identity)가 아니고, 직접 id를 set 할 때, 하이버네이트에서 엔티티 Id 생성 전략이, 개발자가 직접 Id를 만들 고 엔티티 객체 저장 시 select 쿼리가 나간다. 결론부터 JpaRepository.save(entity) 를 이용해서 엔티티 객체를 저장할 때, entityManager.persist or entityManager.merge 를 호출한다. 이 때, JpaRepository의 구현체인 SimpleJpaRepository는 isNew 메서드를 통해 id값이 없으면 새 엔티티라고 판단하고, em.pe..
Spring security - Role vs Authority (hasRole? hasAuthority?)
Spring security - Role vs Authority (hasRole? hasAuthority?) Role과 Authority의 사전적 의미 Role : 역할 Authority : 권한 이 둘은 비슷하면서도 다르다. 역할은 커뮤니티 관리자가 권한을 그룹화하고 사용자 또는 사용자 그룹에 권한을 지정하는 방법을 제공한다. 권한은 커뮤니티에서 사용자가 수행할 수 있는 조치를 정의한다. 소규모 프로젝트에서는 Role이나 Authority 둘 중 한가지로 사용해서도 충분히 접근제어를 할 수 있지만, 규모가 커지고 요구사항이 복잡해진다면 역할과 권한을 분리하여 명시함으로써 유지보수성도 높아질 것이다. Spring Security는 메소드 수준에서 권한 부여 의미를 지원하는데, 이 둘이 차이가 있다. 또한..
Spring properties, yml 암호화, 복호화 - jasypt 암복호화
Spring properties, yml 암호화 - Jasypt를 이용한 암호화 예제 코드는 깃허브에 있습니다 . - https://github.com/devYSK/Jasypt-example/tree/main Jasypt : Java Simplified Encryption 공식 홈페이지 : http://www.jasypt.org/ GitHub : https://github.com/ulisesbocchio/jasypt-spring-boot Jasypt is a java library which allows the developer to add basic encryption capabilities to his/her projects with minimum effort, and without the need ..