전체 글 40

[Project] TDD 개발 시 given의 코드 양 줄이기 (Fixture, Persister) + @spy 활용

서론:IT연합동아리 DND에서 진행한 프로젝트를 하며 느낀 점입니다. TDD로 개발을 진행하게 되면서 메인 코드 뿐만 아니라 테스트 코드도 코드임을 느꼈습니다. 어떻게하면 테스트 코드의 양을 줄일 수 있고, 테스트를 편하게 작성할 수 있는지에 대한 고민이 담겨있습니다. 본론으로 들어가기 전에 저의 프로젝트는 Controller, Service, Repository 모든 계층의 테스트가 given-when-then 패턴을 사용하는 단위테스트로 이루어져있음을 알립니다! Fixture처음에는 given에 머릿속으로 흘러가는 로직을 모두 다 넣으면서 개발을 했었습니다. 하지만 연관 관계가 많은 엔티티를 마주하자 제가 사용하던 로직은 좋은 코드가 아님을 깨달았습니다. 제가 쓴 코드들을 쓱 보다가 문뜩 "모든 계층..

Project 2024.06.08

[OS] 운영체제란?

서론오늘날 많은 사람들이 컴퓨터를 사용하게 되면서 운영체제에 대한 정확한 뜻은 모르지만 ‘나 windows 써~’, ‘난 mac써~’라는 식으로 자주 언급이 되었다. 친근하지만 설명하라고하면 입이 선뜻 떨어지지 않기에 정확히 알아보기로 했다.운영체제의 정의는?사용자와 컴퓨타 하드웨어 사이에서 중계 역할을 하면서, 프로그램의 실행을 관리하고 제어하는 시스템 소프트웨어.혹은컴퓨터가 켜질 때 메모리에 적재되어 모든 프로그램의 실행을 제어하고 사용자의 요청을 처리해주는 소프트웨어 라고 칭한다. 운영체제의 본질적 속성1. 운영체제는 모든 컴퓨터 자원(resource)을 관리한다.자원이란?하드웨어 자원 - CPU, 캐시나 메모리, 키보드 등소프트웨어 자원 - 응용프로그램들데이터 자원 - 파일, 데이터베이스 등2. ..

OS 2024.04.30

[Project] 실시간 채팅 구현 시 FCM Token 발송 여부 결정하기

서론 tincle 앱 1:1 대화 기능을 개발 중, 대화방에 모두 들어와있을 경우에 메세지 전송을 하게 된다면 FCM Token을 발송하지 않고, 한 명만 들어와있을 경우에는 FCM Token을 발송하는 로직을 구현해야 했습니다. 프론트 쪽에서 대화방에 들어와 있을 경우 인앱 알림을 끄는 방안도 있었으나, 백엔드에서 처리하는 방법이 없을까? 고민을 하다가 이 방안이 괜찮은 것 같아서 백엔드에서 처리하기로 했습니다. socket, stomp 사전 설정 WebSocketConfig @Configuration @EnableWebSocketMessageBroker @RequiredArgsConstructor public class WebSocketConfig implements WebSocketMessageBr..

Project 2024.03.25

[Project] Spring + Stomp 테스트 하는 과정.. (실시간 채팅 구현)

