일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Spring Batch
- 오어스
- 테스트코드
- 동시성문제
- 우아한 테크 코스
- 살아남았다.
- 우테코
- 최종 합격
- resilience4j
- spirng
- JWT
- DispatcherServlet
- Gateway
- redis
- 톰캣
- 커넥션 풀
- Thread
- HikariCP
- Transactio
- AOP
- Elk
- 우테코 5기
- Spring cloud gateway
- oauth
- 우아한테크코스
- circuitbreaker
- 트랜잭션
- MDC
- Kotlin
- tomcat
- Today
- Total
목록우테코 (24)
코딩은 내일부터
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/ZgN2P/btstx6khRCa/IMYEDiId27qm7QheMkwWpk/img.png)
서론 및 버그가 일어나는 상황 동글 프로젝트를 하면서 개발서버와 실제 배포서버 2개의 서버를 사용하고 있는 상태였다.(DB서버까지 하면 총 3개다.) 회원가입 기능을 만들고 개발서버에서 1/10확률로 회원가입을 하면 똑같은 회원이 2명 생기는 거였다. 그래서 그 회원은 우리가 DB에서 1명 제거하지 않는 이상 로그인을 못하는 상황이다. 분명 OAuth로그인을 할 때 회원이 아니면 회원가입하게 로직을 구현해 놨는데 회원가입이 2번 일어나 나는 거였다. 프론트에서 말하길 react에서 api 로직을 수행하려면 useEffect라는 훅 내부에서 api 함수를 호출하는데 이 useEffect가 개발모드에서는 두 번 API가 호출된다. 그래서 이것 때문이구나 생각을 했는데 어떻게 해결해야 하는지 감이 안 왔다. ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/clMMwL/btsr5YNFW0S/uqXBwtVhYyq0BRev9sZRk0/img.jpg)
트랜잭션이란? 트랜잭션은 꼭 여러개의 변경작업을 수행하는 쿼리가 조합됐을때 의미 있는 개념이 아니다. 작업이 모두 적용되거나 아무것도 적용되지 않아야함을 보장해주는것을 의미한다. 다시 말해 논리적 작업 단위를 트랜잭션이라고 부른다. ACID? 그게 뭔데. ACID는 트랜잭션의 4가지 특성의 약자들을 모아놓은거다. Atomicity(원자성) 원자성이란 하나의 트랜잭션이 모두 성공하거나, 모두 실패해야하는 성질이다. 말 그대로 작업을 수행하는 도중 하나의 쿼리가 잘못됐을때 그 전에 수행한 쿼리는 모두 반영되지 않고 초기 상태로 돌린다는 뜻이다. Consistency(일관성) 일관성은 하나의 트랜잭션 이전과 이후, 데이터베이스의 상태는 이전과 같이 유효해야한다는 것이다. 예를 들어 비버 서비스의 회원가입할때 ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/OPHgX/btsrkOZuZF1/cFzZmG6FiOlOv06r2EFUqK/img.png)
OAuth가 뭐야? Oauth를 검색해보면 위키백과에는 이렇게 정의하고있는데… 이렇게 보면 잘모르겠다.. 예를 들어서 설명하면 비버라는 서비스를 이용하고있는데 서비스중에 카카오톡에 내 프로필사진을 가져오는 가능이있다고가정을 하겠다. 사용자는 비버한테 카카오톡 아이디와 패스워드를 입력하면 카카오톡의 프로필사진을 가져오는 흐름이다. 이때! 사용자 입장에서는 비버를 믿을 수 없고(카카오톡에 다른 정보를 빼오면 어떡하지?) 비버 입장에서도 이러한 정보를 가지고있는것이 부담이 될 수 있다. (만약에 비버서비스를 해킹 당해서 사용자의 정보가 노출이 될 수 있으니까!!) 그리고 카카오톡 입장에서도 높은 보안으로 서비스를 만들어놨는데 이러한 정보가 노출되는게 싫을거같다. 그래서 도입할 수 있는게 OAuth이다. 쉽게말..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/A9Yoz/btsqZvUtpGo/KxJ4etwlWJTWlA3ufwwgZk/img.png)
이번 프로젝트에서 JWT쪽을 맡게 됐다. 이번 포스팅에서는 JWT과 JWT을 적용하는 과정을 설명할 예정이다. JWT을 적용한 이유 이번 프로젝트에서 JWT를 적용한 이유는 JWT는 토큰 자체에 필요한 정보를 포함하고 있어 서버 측에서 별도의 상태를 유지하지 않아도 된다. (이로써 서버는 요청마다 토큰을 검증하고 사용자 신원을 확인할 수 있어 세션 관리나 DB의 부담을 줄일 수 다.(accessToken의 정보 만으로 사용자 인증을 할 수 있어서) JWT는 토큰은 매 요청마다 사용자 데이터베이스 등과의 통신 없이 빠르게 인증을 수행할 수 있다. 따라서 서버 부하를 줄여준다.(access가 만료되고 refachToken의 정보를 확인 할 때 DB에 접근하니까!) 이러한 이유로 JWT를 적용하기로 결정했다...
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bnwlWw/btsiOhJAKBy/H1LdthAk9mddUnr7pzFs10/img.jpg)
Self Hosted Runner를 활용해 CD를 하는 방법을 알려드리겠습니다. 먼저 지금 사용하고있는 ec2서버는 램 크기가 작기 때문에 Swap Memory를 사용해 하드디스크의 원하는 일정 용량을 램으로 바꿔줘서 사용해야합니다. 이때 너무 많은 메모리를 Swap Memory로 할당하게 되면 하드디스크가 부족하여 (ex.db에 데이터저장, 로그파일 저장 ... 등등) 서버가 다운될 수 있고, 너무 작은 메모리를 할당하게 되면 github action을 실행할때 부족한 램메모리 때문에 서버가 죽게됩니다. 다시 본론으로 넘어가면 먼저 스왑 메모리를 할당하는것은 하드디스크를 이용하기에 하드디스크의 용량을 확인 해봐야합니다. df -h 하드디스크 용량을 확인했다면, 그중 얼마정도의 swap 메모리로 설정할지..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/KAOkH/btsgxoKCGcf/RkFbu12dJGtp6UkjkUHZj0/img.jpg)
이번 글에서는 2렙 중간동안 하면서 느낀점을 적어보았습니다. 노는 습관. 그냥놀기 그냥 공부하기 ( 휴식의 재발견 ) 평소에는 자고 싶을 때는 자고, 공부하고 싶을 때는 공부하는 나의 생활 패턴이 우테코에 입학하면서 바뀌게 되었다. 처음 우테코에 들어왔을 때, 낯선 키워드와 미션들이 나에게 여렵게 다가오며 바쁜 한 달을 보냈다. 그러던 중 우연히 참여한 스터디를 통해 휴식의 중요성을 깨닫게 되었다. 우테코 동기들과 함께 놀며 공부하는 시간은 커뮤니케이션과 정보 공유의 터전이었다. 서로의 학습 경험과 일상을 나누며 우테코 생활을 보다 효율적으로 만들 수 있었다. 함께 어떤 공부를 해야 하는지, 어떤 개념을 탐구해야 하는지를 함께 의논하고 결정하는 과정에서 나는 공부에 대한 방향성을 찾을 수 있었다. 이를 ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/QqwA0/btr6oeEWGpe/LndFmQ2pnvPky0i2F8lp1k/img.jpg)
객체의 선언과 초기화 객체의 선언과 초기화를 같은 곳에서 하는 것은 코드의 가독성과 유지 보수성을 향상시킬 수 있습니다. 객체를 선언할 때는 해당 객체의 타입을 지정하고, 이를 초기화할 때는 값을 할당합니다. 이 두 단계가 분리되어 있다면, 코드를 읽는 사람이나 유지 보수하는 사람은 객체를 사용하기 위해 두 군데 이상을 찾아봐야 합니다. 이러한 과정에서 코드가 복잡해지고, 코드의 가독성이 떨어질 수 있습니다. 하지만, 객체의 선언과 초기화를 같은 곳에서 한다면, 객체의 타입과 초기값을 한꺼번에 확인할 수 있습니다. 이러한 방식은 코드의 가독성을 높이고, 유지 보수를 용이하게 만들어줍니다. 또한, 객체를 수정할 때도 한 곳에서 변경할 수 있으므로, 실수할 가능성이 줄어듭니다. 따라서, 객체의 선언과 초기화..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/QmArj/btr4AWew9Wx/HAoboL4mBLIco0pZpcUWA0/img.jpg)
이건 꿈인가. 합격이 발표되기 전까지는 떨어진다고 확신한 상태였다. 다음학기가 시작되면 무엇을 할지 계획을 정하고 있을 때쯤 합격 메일을 받았다. 처음에는 매우 좋았는데 점점 OT 날짜가 다가오면서 나의 현재 실력을 알기 때문에 붙어도 마냥 기쁘지만은 않았다. 그래서 나는 우테코에서 하루하루 살아남아야겠다는 원초적인 목표를 우테코에서 최선을 다해 살아남아야 한다라는 목표를 세우고 시작 했다. 우테코에서 살아남는법 1장 모르는 건 부끄러운 게 아니다. 처음 우테코를 들어와서 보고 듣는 모든 게 처음 접한 얘기들이었다. 내 시선에서는 다들 너무 잘하는 분들이라 질문을 하면 아주 기초적인 질문인 거 같아 질문하기 부끄러웠다. 처음 크루들에게 질문을 하기 전에 머릿속으로 질문해야 하나 말아야 하나 계속 고민했던..