Song[coding diary index]

Song 배열에 코딩 흔적 남겨두기

전체 글 37

[고찰] 당근 채팅 시스템 정리 및 생각

서론위 당근 서비스의 채팅서버에 대한 발표를 정리한 글이다.당근에서 설계된 채팅 아키텍쳐와 전략 등을 살펴보고, 내 생각을 따로 정리하고자 이렇게 작성했다.모든 그림은 발표에서 사용된 그림을 가져왔다.본론채팅서버의 동작방식 설명상황User A, B, C가 존재하고 각각은 메세지 발행자, 메세지 수신자(Online), 메세지 수신자(Offline) 상태이다.서버의 종류는 Chat-Server, Push-Server, 데이터를 저장하는 DB가 있다.채팅서버의 간단한 동작방식 시나리오: A가 B와 C에게 메세지를 전달한다!1. A가 채팅서버와 연결되면, 채팅서버의 로컬 메모리에는 유저의 ID값과 Session값을 저장해둠.(B도 동일하게 수행된다.) 이를 통해서 사용자가 온라인인지, 오프라인인지 구분하게 된다..

고민 + 기타 2025.03.27

[알고리즘 코딩테스트] 나만의 SQL 문법정리

1. NULL값 대체- SELECT COALESCE(Column명, null일 경우 대체값) FROM TABLE; 2. 날짜 포멧 바꾸기- DATE_FORMAT(column명,'%Y-%m-%d') AS HIRE_YMD 3. 문자열 연결- CONCAT(str1, str2, ..)4. 중복 제거SELECT COUNT(NAME) AS 'count'FROM ANIMAL_INSWHERE NAME IS NOT NULLGROUP BY NAMEORDER BY COUNT(NAME) DESCLIMIT 1; 5. with/** SUB QUERY를 이용한 방법 **/SELECT T1.*  FROM (       SELECT A.DEPTNO            , A.LOC         FROM SCOTT.DEPT A    ..

알고리즘 2025.03.17

프로젝트에서 유용하게 쓸 수 있는 기술들 모음집.

이 블로그는 나중에 프로젝트할 때나 내가 알고있으면 도움될 기술이나 서비스들을 모아둔 곳입니당.혹시 보시고 유용한거 같은 기술들은 가져가서 사용해보세요! 1. ngork- 로컬서버를 임시로 배포해서 띄워놓을 수 있음. 해당 사이트 방문해서 순서도 다 설명해줌.- ex: 8080포트로 서버를 로컬에서 실행시킨 뒤, ngrok를 사용해서 배포해두면 내가 로컬서버를 실행시키는 동안에는 end-point를 제공하고 다른 사람들이 접근 가능함. 2. duck dns- 도메인 굳이 안사더라도 임시방편으로 사용가능함. 다양한 시도는 해보지 않았는데 괜찮은듯? 지속적으로 수정할 예정입니다! (최신 수정일: 2025.03.17)

고민 + 기타 2025.03.17

[EP 1-4] Spring 소셜로그인(OAuth2) 써보기1: 소셜로그인 완벽 이해하기

시작하기 전...프로젝트에서 앱스토어와 플레이스토어 배포를 위해서 소셜로그인을 개발해야했다.(특히 Apple로그인은 안만들면 리젝당하니...)총 Google, Apple 2가지 소셜로그인을 구축하고, 자체 회원가입은 구현하지 않도록 했다.각 플로우차트를 설명하고, 이후 코드를 통해 설명하겠다. 이 글은 총 3편으로 1)이해, 2)SDK ver., 3)Backend ver.로 구성될 예정이다. 🍀내가 겪었던 모든 소셜로그인 삽질을 다른 사람들이 겪지 않기를 바라는 마음으로 이 글을 작성한다.🍀기본적인 소셜로그인 플로우들어가기 앞서, 소셜로그인 자체를 구현할 때 크게 거치는 과정이 존재한다. 인증 서버, 리소스 서버는 각각 소셜로그인을 제공하는 회사에서 운영하며, 대부분 아래 틀과 같은 플로우를 거친다...

spring 2025.03.13

[PE 2] 매일코테(Mail-cote): Go언어 프로젝트 해보기

기말고사 2주전에 마무리했던 프로젝트인데, 시험기간때문에 방학이 되어서야 회고록을 쓰게 되었다...그럼 출발~시작계기GDG(Google Developer Group)동아리의 서버 파트에서 백엔드 사이드 프로젝트를 참여했던 프로젝트이다.최신기술 중 몇가지를 적용한 프로젝트(grpc, OAuth, MSA, Kubernetes 등..)를 만드는 것이 목적이었고, 간단한 서버프로그램을 만드는 것이 동아리의 취지였다. (취지는 매우 간단했다. 그냥 '최신기술 써보고 익숙해지자!' 느낌?)나도 '최신기술 하나 이용해보고, 익숙해지자!' 라는 가벼운 취지였지만, 결국 깊은 공부를 하게 된 프로젝트가 되었다. 하지만... 2명이 팀이 되어 하는 프로젝트에서 열정적인 팀원덕분에 프로젝트의 규모가 커졋고, 덕분에 기말고사..

