본문 바로가기

분류 전체보기76

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.05) 나만의 Blog 구현하기 ResponseDto를 리스트로 래핑 후 반환하기 더보기 responsedto를 하나씩 리스트로 감싸서 반환하면 데이터의 구조를 명확히 표현하고 추후에 메타데이터를 추가하거나 다른 종류의 데이터를 함께 반환하는 것이 쉬워진다. 만약 응답 형태를 변경할 가능성이 낮고, API구조가 단순하다면 원래처럼 그냥 바로 responsedto로 반환하는것이 낫다. @Getter public class PostListResponseDto { private List postList; public PostListResponseDto(List postList) { this.postList = postList; } } 위 처럼 ListDto 하나 생성 후에 아래 처럼 원래의 responsedto를 랩핑하여 반환하면 된다. p.. 2023. 7. 5.
23.07.04) 나만의 Blog 구현하기 Post 엔터티에서 User에 있는 id, password를 받아와서 데이터베이스에 저장 해야 하는데, User의 id와 password를 가져오지 못함. 더보기 로그인 할 때 발급 받았던 토큰에는 사용자 정보가 담겨져 있음. jwtUtil에 사용자 조회하는 메서드가 있으니 이것을 활용하여 가져올 수 있음 public Claims getUserInfoFromToken(String token) { return Jwts.parserBuilder().setSigningKey(key).build().parseClaimsJws(token).getBody(); } 토큰에 있는 claims 을 가져와서 get 메서드를 사용하여 값을 추출할 수 있음 Claims claims = jwtUtil.getUserInfoFro.. 2023. 7. 4.
23.07.03) 나만의 Blog 구현하기 진행 상황: 회원 가입 API, 로그인 API 구현 완료. 앞으로 구현해야 할 것: 게시글 작성, 수정, 삭제 API를 토큰을 검사하여 유효한 토큰일 경우에만 동작하도록 수정. 복습필요: Servlet, 엔터티가 두 개 이상일 때 어떻게 조작해야 하는지 2023. 7. 3.
23.07.02) 항해99 2주, 3주 차를 마무리 하며 ● 2주 차 저번 주에 목표했던 1일 1시스템 구현은 실패했다. 정확히 말하면 목표를 바꿨다. 알고리즘 주차가 끝나고, 주특기 주차에 들어오면서 학습 방향을 재설계했기 때문이다. 현재는 Spring 주특기 주차에 들어왔으며, 하나도 모르겠다. 정말. 기술 매니저님과 얘기를 나눈 후 학습 방향을 바꿨다. 주어진 과제를 마무리하고 진도를 맞추려면 구현보단 새로운 지식을 넣고 쌓아가는 것에 초점을 맞췄다. 현재는 강의를 듣고, 과제 제출을 목표로 이번 주를 마무리 할 것 같다. ● 3주 차 이렇게 회고하는 방식은 전혀 도움이 될 것 같지 않다. 미래의 내가 도움이 될 만한 것을 기록해야 한다. 그래서 한 주를 보내면서 기술적인 부분이나 제대로 잡히지 않은 개념들을 하루하루 키워드로 남겨놓고, 일요일에 다시 복.. 2023. 7. 2.
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.