728x90

분류 전체보기 331

strict 모드(feat. <React.StrictMode>)

문제 상황 : shouldComponentUpdate 기능 구현하기전부터 콘솔 로그확인시 두번씩 반복되는 것을 확인할수있는데, 적용후에도 동일하게 나타납니다. 어떤 문제인지 잘 파악이 되지않아 해당 화면 첨부드립니다. 이유 : 렌더링 단계는 render 함수를 호출해서 이전 렌더와 비교를 수행하는 단계이고, 커밋 단계의 경우에는 라이프 사이클 함수를 실행시키며 DOM 노드를 추가/변경해주는 단계입니다. 여기서 커밋단계는 일반적으로 렌더링 단계보다 빠릅니다. 그로인해 느린 렌더링 단계에서 여러 생명주기 메서드가 여러번 호출되기도 합니다. 이러한 것들을 strict 모드에서는 미리 파악하고 우리에게 경고해줍니다. strict 모드가 자동적으로 모든 부작용을 찾아낼 수는 없지만, 문제가 될 만한 함수를 두 번..

Javascript/react.js 2023.05.09

11) Logback 설정

아래 내용은 https://github.com/beaver84/setting-test 에서 실제 소스를 확인할 수 있습니다. Logback 의존성 추가 implementation 'org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16' application.properties 에 설정 추가 logging.level.root=debug logging.level.org.springframework.web=DEBUG logging.config=classpath:logback-local.xml logback-local.xml 파일 추가 // 30초마다 자동 리로드 설정 %green(%d{ISO8601}) %highlight(%-5level) [%magenta(%t)] ..

10) Spring Data Redis 셋팅

아래 내용은 https://github.com/beaver84/setting-test 에서 실제 소스를 확인할 수 있습니다. CacheRepository - RedisRepository의 인터페이스(객체 지향의 DIP를 지키기 위한) import java.time.Duration; import java.util.Map; public interface CacheRepository { String getValue(String key); void setValue(String key, String value, int minutes); void setValue(String key, String value); void setValue(String key, String value, Duration duration);..

9) 비밀번호 암/복호화(Encrypt/Decrypt) 설정

아래 내용은 https://github.com/beaver84/setting-test 에서 실제 소스를 확인할 수 있습니다. 비밀번호를 암호화할 때, RSA → Base64 인코딩 알고리즘을 사용한다(복호화는 반대). private final AuthEncrypter authEncrypter; @Transactional public Member login(LoginFormDto loginForm, HttpServletRequest request, HttpServletResponse response) { ... //클라이언트에서 온 암호를 복호화하여 DB에 저장된 암호를 복호화 한것과 비교한다. if (StringUtils.equals(authEncrypter.decrypt(member.getPasswor..

8) API Response(@ControllerAdvice) 설정

아래 내용은 https://github.com/beaver84/setting-test 에서 실제 소스를 확인할 수 있습니다. @ControllerAdvice는 Spring에서 제공하는 Annotation입니다. Spring 애플리케이션에서 예외 처리를 관리하는 데 사용됩니다. 단일 클래스 또는 하나의 메서드가 아닌 애플리케이션의 모든 클래스에서 발생하는 모든 예외를 처리할 수 있습니다. API 서버일 경우, 기본적으로 성공함을 가정한 API 응답을 정의하고, 그다음 Exception이 발생했을 때, 응답을 정의하는 것이 일반적이다(성공 → 실패 advice 참조) 200(성공)일 때, 적용 예시 @ControllerAdvice(basePackages = "com.marvrus.moon_app_api.co..

7) JWT(JSON Web Token) 설정

아래 내용은 https://github.com/beaver84/setting-test 에서 실제 소스를 확인할 수 있습니다. JWT(JSON Web Token)는 당사자 간에 정보를 JSON 개체로 안전하게 전송하기 위한 간결하고 독립적인 방법을 정의하는 개방형 표준( RFC 7519 )입니다. JWT는 비밀( HMAC 알고리즘 포함) 또는 RSA 또는 ECDSA를 사용하는 공개/개인 키 쌍을 사용하여 서명할 수 있습니다. 공개/개인 키 쌍을 사용하여 토큰에 서명할 때 서명은 개인 키를 보유한 당사자만이 서명한 당사자임을 인증합니다.(세션, 쿠키 기반 인증과 차이) 권한 부여 : JWT를 사용하는 가장 일반적인 시나리오입니다. Single Sign On은 오버헤드가 적고 다양한 도메인에서 쉽게 사용할 수..

