TIL ✍️

· TIL ✍️
오늘 목표 숙련 주차를 페이징만 듣고 심화로 넘어갈랬는데 숙련을 들어야 심화를 들을 수 있어서 후딱 듣고 심화로 넘어갔다. 오늘 다 들어버리려고 했는데 노는 게 젤 좋아서,, 4시간 분량 중 1시간 반 남았다. 근데 50분어치는 아는 거라서 2배속으로 들을 듯. 낼 다 듣고 과제해야지. 캐스케이드란 ? 엔티티의 상태 변화를 전파시키는 옵션이다. @OneToMany 나 @ManyToOne에 줄 수 있는 옵션이다. @Entity @Getter @Setter @Table(name = "food") public class Food { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; privat..
· TIL ✍️
오늘 목표 숙련주차 완강 -> 다 못 들었고, 다 들을 필요 없을 것 같아서 페이징까지만 봤고, 낼부터 심화 강의로 넘어갈 예정 문제 이번에 뉴스피드 프로젝트를 할 때, 스프링 시큐리티로 인증 후 @AuthenticationPrincipal로 가져온 UserDetails 안에 있는 User 엔티티를 이용해서, 패스워드를 변경하는 API를 만들고 있었다. 근데 update 쿼리가 안 나간다!! 이게 뭐여 하면서 일단은 서비스단에서 User의 nickname을 이용해서 다시 레포지토리에서 가져오는 식으로 해결을 했었다. 오늘 마침 여유도 있겠다 그 부분을 해결해 봤다. 아, 이게 트러블 슈팅이네 일단 에러가 났던 코드는 밑과 같다. @PatchMapping("/api/users/password") publi..
· TIL ✍️
RestTemplate Get 요청 방법 private final RestTemplate restTemplate; // RestTemplateBuilder의 build()를 사용하여 RestTemplate을 생성합니다. public RestTemplateService(RestTemplateBuilder builder) { this.restTemplate = builder.build(); } 레스트 템플릿을 매개변수로 받는 것이 아니라, 빌더를 받아서 빌드해줘야 한다!! public ItemDto getCallObject(String query) { // 요청 URL 만들기 URI uri = UriComponentsBuilder .fromUriString("http://localhost:7070") .pa..
· TIL ✍️
문제 시큐리티에서 UserDetails 를 가져와서, 비밀번호를 수정하는 API를 만들고 있었다. 근데 업데이트 SQL문이 나가질 않는다.. 문제의 코드다. @PatchMapping("/password") public ResponseEntity updatePassword( @AuthenticationPrincipal UserDetailsImpl userDetails, @Valid @RequestBody UserPasswordUpdateRequestDto requestDto) { userService.updatePassword(userDetails.getUser(), requestDto); return ResponseEntity.ok().build(); } /** * 비밀번호 수정 */ @Transacti..
· TIL ✍️
문제1 MySQL 자료형 중 datetime(6) 과 같이 괄호 속 숫자는 무엇일까 이번 뉴스피드 프로젝트에서 JPA로 엔티티를 만들던 중 JPA가 만들어준 SQL문을 보고 있었다. Hibernate: create table users ( created_at datetime(6), id bigint not null auto_increment, modified_at datetime(6), login_id varchar(20) not null, nickname varchar(20) not null, description varchar(40), password varchar(60) not null, primary key (id) ) engine=InnoDB Hibernate: alter table users ..
· TIL ✍️
JWT(Json Web Token) JWT는 웹상에서 정보를 JSON 으로 주고 받기 위한 암호화된 토큰이다. JWT는 크게 header, payload, signature 로 구성되어 있으며, 셋은 "." 으로 구분이 된다. header 에는 어떤 암호화 알고리즘을 사용하는지 등이 들어있다. payload 에는 전달하려는 정보를 (이를 claim이라 부른다) 넣어두며, JWT는 원문을 읽을 순 있기 때문에 인증에 필요한 최소한의 정보 (예를 들면 아이디, 토큰 만료일자, 권한의 범위 등) 만 넣어둔다. signature 에는 header와 payload를 시크릿키로 암호화를 해둔다. 이로인해 토큰이 조작되어도 시그니처를 통해 변경여부를 확인할 수 있다.
· TIL ✍️
Object mapping 객체 간 매핑을 뜻하며, 엔티티를 DTO로 변환하는 등과 같이 다른 객체로 변환하거나 합치는 경우에 사용한다. 보통 이 경우엔 코드 중복이 발생하기 쉽고, 실수하기도 쉽고, 필드 수정이나 삭제가 일어날 경우 역시 수정이 필요하고, 비즈니스 로직에 섞이기 때문에 생산성이 떨어진다. 따라서 객체 매핑 라이브러리를 이용하여 이를 해결하며, 대표적으로 ModelMapper와 MapStruct 가 있다. 두 라이브러리 중에서는 MapStruct가 더욱 장점이 많아서 이를 쓰며, 둘 간의 차이점은 다음과 같다. 컴파일 시점에서 어노테이션을 읽어 구현체를 만들어내서 리플렉션이 발생하지 않음. 처리속도가 더 빠름 (원본 글에선 단위가 m/s 인데 이게 머선 단위지..) 컴파일 시 오류를 확인..
· TIL ✍️
오늘 스프링 시큐리티를 다루다가 겪었던 에러다. 과제 제출 5분전까지 해결을 못해서 일단 제출하고 고쳤다 ㅋ 문제 Spring security filter 추가 IllegalArgumentException : does not have a registered order 에러 발생 해결 @Bean public JwtFilter jwtFilter() { return new JwtFilter(jwtUtil, userDetailsService); } @Bean public ExceptionHandleFilter exceptionHandleFilter() { return new ExceptionHandleFilter(); } @Bean public SecurityFilterChain securityFilterCha..
· TIL ✍️
아주 유용한 기능을 하나 알게 됐다. 스프링 시큐리티를 쓰다보면 맨날 기본설정 자동으로 다 해줘서 403 스테이터스를 보게 되는데.. 시큐리티를 한 줄로 없애주는 설정. @SpringBootApplication(exclude = SecurityAutoConfiguration.class) // Spring Security 인증 기능 제외 public class SpringAuthApplication { public static void main(String[] args) { SpringApplication.run(SpringAuthApplication.class, args); } } @SpringBootApplication(exclude = SecurityAutoConfiguration.class) exc..
yunjae62
'TIL ✍️' 카테고리의 글 목록 (10 Page)