분류 전체보기

문제 상황AWS 프리티어를 사용하기 위해 t2.micro 인스턴스를 사용해서 배포를 하고 있었다. 빠른 배포와 편의성을 위해 도커로 mysql과 redis, spring boot 컨테이너 2개를 띄우는데 자꾸 서버가 죽고 자꾸 연결성 실패가 떠서 서버에 접속할 수도 없었다.과제인스턴스를 재시작하면 연결성을 통과되는데 컨테이너가 자꾸 죽는게 문제였다. 이전 프로젝트에서도 매번 서버가 죽는 경우가 다분했는데, 이럴 때마다 그냥 인스턴스 재시작후 컨테이너를 다시 띄어주었다.이번에는 컨테이너를 띄울 때마다 서버가 죽는 근본적인 원인을 알아보고, 이를 해결해보기로 했다.문제 해결 과정원인 파악을 위해 아래 과정을 거쳤다.EC2 시스템 로그 확인하기시스템 로그에서 원인 분석하기원인 분석 후 해결하기EC2 시스템 로..
OOM.. 서비스 로직에서 만나보고 싶었던 녀석.... 드디어 만났다.OOM, 왜 발생했는가?결론부터 말하면 100만개의 row로 부하테스트를 진행하다가 만났다.교보 DTS 기업 협업으로 진행한 백오피스 프로젝트에서 각 기능마다 엑셀다운로드 하는 기능이 있었고, 해당 코드를 개선만했고, 부하 테스트는 진행해보지 않았었다. 이번 기회에 코드 리팩토링과 부하테스트를 진행보다가 100만개의 엑셀 row를 작성하면 기존 코드에서 OOM이 발생하는 상황을 마주했다. (기존코드에서 어떻게 리팩토링하고 성능 개선했는지는 추후에 작성 예정이다.)해결하기 위한 과제메모리 초과를 해결하는 게 과제이다. OOM을 보고 제일 먼저 떠오른게 GC 튜닝 이라는 단어였다. JVM 의 메모리가 꽉 차서 메모리 부족현상이 뜬 것일테..
· ETC
급한 성격상 일단 코드부터 두둘기면서 개발을 시작했는데, 이게 개발에 정말 안좋은 습관이란 걸 깨달았다..이런 생각을 들게 해준 발단카카오 developer 문서 보면서 OAuth 로그아웃을 구현하는데 문서보면서 무작정 따라 했다.문제가 문서를 제대로 안보고 따라해서 계속 오류를 마주침..... 예를 들어서 쿼리 파라미터로 들어가야하는 값이 body로 들어가서 계속 잘못된 요청이라고 떳다. 이걸 해결 못해서 1시간 동안 삽질했다. 회고해보면 내가 이렇게 해서 허비한 시간만 합쳐도 1년도 넘을 것 같다. 대학교 1학년부터 지금까지 개발할 때 이런식으로 했으니까...깨달은 점개발하기 전에 어떻게 개발할지 흐름이라도 작성하자.나무를 보지말고 숲을 보라는 말이 있듯이 개발도 똑같이 적용된다고 생각한다... 코..
문제 상황public class OAuth2LoginSecurityConfig { private final UserRepository userRepository; private final OAuthService oAuthService; //-> 여기서 ...}@Servicepublic interface OAuthService {} //GoogleOAuthService, KakaoOAuthService가 구현 오류 발생Parameter 1 of constructor in com.memo.login.oauth.CustomOAuthService required a bean of type 'com.memo.login.oauth.OAuthService' that could not be found.인터..
이전 포스팅에서 Spring Security 를 활용하지 않고 컨트롤러로 다 구현했다.이번에는 왜 Spring Security를 사용해서 OAuth를 구현해야하는지를 고려해보려고 한다.Spring Security?스프링 시큐리티는 강력하고 고도로 사용자 지정 가능한 인증 및 액세스 제어 프레임워크입니다. 스프링 기반 애플리케이션을 보호하기 위한 사실상의 표준입니다.스프링 시큐리티는 Java 애플리케이션에 인증과 권한 부여를 모두 제공하는 데 중점을 둔 프레임워크입니다. 모든 스프링 프로젝트와 마찬가지로 스프링 시큐리티의 진정한 힘은 사용자 지정 요구 사항을 충족하기 위해 얼마나 쉽게 확장할 수 있는지에 달려 있습니다 스프링을 사용할 때 보안을 적용하고 싶다? 그럼 Spring Security를 사용해라...
OAuth(Open Authorization)OAuth는 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹 사이트 상의 자신들의 정보에 대한 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는, 접근 위임을 위한 개방형 표준다. 구글에 로그인하면 API를 통해 연동된 계정의 Google Calender 정보를 가져와 사용자에게 보여줄 수 있다.이때 사용되는 프로토콜이 OAuth다. 더 잘 이해하기 위해 인증과 인가에 대한 개념을 구분해보자Authentication(인증): 유저 본인을 확인하는 과정(로그인)Authorization(인가): 인증 후 인가를 진행, 인가에 따라 유저 정보를 선택전으로 반환한다파티에 초대된 손님을 예로 들어보면,호스트가 파티에 입장하는 사람의..
· ETC
2024.08 매주 코테 스터디정처기 실기교내 해커톤 참여졸업 프로젝트 마무리2025 상반기 취업을 목표로 기본기와 실무지식을 쌓고, 이력서와 포폴을 완성하고자 부트캠프에 지원했다.부트캠프에 들어간 이유는 "기업과 협업"을 할 수 있는 기회가 있었기 때문이다.중고신입이 대세인 상황에서 인턴조차 하지 못한 나에겐 이걸로 내가 중고 신입이라는 걸 어필할 수 있겠다. 라는 생각이 들었다. 이때 정처기 실기와 매주 코테 스터디, 해커톤에 참여하였다.이 달은 유의미한 시간은 아니었던 거 같다. 그저 졸업프로젝트가 잘 마무리 되었으면 하는 마음이 컸다. 2024.09매주 코테 스터디실제 코테 응시졸업 프로젝트 끝부트캠프 프로젝트 진행개강이때부터 실제 기업에 지원하여 코테를 볼 수 있는 기회가 있었다. (물론 다 떨..
이전 포스팅에서 좋아요 동시 요청에서 데드락이 걸린 것에 대해 분석해 보았다.원인 요약좋아요를 저장하는 과정에서 like 테이블에 board 외래키가 있었고, 외래키로 인해 board의 레코드가 잠김(slock).정확히는 mysql에서는 인덱스 락인데 편의상 레코드 락이라고 하겠다.트랜잭션1: 좋아요 추가(board id = 1 레코드 slock)트랜잭션2: 좋아요 추가(board id = 1 레코드 slock)트랜잭션1: board id = 1 레코드 좋아요 수 update(xlock 획득하기 위해 대기)트랜잭션2: board id = 1 레코드 좋아요 수 update(xlock 획득하기 위해 대기)이 상황이라면 좋아요를 누르는 동시에 해당 게시물을 수정하는 일이 생긴다면 이때도 데드락 발생 가능Loc..
배경Mysql 8.0, Spring Boot 3, java 17 사용학교 게시판에 좋아요 기능이 있는데, 트래픽이 많아질 경우 좋아요 동시성 문제를 생각해 보게 되었다.유저 3개를 만들고 포스트맨의 collection을 활용해서 테스트를 해보았다.결과는 둘다 200 OK가 떳다.이는 포스트맨의 방식이 Delay가 아무리 줄어도 동기 방식이기 때문에 병렬로 동시에 보내는 요청이 아니고 순차적인 요청이었기 때문이었다. 그래서 원시적인 방법으로 curl로 테스트 해보기로 했다.터미널에 각 유저에 대한 요청 3개를 동시에 보냈다.curl --location --request POST 'http://localhost:9090/api/board/like?board_id=1' \--header 'Authorizati..
hapBday
'분류 전체보기' 카테고리의 글 목록