전체 글

소프트웨어 개발자입니다. 더 많은 사람들이 양질의 지식을 습득하기 위한 생태계 구축에 기여하기 위한 공간입니다.
데이터베이스(DB)

Session storage 선택 과정, Redis vs Memcached

안녕하세요! 저는 개발자 갈레입니다! 오늘은 Session storage에 쓰일 DB 선정 과정에 대해 알아볼겁니다. 여러분들이 이 글을 읽고 비슷한 문제를 겪었을 시, '이러한 방식의 해결 과정도 있다~' 정도만 알면 아주 좋을 듯 합니다:) 그럼 시작해보죠! 🏃‍♂️목표 Refresh token을 저장할 DB 선정 🗒️데이터 특성 파악 1) 저장 값 분석 Refresh token은 Access token과 같이 문자열로 저장됨. 또한 클라이언트 마다 단 하나의 Refresh token만 존재하도록 해야함. key-value(String) 방식을 사용하면 이를 쉽게 구현할 수 있음. 2) 저장 장소 특성 Refresh token은 세션 정보임. 클라이언트가 로그인 중에만 유지될 정보이기 때문에 영속성을..

소프트웨어개발론

유스케이스 기반 통합 테스트 작성

✍️ 문제 상황 테스트 작성 시, 단위 테스트를 모두 작성하고 통합 테스트는 모듈간의 연결 유무를 확인할 수 있는 최소한의 개수의 테스트만 작성했습니다. 하지만 통합 테스트의 정의와 필요성에 대해 재고하면 좋을 것 같다는 피드백이 있었습니다(Github PR review link) 고생많으셨어요! 통합테스트를 주로 어떻게 작성하는지에 대해서는 한 번 찾아보시면 좋겠습니다. 기본적으로 통합테스트는 단순히 서비스간 혹은 디비간의 통신이 잘 되는지만 확인하는게 아니라 모든 환경이 갖추어진 상태에서 API들이 원하는대로 동작하느냐를 테스트하기위함이고, 따라서 가급적 유저 입장에서 실행 가능한 많은 시나리오들을 통합테스트케이스에서 처리할 수 있도록 하는게 좋습니다. CI/CD를 설정하고 통합테스트에서 유저들의 u..

프레임워크/Spring

도커와 Testcontainer를 활용한 서버와 동일한 환경에서의 로컬 테스트 구현

✍️ 문제 상황 로컬 환경에서 통합 테스트할 때 매번 서버를 올리는 일이 매우 번거로웠습니다. 세션과 캐시를 위한 redis 서버를 테스트할 때 마다 매번 올리는건 개발 생산성을 낮춘다고 판단했습니다. 이러한 현상은 제 팀원에게도 나타날 것이기 때문에 지금 개선하지 않으면 팀원 수에 비례하여 개발 생산성이 낮아질 것으로 판단했습니다. 💡 통합 테스트 과정 redis 서버를 실행(수동) → 통합 테스트 실행(수동) → 테스트 완료 → redis 서버 clear(수동) ✍️ 접근 방법과 해결 과정 로컬 환경에서 서버 환경 구축을 자동화할 수 있는 툴이 있는지 조사했습니다. 여러 툴들이 있었지만, 현업에서는 도커를 사용하기 때문에 이를 선택했습니다. 또한 docker가 Ubuntu20.04에서 기본으로 설치돼..

프레임워크/Spring

@Transactional, @Cacheable 및 Redis 호환 문제 해결

