본문 바로가기

전체 글

(22)
Axios 요청 관련 삽질(auth) import axios from 'axios'; export default axios.create({ baseURL: 'http://localhost:3000', headers: { 'Content-Type': 'application/json' }, // auth가 header 오브젝트 위에 위치해야 정상동작함 auth: { username: 'username', password: 'password' }, proxyHeaders: false, credentials: false }); axios 기본 config 세팅시 auth가 header보다 뒤에 위치해 있으면 400 에러가 발생한다. 의도는 먼저 인증을하고 헤더 값을 실어서 요청을 보내야 정상 동작이 된다는건 알겠지만, 일반적으로 config 순서 ..
JWT(JSON Web Token) 정리 JWT가 다른 토큰하고 가장 다른 부분은 토큰 자체가 데이터를 가지고 있다는 점이다. 일반적인 토큰의 흐름을 생각한다면 API 요청 시에 들어온 토큰을 보고 이 토큰이 유효한지 확인하게 된다. 보통은 데이터베이스에 토큰을 저장해 놓고 만료시간이나 토큰의 사용자 등을 저장해 놓고 유효한 토큰인지 등을 검사하고 유효한 경우 해당 사용자라고 인식하고 이 사용자의 권한으로 사용할 수 있는 정보를 조회하게 된다. 요청마다 데이터베이스를 조회하는 것은 비용이 꽤 크므로 캐시서버 등을 두어 성능을 높이기도 한다. JWT의 경우는 토큰을 받아서 서명으로 유효한 토큰인지 검증을 한 뒤에 유효하다고 판단하면 클레임셋을 디코딩해서 토큰에 담긴 데이터를 열어본다. JWT 단점 앞에서 보았듯이 클레임셋은 암호화하지 않는다. 그..
스프링 빈 순환 참조 (The dependencies of some of the beans in the application context form a cycle) 2020-05-05 11:01:07.146 WARN 24213 --- [ main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'accountController' defined in file [/Users/seongjin/Documents/taggare/server/out/production/classes/com/sns/server/account/Accoun..
스프링 시큐리티 코어 스프링 시큐리티 코어 동작 방식 정리 AuthenticationManager: AuthenticationProvider를 들고있는 주머니 역할 Builder 패턴으로 구현 등록된 Authentication Provider들에 접근하는 유일한 객체 단순 인터페이스에 불과, 내장 구현체: Provider Manager AuthenticationManager를 구현해서 쓰지말자(Pivotal사 스프링 개발자보다 더 잘 만들 자신이 없다면..) 직접 구현해서 만들어진 인터페이스가 아니다. ProviderManager.class(Spring Security's DeCompiled ProviderManager Class) public Authentication authenticate(Authentication au..
1290. Convert Binary Number in a Linked List to Integer(비트연산) Given head which is a reference node to a singly-linked list. The value of each node in the linked list is either 0 or 1. The linked list holds the binary representation of a number. Return the decimal value of the number in the linked list. 링크드리스트의 각 노드 값은 0 또는 1 이다,. 링크드리스트는 이진수를 표현한다. 결과는 이진수를 10진수로 반환한다. Input: head = [1,0,1] Output: 5 Explanation: (101) in base 2 = (5) in base 10 Input: hea..
[Lombok] @Builder와 @NoArgsConstructor 동시 사용시 주의사항 @Builder와 @NoArgsConstructor를 함께 사용하려면, @AllArgsConstructor도 함께 사용하거나 모든 필드를 가지는 생성자를 직접 만들어 줘야 한다. 또한, @Builder를 사용할 때 @NoArgsConstructor뿐만 아니라 손수 만든 다른 생성자가 있다면, 그 때도 모든 필드를 가지는 생성자가 필요하다. 문제 발생 아래처럼 @Builder와 @NoArgsConstructor를 함께 사용하면, 컴파일 시 에러가 발생한다. // @Getter @Setter @EqualsAndHashCode 등등 @Builder @NoArgsConstructor public class MyName { private String first; private String last; } Error..
@ExceptionHandler를 통한 예외처리 커스텀 예외들은 표준 자바 예외부분이 아닌 속성 정보 및 비즈니스 로직 정책에 의한 예외들을 핸들링 할 수 있는 유연성을 제공한다. 이러한 특징은 애플리케에션에 에러코드 같은 부가정보를 저장할 수 있고, Runtime상에서 사용자에게 발생한 에러를 예외 처리하거나 보여주기 위해 사용한다. @ExceptionHandler 특정 핸들러 클래스 및 / 또는 핸들러 메소드에서 예외를 처리하기위한 어노테이션이다. https://docs.spring.io/spring/docs/5.2.5.RELEASE/javadoc-api/ Spring Framework 5.2.5.RELEASE API docs.spring.io CustomExceptionHandler @RestControllerAdvice public class ..
자바스크립트 forEach 루프에 대해 몰랐던 3 가지 1. return은 loop를 stop하지 않는다. 아래 코드가 루프를 돈 다음 1,2까지만 돌고 중지한다고 생각하십니까? array = [1, 2, 3, 4]; array.forEach(function (element) { console.log(element); if (element === 2) return; }); // Output: 1 2 3 4 아니요, 그렇지 않습니다. 당신이 자바 배경에서 온다면, 아마도 그것이 어떻게 가능한지 스스로에게 물어볼 것입니다. 그 이유는 forEach 함수에서 콜백 함수를 전달하기 때문입니다. forEach 함수는 일반 함수처럼 작동하며 하나의 요소에서 반환하더라도 요소가 2 인 경우 각 요소에 적용됩니다.\ From the official MDN docs Ther..