전체 글 8

React CRA 환경에서 eject하지 않고 Webpack 커스텀하기

Asia-Pacific(APAC) 지역에서 담당하는 프로젝트의 Repository를 fork하여 Korea에 서비스를 할 수 있게 환경을 구축하는 프로젝트를 맡게 되었다. 클라이언트 프로젝트 환경은 Typescript 기반의 리액트로 만들어져 있고, CRA로 생성된것으로 확인하였다.우리팀은 대부분은 MacOS 기반에서 개발을 하지만, 간혹 Windows를 사용하시는 분들 위해 Mac/Linux/Windows 용의 스크립트를 만들고, 각 서버 환경별 Docker Container 배포를 위한 Dockerfile 만들어서 Korea 인프라팀에게 공유하였다. 그러나 프로젝트가 물흐르듯이 진행되다가 문제가 발생하였다.디자인 팀의 퍼블리싱하시는 분이 마크업을 진행하실 때 CSS로 S3 bucket을 Full..

React 2022.04.27

JWT(JSON Web Token) 정리

JWT가 다른 토큰하고 가장 다른 부분은 토큰 자체가 데이터를 가지고 있다는 점이다. 일반적인 토큰의 흐름을 생각한다면 API 요청 시에 들어온 토큰을 보고 이 토큰이 유효한지 확인하게 된다. 보통은 데이터베이스에 토큰을 저장해 놓고 만료시간이나 토큰의 사용자 등을 저장해 놓고 유효한 토큰인지 등을 검사하고 유효한 경우 해당 사용자라고 인식하고 이 사용자의 권한으로 사용할 수 있는 정보를 조회하게 된다. 요청마다 데이터베이스를 조회하는 것은 비용이 꽤 크므로 캐시서버 등을 두어 성능을 높이기도 한다. JWT의 경우는 토큰을 받아서 서명으로 유효한 토큰인지 검증을 한 뒤에 유효하다고 판단하면 클레임셋을 디코딩해서 토큰에 담긴 데이터를 열어본다. JWT 단점 앞에서 보았듯이 클레임셋은 암호화하지 않는다. 그..

카테고리 없음 2020.05.06

스프링 빈 순환 참조 (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/acc..

Spring 2020.05.05

스프링 시큐리티 코어

스프링 시큐리티 코어 동작 방식 정리 AuthenticationManager: AuthenticationProvider를 들고있는 주머니 역할 Builder 패턴으로 구현 등록된 Authentication Provider들에 접근하는 유일한 객체 단순 인터페이스에 불과, 내장 구현체: Provider Manager AuthenticationManager를 구현해서 쓰지말자(Pivotal사 스프링 개발자보다 더 잘 만들 자신이 없다면..) 직접 구현해서 만들어진 인터페이스가 아니다. ProviderManager.class(Spring Security's DeCompiled ProviderManager Class) public Authentication authenticate(Authentication au..

Spring 2020.05.04

[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..

Spring 2020.04.13

@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 ..

Spring 2020.04.11

자바스크립트 구조분해할당(Destructuring) 개념과 팁

MDN Web Docshttps://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment정의: 구조 분해 할당 구문은 배열이나 객체의 속성을 해체하여 그 값을 개별 변수에 담을 수 있게 하는 JavaScript 표현식입니다. 기본적인 Destructuring의 사용법은 위 MDN 링크에서 참고하세요.이 글을 쓴 목적은 실무에서 코드 개선 및 이슈가 발생했을 때, 대처했던 내용을 토대로 개인적인 팁을 공유하기위해 작성했습니다. 서버에서 응답받은 response 예시다.const response = { notifications: { follow: true, alerts: ..

자바스크립트 커링패턴(Currying Pattern)

커링패턴은 함수를 작성 시, 인자 전체를 넘겨서 바로 호출할수 있지만 일부 인자는 처음에 먼저 입력해두고 나머지만 입력할 수 있도록 새로운 함수를 만드는 패턴을 말한다. ES6const sum = x => y => x + y;console.log(sum(2)(1)); // returns the number 3console.log(sum(2)); // returns a function y => 2 + yES5"use strict";var sum = function sum(x) { return function (y) { return x + y; };}; console.log(sum(2)(1)); // returns the number 3console.log(sum(2)); // returns a f..