| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
- Interface
- lambda
- Quarkus
- AI
- 오픈소스 기여
- gemini cli
- bluegreen
- 무중단배포
- optional
- Security
- spring boot
- firebase
- Java
- functional interface
- coroutine
- Claude
- Workflow
- http-only cookie
- FCM
- S3
- 오픈소스
- class
- WebFlux
- 자동화
- n8n
- AWS
- GEMINI
- Kotlin
- 홈서버
- Today
- Total
목록분류 전체보기 (15)
빠르게 학습하고 빠르게 적용하자
무중단 배포 배경빠른 실험 전략을 선호하던 저는 Querify 서비스를 운영하며 여러 번 과감한 시도를 했습니다. Github Branch 전략을 사용하고 있었기 때문에 개발할 때는 배포 환경에서 이슈가 발생하면 빠르게 main브랜치에 올리는 방식을 이용했었습니다.그러나 사용자가 조금씩 생기다 보니.. 배포 환경에서의 문제를 사용자가 겪는 상황이 있었고, 이 상황에서 사용할 롤백 장치가 마련되어있지 않아 곤란했습니다. 또한 새로운 기능을 추가하거나 수정하는 배포 과정에서도 서버가 일시적으로 다운되기 때문에 사용자 경험이 많이 떨어졌습니다.그래서 기존에 알고 있던 무중단 배포 전략을 활용하여 배포할때도 서버가 다운되지 않고, 급한 이슈를 롤백으로 해결할 수 있는 환경을 마련하고자 하였습니다. 배포 전략 선..
배경데이터 저장을 전부 RDB에 저장했습니다. 문제마다, 각 테스트 케이스마다 카디널리티와 애트리뷰트 수가 다르다보니 각각 데이터를 저장할 수 없었습니다. 따라서 우선적으로 메타데이터 라는 이름으로 Json 형식으로 저장했었습니다.하지만 서비스가 커지고 문제가 발생했었습니다. 이미 등록한 문제를 풀어보니 메타데이터에서 수정이 필요한 부분이 있었습니다. NULL값이 들어가야하는데 공백이 들어가있어 문제를 급하게 수정해야하는 상황이였습니다. 그런데 데이터 베이스에 JSON형태로 들어가 있다보니 수정이 필요한 부분만 딱 찝어서 수정이 어려웠고 결국 하나하나 읽은 후 새 데이터로 덮어써야했습니다.이러한 문제를 겪다보니.. 역시 JSON데이터를 문자열로 저장하는 것은 아니라고 판단했습니다. 따라서 NoSQL로 이..
SQL 채점 서비스 기획 배경저는 마이스터고 학생으로, 백엔드 개발자를 목표로 공부하고 있습니다. 평소 SQL에 관심이 많아 꾸준히 학습해왔지만, 생각보다 SQL 실력을 체계적으로 향상시키는 것이 쉽지 않다는 것을 느꼈습니다.또한 주변 동기나 후배들을 보면 API 개발에 집중하면서 ORM을 주로 사용하다 보니, 기본적인 JOIN 쿼리조차 직접 작성해본 경험이 부족한 경우가 많았습니다.이러한 모습을 보며 “SQL을 직접 연습할 수 있는 환경이 조금 더 쉽게 제공된다면 좋지 않을까?”라는 생각이 들었습니다. 그래서 별도의 환경 설정 없이 바로 SQL을 실행하고 채점까지 받을 수 있는 학습 서비스를 만들게 되었습니다.서비스가 궁금하다면? https://querify.dev다른 블로그가 궁금하다면? https:..
서비스: https://querify.dev기존 서비스 아키텍처운영 중인 Querify 서비스는 저희 집에 직접 구축한 미니PC 기반 온프레미스 서버에서 운영되고 있었습니다.Spring Boot API 서버가 클라이언트 요청을 받으면, 일반 조회는 메인 MySQL에서 처리하고, 채점 요청은 별도의 Sandbox MySQL에서 사용자 SQL을 실행하는 구조입니다. Sandbox DB는 채점마다 테이블을 생성하고 테스트 데이터를 삽입한 뒤, 사용자 쿼리를 실행하여 정답과 비교합니다.설계하면서 가장 많이 고려한 점이 채점 로직입니다. 사용자가 제출한 SQL을 메인 DB에서 직접 실행하면 실제 서비스 데이터를 훼손할 수 있고, 무거운 쿼리가 다른 API의 응답 시간에 영향을 줄 수 있습니다. 채점 SQL 격리 ..
개발 중인 프로젝트 소개제가 개발하고 있는 SQL 학습자가 직접 쿼리를 작성하고 즉시 채점받을 수 있는 온라인 저지 서비스 Querify입니다.기존 SQL 학습은 로컬 DB를 직접 세팅해야 하거나, 정답 확인이 수동으로 이루어지는 불편함이 있었습니다. Querify는 문제별로 격리된 sandbox DB 환경을 제공하여 별도 환경 구축 없이 브라우저에서 SQL을 실행하고, 정답 결과셋과 비교하여 즉시 결과를 받을 수 있도록 설계했습니다.SQL 실행 환경을 안전하게 분리하는 구조를 직접 설계해보고 싶었습니다.또한 평소 관심이 있던 SQL 학습 도메인으로 프로젝트를 만들고, 실제 데이터를 기반으로 사용자 경험을 개선해보고 싶었습니다. 자동화의 배경웹 개발 자동화가 왜 필요했을까요?저는 백엔드를 주로 하고 있는..
Quarkus란?Quarkus는 Java 기반 클라우드 네이티브 애플리케이션을 빠르고 가볍게 만들기 위한 프레임워크입니다. 마이크로서비스컨테이너/Kubernetes 환경서버리스(Lambda 등)빠른 스타트업과 리소스 효율이 중요한 서비스위와 같은 서비스에서 주로 사용합니다. 저는 이 프레임워크를 사용해보진 않았지만, JVM 언어가 주력이기 때문에 첫 기여 리포지포리로 선정해보았습니다!!제가 오픈소스 기여 리포지토리/이슈를 선정했을 때 기준을 공유하자면, 1. 주로 사용하는 언어로 고르려고 했습니다. AI가 코드를 작성해주더라도, 본인이 이해할 수 있어야 메인테이너분께 해를 안 끼칩니다!!2. 메인테이너가 (이슈, PR이) 활발한 리포지토리를 선택하려 했습니다. 체계가 있으면 배울 점이 많을 것 같았습니다..
이 내용은 소규모 프로젝트를 개발하며 느꼈던 아키텍처에 대한 저의 생각입니다. 여러 선택을 번복하며 느낀 점을 기록하고자 작성하였습니다. 저는 학교에서 사용하는 출석 서비스를 개발하는 동아리에 가입했고, 2024년 말부터 개발에 참여할 수 있었습니다. 처음 개발에 투입돼어 온보딩할 때 프로젝트 구조는 UseCase를 중심으로 개발된 '클린 아키텍처'에 가까웠습니다. 그리고 백엔드 개발을 주도하며, 이 코드가 UseCase와 Service의 불명확한 책임 분리, 도메인 로직의 비독립성이 문제가 된다고 느꼈습니다. 바꾸는 김에 완벽하게 해보자그렇게 저는 2개월이라는 시간동안 팀원들과 헥사고날 아키텍처로 리팩토링하였습니다. 그 당시에는 자주 변경되는 요구사항에 빠르게 대응하기 위한 아키텍처라고 생각했고 적용해..
목차스프링/스프링부트IoC / DI스프링 컨테이너AOPPSA핵심 코드 예제문제 풀이예외 해결 및 배운 점1️⃣ 스프링과 스프링부트✔ 스프링(Spring)자바 기반 엔터프라이즈 애플리케이션을 효율적으로 개발하기 위한 프레임워크대규모 서비스 개발에 적합서버 성능, 안정성, 보안 등을 높은 수준으로 제공✔ 스프링부트(Spring Boot)스프링을 더 쉽게 사용할 수 있도록 만들어진 도구프로젝트 설정 자동화 & 의존성 관리 간소화 (starter 제공)내장 WAS(Tomcat 등) → 별도 서버 설치 없이 실행 가능비즈니스 로직에 집중할 수 있도록 반복 설정 최소화2️⃣ IoC (Inversion of Control, 제어의 역전)기존 자바: 개발자가 직접 객체 생성 (new 키워드)IoC: 객체의 생성과 생명..