본문 바로가기

전체 글34

구글 로그인 아키텍처 설계 (Spring Boot + MongoDB) 구글 소셜 로그인을 Spring Boot와 MongoDB기반으로어떻게 설계하고 구현였는지, 그리고 프론트엔드와 백엔드 간책인 분리 관점에서 개선한 방식을 소개해보려 합니다. 1. 프론트와 백엔드의 책임 분리🔹기존 설계- 프론트엔드가 직접 Google OAuth URI를 생성하여 요청- 구글 로그인 후, 인증 코드를 프론트가 받아서 백엔드에 전달 🔸개선 방식 (Spring Security 기반)- 프론트는 /oauth2/authorization/google로 요청만 보냄- Spring Security가 구글과의 인증 흐름 전부 처리 ✔️비교- 기존 설계에서는 인증 코드 탈취 가능성이 증가함 - 개선 방식에서는 Spring Security가 구글과의 인증 흐름 전부 처리 > 인증 코드 노출이 없음 (보.. 2025. 5. 11.
[프로젝트] 코드 리펙토링 도전기 step 1. 코드 분리하기 코드 리펙토링 도전기기존 프로젝트 속 코드는 중복되거나, 한 클래스에 너무 많은 책임이 있는 등 기능을 굴러가나 효율적이지 못한 코드로 이루어져 있었다. 프로젝트를 이어 나가기 전 리펙토링을 통해 한층 더 나은 설계를 해보고자 리펙토링을 시작하게 되었다.How to start...?일단 기본적으로 있어야 할 테스트코드가 없었기에 감을 잡기가 어려웠던 상황..!!테스트코드를 먼저 적기에는 SRP원칙이 어긋난 부분이 많았기에 코드를 먼저 분리하는 것이 맞겠다는 결론이 나왔다!SRP(단일 책임 원칙) 이란?- 한 클래스는 오직 하나의 액터(사용자)만을 위한 책임을 가져야 한다. - 각 소프트웨어 모듈이 변경해야 하는 단 하나의 이유를 가져야 한다. Step1. 코드 분리하기 ✔️ 단일 책임 원칙을 지키면 좋을.. 2025. 4. 7.
[자격증] Toeic Speaking AL 꿀팁 공유 안녕하세요 :)오늘은 2주간 토익 스피킹을 준비하면서 어떤 식으로 공부했는지 공유해보려 합니다!목차1. 토스 선택 이유2. 교재3. 공부 과정4. 시험 직전 팁 5. 시험 후기  1️⃣ 토스 선택 이유일단, 오픽이 아닌 토스를 선택한 이유는 첫번째! 자신이 없었다...ㅎㅎ평소에 프리토킹을 생활화하거나 스피킹 자체에 자신있는 편이 아니었기 때문에단기간에 점수를 높이기에는 어느 정도의 템플릿이 있는 토스가 유리하다고 생각했다. 학교 취업특강 강사님께서도 시험 종류가 중요하다기보다는 높은 점수를 받는 것이중요하다고 말씀하셨어서 토스로 확정하게 되었다!TIP! ) 대학생이라면 학교에서 외국어시험 응시료 지원사업을 진행 중일 수 있으니 꼭 확인해볼 것! 2️⃣ 교재 교재는 "5일만에 끝내는 토익스프킹 실전모의고사.. 2025. 3. 23.
[자바의 정석] 변수, 배열, 객체 지향 파트 요약 정리 (챕터2, 5, 6 정리) 기초를 다잡기 위해 자바의 정석을 읽고 요약해보는 시간을 가져보려 한다. (이번 글에서는 2, 5, 6과에 해당하는 요약이니 참고바랍니다)  JAVA의 정석(2ND EDITION) | 남궁성 - 교보문고JAVA의 정석(2ND EDITION) | 자바의 기초부터 객체지향개념을 넘어 실전활용까지 자바의 참맛을 느낄 수 있는 교재『JAVA의 정석(2ND EDITION)』. 첫 째로 각 장마다 연습문제가 추가되어 학습한 내용을product.kyobobook.co.kr   ch02 변수 변수 선언→ 변수 타입+이름 작성변수 선언 이후 값 저장→ 변수의 초기화변수 타입기본형→int, double 저장할 값의 종류에 따라 구분논리형(boolean(1)), 문자형(char(2)), 정수형, 실수형(float(4), d.. 2025. 3. 16.
(Design Pattern) 디자인 패턴 들어가기 (핵심 14가지 패턴) GoF의 디자인 패턴에는 23가지가 있으나..!핵심으로 여겨지는 14가지 패턴에 대한 정의, 그리고 특징을 가져와봤다.어떤 것들이 있는지 알기 위함 정도로 봐주면 좋을 듯 하다! 깊이 있는 이해를 위해서라면 무조건 예제를 보는 것을 추천!!생성 패턴 : 객체 인스턴스를 생성하는 패턴, 클라이언트와 해당 클라이언트가 생성해야 하는 객체 인스턴스 사이 연결을 끊어주는 패턴싱글턴 패턴(Singleton Pattern)특정 클래스에 객체 인스턴스가 하나만 만들어지도록 해주는 패턴(유일한 인스턴스 제공)생성자를 명시적으로 private으로 선언해서 외부에서 여러 개의 인스턴스를 만들지 못하게 막음static변수를 사용해 하나의 인스턴스만 유지전역적으로 접근 가능get 메서드 제공메모리 절약 & 성능 최적화 (불필.. 2025. 3. 9.
[알고리즘] 직사각형으로 나누기 (with JAVA) 생각의 흐름각 직사각형들의 숫자 합을 곱한 값이 가장 크게 만들려면 사용해야 하는 알고리즘이 따로 있을까?⇒ 다 해보고 큰 값을 출력해야 한다고 생각함(브루트포스)구분할 인덱스 두개를 선택→ 그 내부에 있는 수들은 더해 저장→ 곱한 값 저장X → 행이 여러개일 땐 인덱스 하나로 나뉘어지지가 않음 ⇒ 직사각형 구분을 어떻게 할 수 있을까? ⇒ (블로그 참고) 일일히 6가지 경우를 구한다..!!각각 구해야 하는 6가지 경우에 대한 그림이다. ⚠️오답 코드public class P1451_직사각형으로나누기 { static long max=0; static int [][] list; static int n,m; public static void main(String[] args) throw.. 2025. 3. 3.
[회고] 프로젝트 회고 <너쫌친당> 벌써 에코노베이션에 들어온지 1년이 되어가는데요 :)ㅎㅎ오늘은 두번째 학기에 진행한 프로젝트에 대해 회고를 해보려 합니다.(팀원 회고 포함) 🙆‍♀️팀명: 현솔루션🎱프로젝트명: 너쫌친당 ✔️팀원 구성: PM 1명, FE 1명, BE 2명  📋팀 회고 (질문별 답변자가 다릅니다 :) )Q1. 프로젝트를 소개해 주세요!: 당구를 함께 칠 상대방을 구하는 서비스로 게임 상대 매칭과 경기 진행, 결제까지 한번에 편리하게 체험할 수 있습니다.Q2. 프로젝트 하면서 어떤 문제를 겪었나요?: 마일스톤 관리가 잘 진행되지 못하여, 마지막에 많은 api들을 급하게 연동하게 되었습니다. 그로 인해서 조금 피곤했던 기억이 남네요. Q3. 프로젝트 하기 전 후 달라진 점이 있다면? : 프로젝트 시작 전부터 같은 분야 팀.. 2025. 2. 17.
[알고리즘] 세그먼트 트리란? 세그먼트 트리는 무엇일까? ● 데이터의 구간 합(합배열)과 데이터 업데이트를 빠르게 수행하기 위해 고안해낸 자료구조 형태종류: 구간 합, 최대, 최소 구하기구현 단계1. 트리 초기화하기리프노드 개수가 데이터 개수(N) 이상이 되도록 트리 배열을 만듦 ⇒ 2^k ≥ N을 만족하는 k의 최솟값을 구한다. ⇒ 트리 배열의 크기: 2^k * 2 (e.g. N이 8이면 배열의 크기는 16이됨)왜 2^k * 2 인가?일단 리프노드: 2^k개나머지 노드: 2^k-1개0(empty):1개해서 배열의 크기: 2^k * 2자식노드 인덱스는 이진트리 형식이므로 각각 2N, 2N+1이 됨⇒ 각각 계산을 통해 값을 채워준다.2. 질의값 구하기 질의 인덱스를 세그먼트 트리 인덱스로 변경세그먼트 트리 index = 질의 index.. 2025. 2. 10.
웹소켓 연결, 끊김 감지 (feat. 채팅 목록 unreadCount 구현) 프로젝트를 진행하면서 웹소켓과 관련해서 개발할 일이 많아 꼭 구현해야하는 부분 중 하나가 웹소켓 연결 그리고 끊김을 감지하는 부분이었다. (모두 웹소켓 연결과 끊김을 감지하는 로직을 토대로 진행된다고 생각함) *개발 ToDo*1️⃣ 채팅 목록 unreadCount 숫자 구현2️⃣ 채팅 메세지별 unreadCount 구현 목차 1. 웹소켓 연결, 끊김 코드 구현2. 채팅 목록 unreadCount 로직3. 2번 코드 구현 1. 웹소켓 연결, 끊김 감지 코드 : WebSocketListenerConfig 클래스에 구현을 진행했다. (생략한 부분에 원하는 로직을 넣으면 된다.)@Component를 빼놓지 않고 넣어고 웹소켓 연결이 발생했을 때 이어지는 코드가 실행될 수 있도록 마무리해준다. ➕@Componen.. 2025. 1. 31.