본문 바로가기

Java/Spring19

23-07-09) Spring 강의 노트 FetchType 더보기 FetchType.LAZY(지연로딩)는 필요한 시점에 필요한 정보만 가져온다. FetchType.EAGER(즉시로딩)은 조회하는 즉시 연관된 모든 정보를 가져온다. 원래는 조회만 하면 @Transactional이 필수가 아니지만, 지연로딩이 적용된 엔터티를 조회할 땐 영속성 컨텍스트가 필요함으로 @Transactional이 필요하다. LAZY는 데이터가 필요할 때 필요한 데이터의 값만 가져온다. 그러니 모든 정보가 필요하지 않다면 LAZY로 설정해야한다. EAGER로 설정시 불필요한 데이터까지 로딩하여 성능저하를 일으킬 수 있다. 영속성 전이 더보기 @OneToMany(mappedBy = "user", cascade = {CascadeType.PERSIST, CascadeType.. 2023. 7. 9.
23.07.07) Spring 강의 노트 save 메서드가 없는데 DB에 어떻게 저장이 되는 것일까? 더보기 영속성 컨텍스트의 변경감지 기능 때문이다. 영속성 컨텍스트는 엔터티 객체를 효율적이고 쉽게 관리하기 위해서 만들어진 공간이다. 이 영속성 컨텍스트는 내부에 1차 캐시라는 저장공간이 따로 있다 여기에는 엔터티 객체가 담기게 된다. 우리가 JPA로 쿼리메서드를 날리게 되면 영속성 컨텍스트 내부 저장 공간인 1차 캐시에서 먼저 객체를 찾아보고 없으면 그 때 DB에 조회하는 쿼리를 날려 객체정보를 갖고 와 1차 캐시에 저장시킨다. 그렇게 1차 캐시에는 DB에서 조회된 객체의 초기 상태가 담기게 된다. 그리고 마지막으로 우리가 수정한 부분이 commit이 되어 DB에 반영 되기 전에 1차 캐시에 저장된 초기 상태와 현재 상태를 서로 비교해본다. .. 2023. 7. 7.
23.07.06) Spring 강의 노트 RestTemplate 더보기 다른 곳에서 만든 API를 가져다 사용할 수 있도록 도와주는 spring 프레임워크의 일부 RestTemplat 주입 더보기 private final RestTemplate restTemplate; public RestTemplateService(RestTemplateBuilder builder) { this.restTemplate = builder.build(); } 요청 URL 만들기 더보기 public ItemDto getCallObject(String query) { URI uri = UriComponentsBuilder .fromUriString("http://localhost:7070") .path("/api/server/get-call-obj") .queryPa.. 2023. 7. 6.
23.07.01) Spring 강의 노트 복습 키워드 더보기 Filter, Spring Security 강의를 들었지만 이해를 전혀 하지 못했으니 다시 복습하기 2023. 7. 1.
23.06.30) Spring 강의 노트 암호화 더보기 비밀번호는 정보통신망법, 개인정보보호법에 의해 암호화가 의무임. 양방향 암호 알고리즘: 암호화와 복호화가 가능 단방향 암호 알고리즘: 암호화만 가능 불호화 불가능 패스워드 확인 절차: 1. 아이디, 패스워드(평문) 입력. 2. 서버에서 패스워드(평문) 암호화 알고리즘으로 암호문으로 생성. 3. DB에 저장된 아이디, 패스워드(암호문)와 일치 여부 확인 Spring Security 프레임워크가 제공하는 암호화 기능과 일치여부 확인 해주는 메서드를 통해서 확인함. // 사용예시 // 비밀번호 확인 if(!passwordEncoder.matches("사용자가 입력한 비밀번호", "저장된 비밀번호")) { throw new IllegalAccessError("비밀번호가 일치하지 않습니다."); }.. 2023. 6. 30.
23.06.29) Spring 강의 노트 일반적으로는 @Component를 사용하여 Bean을 자동으로 등록하는 것이 좋다. 규모가 커질 수록 Bean들이 많아지기 때문에 자동등록을 사용하면 편리하다. 그렇다면 Bean 수동 등록은 언제 사용 하는가? 더보기 기술적인 문제나 공통적인 관심사를 처리할 때 사용하는 객체들은 수동으로 등록하는 것이 좋다. 예를 들어 공통 로그 처리와 같은 비즈니스 로직을 지원하기 위한 부가적이고 공통적인 기능들을 기술 지원 Bean이라 부르고 수동등록 한다. 비즈니스 로직 Bean 보다는 수가 적기에 수동으로 등록하기 부담스럽지 않다. Bean 수동 등록하는 방법 더보기 @Configuration public class PasswordConfig { @Bean public PasswordEncoder password.. 2023. 6. 29.
23.06.26)Spring Spring의 탄생 배경 더보기 Spring이 탄생 하기 전에는 EJB(EnterpriseJavaBeans)와 같은 기술을 중심으로 개발을 했다. 하지만 EJB는 복잡하고 무거워서 개발자들은 실제 비즈니스 로직보다는 플랫폼 자체의 복잡성을 다루는 데 더 많은 시간을 소비 했다. 그리고 테스트도 배포를해야만 가능했기에 이러한 문제들을 해결하기 위해서 Spring이 탄생했다. POJO(PlainOldJavaObject) 더보기 Spring은 POJO(PlainOldJavaObject)프로그래밍을 지향한다. POJO란 말 그대로 단순한 오래된 자바 객체이다. 다른 라이브러리나 프레임워크를 사용하지 않고 순수한 자바 언어로만 객체를 구성하도록 하는 것이다. 외부 라이브러리나 프레임워크를 사용하여 객체를 만든다면.. 2023. 6. 26.
23.06.25)Spring 강의 노트 3 Layer Architecture 란? 더보기 하나의 클래스에서 기능이 추가되고 API가 많아지게 되면 시간이 지날수록 코드가 쌓이면 유지보수 하기 힘듦. 해당 서비스를 개발하는 사람이 바뀔 때 이해하기도 힘듦. 이를 해결하기 위해 처리 과정을 3개의 계층으로 분리해서 처리 Presentation Layer: 사용자와의 상호 작용을 처리하며, UI 및 사용자 요청의 처리를 담당 Business Logic Layer: 애플리케이션의 핵심 기능적인 로직을 수행하며, 계산, 데이터 변환 등의 기능을 담당 Data Access Layer: 데이터베이스와의 통신을 담당하며, 데이터의 검색, 저장, 업데이트 등을 수행. JPA 란? 더보기 JPA를 알기 전에 ORM을 알아야 한다. ORM이란 Object-Rel.. 2023. 6. 25.
23.06.24) Spring 강의 노트 자바에선 JSON 타입을 지원하지 않는다. 그러면 어떻게 JSON 데이터를 반환해야 할까? 더보기 1. JSON 형식의 html 파일을 반환해 준다. 2. @ResponseBody 어노테이션을 추가해서 JSON 형식의 문자열로 반환해 준다. @GetMapping("/response/json/string") @ResponseBody public String helloStringJson() { return "{\"name\":\"Robbie\",\"age\":95}"; } 3. 객체 반환하기. Spring에서는 자동으로 Java 객체를 JSON으로 반환해 준다. @GetMapping("/json/class") @ResponseBody public Star helloClassJson() { return new.. 2023. 6. 24.