목록전체 글 (518)
개발놀이터
제목이 꽤나 자극적이지만 아무리 생각해도 이거만큼 좋은 제목은 떠오르지 않았습니다. 제가 오늘 포스팅을 하게된 계기가 되는 포스팅도 저자분이 "@Transactional의 해로움" 이라고 할 정도이니 말 다한 것이죠. 우선 원래의 글을 올려드릴테니 자세한 내용은 아래의 링크를 참고해주세요! https://channel.io/ko/blog/bad-transactional?fbclid=IwZXh0bgNhZW0CMTEAAR0Atxir0WzSFcBMLmVjDXNLrUoiUl_qX93JPUPoo6EIRqP3irVoc22JEM4_aem_Gt65sDAFShcRmzIYKpla4w @Transactional의 해로움들어가며: 23.12.31 Database outage 새해를 하루 앞둔 12월 31일 자정을 얼마 지나지..
회사에서 리액트를 사용해서 어쩔 수 없이 리액트를 공부해야하는데 나름 재미는 있습니다. 근데 좀 그지같은 부분이 있더군요... 이번엔 포스팅에선 컴포넌트의 생명주기와 렌더링에 따른 useEffect의 호출 순서 그로인해 벌어지는 useEffect의 맹점에 대해서 알아보려고합니다. 그지같은 리액트...제가 원한건 useEffect에서 API를 호출하고 state에 저장한 뒤 state에 저장된 값을 HTML에 써먹고싶었습니다. 기대했던 순서는 다음과 같습니다. 리액트가 useEffect를 호출한다. API가 호출된다. 값이 가져와지고 그 값을 state에 저장한다. 렌더링이 될 때 state 값을 사용한다. 근데 이 그지같은 리액트는 제가 원하는대로 움직여주지 않더군요. 렌더링이 되고 state값..
이번 포스팅에선 리액트의 전역 상태 관리 라이브러리 redux와 recoil에 대해서 알아보도록 하겠습니다. 사용방법은 구글링하면 엄청많이 나오더라구요. 사용법은 이번 포스팅에선 다루지 않도록 하겠습니다. 이번 포스팅에선 hello world 수준으로 redux와 recoil을 써보고 느낀점 그리고 둘의 차이점에 대해서 다뤄보도록 하겠습니다. Redux첫인상redux는 리액트 훅중에 useReducer와 굉장히 유사하더군요. 아니 유사한게 아니고 완전 빼다박았습니다. redux를 조금 경량화한게 useReducer라는 느낌이 들었습니다. 접근성redux는 보일러플레이트가 굉장히 높았습니다. 설정해줘야하는게 굉장히 많았고 hello world 수준의 예제도 시작하는데 한참이 걸렸습니다. 특징하지만 ..
최근 회사에서 리액트를 사용하면서 공부를 해야겠다고 생각이 들었습니다. 리액트의 생명주기나 useState, useEffect, useRef 같은 기본적인 hook은 자세히 공부하지 않고 감으로도 충분히 알겠더라구요. 하지만 회사 서비스에서 사용중인 코드 중에 useReducer라는 hook이 있었는데 이놈을 공부해보았습니다. useReduceruseReducer는 useState를 대체하는 hook으로서 state, dispatch, reducer, initialize 이렇게 네가지로 이루어져있습니다. 기본적인 구조는 이렇게 생겼습니다. const [state, dispatch] = useReducer(reducer, initialize);ex)const [number, sendValue] = ..
넷플릭스나 유튜브를 보면 이런 경험 있으실겁니다. 이렇게 회색바가 앞으로 천천히 진행하는 것을말이죠. 이렇게 하는 이유는 영상의 크기가 어마어마하다보니 이걸 전부 랜더링하고 사용자에게 내려주면 사용자가 꽤나 오랜시간 기다려야하기 때문에 먼저 영상을 내려주고 조금씩 랜더링하는 방식을 사용합니다. 저도 이걸 구현하게 될 줄은 몰랐습니다. 하지만 많은 레퍼런스가 있어서 따라하기 편했고 의외로 쉽게 구현할 수 있었습니다. 이번 포스팅에선 스프링으로 영상 랜더링하고 리액트로 응용하는 것까지 한번 정리하고 공유해보도록 하겠습니다. 스프링으로 영상 랜더링하기@RestController@RequiredArgsConstructor@Slf4jpublic class CouponController { @Val..
JWT를 이용해서 인증을 한다면 중복 로그인에 대한 문제를 반드시 겪게 되는 것 같습니다. 로그인을 한 사용자가 다시 로그인을 한다면 이 로그인을 막아야할텐데 (구현은 stateful하게 하지만) stateless인 JWT 특성상 인증과 관련된 부분이 서버와 격리되어있어 서버에서 처리를 하지 못하는 상황이 발생합니다. 이미 발급된 access token (이하 AT) 를 어떻게 제어할 수 없다는 문제가 발생하죠. JWT 중복로그인 방지이를 해결하기위해 중간 단계를 거칠 수 밖에 없었습니다. 모든 코드를 다 보여드리기엔 양이 많아 개요만 포스팅하려고 합니다. 먼저 일반적인 JWT는 이렇게 인증을 거칩니다. 이건 JWT를 아시는 분들에겐 친숙한 흐름도일 것입니다. 하지만 로그인을 한 사용자가 또 ..
보통 많은 애플리케이션이 JWT를 이용해서 인증을 하고있다고합니다. JWT를 한글이던 영어던 구글링을 해보면 모두같이 JWT를 stateless라고 소개하고 있습니다. JWT를 쓰고 있던 와중 갑자기 문득 생각이 들었습니다. 이게 stateless야? JWT는 정말 stateless인가?왜 이런 의문이 들었냐면 access token (이하 AT)이 만료되는 순간 refresh token (이하 RT)를 확인해서 다시 AT를 재발급 하는 과정에서 의문이 들었습니다. RT를 확인할 때 우리는 이 사용자와 관련된 즉, 이 사용자가 로그인할 때 만들었던 RT를 찾기위해 결국 사용자의 정보를 가지고 RT를 검색합니다. 이 RT는 데이터베이스에 오랜시간 저장되어있으면서 사용자에게 계속 AT를 발급해주죠. ..
리눅스에선 rm 명령어를 이용해서 파일이나 폴더를 삭제합니다. rm -f deploy.sh파일 삭제rm -rf deploy폴더 삭제 근데 문제는 이제 진짜 컴퓨터에서 완전히 삭제된다는 것입니다. 개인적으로 너무 위험해보여서 윈도우처럼 휴지통으로 이동하는 기능이 있으면 좋겠다싶었습니다. 찾아보니까 alias라고 별칭을 만들어주는 기능이 있어서 그 기능을 이용해서 그 기능을 한번 적용해서 안전장치를 하나 둬보겠습니다. Alias리눅스에선 자신이 많이 사용하는 명령어를 alias로 만들 수 있습니다. alias를 사용하는 방법은 두가지 방법이 있습니다. 현재 사용자만 alias 등록모든 사용자의 alias 등록먼저 현재 사용자의 alias를 등록해보겠습니다. 현재 사용자 alias 등록현재 사용자..
리눅스에는 파일 혹은 폴더에 권한을 부여하고 관리할 수 있습니다. 정확히는 유닉스라고 해야겠네요. 이번 포스팅에선 파일 혹은 폴더에 권한을 부여하고 관리하는 방법에 대해서 공부한 내용을 정리해보도록 하겠습니다. 파일, 폴더 권한 부여파일, 폴더에 권한을 부여하는 방법에는 두가지 방법이 있습니다. 777과 같이 숫자로 부여하는 방법과 u+x와같이 문자로 부여하는 방법입니다. 먼저 숫자로 부여하는 방법에 대해서 알아보도록 하겠습니다. 기본적으로 파일이나 폴더를 만들면 상태는 rwxr-xr-x입니다. 폴더를 소유한 ec2-user와 폴더를 소유한 그룹인 ec2-user는 이 파일에 대한 권한을 나눠받습니다. 소유자인 ec2-user는 읽고, 쓰고, 실행할 권한이 있고, 그룹인 ec2-user는 읽고..
리눅스를 공부하다보니 리눅스 커널이라는 것을 공부하면 좋다고 하더군요. 원래 이론공부는 나중에 하는 편이지만 이론공부도 좋아하기 때문에 한번 공부해봤습니다. 리눅스 커널우선, 커널이 뭔지 개념을 잡고 넘어가면 좋을 것 같습니다. 커널은 컴퓨터에 장착되어 있는 하드웨어 제품들 (하드디스크, 메모리, CPU, 키보드, 마우스, 모니터 등등...) 을 소프트웨어로 추상화하여 OS가 사용할 수 있도록 하는 것입니다. 즉, 쉽게 말해 커널은 OS가 하드웨어 디바이스를 제어하기위한 중계자 역할을 한다는 것입니다. 우리는 그 중에서 리눅스 커널에 대해서 알아볼 것입니다. 윈도우도 커널이 있습니다! 하지만 우리는 윈도우로 개발할 것은 아니기 때문에 리눅스로 한번 알아봤습니다. 리눅스 커널에는 크게 다섯가지 관리..