
[Spring & Project] 소셜로그인 기능에 전략 패턴을 적용하기
2023. 2. 18. 03:44
Spring/Project
0. 들어가며🏃🏻♂️ 진행했던 프로젝트에서 구글과 카카오 소셜로그인 기능을 구현했었는데 해당 코드를 다시 살펴보며 리팩토링하면 좋겠다 싶은 부분을 발견했습니다. 이번 글에서는 디자인 패턴 중 하나인 전략 패턴(Strategy Pattern)을 적용해 리팩토링해본 경험을 정리해보려 합니다. 1. 기존의 코드는..🤔 기존 코드에서는 구글 로그인과 카카오 로그인을 각각 다른 API로 처리하였습니다. 간략하게 아래와 같은 형태였죠. @GetMapping("/google/login") fun googleLogin(...) { 구글 로그인... } @GetMapping("/kakao/login") fun kakaoLogin(...) { 카카오 로그인... } 기능은 잘 동작했지만, 거의 같은 기능을 하는 API가..

[Spring & JPA] N + 1 문제에 대하여.
2023. 2. 1. 19:17
Spring/JPA
0. 들어가며 🏃🏻♂️ 이번 글에서는 JPA를 사용할 때 중요한 개념인 N + 1 문제에 대해 알아보려합니다. N + 1 문제는 JPA를 처음 공부할 때부터 중요하다고 들었고, 이에 대한 해결법 역시 대략적으로 알고있다고 생각했습니다. 그런데 막상 실제 프로젝트에서 엔티티가 여러 OneToMany, ManyToOne 필드들을 가지게되고 서로 얽혀있다보니 이를 다루는 방법을 잘모르겠어서 애를 먹은 경험을 했습니다. 또한 N + 1 문제를 해결하기 위해 사용하는 방법들이 어떤 쿼리를 날리길래 해당 문제를 해결하는지, 어떤 방식으로 동작하는지에 대해서도 모르고 사용한다는 생각이 강하게 들었습니다. 이를 위해 N + 1 문제에 대해 조금 더 깊게 알아보는 시간을 가져보았고, 이를 정리해보려합니다. 결론부터 말..

[Spring & Project] 채팅 읽음 확인 기능 구현하기
2023. 2. 1. 00:10
Spring/Project
0. 들어가며 🏃🏻♂️ 진행중인 팀 프로젝트에서 웹소켓을 통해 실시간 채팅 기능을 구현했습니다. 채팅기능을 구현한 이후 상대방이 채팅을 읽었는지 여부를 확인할 수 있으면 좋겠다는 의견이 나와 이를 구현하게 되었고, 해당 요구사항을 반영하기 위해 고민했던 과정들을 블로그에 정리해보려 합니다. 1. 요구사항📕 변경된 요구사항은 "아래 사진과 같은 기능을 추가하자" 였습니다. 위 사진처럼 빨간 박스로 쳐진 부분과 같이 읽지 않은 메시지를 표시하는 기능이 있다면 좀 더 서비스 경험이 좋아질 것이라는 의견이 있었고, 이 부분을 새롭게 구현해야 했습니다. 2. 고민해야했던 점 과 구현한 방식 🤔 먼저 고민했던 부분은 기존 구조로는 채팅을 읽었는지 여부를 알기가 어려워 어떤 정보를 추가해야할지를 결정하는 것이었습니..

[Spring & Dev] 웹소켓에 대하여.
2023. 1. 14. 20:16
Spring
0. 들어가며🏃🏻♂️ 진행 중인 팀 프로젝트에서 실시간 채팅 기능을 구현하기 위해 웹소켓을 사용해보았습니다. 예전 수업 과제로 실시간 코인 거래소를 만든 경험이 있는데 이 때는 Polling을 사용했어서 이번에도 그러면 되겠다라고 생각하고 있던 도중 실시간 채팅에 대해 조금 검색해 보니 웹소켓이라는 키워드를 발견할 수 있었습니다. 이번 글에서는 HTTP로 실시간 서비스를 구현하는 방법에 대해 먼저 알아보고 이를 통해 웹소켓이라는 프로토콜이 왜 등장하게 되었는지에 대해 알아보도록 하겠습니다. 또한 웹소켓 프로토콜이 무엇인지, 동작 방식은 어떤지 등에 대해 알아보고 Spring에서 웹소켓 구현은 어떻게 하는지 간단하게 알아보도록 하겠습니다. 1. 실시간 서비스를 HTTP로 구현해보기🏀 0) 실시간 서비스..

[Git] Merge 전략에 대하여.
2022. 12. 27. 01:04
Dev.
0. 들어가며 🏃🏻♂️ 프로젝트를 혼자서 진행할 때는 대부분 main 브랜치에서 작업하거나 간단하게 브랜치를 파서 작성한 후 별 생각 없이 merge 하는 것을 반복하곤 했습니다. 최근 경험한 협업 프로젝트에서는 각 팀원들이 feature 브랜치를 통해 기능 개발을 한 뒤 main 브랜치에 merge하는 과정을 거쳐야 했습니다. git에서는 여러 가지 merge 전략이 있으며, 전략에 따라 커밋 히스토리가 크게 달라집니다. 이에 따라 저희 팀 상황에 맞는 merge 전략이 무엇일지 알아보는 시간을 가져보았습니다. 이번 글에서는 git merge 전략에 대해 정리해보도록 하겠습니다. 1. Merge 🍎 두 브랜치를 합치는 가장 기본적인 방법으로 일반적인 Merge 명령어가 있습니다. 상황 설명을 위해 아..

