프로젝트

[StudyWithMe] 프로젝트 전체 코드의 품질 향상을 위한 ListCheckUtils 적용
·
StudyWithMe
이번 포스팅에서는 깊은 내용을 다루는 것이 아니라,,,`StudyWithMe`의 코드 작성 간 리스트 안의 값 존재여부 확인 시 너무 많은 중복 코드가 생겨가독성 개선 및 중복 코드 제거를 위해 `ListCheckUtils`를 적용한 내용을 설명하려 한다.ListCheckUtils 도입 전 본래의 `StudyWithMe`에서는 `List` 객체의 `null or empty` 확인을 위해스터디 룸의 `생성`, `수정` 작업에서 아래 코드의 `if문` 형식이 굉장히 많이 반복되었다.  `ListCheckUtils` 도입 전 StudyRoomCommandService@Service@RequiredArgsConstructorpublic class StudyRoomCommandService { ... ..
[StudyWithMe] 스터디 윗 미 프로젝트에서 n8n 사용해보기
·
StudyWithMe
이번 포스팅에서는 `StudyWithMe` 프로젝트에서 `n8n`이 무엇인지. 그리고 사용하계 된 계기에 관해 설명하려고 한다. 같이 프로젝트를 진행하시는 백엔드분이 `n8n`을 소개해주셨는데 말이 안되는 `오픈소스`이다...(진짜 이걸로 못하는게 있을까 싶다..)  n8n이 뭘까? `n8n`은 아주아주 다양한 작업을 자동화할 수 있는 확장 가능한 워크플로우 도구이다. `nodemation`의 줄임말로, 노드 기반의 시각적 인터페이스를 통해 쉽게 워크플로우를 구성하고 실행할 수 있도록 도와준다. 기본적으로 `오픈소스`이지만 경쟁이 될 수 있는 클라우드 서비스를 만드는 것은 금지되어 있다. 그러나, 개인 또는 회사 내부에서 사용이 가능하다. n8n의 주요 특징 시각적 플로우 빌더(가독성이 좋다.) `n8n..
[StudyWithMe] 유저의 사업자 검수 요청을 처리하며 - 2
·
StudyWithMe
이전 포스팅에서는 유저의 사업자 검수 요청 요구사항에 관한 설명과이와 관련된 `ApplicationEventPublisher` 활용에 대해 설명했다. 2025.01.15 - [프로젝트/StudyWithMe] - [StudyWithMe] 유저의 사업자 검수 요청을 처리하며 - 1 [StudyWithMe] 유저의 사업자 검수 요청을 처리하며 - 1이번 포스팅 및 다음 포스팅에서는 유저의 사업자 검수 요청과 관련된`StudyWithMe` 프로젝트에서의 `ApplicationEventPublisher` 사용`ApplicationEventPublisher` 사용과 관련된 테스트 코드에서 `@Transactional`를hdbstn3055.tistory.com  이번 포스팅에서는 `ApplicationEventPub..

Spring Boot

[Spring JPA] JPA Transactional 좀 더 알기
·
JPA
현재 `SpringBoot`를 사용하시는 대부분의 개발자라면, 대부분 `Spring Data JPA`를 사용할 것이다.또한, `Spring`에서 제공해주는 `@Transactional`이라는 어노테이션을 많이 활용할 것이다. 그런데, 이것저것 공부를 하며 내가 몰랐던 `JPA Transactional`에 관한 많은 지식을 카카오페이의 테크 블로그를 통해 알게 되었다. 따라서, 이번 포스팅 내용은 해당 블로그에서 얻은 지식을 정리하는 것이다.추후, 진행중인 `StudyWithMe`에도 적용해 볼 예정이다. 그럼 시작해보자.@Transactional이란?`Spring Transactional annotation`, 이하 `@Transactional`은 `Spring`에서 메서드의 원자성을보장하기 위해 정의된..
[Spring] Tomcat Thread Pool
·
유용한 정보
이번 포스팅에서는 Spring Boot의 내장 서버로 활용할 수 있는 `Tomcat`의 `Thread Pool`에 관해 좀 자세히 알아보려고 한다. Thread 개요스레드, 스레드.. 컴공과 개발자를 꿈꾸는 사람이라면 수도 없이 들어봤을 그 이름이다. `Thread`는 `Process`의 작업의 단위이다. 그리고 CPU Core가 `Thread` 단위로 작업을 처리하게 된다. 즉, 결론적으로 `Thread`는 CPU Core의 실행 단위라고 할 수 있다. `Thread`를 사용함으로 하나의 `Process`에서 두 가지 이상의 작업을 동시에 실행 가능하게 된다. 단순하게 Thread를 사용하게 된다면?만약 새로운 요청이 들어올 때마다 새로운 `Thread`가 생성된다고 가정해보자. 생성 비용이 큰 Thr..
[JPA] getReferenceById() 리마인드
·
JPA
`StudyWithMe` 프로젝트를 하면서 잊고 있었던 `getReferenceById()` JPA 메서드를 사용했다. findById()와 getReferenceById() findById()와 getReferenceById()가 데이터를 가져오는 방식에는 어떤 차이가 있을까?  findById()Optional findById(ID id)Optional: 조회된 엔티티를 Optional로 감싼 반환 타입이다.Optional은 엔티티가 존재하지 않을 수도 있는 경우에 사용된다.ID: 조회할 엔티티의 식별자(ID) 타입이다.조회된 엔티티 객체를 Optional로 감싸서 반환한다.`CrudRepository`와 `JpaRepository` 인터페이스에서 모두 제공되는 메소드이다. getReferenceBy..

DB

[PostgreSQL] PostgreSQL에 관하여
·
PostgreSQL
2024.12.06 - [프로젝트/StudyWithMe] - [StudyWithMe] PostgreSQL을 처음 접해보며 [StudyWithMe] PostgreSQL을 처음 접해보며이번 `StudyWithMe` 프로젝트에서 `PostgreSQL`을 사용하기로 했다. 지금까지 `MySQL`만을 사용해왔었는데, 같이 프로젝트 하는 친구의 적극 유도(?)로 `PostgreSQL`을 사용하게 되었다. 기존에 `PostgreSQL`은 `hdbstn3055.tistory.com
[MongoDB] MongoDB란?
·
MongoDB
이번에 혼자 `WebSocket`, `SockJS`, `STOMP`에 관해 학습을 진행하며 채팅 서비스를 개발하는 것을 목표로 정했다. 이때 채팅 메시지에 관한 영구 저장소를 선택하기 위해 고민을 했는데 처음 떠오르고 선택하게 된 것은 `MongoDB`이다.대부분?의 사람들이 알고 있듯 채팅하면 `MongoDB`라는 말은 많이 들었을 것이다.하지만, 알고만 있고 그 이유는 특별하게 몰랐다. 또한, 여태까지 `NoSQL` DB는 `Redis`만 사용해왔기에 `MongoDB`는 새로운 접근이였다. 그래서 `MongoDB`에 관해 알게 된 내용들을 정리하려 한다.  MongoDB란?`MongoDB`는 문서 지향적인 `NoSQL` 데이터베이스로, 대량의 비정형 데이터를 저장하고 처리하는 데 사용된다. 문서 지향..
[Redis] Redis 야무지게 사용하기
·
Redis
Redis 캐시로 사용하기 What is Caching?Temporary Location For Speed데이터의 원래 소스보다 더 빠르고 효율적으로 액세스할 수 있는 임시 데이터 저장소 `캐시`란 사용자의 입장에서 데이터의 원래 소스보다 빠르게 효율적으로 액세스 할 수 있는 임시 저장소를 말한다.대부분의 애플리케이션에서 속도 향상을 위해 `캐시`를 사용한다. 일단 이 `캐시`를 효율적으로 접근하기 위한 조건은 다음과 같다.원본 보다 빠른 접근 속도같은 데이터 반복적 액세스(즉, 데이터 액세스 횟수가 1번 이상이여야 의미가 있음)변하지 않는 데이터 Redis as a cache Most popular software caching solution단순한 key-value 구조In-memory 데이터 저장소..

Infra

[Kubernetes] Pod - LifeCycle
·
Kubernetes
오랜만에 `K8s` 공부를 다시 시작했다. 인프런의 일프로님의 강의를 보며 학습을 이어간다. 거두절미하고 `Pod`의 라이프사이클에 관해 정리한 내용을 포스팅하려 한다. Pod - LifeCycle`Pod`에는 라이프사이클이 존재하고 어떤 `Pod`든 생성되고 사라지기까지 일정한 단계를 거치게 된다. 그리고 `Pod` 라이프사이클의 특징은 각 단계에 따라 행해지는 행동이 다르기에 라이프사이클에 대해 잘 알아야 한다. `Pod` 라이프사이클 핵심 간단 정리PendingReadinessProbePolicyRunningLivenessProbeQosSucceededPolicyFailedUnknown 아래 사진은 `Pod`의 라이프사이클과 관련 요약이라고 생각하면 편할 것이다.  Pending -> Running..
[Flyway] Flyway 사용 시 함께 알면 좋은 것들 With 스프링부트
·
Infra
`Flyway`를 스프링부트 프로젝트에 적용해 사용하고 있다. 스프링부트에서 `Flyway`를 사용할 때 알아두면 좋은 것들에 관해 정리하고자 한다. 초기 작업 build.gradleimplementation 'org.flywaydb:flyway-core' 초기 스프링 프로젝트 생성 시 `flyway migration`을 선택하여 위와 같은 의존성이 등록된다. 그리고 나는 프로젝트에서 `postgresql`을 사용하기 때문에 아래 의존성도 추가해주었다.implementation 'org.flywaydb:flyway-database-postgresql'  db별 `Flyway` 구현체가 다름에 주의하자. 다음으로, `Flyway` 마이그레이션 파일 위치도 설정해주어야 한다. 기본 경로는 `resources..
[Flyway] Flyway - database migration tool
·
Flyway
1. Flyway 소개 우선, `Flyway` 공식 홈페이지에서는 `Flyway`를 다음과 같이 정리하고 있다."Flyway is an open-source database migration tool" 해석하자면 오픈 소스로 누구나 사용할 수 있는 데이터베이스 마이그레이션 툴이다. 여기서 데이터베이스 마이그레이션 툴?이 무슨 의미일까? 본래 데이터베이스 마이그레이션이라는 말은 한 데이터베이스에서 다른 데이터베이스로 이동하는 것을 의미한다.  하지만, `Flyway`에서는 모든 데이터베이스의 변경을 마이그레이션이라고 칭하고 있다.즉, `Flyway`에서 데이터베이스 마이그레이션 툴이란 데이터베이스 변경 관리도구가 된다.  마치, 소스코드 변경을 관리하는 깃허브처럼 데이터베이스의 변경은 flyway가 관리하..

개발일기 & 학습일기

2025-03-15 개발일기
·
개발 기록
어제부터 오늘까지 새롭게 정한 코드 컨벤션에 따라 `StudyWithMe` 프로젝트의 메소드 네이밍 리팩토링을 진행했다. (굉장히 많이 바꿔서 눈이 아프다..) 내일부터는 `StudyWithMe` 프로젝트의 알림톡 도입, 예약 기능, 이용 내역에 관한 기능 구현을 시작할 것 같고다시 `Pod - LifeCycle` 이후 `Kubernetes` 개념도 학습을 이어나가고자 한다.
[학습 일기] 2025-03-05 쿠버네티스를 다시 공부하며
·
개발 기록
굉장히 오랜만에 학습일기를 작성하는 것 같다. 요즘 CS 공부나 블로그 복습을 해서그걸 일일이 블로그 학습일기 다 담기도 애매하고, 이래저래 개인적인 일들로 작성하지 못했다. 요즘엔 다시 쿠버네티스 공부를 하고 있다. 일프로님의 강의를 보면서 진행하고 있고 처음부터 다시 복습한 내용을 아래와 같다. 복습 내용왜 쿠버네티스인가?VM vs Container쿠버네티스 개요Pod(Container, Label, NodeSchedule)Service(ClusterIP, NodePort, LoadBalancer)Volume(emptyDir, hostPath, PV/PVC)ConfigMap, Secret(Env, Mount)NamespaceResourceQuotaLimitRangeReplication Controll..
2024-02-16 학습일기
·
개발 기록
`StudyWithMe`의 크고 작은 오류들을 수정하고 최근에는 CS 공부와 알고리즘 문제를 조금 많이 풀고 있다. 최근에 프로그래머스에서 새로운 문제가 많이 나와서 풀고있다.  알고리즘유연근무제비밀 코드 해독홀짝 트리

알고리즘

[백준] 일하기 시러 - Java
·
백준
https://www.acmicpc.net/status?from_mine=1&problem_id=32933&user_id=dktkaemfl12  DP 문제이다.. 오랜만에 DP 문제라 그런지 점화식 세우는게 살짝 어려웠다. import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.StringTokenizer;public class BOJ32933 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamRe..
[백준] N-Queen (Easy) - Java 30242
·
백준
https://www.acmicpc.net/problem/30242 N-Queen 문제로 대각선을 일차원 배열 형태로 저장하여 최적화를 해줘야 한다. 나머지는 똑같이 백트래킹을 하면 된다.import java.io.*;import java.util.*;public class BOJ30242 { static int n; static int[] lst; static boolean[] col; static boolean[] up; static boolean[] down; static List nums; public static void main(String[] args) throws IOException { BufferedReader br = new Buffe..
[백준] 맛있는 사과 - Java 32963
·
백준
https://www.acmicpc.net/problem/32963  이분 탐색 문제이다.  그리고 `t` 순으로 정렬한 뒤 내림차 순으로 가장 큰 `s`를 저장하고그걸 이용하면 된다. import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.Arrays;import java.util.StringTokenizer;public class BOJ32963 { static class Node{ int t; int s; public Node(int t, int s){ this.t = t; this...