Song[coding diary index]

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

분류 전체보기 38

[EP 1-5] 초보 ver. CICD 파이프라인 구축하기!(Github Action, Docker, Spring boot)

시작계기최근 AI가 나날이 발전함에 따라서 코드만 짜는 백엔드 개발자로는 살아남기 힘들다는 생각이 문득 들기 시작했다.그래서 '⚙️시스템 아키텍쳐⚙️적인 부분을 아는 백엔드 + Devops를 겸하는 개발자가 비로소 살아남을 수 있지 않을까...' 라는 생각에이렇게 일단 누구나 다 하는 CICD파이프라인을 구축해보고자 한다. 매번 쓰던 CICD를 사용했지만, 하도 쓸모없는 코드가 많아서 최적화시킬 겸 이렇게 글을 작성한다.내 글을 보고 보충하면 좋을 점과 피드백을 주는 것은 언제나 환영한다. 👨‍💻 사용한 기술Github Action -> 파이프라인 구축용Gradle -> Java 전용 빌드 파일 도구Docker -> 이미지 파일 빌드Docker Compose -> 다수의 컨테이너 한번에 띄우기GCP ..

spring 2025.04.04

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

서론위 당근 서비스의 채팅서버에 대한 발표를 정리한 글이다.당근에서 설계된 채팅 아키텍쳐와 전략 등을 살펴보고, 내 생각을 따로 정리하고자 이렇게 작성했다.모든 그림은 발표에서 사용된 그림을 가져왔다.본론채팅서버의 동작방식 설명상황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
LIST