Project

OAuth 2.0을 활용한 로그인 구현을 하면서 (OAuth 2.0 동작, 인증/인가, Redis blackList...)

https://keepgoingforever.tistory.com/121 좋아요 기능을 개발하면서 고민한 내용 (Redis, eventual consistency ...)다양한 기능들을 개발하고 싶어서 인스타그램과 같은 소셜미디어 플랫폼을 개발하게 되었다.정말 빠른 시간 안에 개발을 하게 되어서 지금 다시 코드를 보면 또 다른 생각이 떠오르는 상태이다keepgoingforever.tistory.com개발을 시작하면서...이 글에 이어서 소셜 미디어 플랫폼을 개발하면서 겪은 경험을 공유하고자 한다.먼저 사용자가 있어야 하고, 사용자별로 인증을 하고 플랫폼을 원활하게 이용하기 위해서는 로그인이 필요하다.예전에는 id/password 기반의 로그인이 먼저 떠올랐지만, 요즘에는 소셜 로그인이 거의 모든 쇼핑몰이..

Project

좋아요 기능을 개발하면서 고민한 내용 v2 (Test와 대규모 트래픽 환경에서의 고민...)

이전 게시물에서 소셜미디어 플랫폼 내 피드 좋아요 기능을 개발했다.지금까지 개발한 부분은 Redis 캐시를 활용해서 빠른 응답을 받도록 하고 있고, Scheduler를 통해서 DB 동기화를 배치 작업을 통해 진행하고 있다.아래 링크에 지금까지 개발한 좋아요 기능을 대해서 정리해 두었다.현재 개발 로직 문제 해결 및 성능 개선소셜미디어플랫폼 프로젝트. Contribute to Hm-source/gridgestagram development by creating an account on GitHub.github.com현재 좋아요 기능을 정리한 시퀀스 다이어그램입니다. 테스트해당 기능을 로컬 컴퓨터에서 테스트하고자 한다.테스트 환경하드웨어* CPU: Apple M4 * 코어 : 10 * 논리 프로세서: ..

Project

좋아요 기능을 개발하면서 고민한 내용 (Redis, eventual consistency ...)

