본문 바로가기

Web/Spring19

Spring boot에서 Redis Cache 사용하기 모든 소스코드는 아래 github에서 더 편하게 보실 수 있습니다. https://github.com/yyy9942/redis-cache-exam yyy9942/redis-cache-exam Contribute to yyy9942/redis-cache-exam development by creating an account on GitHub. github.com 설정 시작하기 pom.xml에 spring-boot-starter-web, spring-boot-starter-data-redis를 추가해주세요. org.springframework.boot spring-boot-starter-data-redis org.springframework.boot spring-boot-starter-web applicat.. 2020. 5. 4.
[Spring] 트랜잭션의 전파 설정별 동작 트랜잭션의 전파 설정이란 Spring에서 사용하는 어노테이션 '@Transactional'은 해당 메서드를 하나의 트랜잭션 안에서 진행할 수 있도록 만들어주는 역할을 합니다. 이때 트랜잭션 내부에서 트랜잭션을 또 호출한다면 스프링에서는 어떻게 처리하고 있을까요? 새로운 트랜잭션이 생성될 수도 있고, 이미 트랜잭션이 있다면 부모 트랜잭션에 합류할 수도 있을 것입니다. 진행되고 있는 트랜잭션에서 다른 트랜잭션이 호출될 때 어떻게 처리할지 정하는 것을 '트랜잭션의 전파 설정'이라고 부릅니다. 전파 설정 옵션 트랜잭션의 전파 설정은 '@Transactional'의 옵션 'propagation'을 통해 설정할 수 있습니다. 각 옵션은 아래와 같습니다. REQUIRED (기본값) 부모 트랜잭션이 존재한다면 부모 트.. 2020. 3. 4.
[Spring] Spring session을 Redis에 저장했을 때 어떻게 저장될까? 개요 Spring에서 Global session전략을 사용할 때 일반적으로 redis를 사용합니다. Spring redis session을 적용한 이후 실제로 redis에 접속하여 값을 조회할 일은 거의 없습니다. 그렇기 때문에 세션 정보가 redis에 어떤 자료구조로 어떻게 저장되는지 한번 확인해보겠습니다. 간단하게 세션에 값을 저장하는 예제를 만들어 보겠습니다. STS에서 Spring boot starter를 사용하여 간편하게 만들 수 있습니다. Spring code 해당 프로젝트의 코드는 github에서 모두 확인하실 수 있습니다. https://github.com/yyy9942/spring-redis-session-exam yyy9942/spring-redis-session-exam Contrib.. 2020. 1. 3.
[Spring] Spring은 왜 memcached 대신 Redis를 선택했을까? 개요 Multi Server 환경에서의 Session데이터를 Servere마다 관리하도록 설계한다면 어떻게 될까요? 사용자가 로그인한 상태에서 요청 서버가 바뀐다면, 해당 사용자는 로그인이 해제될 것입니다.(해당 서버의 세션 저장소에는 사용자가 로그인한 데이터가 없으므로) 그렇기 때문에 웹 서버에서는 세션 데이터를 서버가 아닌 외부 저장소에 저장합니다. 이때 사용하는 저장소에 대해 의문이 들었습니다. Spring의 세션 클러스터링은 기본적으로 Redis를 이용하여 진행됩니다. 세션 정보 저장과 캐싱에 Redis를 사용하던 도중 왜 Spring은 Redis를 이용하게 되었을까에 대한 궁금증이 생겼습니다. RDBMS에도 저장할 수 있고 MongoDB, Memcached 등 다른 NoSQL에도 데이터를 저장할.. 2019. 10. 22.
[Spring Mybatis] 중복 쿼리를 include, sql로 대체하기 속성이 많은 테이블의 정보를 조회해야 할 때, WHERE 조건만 다른 쿼리를 짤 때 등 중복되는 쿼리를 작성해야 할 때가 있습니다. WHERE 조건을 제외한다면 다른 부분은 모두 중복되는 쿼리 SELECT id, name, delivery_type deliveryType, signature_menu signatureMenu, tel, zipcode, address, address_detail addressDetail, biz_number bizNumber, info, min_order_price minOrderPrice, notice, operating_time operatingTime, delivery_location deliveryLocation, owner_id ownerId, created_at .. 2019. 10. 16.
[Spring-boot JPA] 쿼리와 파라미터 확인방법 application.propertice에 다음 항목을 추가한다. logging.level.org.hibernate.type.descriptor.sql=tracespring.jpa.show-sql=true spring.jpa.properties.hibernate.format_sql=true spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true logging.level.org.hibernate.type.descriptor.sql=trace 2019. 9. 9.
[Spring-boot JPA] 즉시로딩(EAGER)과 지연로딩(LAZY) 즉시로딩(FetchType - EAGER)은 엔티티를 조회할 때 연관된엔티티를 함께 조회합니다. 상품 Item과 카테고리 Category 엔티티가 N:1관계일 때 상품 테이블에Category 엔티티를 추가할 수 있습니다. 이 때 fetch type을 정할 수 있는데, 이 타입을 LAZY로 설정하면 지연로딩, EAGER로 설정하면 즉각 로딩으로 설정할 수 있습니다. 즉시로딩은 Item 엔티티를 조회할 때 연관된 Category 엔티티를 즉시 조인해서 값을 넣어주게 됩니다. 지연로딩은 Item 엔티티를 조회할 때 연관된 Category 엔티티를 조인하지 않습니다. 즉 값을 넣어주지 않습니다. 대신 이 Category엔티티를 참조할 때 조인 쿼리를 작성하여 값을 넣어줍니다. 필요할 때 넣어준다는 뜻입니다. N.. 2019. 9. 6.
[Spring-boot JPA] JPA Hibernate Log 정렬해서 보여주기 application.properties파일에 다음 속성을 추가해주세요. spring.jpa.show-sql=true spring.jpa.properties.hibernate.format_sql=true show-sql 속성은 sql쿼리문을 보여주도록 true로 설정해주세요. spring.jpa.properties.hibernate.format_sql 속성은 코드센스에 잘 안보입니다. 직접 적어주세요. 이 속성은 sql query 로그가 한줄로 나오지 않고 정렬해서 나오도록 보여줍니다. 위 속성들을 적용한 걸과는 다음과 같이 정렬되어 보입니다. 2019. 9. 6.
[Spring-boot JPA] 맵핑 어노테이션 @Entity, @Table, @Column, @Id 속성과 개념 정리 객체 - 테이블 맵핑 : @Entity, @Table 필드 - 컬럼의 팹핑 : @Column 기본키의 맵핑 : @Id 조인 맵핑 : @ManyToOne, @JoinColumn @Entity @Entity 어노테이션을 클래스에 선언하면 그 클래스는 JPA가 관리합니다. 그러므로 DB의 테이블과 Class(VO, DTO)와 맵핑한다면 반드시 @Entity를 붙여주어야 합니다. @Entity가 붙은 클래스에는 다음 제약사항이 필요합니다. 1. 필드에 final, enum, interface, class를 사용할 수 없습니다. 2. 생성자중 기본 생성자가 반드시 필요합니다. @Entity의 속성 1. name : 엔티티 이름을 지정합니다. 기본값으로 클래스 이름을 그대로 사용합니다. @Table @Table 어.. 2019. 9. 5.