본문 바로가기
728x90

전체 글196

[SpringBoot] 스프링 controller에서 json 받기 (@RequestBody, @ResponseBody 어노테이션 사용) @RequestBody, @ResponseBody 어노테이션을 사용하여 컨트롤러에서 JSON 데이터를 주고받을 수 있다. api 요청 프로그램으로 사용한다면 Content-Type을 꼭 application/x-www-form-urlencoded 로 설정해주어야 한다. 1. @RequestBody로 JSON 정보 받기 JSON 형태의 정보를 Map과 커맨드 객체로 변환하기 위해 jackson 의존성 추가. implementation('org.springframework.boot:spring-boot-starter-web') 2. Ajax 간단한 페이지 작성 (home.jsp) Ajax 컨트롤러로 요청을 보낼 ajax 함수. JSON.stringify 함수를 이용하여 데이터를 보내고 contentType을.. 2022. 10. 25.
OSIV(Open Session in view)이란? 장단점, 써야할지 말아야할지 Open-In-View / Open-Session-In-View / Open-EntityManager-In-View 스프링부트 2.x 이상을 사용 중이라면 아래 경고를 한번 쯤 본 적 있을 것이다. 2022-10-21 15:19:29.799 WARN 45628 --- [ restartedMain] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning 여기서 .. 2022. 10. 21.
[JPA] 컬렉션 조회(1대다 관계) 최적화 이번엔 저번 포스팅에 이어 주문 api XToMany 관계인 Order(주문)과 OrderItem(주문상품)에 대한 이야기다. XToOne의 경우 fetch join(left outer join)을 하면 성능 최적화가 되는데, XToMany 관계는 join하면 다(1:다) 측 데이터랑 물려서, 데이터가 뻥튀기(?)된다. 이 뻥튀기라는 말은 이따 코드로 볼 수 있겠지만, (예를들어 물건 3개를 산 하나의 주문내역을 확인 할 때, 1개의 결과가 나오는게 아니고 3개의 상품이 연결되어 있어서, 결과가 3개가 나와버리는 상황을 말한다.ㅜㅜ) 그래서 고려할게 많아진다. 일단 간단하게 코드를 살펴보자. 일단 처음에 짠 코드는 다음과 같았다. [Order] public class Order { {...} @OneTo.. 2022. 10. 14.
[JPA] jdbcsqlintegrityconstraintviolationexception null not allowed for column 에러 로그: jdbcsqlintegrityconstraintviolationexception null not allowed for column ... 해결방법: # 1 H2 데이터 베이스 버전 1.4.200 으로 변경. # 2 H2 database GenerationType.IDENTITY 오류 Member.java의 @GeneratedValue(strategy = GenerationType.IDENTITY) 부분을 @GeneratedValue(strategy = GenerationType.SEQUENCE) 로 변경 # 3 H2 2.1.210 버전에서 ;MODE=MySQL 추가 spring.datasource.url=jdbc:h2:tcp://localhost/~/test;MODE=MySQL 2022. 10. 14.
jpa 지연로딩 사용 주의점 (jpa 지연 로딩과 조회 성능 최적화) 주문 API를 만들며 만난 jpa 지연로딩 문제와 주의점. XToOne 성능 최적화에 대한 이야기이다. 우선 주문 API는 다음과 같은 구조다. (전부 XToOne 관계) order - member (ManyToOne) order - delivery (OneToOne) order - orderitem : XToMany @GetMapping("/orders") public List orders() { List all = orderRepository.findAllByString(new OrderSearch()); for (Order order : all) { order.getMember().getName(); order.getDelivery().getStatus(); List orderItems = orde.. 2022. 10. 13.
Setter없이 Entity update 값의 변화점을 예측하기 힘들어지게하는 Setter는 지양해야 한다. 이후 Setter에 의한 문제가 발생할 여지를 남겨두는 것은 좋지 않기 때문이다. 물론 '무조건' 쓰지 말아야 하는 것은 아니다. 단순히 필드 하나만 변경하는 경우라면 setter를 써도 된다. 그럼 Setter없이 어떻게 Entity를 update 할 수 있을까? update가 필요한 값만을 받는 메서드를 따로 생성해 그것을 명시적으로 사용하면 된다. @RestController ... @PostMapping("/update/{id}") public void updateCategory(@PathVariable("id") Long id, @RequestBody CategoryDto categoryDto) { categoryService... 2022. 10. 9.
[JAVA] Optional 클래스 Spring Data JPA를 사용하며 CrudRepository의 findById 메서드 리턴 타입인 Optional 클래스를 살펴보았다. Optional은 Java 8에 추가된 새로운 API이며 'null일 수도 있는 객체'를 감싸는 일종의 Wrapper 클래스로, 여러 if 로직 대신 언어 차원에서 null 문제를 해결할 수 있게 해준다. 한마디로 null 처리를 세련되게 다룰 수 있게 도와주는 녀석이다. Optional optional 이러한 optional 변수 내부에는 null이 아닌 T 객체가 있을 수도 있고 null이 있을 수도 있다. Optional 클래스는 여러 가지 API를 제공하여 null일 수도 있는 객체를 다룰 수 있도록 돕는다. null 처리를 세련되게 다룰 수 있다고 했는데,.. 2022. 10. 6.
도메인 모델 패턴, 트랜잭션 스크립트 패턴 (Domain Model Pattern, Transaction Script Pattern) 도메인 모델 패턴, 트랜잭션 스크립트 패턴 마틴 파울러가 재창한 두개의 개념으로, 비즈니스 로직을 처리하는 2가지 패턴을 말한다. 책임 소재가 Domain Level이냐 Script Level이냐의 차이에 따라 구분된다. 1. 도메인 모델 패턴 (Domain Model Pattern) 이란 Domain 부분에서 비즈니스 로직을 가지고 객체 지향의 특성을 적극 활용 하는 것을 도메인 모델 패턴이라 한다. 대부분의 비즈니스 로직이 엔티티 안에 구성되어있다. 서비스 계층은 엔티티에 필요한 역할을 위임하는 역할을 한다. 엔티티 안에 비즈니스 로직을 가지고 객체지향을 활용하는 기법이다. 도메인 모델? 도메인을 모든 사람이 동일한 관점에서 이해할 수 있고 공유할 수 있도록 단순화 시킨 것. 즉, 특정 도메인을 개념.. 2022. 10. 3.
[JPA] No Property 메소드명 found 에러 해결방법 (No property 'xx' found for type 'x') No property 'xx' found for type 'x' Repository에 만들어둔 메소드명이 Entity에 존재하지 않기 때문에 사용할 수 없다는 에러. 메서드 명 종류가 꽤 많기 때문에 전체 리스트는 아래 링크를 참조해서 고치면 된다. https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repository-query-keywords Spring Data JPA - Reference Documentation Example 109. Using @Transactional at query methods @Transactional(readOnly = true) interface UserRepository extends JpaRep.. 2022. 10. 1.
728x90