본문 바로가기

java35

Spring AOP 구현 AOP란? AOP는 Aspect Oriented Programming의 약자로, 여러 객체에 공통으로 적용할 수 있는 기능을 분리해서 재새용성을 높여주 는 프로그래밍이다. Spring에서는 주로 Logging, Caching, Auditing, Performace monitoring등에 주로 사용되며, 런타임 시에 프록시 객체를 생성하여 공통 기능을 삽입하는 방식으로 동작한다. Spring AOP 구현하기 1. Application 혹은 Config파일에 @EnableAspectJAutoProxy 어노테이션 추가하기 @EnableAspectJAutoProxy @SpringBootApplication public class LogPracApplication { public static void main(S.. 2023. 3. 29.
ResponseDto 사용이유 Generic 타입으로 responseDto를 만들지 않고 바로 List로 넘겨버리게 되면 response가 배열타입으로 넘어가기 때문에 데이터를 가공할때 유연성이 떨어진다. Result로 한번 감싸게 되면 객체가 List를 감싼 형태로 반환된다. 데이터를 가공할때 유연하게 활용 할 수 있다. 2022. 12. 5.
변경 감지와 병합(merge) 준영속 엔티티? 영속성 컨텍스트가 더는 관리하지 않는 엔티티를 말한다. (프로젝트 themeService.setThemeScore 에서 수정을 시도하는 theme 객체이다. theme 객체는 이미 DB에 한번 저장되어서 식별자(primary key)가 존재한다. 이렇게 임의로 만들어낸 엔티티도 기존 식별자를 가지고 있으면 준영속 엔티티로 볼 수 있다.) 프로젝트 적용 예시 1. 테마 평점은 기본으로 0.0값이 들어가고 사용자가 review를 작성할때 평점이 반영되는데 그때 이미 theme는 db에 저장되어있는 객체이고 그 객체를 불러와서 다시 themeScore의 값만 변경하게 된다. 준영속 엔티티를 수정하는 2가지 방법 - 변경 감지 기능 사용 영속성 컨텍스트에서 엔티티를 다시 조회한 후 데이터를 수정.. 2022. 12. 5.
엔티티 설계시 주의점 1. 엔티티에는 가급적 setter를 사용하지 말자 - Setter가 모두 열려있다. 변경포인트가 너무 많아서, 유지보수가 어렵다. 2. 모든 연관관계는 지연로딩으로 설정 - 즉시로딩(EAGER)은 예측이 어렵고, 어떤 SQL이 실행될지 추적하기 어렵다. 특히 JPQL을 실행할 때 N+1 문제가 자주 발생한다. //JPQL select o From order o; -> SQL select * from order n(100) + 1 (order) == N + 1문제 - 실무에서 모든 연관관계는 지연로딩(LAZY)으로 설정해야 한다. - 연관된 엔티티를 함께 DB에서 조회해야하면, fetch join 또는 엔티티 그래프 기능을 사용한다. - OneToOne, ManyToOne 관계는 기본이 즉시로딩이므로 직.. 2022. 11. 29.
offset 오프셋 (컴퓨터 과학) 컴퓨터 과학에서 배열이나 자료 구조 오브젝트 내의 오프셋(offset)은 일반적으로 동일 오브젝트 안에서 오브젝트 처음부터 주어진 요소나 지점까지의 변위차를 나타내는 정수형이다. 이를테면, 문자 A의 배열이 abcdef를 포함한다면 'c' 문자는 A 시작점에서 2의 오프셋을 지닌다고 할 수 있다. 어셈블리어와 같은 저급 프로그래밍 언어에서 오프셋은 상대 주소(relative address)로 부른다. 2022. 11. 28.
queryDsl, jpql 차이점 package com.sparta.querydsl.entity; import com.querydsl.jpa.impl.JPAQueryFactory; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.transaction.annotation.Transactional; import java.. 2022. 11. 22.
queryDsl 기본 테스트 코드 테스트 코드 package com.sparta.querydsl.entity; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.annotation.Commit; import org.springframework.transaction.annotation.Transactional; import javax.persistence.EntityManager; import javax.persistence.PersistenceCont.. 2022. 11. 22.
@RequestParam, @RequestBody 2022. 11. 5.
Spring Sockets WebSocket - 사용자의 브라우저와 서버 사이이 인터렉티브 통신 세션을 설정할 수 있게 하는 고급 기술이다. - 개발자는 웹 소켓 API를 통해 서버로 메시지를 보내고 서버의 응답을 위해 서버를 폴링하지 않고도 이벤트 중심 응답을 받는 것이 가능합니다. - Socket Over HTTP (ws://...or wss://...) -> http상에 존재함(http 기반이다) - IE10+ (Can use pure WebSocket javascript library) SockJS - Like socket.io( NodeJS) Polyfill - IE 8+ (Use sockjs-client library) - STOMP(Streaming Text Oriented Messaging Protocol) : 토픽.. 2022. 11. 5.
Spring Security 작동 순서 1. http로 로그인 요청 2. 로그인 인증 요청이라면 UsernamePasswordAuthenticationFilter(이하 AuthencicationFilter)가 요청을 가로채 전달된 username, password 파라미터를 이용해 UsernamePasswordAuthenticationToken 인증 객체를 만든다. 3. 인증 객체를 인증하기 위한 AuthenticationManager 에 넘기고 인증을 위임한다. 4. AuthenticationManager 를 구현한 ProviderManager는 스프링 시큐리티가 기본적으로 제공하는 AuthenticationProviders에 인증 객체를 전달한다. 5. 인증에 사용되기 적합한 AuthenticationProvider 가 존재하면(여기는 D.. 2022. 10. 13.
스프링 입문 주차 과제1 PostResponseDto에서 @Builder 사용할때 @Getter도 같이 사용하는이유 @Gettor를 사용하지 않으면 response에서 응답이 제대로 넘어오지 못함 2022. 10. 13.
스프링 부트 동작 원리 1. 내장 톰캣 - 스프링에는 톰켓이 내장 되어있어서 따로 설치할 필요 없이 바로 실행가능 하다. A와 B가 서로 메세지를 주고 받기 위해서는 OS에서 제공하는 소켓이 필요하다. 예를들어 A가 5000번 포트번호로 최초의 연결 용도로 소켓을 오픈한다. B가 A의 IP주소와 포트번호를 통해5000번 포트에 연결을 성공하면, 무작위 포트 번호로 새로운 소켓을 만들고, 5000번 포트는 연결이 끊긴다. 이때 5000번 포트로 다른 사용자의 연결 요청을 계속 받기 위해서 새로운 포트와의 통신을 다중 스레드를 이용한다. 소켓 통신의 장점은 연결이 끊어지지 않는다는 점, 단점은 그 때문에 연결이 늘어날 수록 부하가 크다는 점이다. HTTP - 소켓 통신은 계속 연결되어 있기 때문에 사용자가 늘어남에 따라 부하가 커.. 2022. 10. 9.