✍️ 문제 상황 통합 테스트 구동 시 회원가입이 돼있지 않은 코드가 로그인에 성공하는 문제가 있었습니다. 로그인 하기 전에 유저 정보가 저장돼있는지 확인하는 절차까지 진행했지만 문제 상황은 여전했습니다. 이에 유저 로그인 로직에 문제가 있다고 파악하여 로그인 로직에 로그를 남겼고 @Transactional 상황에서 @Cacheable이 적용된 데이터가 rollback 되지 않는게 문제의 원인이라고 판단했습니다. @DisplayName("로그인, 실패 시나리오") @Test void login_failed() throws Exception { // given // 가입되지 않은 사용자 // userService.createUser(userDTO); // when // 유스케이스/로그인/Fail path R..

책 정리 & 리뷰

에자일이란 무엇일까? (3) 인지적 사고 분석, Reverse engineering

서두 오늘 빡독 시간엔 저번에 이어서 '함께 자라기 애자일로 가는 길'을 읽었습니다. 제가 지속적으로 키우려고 하는 능력과 관련된 얘기가 나와서 아주 재밌게 읽었네요. 실제로 오늘 책에서 읽은 얘기를 멘토링 시간에 활용도 해봤습니다. 무얼 읽었고, 저와 어떤 관련이 있었는지, 앞으로 어떻게 활용할지와 마지막으로 이전 글에서 언급한 타당성과의 연관 관계를 정리 해보겠습니다. 오늘 읽은 part 요약 전문가들의 전문성을 뽑아내고 적용하는 것이 자신의 전문성을 빨리 높일 수 있는 방법이다. 전문성을 효과적으로 뽑아내려면 추상적이고 원론적인 답변을 얻을 수 있는 질문이 아닌, 구체적인 사건에 대해 말하도록 유도 해야 한다. 전문가들이 보통 추상적이고 원론적인 답변을 하는 이유는 사고 과정을 무의식적으로 자동화 ..

책 정리 & 리뷰

에자일이란 무엇인가? (2) 소프트웨어 엔지니어, 직관적 전문성이란?

서두 오늘 빡독 시간엔 저번에 이어서 '함께 자라기 애자일로 가는 길/김창준 지음'을 읽었습니다. 평소에 가지고 있던 생각을 정리하고 확인하는 경험이 있었습니다. 어떤 내용을 읽고 제 평소 생각과 연결 시켰는지 짧은 글로 남깁니다. 오늘 읽은 part 요약 컴퓨터로 대체되기 어려운 일은 학습하기 힘든 환경 내 학습하기 힘든 주제와 관련됨. 예를 들면, - 목표가 모호하고 주관적일 수 있으며 동적임. - 매 순간 선택할 수 있는 행동/선택 종류가 불확실함. - 매 순간 내가 목표에 얼마나 근접했는지 평가하기 어려움. - 등등 이러한 영역은 소위 직관, 창의적 지능, 사회적 지능과 관련됨. 직관적 전문성을 가지려면 타당성과 피드백이 중요함. 타당성은 직관이 적용되는 영역에도 어느 정도 인과 관계와 규칙성이 ..

TIL/일기

진로는 어떻게 찾는가? 동기 부여는 어디서 받는가? feat. 제 경험:)

왜 글을 썻는가? - 최근에 저에게 진로는 어떻게 찾았는지 어디서 동기부여를 받았는지 물어보는 요청이 두번 존재했습니다. 개발자라 그런지 두번 이상 일어나는 일은 반복을 줄이려고 함수화(여기선 문서화)하게 되네요:) - 상담을 요청한 분들에게 작성했던 대화체를 그대로 사용했습니다. 읽으시는 분들이 가까운 지인이나 아는 분에게 상담을 받는 느낌을 받았으면 했습니다. 친근함과 익숙함은 좋은 설득의 도구가 될 수 있죠! 20대 초반에 무얼 하셨나요? 안녕하세요 후배님 현재 주어진 삶과 길에만 안주하지 않고 더 나은 길을 찾으려고 하는 모습 보기 좋네요 ㅎㅎ 저도 후배님과 같이 진로를 찾고 싶었어요. 그래서 2학년 때는 진짜 이것 저것 해보고 싶었던 것들을 했었답니다. 물론 해보고 싶은 것을 할 때 최선을 다하..

책 정리 & 리뷰

에자일이란 무엇일까? (1) 성장의 복리성을 제1원리 사고법과 연관지어 생각해보자

서두 오늘 빡독 시간엔 '함께 자라기 애자일로 가는 길'을 읽었습니다. 자기계발 서적은 잘 안읽는 편이지만 새로운 인사이트를 얻을 수 있을까 싶어 읽게 됐네요. 40페이지 정도 읽었지만, 이를 체화시킨 내용을 짧은 글로 남길까 합니다. 오늘 읽은 part 요약 -함께 자라기 애자일로 가는길 中- 자기계발은 복리로 돌아오며 이는 작업 ABC를 적용할 때 극대화된다. 아래 목록이 작업 ABC를 나타냅니다. 작업 A : 물품 생산 작업 B : 작업 A 개선 작업 C : 작업 B 개선 자신의 성장 방식 성찰 작업 ABC은 개인이 할 수 있는 모든 활동에 적용될 수 있습니다. 알고리즘 문제 풀이, 리팩토링, 아침 운동, 요리 등 다양하게 적용될 수 있죠. 이를 알고리즘 문제 풀이에 적용해보겠습니다. 작업 A : ..

김민석(갈레, 페퍼)
개발자-김민석