장생농 (138) 썸네일형 리스트형 엉터리 정리 - map(), orElseGet() 스프링 부트 프로젝트에서 클라이언트 요청을 처리하는 메소드를 작성할 때, map() 메소드와 orElseGet() 메소드를 자주 사용한다. map()은 stream 클래스의 메소드다 간단히 요약하면, 스트림을 매개변수로 받고 함수(메소드)를 적용해 스트림을 반환하는 함수이다. DB에서 데이터를 꺼내고 처리할 때 많이 사용한다. orElseGet()은 Optional 클래스의 메소드다. 스프링에선 DB에서 데이터를 꺼낼 때, 찾는 데이터가 없을 경우가 있기 때문에 Optional 타입으로 꺼낸다. Optional 타입 데이터가 null 값을 갖는 경우, 전달된 함수를 실행시키고, 그 리턴값을 저장한다. 두 메소드의 사용 예. DB에서 데이터를 꺼내 처리할 때 사용한다. 람다식을 통해 데이터를 처리하고 반환.. 코드 리팩토링 - ENUM, 추상화 유지보수를 위해 프로그램에 Enum, 클래스 추상화 등등을 적용시켜야 한다. 그래야 휴먼에러도 더 막기 쉽고, 예상치 못한 요청도 막을 수 있다. 코드 리팩토링을 하게 되면, 외부 서비스는 동일하지만 내부적으로 더 튼튼한 코드를 만들어준다. 예를들어 커뮤니티의 사이트의 유저의 경우, 등록상태를 나타내는 값은 "등록"과 "해지"밖에 없다. 이런 경우에는 Enum 으로 값을 관리하는 것이 좋다. public enum UserStatus { REGISTERED(0, "등록"), UNREGISTERED(1, "등록"); private Integer id; private String status; } 위와 같이 고정된 값을 사용하는 필드는 Enum을 이용해 미리 사용되는 값들을 만들어 관리한다. 클라이언트가 검증.. 엉터리 정리 - 메이븐과 그래들 참고자료 : 책 [스프링 부트 시작하기] 메이븐과 그래들은 빌드 툴, 프로젝트 관리 도구이다. 메이븐은 XML을 기반으로 의존성 및 디렉터리 구조 관리 등의 기능을 제공한다. 하지만 라이브러리가 추가되거나 각각의 라이브러리가 서로 다른 버전의 라이브러리를 참조하는 종속성을 가지고 있을 경우에는 관리가 어려워지는 문제가 있다. 또한 XML의 특징인 구조화는 사람이 알아보기에는 쉽지만 XML문서의 양이 방대해지는 단점이 있다. 이에 대한 대안으로 그래들이 주목받는다. 그래들은 JVM기반의 빌드 도구, Groovy를 이용한 빌드 자동화 시스템이고, 메이븐과 호환된다. 설정이 간편하고, 프로젝트 별로 유연하게 설정할 수 있는 장점이 있다. 최근 들어서는 그래들이 더 많이 사용되고 있다. 엉터리 정리 - 테스트 코드 정확한 내용정리 아니고, 사용법만 적은 것임. JpaRepository를 사용할 때 직접 메인 코드를 통해 DB 테스트를 할 수 있지만, 테스트 코드를 사용해서 테스트할 수 있다. 스프링 부트 프로젝트에는 src 아래 main과 test 폴더가 있는데 test 폴더 밑에 코드를 작성해 테스트를 할 수 있다. 프로젝트를 시작할 때 제공되는 기본 Test코드를 상속받아 테스트 클래스를 작성한다. 메소드에는 @Test라는 어노테이션을 붙인다. 테스트할 때, 메소드 별로 코드를 실행할 수 있다. 테스트 코드에서 실행한 쿼리도 실제 DB에 반영된다. DB 반영을 원하지 않는다면, 메소드 위에 @Transactional을 붙이면 된다. 쿼리는 실행되지만, 전 상태로 Rollback해준다. REST API 만들기 간단히 설명 REST API는 정보를 주고받는 형식이다. 소프트웨어와 소프트웨어(소프트웨어가 아닌 것들도)가 지정된 형식으로 정보를 요청, 응답하는 수단을 API라고 한다. 요즘은 REST란 형식의 API를 사용한다. 과거의 soap를 대체한 것이다. REST의 특성은 각 요청이 어떤 동작이나 정보를 위한 것인지 요청의 모습 자체로 추론이 가능하다. REST API 요청할 때, HTTP의 메소드로 요청한다. 참고 자료: www.youtube.com/watch?v=iOueE9AXDQQ&t=126s 스프링 부트에서 JPA를 사용해 REST API를 만들 수 있다. 1. 요청, 응답에 사용하는 메시지 클래스를 만든다. 스프링에선 객체를 그냥 리턴해도 JSON으로 반환하기 때문에 주고받을 정보의 필드를 갖는 클.. 엉터리 정리 - 엔티티 필드에 기본 값 설정해서 넣기 엔티티마다 공통된 값이 들어가는 필드에 대해 자동으로 설정하도록 할 수 있다. 먼저 config파일을 만든다 @Configuration - 설정 파일임을 선언 @EnableJpaAuditing - 감시를 활성화 시킨다. public class JpaConfig { } 그 다음 컴포넌트를 만든다. AuditorAware 인터페이스를 구현한다. @Component public class LoginUserAuditorAware implements AuditorAware { @Override public Optional getCurrentAuditor() { return Optional.of("AdminServer"); } } 그리고 설정된 값이 들어갈 엔티티의 필드 위에 어노테이션을 붙인다. @CreatedB.. 엉터리 정리 - java.util.Optional<T> Optional 클래스는 T 타입의 객체를 포장하는 Wrapper class다. 모든 타입의 객체가 들어갈 수 있다. Optional 객체를 사용하면 NullPointerException 예외 피할 수 있다. 널 값으로 인해 발생하는 예외를 처리할 수 있게 된다. 스프링부트에서 JPA를 사용할 때, JpaRepository를 통해 데이터를 받아올 때 null 값인 경우를 대비해 Optional 타입으로 값을 받아온다. Optional item = itemRepository.findById(id); Optional 메소드 static Optional empty() 아무런 값도 가지지 않는 비어있는 Optional 객체를 반환함. T get() Optional 객체에 저장된 값을 반환함. boolean is.. JPA 연관관계 설정하기 데이터끼리는 관계를 갖는다. 그래서 DB 테이블끼리 관계를 설정하기 위해 ForeignKey를 사용한다. 예를 들어 작성자 테이블과 게시글 테이블이 있다면 작성자는 여러 게시글을 작성할 수 있기 때문에 게시글은 작성자 FK를 갖고 있도록 설계해야 한다. JPA는 이런 연관관계를 Entity에 어노테이션을 붙여 설정할 수 있다. 전자가 자신이고 후자가 상대다. @OneToOne - 일대일 @OneToMany - 일대다 @ManyToOne - 다대일 @ManyToMany - 다대다 JPA를 통해 데이터들을 처리하려면 먼저 DB Table과 Java Entity를 만들어야 한다. 2021.03.24 - [study/Spring boot] - JPA와 Entity 기본 2021.03.25 - [study/Spr.. 이전 1 ··· 5 6 7 8 9 10 11 ··· 18 다음