JPA Auditing이란? 생성자, 수정자, 생성 시간, 수정 시간과 같은 메타 데이터를 자동으로 관리할 수 있는 JPA 라이브러리이다. Auditing 적용방법 @EnableJpaAuditing JPA Auditing 기능을 활성화하는 애노테이션으로 꼭 활성화를 시켜주어야 Auditing이 정상적으로 동작한다. * Config class에서 @EnableJpaAuditing을 넣어주어도 무방하다. @EnableJpaAuditing @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } @EntityLis..
Generic이란? 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법이다. 예시1 class Person { public T info; } Person p1 = new Person(); Person p2 = new Person(); Person의 Info를 String으로 받을 수도 있고, StringBuilder로 받을 수도 있다. 따라서 p1의 타입은 Person 클래스 타입이고 내부에서 사용하는 제네릭 변수의 타입이 String이라는 뜻이다. Generic이 필요한 이유 class StudentInfo{ public int grade; StudentInfo(int grade){ this.grade = grade; } } class StudentPerson{ public StudentInf..
Stream이란? 자바8 이상부터 사용 가능한 데이터의 흐름이다. Stream을 사용하면 배열과 컬렉션 인스턴스에 대한 반복작업을 for문 보다 짧고 간결하게, 다양한 라이브러리 함수를 조합해서 편리하게 작성이 가능하며, 간단하게 병렬처리를 할 수 있다. Stream 실행 과정 Stream은 스트림 인스턴스 생성 -> 가공(필터링, 맵핑 등의 원하는 작업) -> 결과(작업한 결과물을 반환하면서 스트림 종료) Stream 생성 배열 스트림 String[] arr = new String[]{"a", "b", "c"}; Stream stream = Arrays.stream(arr); Stream streamOfArrayPart = Arrays.stream(arr, 1, 3); // 1~2 요소 [b, c] 컬..
1. RabbitMQ 다운로드 brew update brew install rabbitmq 2. 환경 변수 설정 vim ~/.zshrc //아래 내용 추가 export PATH=$PATH:/opt/homebrew/sbin source ~/.zshrc 3. RabbitMQ 실행 rabbitmq-server 또는 brew start 로 실행 brew services start rabbitmq 4. RabbitMQ 접속 http://localhost:15672 Default ID, PW = guest Spring Dependency 추가 implementation "org.springframework.boot:spring-boot-starter-actuator" implementation "org.spring..
Session.setAttribute("user", new SessionUser()); 를 사용해서 User A, B를 저장하면 Session.getAttribute("user") 사용 시 어떻게 유저를 구분하여 정확히 값을 가져올 수 있을까? 세션은 서버와 클라이언트가 연결된 상태를 말한다. 즉 세션을 통해서 getAttribute를 한 순간부터 그 유저라는 것을 알고있는 것이다. 모든 session에서 key가 "user"인 값을 찾는 것이 요청을 보낸 Session에서 attribute가 "user"인 값을 찾는 것이다. 다음과 같이 서버에는 각 클라이언트와의 세션 정보가 있다. 이때 클라이언트가 session을 통해서 요청을 보내면 해당 session에서 유저를 찾아낼 수 있는 것이다.
Dirty Check( = 상태 변경 확인) JPA에서는 트렌잭션이 종료되는 시점에 모든 변경 사항을 반영시킨다. Entity를 조회한다면 조회된 시점에 스냅샷을 남겨두고 트랜잭션 종료 시점에 Entity에 변경 사항이 있다면 update 후 종료한다. 예시 코드 @RequiredArgsConstructor @Service public class PostsService { private final PostsRepository postsRepository; @Transactional public Long update(Long id, PostsUpdateRequestDto requestDto){ Posts posts = postsRepository.findById(id).orElseThrow(() -> ne..