[EP 1-3] spring jpa json serialize 문제 해결과정 (부제: JPA 지연 로딩)

문제 상황동아리 홈페이지 만들기를 하면서, 프론트에서 API테스트를 하다가 /profile/blog에서 문제가 발생했다.팀장이다보니 빠르게 버그수정을 위해서 팀원이 짠 코드를 빠르게 고치고자 직접 수정하려했다.(/profile/blog: 내 프로필에서 내가 작성한 블로그를 조회하는 기능)(Post(1) : Comments(N)(N:1관계) / Post(1) : tags(N)(N:1관계)임을 참고)/* 내 블로그 조회기능 @param: studentId(학번) @return: 내가 작성한 블로그 전체(pagination) - 학번으로 jpa를 통해서 유저 확인. - user pk를 통해서 내가 작성한 블로그를 가져옴.*/@Override public List showMyBlog(..

spring 2024.10.15

[PE 1] 프론트 체험기(부제: 프론트에 관심이 있는 사람들에게...)

이전에 2-3개 정도의 프로그램을 진행했지만 이번부터 프로젝트에 대한 회고록을 작성해야 내 앞날에 발전이지 않을까 싶어서 이렇게 작성해봅니다.. 앞으로 자주 회고록 쓰면서 우직한 목수같은 개발자가 되어보자. 솔직히 이번 회고록은 도움이 되는 측면은 많이 없다. 하지만 혹시나 프론트에 관심이 있으신 분들에게 도움이 될 겸, 내 프로젝트의 역사를 남겨둘 겸 작성하는 것이니 참고해주길 바란다. 내 스타일대로 조금 날 것(?)의 말투로 작성할테니 이해해주시길 바랍니다. 내가 프로젝트를 시작한 계기규모가 큰 프로젝트를 만들었다기보다는 예대분들과 함께 하는 대회에서 만든 프로젝트이다. (1)나와 다른 직종, 전공을 가진 사람과 함께 프로젝트를 해나가는 것에 목적을 두었고, 나름 성공적으로 마친 프로젝트인 것 같다...

[EP 2-1] Go언어의 동시성, 병렬성, 쓰레드 -> 고루틴, 채널까지

사람이 자신의 모국어를 쓰는건 그 나라에서 다른 사람들과 의사소통하기 위해서이다.= 주어진 상황에서 사람과 의사소통 할 수 있는 최선의 언어프로그래밍 언어도 동일하다고 생각한다. 어떤 주어진 상황에서 최선의 언어와 조건을 선택해야하기에, 언어의 특징과 그 이유를 잘 알아야한다고 생각한다.이번에는 GO언어를 사용하는 큰 이유 중 하나인, 동시성-병렬성, 그리고 쓰레드에 관련한 글을 쓰려 한다.먼저 각 언어의 개념부터 알아보자! 동시성(Concurrency) vs 병렬성(Parallelism)동시성은 큰 Task들이 빠르게 전환하여 실행되면서, 동시에 처리하는 것처럼 보이는 것을 말한다.(논리적 개념)병렬성은 실제로 task들을 동시에 처리하는 것을 말한다. (물리적 개념) 이렇게 놓고 보면 당연히 성능 측..

go 2024.10.09

최대공약수 / 최소공배수 알고리즘 (c++)

최대공약수 / 최소공배수 문제를 풀때 매우 유용할 것 같아서 블로그에 작성해둔다. 해당 알고리즘 문제만 나온다면 어디서든 쉽게 활용가능하니 꼭 알아두자. 유클리드 호제법 유클리드 호제법이란, 정수 A, B 그리고 이들의 나머지값 R이 있다고 할때,(A % B = R)A, B의 최대공약수가 B, R의 최대공약수와 같다는 원리이다. 이때, A와 B의 대소비교는 중요하지 않음. 10 % 15 = 1015 % 10 = 510 % 5 = 0-> 최대공약수: 5이렇게 쉽게 최대공약수를 산출가능하다. 코드형식은 아래와 같다. int gcd(int a, int b) { int temp; while(b != 0) { temp = a % b; a = b; b = temp; ..

알고리즘 2024.08.26

프로그래머스 숫자 카드 나누기 (c++)

최대공약수를 구하는 유클리드 호제법을 이용한 문제이다. 이에 최대공약수를 구하는 규칙을 모른다면 문제를 못푼다.알고리즘 풀이우리가 아는 유클리드 호제법은 두 수에 대한 최대공약수를 구하는 함수를 알고 있을 것이다.그러나 이번 문제에서는 여러 수의 최대공약수를 구해야하는 문제이다. 그러면 어떻게 할까? -> 생각보다 쉽다. 5개의 수가 있다고 할 때, 1번째 2번째 수의 최대공약수를 N이라 할 때, 3번째 수와 N의 최대공약수를 구하면 된다.어짜피 첫번째, 두번째 수를 0으로 만들 수 있는 최대의 값이 N이기 때문에, N과 3번째수만 비교해도 3개의 수의 최대공약수를 알 수 있다.  해당 방법으로 두 사람이 가진 카드뭉치의 최대공약수 2개를 구한 뒤, 상대방의 카드뭉치를 나눌 수 있는지 없는지 확인하면 된..

알고리즘 2024.08.16
LIST