개발을 시작하면서 ...다양한 기능들을 개발하고 싶어서 인스타그램과 같은 소셜미디어 플랫폼을 개발하게 되었다.정말 빠른 시간 안에 개발을 하게 되어서 지금 다시 코드를 보면 또 다른 생각이 떠오르는 상태이다.이런 과정도 생각이 넓어지면서 성장하는 과정이라고 생각한다!문제를 여러 관점에서 생각하다보면 머리가 복잡해질 때가 있다. (그래도 해야지~) ERD를 설계하며처음에 먼저 ERD를 구성하였고, 다양한 기능을 개발하게 되었다. 소셜 로그인도 구현하였고, 좋아요 기능, 어드민 로그 기능, 스케쥴러 설정 등 다양한 경험을 했다. (기능별로 게시물을 고민해 본 것들을 작성해 볼 예정이다.)개발을 하면서 좀 바뀐 부분이 있었다. 특히 피드 좋아요 기능이었다. (ERD가 바뀌었다기보다 처음에 Redis를 도입할 ..

Study/Algorithm

[백준 20208] 진우의 민트초코우유 (골드 5)

해당 문제를 보고 백트래킹을 써야겠다는 생각이 들었다.백트래킹?모든 가능한 방문 조합을 재귀적으로 시도해보고, 그중에서 유효한 것만 정답 후보로 선택모든 경우를 탐색하되, 중간에 불가능한 경로는 더 이상 가지 않고 돌아가는 알고리즘하지만 구현하는 데에 좀 어려움을 겪었다.처음에 dx, dy로 한칸씩 이동하면서 초코우유를 먹으면서 체력을 늘리고 2를 0으로 바꾼 뒤에 다시 탐색해보는 방향으로 생각했는데 아주 잘못된 생각이었다. 이 문제의 목표는 최대한 많은 민트초코우유를 먹고, 집에 돌아올 수 있는 경우 중 우유의 최대 개수를 구하는 것이다.조건은 아래와 같다. N x N 크기의 마을 (map)진우의 집은 1, 민트초코우유는 2, 빈칸은 0진우는 상하좌우 한 칸 이동에 체력 1 소모민트초코우유를 먹으면 ..

Study/Algorithm

[백준 32387] 충전하기 (골드 4)

https://www.acmicpc.net/problem/32387 문제를 읽으면서 대충 요약하면서 정리해보았다.Node 클래스가 필요하다는 것을 먼저 파악하고 어떤 값이 들어갈지 고민해보았고,먼저, 인덱스와 전력 그리고 행동 순서 를 기억하고 있어야겠다고 생각했다.그리고 예시를 직접 테스트해보면서 내가 이해한 바가 맞는지 확인하였다.첫 코드package baekjoon._32387;//https://www.acmicpc.net/problem/32387import java.util.*;import java.io.*;public class Main { static int N, Q; static List multitab; public static void main(String[] args) throws E..

Study/Algorithm

[백준 20040] 사이클 게임 ( 골드 4)

https://www.acmicpc.net/problem/20040 유니온 파인드 관련된 문제를 찾아서 진행했다.두 점을 연결하는 과정을 거치면서 사이클이 완성되면 끝나는 게임이다. 두 점을 union하면서 isSameParent 로직으로 확인하면서 cycle이 발생하면 몇 번째 union 에서 발생했는지 출력하면 된다.* 중요 -> union하면서 parent[] 배열로 부모 점을 계속 변경해주어야 한다. 이때는 둘 중 작은 수로 부모를 변경해야 한다.union -> 두 점을 연결하고 같은 부모를 바라보게 한다.find -> 각 점의 부모를 찾는다.isSameParent -> 부모가 같은지 확인한다. 최종 코드package baekjoon._20040;import java.io.*;import java..

Study/Algorithm

[백준 2638] 치즈 (골드 3)

https://www.acmicpc.net/problem/2638처음 문제를 보았을 때 아래와 같이 판단하였다.1. BFS를 통해서 먼저 외부 공기(-1)를 구분한다.2. 배열을 순회하면서 외부 공기랑 2면 이상 닿으면 0으로 표시한다.3. 치즈가 없는지 판단한다.(1이 하나라도 있으면 true 반환) * 문제를 풀 때, 초기화 단계를 잊어버리는 경우가 많아서 체크하기 위해 따로 적어둔다. 하지만 while문을 통과하지 못하는 오류가 발생하였다.확인해보니 치즈를 녹이는 단계에서 외부 공기랑 2면 이상 닿았을 때 바로 0으로 바꾸는 것 때문에 제대로 다음 치즈들에 대해서 처리가 되지 않았다.또한 외부 공기를 한 번 확인하고 치즈를 녹이는데 다시 외부 공기를 확인할 때 외부 공기를 다시 판단해야하는데 초기화..

Project

📌 ERD 설계 가이드 (+ 직접 겪은 ERD 설계 경험)

프로젝트를 진행하면서 꼭 거쳐야 하는 과정이 있다. 매우 중요한 부분이고 팀원들이 모두 참여해야 한다.바로 "ERD 설계"이다.처음에 ERD를 설계할 때는 막막한 감정이 가장 먼저 떠올랐던 것 같다. 하지만 몇 번의 과정을 거치면서 어떤 요소를 고려하면서 ERD를 구성해야 하는지에 대해서 생각을 해보게 되었다. ERD를 구성하면서 겪었던 어려움들 그리고 추가적으로 알게된 내용에 대해서 공유하고자 한다.누군가 ERD를 구성하는 데에 막막함을 느낀다면 도움을 받았으면 좋겠다. ERD는 데이터 모델링을 시각적으로 표현한 다이어그램이다. 데이터베이스를 설계할 때 해당 다이어그램을 기준으로 하게 되어 팀원 모두가 인지하고 있어야 하고 같이 설계해야 효율적으로 작업을 할 수 있다.ERD의 중요 구성 요소로는 "엔티..

Project

[LMS] 10일 동안의 '학습 관리 시스템' 개발 그리고 다른 팀과의 협업 이야기(1)

DEEP DIVE Spring 기반 백엔드 개발자 성장 과정 2차 프로젝트를 진행하였다.2주 정도의 기간 동안 5명의 팀원이 모여서 팀 프로젝트를 진행하고, 우리 팀 외의 다른 팀을 고객 팀으로 선정하여 요구사항을 받아서 소통하면서 개발도 진행하였다.우리는 4팀 GoGet고객 팀이다. WHY GoGet고객? 우리 팀 요구사항에 잘 대응하고 직접 다른 팀과 소통하여 프로젝트를 진행하기 때문에 우리 자신도 고객, 다른 팀도 고객이라고 생각하고 진행해야 하는 프로젝트라고 생각했다. 그래서 고객을 위해서 Go 하고 고객의 마음을 Get 하자는 목표로 이렇게 팀명을 정하게 되었다!빠른 시간 안에 결과물을 만들어야겠다는 생각이 우선되어 팀원들과 상의해 모든 팀원들이 대학 시절 경험해 보고 익숙한 시스템인 "학습 관..

Study/면접 준비

[신입 개발자 면접 준비] 면접 스터디 2차 (DATABASE)

2024.12.27스터디원들과 2차 면접 스터디를 진행하였다. 이 날도 조금이긴 하지만 눈이 왔다... 만날 때마다 눈이라니~ 신기하다 허허한 3주 정도 Database 에 관해서 각자 공부를 진행하고, 공부한 내용을 발표하면서 많은 지식을 쌓았다.2차 면접 스터디도 6명이 각자 돌아가면서 면접 질문을 하고, 각자 정답을 알거나 아는 부분이 있으면 먼저 이야기하고, 다른 사람들은 답변이 부족하거나 틀리다면 다시 답변을 보충할 수 있도록 하였다!면접 질문 리스트1. 인덱스와 키의 차이점은 무엇인가요?더보기키는 데이터의 고유성과 참조 무결성을 보장하는 요소로 Primary Key, Foreign Key 등 이 있습니다. 인덱스는 검색 속도를 높이기 위해 사용하는 자료구조로, 데이터를 효율적으로 찾고 정렬하기..

Database

클러스터링과 리플리케이션에 대하여

클러스터링(Clustering)여러 대의 서버를 하나의 시스템처럼 작동하도록 구성하여 확장성과 가용성을 높이는 기술이다. 이를 통해 트래픽 증가나 장애 상황에서도 안정적인 서비스를 제공할 수 있다.특징으로는,여러 DB 서버를 하나의 논리적 단위로 묶어 운영.고가용성과 확장성을 보장.데이터의 일관성을 유지하면서 트래픽을 분산 처리. 1) Active-Active 방식구성두 개 이상의 DB 서버가 동시에 작동하며, 하나의 스토리지를 공유.모든 DB 서버가 트래픽을 처리하고, 한쪽 서버가 중단되더라도 나머지 서버가 정상 작동.장점높은 가용성: 한 서버가 중단되더라도 다른 서버가 지속적으로 작동하여 서비스가 중단되지 않음.성능 향상: 두 개 이상의 서버가 CPU, 메모리, 네트워크 등을 활용하여 더 높은 성능을..

Database/SQL

인덱스에 대해서 알아보자!

이전에 [DB] PK (Primary Key) ID 길이가 성능에 영향을 미칠까? 라는 글을 쓸 때 인덱스에 대해서 간단히 알아보았다.또한, 데이터베이스 튜닝에 대하여 라는 글을 쓸 때에도 인덱스를 설정하여 DB의 성능을 높이는 방법에 대해서도 알아보았다. 해당 글에서는 인덱스에 대해서 더 자세히 알아보겠다. 인덱스란?인덱스란 CUD 의 성능을 희생하고 그 대신에 테이블의 조회 속도를 높여주는 자료구조이다. 어떤 항목을 조회하는데 60초 이상의 시간이 걸리던 것이 인덱스를 통해서 조회하면 한자리수의 초 단위로 조회할 수도 있을 정도로 데이터베이스 속도를 크게 좌우하는 요소이다. 하지만 마구잡이로 인덱스를 사용하면 사용하기 전보다 성능이 더 떨어질 수도 있다.그렇기 때문에 인덱스라는 것을 잘 알고 써야 ..