전체 글
-
refresh token redis로 구현하기Spring 2024. 2. 22. 03:48
로그인할 때 access token을 생성하고, access token을 이용하여 redis에 key값으로 저장하여 refresh token을 구현했습니다. jwt token 발급 flow 클라이언트에서 로그인한다. 서버는 클라이언트에게 Access Token과 Refresh Token을 발급 Access Token은 사용자 쿠키에 저장, Refresh Token은 key값을 email로 redis에 저장 요청마다 cookie에 있는 access token을 검증 이 때, Access Token이 만료가 되면 Redis에 index인 access Token로 검색하여 refresh token이 있는지 확인 서버는 Refresh Token 유효성 체크를 하게 되고, 새로운 Access Token을 발급하며..
-
Docker카테고리 없음 2024. 2. 22. 02:02
Docker를 들어본 적은 많았지만, 왜 써야하는지 어떤 기능을 하는지에 대해 알지 못 했다. CI/CD를 공부하면서 Docker의 역할에 대해 알고자 정리합니다. Docker? 컨테이너화 기술을 사용하여, 애플리케이션을 더 쉽게 개발, 배포, 실행할 수 있도록 하는 플랫폼입니다. 간단하게 하면 가상의 리눅스 컴퓨터를 이용하여 각각의 어플리케이션을 독립적으로 실행시켜주는 기술입니다. VM(Virtual Machine)과의 차이 docker와 VM 둘 다 애플리케이션을 격리된 환경에서 실행할 수 있게 하는 가상화 기술이지만, 그 구조와 작동 방식에는 몇 가지 중요한 차이점이 있습니다. VM 각각의 독립된 OS를 가지므로, 물리적인 메모리, CPU등의 자원을 할당 받으므로 자원 소모가 발생하여 결국 이미지의..
-
CI / CD카테고리 없음 2024. 2. 22. 02:01
Jenkins, Docker, AWS 등을 적용하면서 CI/CD를 위해 사용하는 것을 알았지만 정확하게 왜 사용하는지 사용하면 편리한 점, 정확히 어떤 기능을 하는 지에 대해 잘 모르고 무작정 따라하기만 했다. CI/CD Continuous Integration/Continuous Delivery 는 지속적 통합 / 지속적 배포를 의미합니다. continuous integration : 코드를 빌드, 테스트하고 합친다. continuous delivery : 해당 repository에 릴리즈한다. continuous deployment : 이를 실제 서비스에 배포한다. CI/CD의 예시 CI, Continuous Integration 개발이 끝난 후 코드 품질을 관리하는 방식의 단점을 해결하기 위해 나타..
-
ec2 docker jenkins 플러그인 설치 에러트러블슈팅 2024. 2. 22. 02:01
aws ec2를 사용해 docker를 설치한 뒤, jenkins 이미지를 받아온 후, jenkins 컨테이너를 실행한 후에 ec2 서버에 접속하여 비밀번호 입력 후, 플러그인을 설치할 때 제대로 설치되지 않는 오류가 발생했다. 설치할 때 젠킨스의 버전이 오래된 것을 사용해서 발생한 문제였다. jenkins 이미지를 받고 jenkins 컨테이너를 실행할 때, sudo docker run -d -p 3000:8080 -v /jenkins:/var/jenkins_home --name jm_jenkins -u root jenkins/jenkins:lts 를 통해 lts버전으로 실행하여 해결했습니다.
-
쿠키, 세션네트워크 2024. 2. 22. 01:59
Http의 비연결성, 무상태브라우저와 서버는 실제로 멀리 떨어져 있습니다. 이 둘은 연결되어 있는 것처럼 보이지만, 연결되어 있지 않습니다.만약 계속 연결되어 있다면 이 상태를 계속해서 유지시켜준다면 매우 큰 서버 비용이 발생하게 될겁니다.Http라는 프로토콜을 이용하여 통신하는데, 그 통신은 비연결성(Connectionless)와 무상태성(Stateless)로 이루어집니다.비연결성서버와 클라이언트가 연결되어 있지 않다는 것 입니다.채팅이나 게임 같은 것들을 하지 않는 이상 서버와 클라이언트는 실제로 연결되어 있지 않습니다.무상태성서버가 클라이언트의 상태를 저장하지 않는다는 것입니다.기존의 상태를 저장하는 것들도 마찬가지로 서버의 비용과 부담을 증가시키는 것 이기 때문에 기존의 상태가 없다고 가정하는 프..
-
Spring에서 Redis로 분산락 사용하기Spring 2024. 2. 22. 01:58
항해99를 진행하면서 팀원분들과 동시성 문제에 대해 이야기를 나누면서 낙관적락, 비관적락에 대해 테스트도 진행해보고 Redis의 분산 락에 대해 알게 되었습니다. Redis는 Reddison으로 구현하는 분산 락뿐만 아니라, Lettuce의 스핀 락도 존재했는데 스핀 락의 경우 분산 락과 달리, Lock을 얻지 못 하면 계속해서 요청을 보내기 때문에 Redis에 대한 부하가 커지게 되서 Pub / Sub 방식을 사용하는 Redisson으로 하는 것이 좋다고 생각했습니다. Lettuce로도 구현할 수 있지만 복잡하기 때문에 구현하기 쉬운 Redisson을 사용했습니다. 분산 락, Distributed Lock 하나의 요청이 리소스를 선점하면 나머지의 요청은 대기하고 있습니다. 요청이 끝난 후에 Redis는..
-
AOP, Aspect-Oriented ProgrammingSpring 2024. 2. 22. 01:57
AOP, Aspect-Oriented Programming AOP는 핵심 로직과 부가 기능을 분리하여 애플리케이션 전체에 걸쳐 사용되는 부가 기능을 모듈화하여 재사용할 수 있도록 지원하는 것입니다. 주로 중복되는 부분을 제거하고 횡단 관심사를 개별 모듈로 분리하여, 깔끔하게 유지보수 할 수 있도록 도와줍니다. 횡단 관심사를 개별 모듈로 분리한다는 것은 위의 예시에서 쉽게 확인할 수 있습니다. 실제 비즈니스 로직에서의 예시에서는 DB 연결, 로깅, 파일 입출력 등이 있습니다. AOP의 주요 개념 Aspect(관점): 횡단 관심사를 정의한 모듈. 로깅, 보안, 트랜잭션 관리 등이 Aspect의 예시입니다. Join Point + Pointcut을 모듈화한 것 Join Point(결합 지점): 프로그램 실행 ..
-
동시성 문제와 LockSpring 2024. 2. 22. 01:56
트랜잭션 데이터베이스의 상태를 변경시키기 위해 수행하는 작업 단위 또는 한꺼번에 수행되어야 할 일련의 연산들을 의미합니다. 하나의 트랜잭션은 여러 단계로 이루어져 있으며, 모든 단계가 완료되면 커밋(commit)되어 데이터베이스에 변경사항이 저장됩니다. 하지만 중간에 문제가 발생하여 트랜잭션이 완료되지 못할 경우, 롤백(Rollback)을 통해 트랜잭션의 모든 변화를 원상태로 복구 시킵니다. 트랜잭션은 데이터의 일관성을 보장하는 중요한 역할을 하며 JPA에서도 트랜잭션 개념을 사용하여 Entity를 관리하고 있습니다. 트랜잭션의 특징 원자성(Atomicity) : 트랜잭션에 포함된 작업들이 DB에 모두 반영되거나, 전혀 반영되지 않아야 한다는 특성입니다.(All or Nothing) 일관성(Consist..