CORS와 SOP, XSS 그리고 CSRF
2022. 12. 24. 22:35
기타 IT
CORS(Cross Origin Resource Sharing)란? 브라우저가 A사이트에서 B사이트로 API 요청을 가능하다록 하는 정책이다. 브라우저의 보안과 관련해서 중요한 역할을 하는 것이다. CORS가 생겨난 이유 모든 사이트간에 요청이 자유롭게 되도록 허용하면 간단한 일인데 굳이 CORS라는 정책을 만든 이유를 알아보자. XSS(Cross Site Scripting) 사례로 알아보자. 착한 사이트에 로그인을 해서 토큰을 브라우저 쿠키에 저장한다. 자동 로그인을 위해서 현재 인증 정보가 쿠키에 저장되어 있는 것이다. 예로 jwt token 나쁜 사이트가 착한 사이트에 쿠키를 탈취하는 스크립트를 심은 게시글을 올린다. 사용자가 게시글을 본다. 게시글에서 이미지에 나쁜 사이트로 쿠키를 탈취하는 스크립..
OAuth2 개념 이해하기
2022. 12. 18. 22:36
기타 IT
OAuth2 개념 이해하기 OAuth란? Mine 내가 운영하고 있는 서비스로 www.book.com과 같은 것 User Mine 서비스를 사용하는 일반 사용자 Their User가 사용하는 제 3의 서비스로 facebook, google, kakao등 위의 세 가지 용어를 풀어보면, Mine은 고객인 User의 구글 캘린더에 일정을 등록하는 기능을 만들어야 한다고 가정해보자. 이 경우 Mine은 User의 구글 아이디와 비밀번호를 알고 있어야 하고, 문제없이 관리해야 한다. 그리고 이 정보를 갖고 구글에 접근하여 캘린더에 등록해야 한다. 이 경우 문제가 발생하는데 크게 세 가지로 나눌 수 있다. Mine은 User의 다른 서비스 계정을 관리하는 것 자체가 부담이다. User는 누군지도 모르는 서비스에 ..
인프콘 2022 나의 첫 컨퍼런스! 후기
2022. 8. 27. 20:07
기타 IT
서론 생애 첫 개발 컨퍼런스에 가게 되었다. SI에서 서비스로 이직을 성공한 후라서 뭔가 더 기분이 좋았다. 처음 입장했을 때 분위기에 놀랐다. 엄청 에너지가 넘치는? 느낌을 받았고, 사람도 굉장히 많았다. 단지 컨퍼런스의 이런 분위기를 느끼고 가는 것만으로도 가치가 있을 정도의 느낌이었다. 그리고 30개 정도의 세션이 있었는데 본인의 상황에 맞는 세션이 있다면, 더욱 좋은 기회가 될 거라고 생각했다. 나는 딱 하나의 세션을 위해서 참석했는데 바로!! 김영한님의 어느 날, 고민 많은 주니어 개발자가 찾아왔다. 성장과 취업, 이직 이야기였다. 추가로 CTO님이 추천 해주신 코드숨 한윤석님의 성공하는 스터디를 만드는 10가지 방법 - 인출 위주의 스터디 여정기 도 좋았다. 이 글은 영한님의 세션을 정리하고,..
데드락이란?
2022. 7. 5. 21:24
기타 IT
데드락이란? 데드락이란? 두 개 이상의 프로세스가 서로 상대방의 작업이 끝나기만을 기다리는 현상이다. 예를 들어보자. 점원1과 점원2는 계산을 하려고 한다. 점원1은 캐셔를 점유했다. 점원2는 계산할 옷을 점유했다. 점원1은 옷이 필요한 상황이고, 점원2는 캐셔가 필요한 상황이다. 이 상태로는 절대로 결제가 일어날 수 없다. 이런 상황을 데드락이라고 한다. 데드락 발생 조건 데드락이 발생하기 위한 조건은 아랭 네 가지가 모두 성립되어야 한다. 상호 배제 자원은 한 번에 하나의 프로세스만이 사용할 수 있다. 점유 대기 하나의 프로세스가 자원을 점유하고 있고, 다른 프로세스가 점유하고 있는 자원에 요청하고 대기해야 한다. 비선점 다른 프로세스에 할당된 자원은 사용이 끝날 때 까지 강제로 빼았을 수 없다. 순..
RedisTemplate CastClassException(직렬화, 역직렬화 이슈)
2022. 5. 12. 15:17
기타 IT
RedisTemplate 설정 시 직렬화 역직렬화 문제 RedisTemplate 설정을 하고 Redis에 저장을 해보면, byte코드로 저장이되는 현상이있다. key가 저장되는데 저렇게 저장되니 cli에서 값을 조회를 할 수가 없었다. 아주 불편한 사항이다. (아래 사진과 같이) 문제1 - 직렬화 key가 사람이 알기 어려운 문자로 저장되어 있다. 먼저 직렬화 역직렬화 인터페이스는 `RedisSerializer `이다. 알아만 놓자. Spring Data Redis는 기본 직렬화 구현체가 JdkSerializationRedisSerializer이다. 여기서 직렬화하는 내부 로직을 살펴보면, conver()가 있다. 여기를 살펴보자. JdkSerializationRedisSerializer.java Ser..
Spring Data Redis에서 O(N) 명령어인 Keys를 Scan으로 대체하기
2022. 5. 11. 15:36
기타 IT
아직 Redis에 대해서는 잘모르지만, 싱글 스레드로 동작하기 때문에 O(N)은 피해야 한다는 것을 알게 되었다. redis-cli가 아닌 Spring Data Redis의 RedisTemplate에서 어떻게 대체할 수 있는지 어떻게 대체 했는지 기록해보려고 한다. keys 명령어 → Scan 명령어로 개선하기 keys 사용할 경우 @Transactional public void updateRDB() { HashOperations hashOperations = redisTemplate.opsForHash(); Set keys = redisTemplate.keys("posts:*"); for (String key : keys) { int index = key.indexOf(":"); Long postId ..
Redis는 언제 사용해야 할까?
2022. 5. 11. 13:15
기타 IT
블로그 프로젝트의 조회수 증가를 Redis로 관리하기로 결정했다. Redis가 무엇인지 알아보고, 왜 Redis를 써야하는지와 어떻게 사용할 것인지에 대해 정리해보자. Redis 개요 Redis는 Remote Dictionary Server의 약자이다. Remote: 외부를 의미하고 Dictionary: HashMap과 같은 key - value 자료 구조 Server: 서버를 의미한다. 즉, 외부에 있는 key - value의 자료구조를 사용하는 서버이고 데이터베이스를 의미한다. 인메모리 데이터 저장소 레디스 공식 홈페이지를 보면, 이렇게 설명한다. 데이터베이스, 캐시, 스트리밍 엔진 및 메시지 브로커를 인메모리 데이터 저장소로 사용한다. 그렇다, 핵심은 인메모리이다. Cache 개념 나중의 요청에 대..
테스트 더블 테스트 VS 실제 객체 테스트(classicist vs mockist)
2022. 4. 15. 17:47
기타 IT
테스트 더블과 실제 객체란 테스트 더블 테스트에 필요한 협력 객체들을 가짜 객체로 대체하는 것 내부 구현을 알아야하기 때문에 화이트 박스 테스트가 된다. 실체 객체 테스트에 필요한 협력 객체들을 그대로 사용하는 것 내부 구현을 알지 못하므로 블랙 박스 테스트가 된다. classicist vs mockist MemberService.java // 내 회원 정보 조회 @Transactional(readOnly = true) public Member findMemberOfMine(String email) { return memberRepository.findByEmail(email); }classicist 대부분 실제 객체 사용을 선호하고, 실제 객체 사용이 어렵다면 테스트 더블을 사용한다. 당연히 실제 객체..