[Java] Enum에 대하여.
2022. 10. 13. 23:05
Java & Kotlin
0. 들어가며🏃 지난 글에서 상수를 관리하는 방법으로 유틸리티 클래스를 사용하는 방식을 살펴보았습니다. [Java] 상수들을 관리하는 방법에 대하여. 0. 들어가며🏃 코드를 작성하다 보면 상수를 정의하는 경우가 많이 있습니다. 저 역시 최근 자바 코드를 작성하면서 상수들을 하나하나 정의하다 보니.. 그 수가 많아져 이를 관리해야할 필요성 kjhoon0330.tistory.com 상수를 선언하기 위한 유틸리티 클래스는 직관적이고 그럴듯해 보이지만 몇몇 상황에서 불편한 점이 있습니다. 예시 코드를 통해서 한번 살펴보도록 하죠. class Fruit { // 정수 열거 패턴 static final int APPLE = 1; static final int GRAPE = 2; static final int STR..

[Java] 상수들을 관리하는 방법에 대하여.
2022. 9. 17. 00:27
Java & Kotlin
0. 들어가며🏃 코드를 작성하다 보면 상수를 정의하는 경우가 많이 있습니다. 저 역시 최근 자바 코드를 작성하면서 상수들을 하나하나 정의하다 보니.. 그 수가 많아져 이를 관리해야할 필요성을 느끼게 되었습니다. 상수를 어떻게 관리하면 좋을지 고민하다가 도움이 된 자료들이 있어 이번 글에서는 이에 대한 내용을 정리해보려 합니다. 1. 상수를 관리하는 방법 중 안티 패턴💀 우선 자바에서 상수를 관리하는 방법 중 안티 패턴으로 알려진 몇 가지 방법을 먼저 소개하겠습니다. 1) Magic Number if (nubmer == 3.1415) {...} // 3.1415 => Magic Number 위 코드의 3.1415 같은 수를 Magic Number라고 칭하는데 위와 같이 코드를 작성하면 다음과 같은 문제들이..

[Java] var 키워드에 대하여.
2022. 8. 20. 03:28
Java & Kotlin
0. 들어가며🚶 Java 10부터 도입된 var에 대해 존재는 알고 있었는데 이를 좀 더 정리해볼 시간을 가지고 싶어 이번 글을 작성하게 되었습니다. var에 대해 찾아보니 이를 반대하는 사람도 있고 장점에 대해 말하는 사람들도 있어 왜 정적 타입 언어인 Java에 var 키워드를 도입했는지, 사용 예시는 어떤게 있는지 등에 대해 알아보도록 하겠습니다. 1. var 사용 예시📚 Java 10부터 지역 변수에 대한 Type Inference가 가능한 var 키워드를 제공해줍니다. Type Inference는 제네릭이나 람다식에서도 찾아볼 수 있는데, 타입을 생략하여도 이를 문맥상 충분히 알 수 있으면 컴파일러가 타입을 추론해주는 것을 말합니다. 말로만 설명하면 안와닿을 수 있으니 코드로 살펴보겠습니다. /..

[삼성SDS] 2022 하계 알고리즘 특강 후기
2022. 8. 17. 19:08
기록
0. 🚶들어가며 삼성SDS에서 시행하는 2022 하계 알고리즘 특강을 신청하고 수료하여 본 후기를 작성하게 되었습니다. 교육을 신청하기로 결심하는 과정에서나 Pro 시험을 준비하는 과정에서 본 과정 후기를 남겨주신 분들의 글이 저에게 도움이 많이 되었습니다. 저 역시 SDS 알고리즘 특강에 관심 있으신 분들에게 작게나마 도움이 될 수 있으면 좋겠다 싶어 이렇게 글을 남깁니다. 1. 📕지원 과정 우선 본 과정에 지원하기 위해 자신의 인적사항과 500자 내외에 간단한 지원 글 몇 개를 작성하게 됩니다. 그 후 엘리스코딩의 플랫폼을 이용하여 입과 테스트를 응시하면 됩니다. 입과 테스트의 경우 총 5문제가 나왔는데 (제 기준으로..) 쉽지는 않았던 것 같습니다. DFS, BFS, DP 등 기본적인 알고리즘을 사..

[BOJ] 2143 두 배열의 합 - Java
2022. 7. 19. 17:03
Algorithm/백준
🤔 문제 2143번: 두 배열의 합 첫째 줄에 T(-1,000,000,000 ≤ T ≤ 1,000,000,000)가 주어진다. 다음 줄에는 n(1 ≤ n ≤ 1,000)이 주어지고, 그 다음 줄에 n개의 정수로 A[1], …, A[n]이 주어진다. 다음 줄에는 m(1 ≤ m ≤ 1,000)이 주어지고, 그 www.acmicpc.net 😀 풀이 본 문제는 백준에 표기된 알고리즘 분류와 다르게 Map 자료구조를 사용하여 풀이했습니다. 문제에서 원하는 바는 주어진 두 배열의 부분합의 합이 문제에서 주어진 값(T)과 같아지는 경우가 몇 가지인지를 구하는 것 입니다. 문제에서 주어진 입력의 크기가 1,000 임을 고려해보았을 때 브루트 포스로 풀이하게 되면 시간초과가 날 것이라 판단하여 아래와 같은 풀이를 사용했..