Spring/Security 2023.04.18

mapStruct 소개 및 활용

아래 내용은 https://github.com/beaver84/setting-test 에서 실제 소스를 확인할 수 있습니다. JPA를 쓰다보면 Entity로 값을 가져오는 일이 많은데, 이를 그대로 리턴하는 일은 드물고 DTO를 상황에 맞게 가공을 거쳐서 반환을 하게 된다. 이 때, 단순 필드(컬럼)를 반복 나열하는 일이 많은데, 반복작업을 편리하게 도와주는 라이브러리 중 하나가 mapStruct 이다. 남용하기 보다는 필드가 많은 경우만 사용하는 것을 추천한다. //문제 상황 - entity에서 DTO로 변환하는데 너무 많은 코드가 필요 private GoodsDTO getGoodsDTO(Goods goods) { // return GoodsDTO.builder().id(goods.getId()) //..

직장인 투자 관련 (feat. 친구의 조언)

1. 투자를 하다 보면 손실이 날 수가 있다. 그 금액이 억이상이 될수도 있다. 1억이란 돈은 무척 큰 돈이지만 인생 전체를 놓고 보면 막상 그렇지도 않다. 2. 그래서, 큰 나무가 될 수 있는 (비싸더라도)모종을 몇개 심고. 작물로 팔 수 있는 씨앗을 어느정도 뿌려놓아야한다. 3. 계획은 수정가능하니 첫 계획에 너무나 얽매일 필요도 없다. 4. 경험을 해보지않으면 체득이 불가능하기에 직접 경험을 하고 거기에서 전략과 교훈을 얻으면 된다. 5. 기본적으로는 상가주택 등 간단한 '운영'을 토대로 / 장기 , 중기 , 단기로 나누어서 '판매'를 지속하고 유동성을 확보한 상태에서 대출이자를 감당하여야 할것이다. 6. 성과와 관계없이 회사는 끝까지 다녀야 한다. 7. 싼 가격에 사놓으면 exit 할 기회는 분명..

좋은글 2023.04.08

6) 스프링 시큐리티(spring-security) 적용

스프링 시큐리티 적용 방법 이제 build.gradle Spring Security 의존성을 추가해준다. 프로젝트를 실행하니 처음 보는 security password가 콘솔에 찍히게 된다. implementation 'org.springframework.boot:spring-boot-starter-security' 임의로 localhost:8080/hello에 접근을 해보았다. 302 상태가 반환되며 localhost:8080/login으로 리다이렉트가 되었다. 위 로그인 화면은 Spring Security가 기본으로 제공해주는 화면이다. Username에 user, Password에 콘솔에 찍힌 문자열을 입력하면 정상적으로 localhost:8080/hello로 넘어가게 된다. 참고로 localhos..

5) 스프링 시큐리티(spring-security) 개요

스프링 시큐리티(Spring Security) 개요 Spring Security는 Spring 기반의 애플리케이션의 보안(인증과 권한, 인가 등)을 담당하는 스프링 하위 프레임워크이다. Spring Security는 '인증'과 '권한'에 대한 부분을 Filter 흐름에 따라 처리하고 있다. Filter는 Dispatcher Servlet으로 가기 전에 적용되므로 가장 먼저 URL 요청을 받지만, Interceptor는 Dispatcher와 Controller사이에 위치한다는 점에서 적용 시기의 차이가 있다. Spring Security는 보안과 관련해서 체계적으로 많은 옵션을 제공해주기 때문에 개발자 입장에서는 일일이 보안관련 로직을 작성하지 않아도 된다는 장점이 있다. 아래 내용은 https://git..

728x90