일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- OOP
- redis
- N+1 문제
- 형상관리
- 객체지향
- docker
- 백준
- Java
- RDS
- 3-way-handshake
- 성능 개선
- Spring
- 네트워크
- Spring Security
- 프로토콜
- 로그인
- 동시성 문제
- TCP/IP
- EC2
- 트러블 슈팅
- JWT
- AWS
- 코딩테스트
- 4-way-handshake
- JMeter
- 스프링부트
- 인메모리
- OSI 7계층
- 알고리즘
- Today
- Total
목록Spring (6)
열공스토리
현재 진행중인 “DevHub” 프로젝트의 회원가입 과정에는 이메일 인증 기능이 존재합니다. 여타 서비스와 같이 자신의 이메일을 입력하고 인증 요청을 하면 입력한 이메일로 인증 코드가 포함된 메일이 발신되고 받은 인증 코드로 이메일 인증을 하게 됩니다. 문제를 인식하게 된 시점은 JMeter 테스트 도구로 이메일 인증 기능을 테스트 하는 과정에서 요청에 대한 응답 시간이 오래 걸리는 걸과를 얻었을 때 였습니다. 이를 계기로 문제를 개선할 필요가 있다고 생각이 들었고 결과적으로 1초 동안 각 요청으로부터 소요된 응답 시간을 평균 4.159초(4159ms) → 0.017초(17ms)로 개선하였습니다.개선 전 테스트 결과이메일 인증 기능을 개선하기 전 코드는 다음과 같았습니다.[서비스 로직]public Mail..
현재 git과 같은 형상관리 시스템을 활용하기 어려운 초보 개발자들을 위한 형상관리 웹 서비스를 개발하고 있습니다. 형상관리 서비스에는 "팀 프로젝트 최초 저장"이라는 API가 존재하는데, 이는 팀을 만들고 팀의 레포지토리를 만든 다음에 최초로 프로젝트를 업로드하는 API 입니다. 처음에는 이 API를 여러 팀원이 동시에 요청했을 경우 파일을 업로드 했을 경우 서버에는 최초 한 팀원의 파일만이 저장되는 것을 의도하였습니다. 하지만 의도와 달리 여러 팀원이 동시에 업로드한 파일이 서버에 모두 저장되었고 이러한 문제를 DB 락을 걸어 우회적인 방법으로 해결하였습니다. 이번 포스팅에서는 위 상황에서의 문제를 해결하는 과정에 대한 자세한 기록을 남겨보았습니다. 처음 "팀 프로젝트 최초 저장" API 요청에 대..
이번 포스팅은 최근 게시판 프로젝트를 진행하면서 발생한 좋아요 기능 동시성 문제 해결과정에 대한 회고입니다. 트러블 슈팅 과정을 보기에 앞서, 동시성 문제란 무엇인지 간단하게 짚고 넘어가겠습니다. 동시성 문제란? 동시성 문제란 여러 스레드가 한 공유 자원에 대해 동시에 읽기(Read)와 쓰기(Write) 작업을 처리할 때 발생하는 문제입니다. 예를 들어, Thread A와 Thread B가 우리가 흔히 알고있는 게시글의 좋아요 기능을 동시에 서버에 요청한다고 생각해 봅시다. 이런 상황에서 우리는 게시글의 좋아요 수가 기존의 좋아요 수에서 2가 증가된 값을 기대할 것입니다. 하지만 동시성 문제가 발생하면 예상과는 달리 좋아요 수가 1밖에 증가하지 않게 됩니다. 이러한 현상이 발생하는 이유를 다음 그림에서 ..
이번 포스팅은 최근 게시판 프로젝트를 진행하면서 발생한 N+1 문제 해결과정에 대한 회고입니다. 트러블 슈팅 과정을 보기에 앞서, N+1 문제란 무엇인지 간단하게 짚고 넘어가겠습니다. N+1 문제란? N+1 문제란 1:N 또는 N:1로 연관관계가 설정되어 있는 엔티티를 한 번 조회 시, 조회 쿼리 1개가 수행되는 것이 아닌 연관 되어있는 N개의 엔티티를 조회하기 위해 N만큼의 추가 조회 쿼리가 수행되는 일 때문에 발생하는 문제를 말합니다. 이게 왜 문제가 되냐 하면 예를 들어, 한 엔티티의 연관관계 엔티티가 100개라고 가정한다면 해당 엔티티를 한 번 조회한다고 했을 때, 추가적으로 조회 쿼리 100개가 더 수행되어 조회 쿼리만 총 101번 수행되어 불필요한 조회 쿼리가 수행되는 현상이 발생합니다. 그런..
이번 포스팅에서는 최근 Security+JWT를 이용한 로그인 인증을 구현한 프로젝트에서 로그아웃 기능과 refresh token 기능을 도입할 때 사용했던 Redis에 대해 글을 적어보았습니다. Redis란? Redis는 인메모리 데이터 구조(In-memory Data Structure) 형태를 가지는 오픈 소스 기반의 비관계형 데이터 베이스 관리 시스템(DBMS)입니다. 데이터는 "Key-Value" 형식의 비정형 데이터로 관리가 되고 인메모리 특성에 의해 데이터가 휘발적인 특징을 갖게 되고 빠른 데이터 접근에 용이합니다. Redis는 Cache, Database, 메시지 브로커 등으로 사용됩니다. Redis를 선택한 이유 로그아웃 기능과 refresh token 기능에 Redis를 선택한 가장 큰 ..
최근 Spring Security와 JWT를 이용한 로그인 인증 방식에 대해 좀 더 깊이 공부 해 보면서 처음 JWT 인증 방식에 대해 공부할 때 광범위한 개념들과 복잡한 동작 흐름을 이해하기 힘들어 했던 저와 같은 처지에 있는 분들이 이해하는데 도움이 되었으면 하는 바램으로 포스팅하게 되었습니다. 들어가기에 앞서, 이번 포스팅에서는 토큰 발급과 인증을 하는 과정에서 등장하는 개념들과 동작 흐름의 이해를 중점으로 다룰 예정이므로 선수 지식(JWT 구성 등)은 생략하겠습니다. 개요 저는 처음 Security와 JWT를 이용한 로그인 인증 방식에 대해 공부 할 때 서버 내부에서 어떻게 실행이 이루어지는지가 머리에 잘 안들어 오더라구요. 새로운 객체나 클래스, 메소드를 자꾸만 접하다보니 머릿 속이 혼라스러워서..