서론 tincle이라는 친구 기반 SNS 서비스를 개발하는 도중, 1:1 채팅 즉 DM같은 기능을 개발하게 되었습니다. 그 과정에서 소켓과 Stomp를 도입하게 되어서 테스트를 하려고 알아보던 중.... 난관에 대해 소개하려합니다. 해당 글은 소켓이 무엇인지, Stomp가 무엇인지가 아닌 테스트하는 방법에 대해 서술합니다. 테스트 과정 전 필자의 설정 저의 webSocket 설정은 다음과 같습니다. WebConfig @Configuration @EnableWebSocketMessageBroker @RequiredArgsConstructor public class WebSocketConfig implements WebSocketMessageBrokerConfigurer { private final Stom..

Project 2024.02.27

[Project] 멀티 모듈을 왜 쓸까? (멀티 모듈 도입 전)

서론 IT 연합동아리 DND에 참가하게 되어서 새로운 사이드 프로젝트를 진행하게 되었습니다. 백엔드는 2명으로 이루어져 있는데, 소통을 하다보니 자연스럽게 이번 프로젝트에 대해 고민하게 되었습니다. 이번 프로젝트로 얻어가는 것으로 두가지 주제가 있었는데 하나는 멀티 모듈, 나머지 하나는 TDD 였습니다 ! 이번 글에서는 멀티 모듈에 대해 얘기해 보려고 합니다. 모듈은 무엇인가? Oracle Java 문서에서 모듈이란 패키지의 한단계 위의 집합체이며, 관련된 패키지와 리소스의 재사용할 수 있는 그룹이라고 정의하고 있습니다. 이때 각 모듈은 독립적으로 개발, 빌드, 테스트, 배포가 가능합니다. 멀티 모듈 멀티 모듈 프로젝트는 상호 연결된 여러 개의 모듈로 구성된 프로젝트를 의미합니다. 즉 멀티 모듈 단일 프..

Project 2024.01.15

[회고] 2023년을 돌아보며.. (23년 회고)

23년에 많은 일들이 있었지만 기억에 남는 대표적인 일들을 적어보려 합니다. CS Study (23.01 ~ 23.08) github : https://github.com/wonslee/CS-study 저는 3학년 때 컴퓨터SW 학과를 복수전공을 하기 시작했었습니다. 복수전공 특성상 들어야 하는 과목이 많아서 시간표에 맞으면 무조건 들어야했습니다. 그러다보니 1,2 학년 과목을 듣지않고 3학년 과목을 들어야하는 상황이 발생했습니다.. 처음부터 심화된 과목을 수강하다보니 이해력이 부족할 수 밖에 없었습니다. 그래서 같이 복수전공 하는 형과 CS 지식을 따로 먼저 공부해야겠다고 해서 만들어진게 CS study입니다 ! 처음엔 둘이서 시작했지만, 사람이 더 많으면 좋겠다 싶어서 에브리타임에서 두 명을 더 모집..

회고 2023.12.31

[Project] google Oauth2 로그인 시 refreshToken을 받는 방법 (최초 로그인에서 저장을 못했을 때)

서론 tincle이라는 프로젝트를 진행 중에 일어난 일입니다. 1차 MVP에서는 google과 kakao의 회원가입 기능만 개발하기로 해서 회원가입 기능만 개발했었습니다. 1차를 완료한 후 2차 개발이 시작되었는데, 2차에서 플레이스토어 배포를 위해 회원 탈퇴기능을 구현해야 했습니다. 그 과정에서 최초 google 로그인에서 refreshToken을 저장하지 못했을 때 다시 발급 받는 과정에 어려움이 있어 다른 누군가에게 도움이 되기 위해 이 글을 적습니다. google 로그인과 회원 탈퇴 로직 보기(Java/Spring) -> https://github.com/DoDream-dev/Tinqle-Server/blob/develop/src/main/java/tinqle/tinqleServer/domain/..

Project 2023.11.29

[Project] Redis(Elasticache Redis)로 RefreshToken을 관리하기

서론 팅클(Tincle)이라는 프로젝트에서 JWT를 통해 프론트와 소통을 했는데, 이 프로젝트는 친구기반 SNS 서비스입니다. 만약 사용하게 된다면 한번 접속할 때 '짧은 시간이 아닌 긴 시간동안 머무르지 않을까?' 판단했습니다. 때문에 토큰 재발급하는 횟수가 많다고 생각했습니다. 그에 따른 시간 비용을 줄이고자 Redis로 RefreshToken을 관리한 경험을 얘기하려 합니다. 데이터베이스가 있는데 왜 Redis를 사용할까? Redis는 인메모리 캐시로 메모리에서 데이터를 처리합니다. Client가 필요로 하는 정보가 만약 DB에 존재하게 된다면 Disk 영역까지 가야하기 때문에 시간이 오래 걸리게 됩니다. 반면 Redis에 정보가 존재하게 된다면 Memory 영역에서 처리 후, 값을 반환하게 되어 ..

Project 2023.11.25

YAPP 23기 백엔드 서류 합격과 아쉬운 면접 탈락 회고

YAPP디자이너, PM, 개발자가 팀을 이뤄 프로젝트를 진행하는 기업형 IT 연합 동아리 입니다.PM 직군이 있는 연합동아리는 흔치 않고, 규모가 큰 동아리라 인기있는 IT 동아리 중 하나입니다.해커톤, 스터디 등 많은 활동을 하는 동아리입니다.1년에 2번 모집합니다 !지원 동기주변 사람들이 IT 연합 동아리에 들어가면 실력 향상을 기대할 수 있고, 의지를 가진 사람들이 모여 프로젝트를 4~6개월 정도 진행하기 때문에 지원했습니다.또한 YAPP은 현직자들도 지원할 수 있기 때문에 그들이 가진 스킬을 보고싶어서 지원했습니다. 1차 서류서류 문항은 다음과 같았습니다.YAPP에 지원하게 된 동기를 포함하여 자유롭게 자기소개를 해 주세요. (500자)프로젝트를 진행할 때 어떤 방식으로 팀원과 소통하는 지 경험을..

회고 2023.10.18

[Java] 랜덤 문자열 생성, 랜덤 코드 생성(random값)

서론 팅클이라는 프로젝트를 진행하면서 각 계정마다 random 코드 6자리를 만들어야하는 상황이 있었습니다. 이 random 코드는 친구추가할 때 사용되는 목적입니다. 구상 저는 랜덤값을 만들 때, 사용자들끼리 무조건 겹치면 안된다는 조건이 붙으니까 겹칠 확률을 무조건 높여야 겠다고 생각했습니다. 처음에는 대중적으로 알려진 UUID.randomUUID를 쓰면 되겠지라고 간단하게 생각했었습니다. 하지만 예상과는 다르게 UUID.randomUUID는 알파벳 대문자도 없을 뿐더러 6자리까지 자른다고해도 자리당 36개의 가짓수 즉 60,466,176분의 1 확률로 생성이 됩니다. random uuid 만드는 것 치고는 확률이 너무 낮았습니다. 자리수를 늘리는 방법도 있었지만, 친구추가 코드이기 때문에 짧으면 짧..

Java 2023.09.17