New
-
[React] SpringBoot 와 React 연동하기 - vite build
Thymeleaf와 같은 템플릿 엔진 기능 없이 SpringBoot를 API 서버로만 활용하고 React와 같은 별도의 애플리케이션을 통해 UI를 제공할 수 있다. 백엔드와 프런트엔드 기술스택을 각각 SpringBoot와 React로 결정했을 때 이 둘을 어떻게 연결하는지 간단한 예시코드로 살펴본다. 1. Spring Boot project 생성- 프로젝트 의존성스프링 스타터 (https://start.spring.io/) 를 통해 Spring 프로젝트를 생성한다.Spring과 React의 연결방법을 살펴보는 것이기 때문에 아래와 같이 web과 lombok만 의존성으로 추가하였다.dependencies { implementation 'org.springframework.boot:spring-boot-s..
2025.10.03
-
[Server] CORS ERROR를 피하는 방법 - 교차 출처 리소스 공유(CORS)
CORS란?CORS(Cross-Origin Resource Sharing, 교차 출처 리소스 공유)는 브라우저가 서로 다른 출처(Origin) 간의 리소스 공유를 안전하게 허용하기 위해 사용하는 HTTP 헤더 기반 보안 메커니즘이다. 교차 출처 요청은 다른 서버에서 응답받은 리소스를 기존 웹페이지에서 사용할 때 발생하는데, 도메인 A (https://domain-a.com)의 웹페이지에서 script를 통해 도메인 B의 이미지(https://domain-b.com/images/sample.jpg)를 요청해서 웹페이지에 공유하는 경우가 간단한 예시다. 보안상의 이유로 브라우저는 스크립트에서 시작한 교차 출처 HTTP 요청을 제한하기 때문에 javascript의 fetch() 메서드와 XMLHttpRequ..
2025.09.21
-
[설계] 멀티 테넌트 아키텍처 (Multi-Tenant Architecture) 살펴보기
멀티 테넌트 아키텍처(Multi-Tenant Architecture)란?멀티 테넌트 아키텍처는 '멀티 테넌시(Multi-tenancy)' 시스템을 구현하는 구체적인 설계 방식이나 구조를 말한다. 멀티 테넌시는 하나의 애플리케이션이 여러 고객들에게 서비스를 제공할 수 있도록 하는 소프트웨어 아키텍처이다.여기서 고객은 테넌트(tenant)라는 개념으로 다루어지는데, 특정 접근 권한을 공유하는 사용자들의 그룹을 나타낸다. 예를 들어, B2B 서비스로 제공되는 '재고관리 전산시스템'이 클라우드 시스템으로 제공되는 상황을 가정해보자. 해당 서비스를 사용하는 기업 A와 B가 있을 때, 양 기업은 서로의 데이터와 환경에 접근할 수 없으며 서비스를 실제로 사용하는 기업의 구성원들은 본인이 속한 기업의 데이터에 접근할 ..
2025.09.06
-
[SpringBoot] Testcontainers로 통합테스트 환경 구성하기 - 개념과 사용법
Testcontainers란?Testcontainers는 Docker 컨테이너로 구동되는 실제 서비스와의 통합 테스트 환경을 자동으로 구성하고 시작하기 위해 쉽고 가벼운 API를 제공하는 테스트 라이브러리이다. Testcontainers를 사용하면 목(mock)이나 인메모리 서비스 없이 운영환경에서 사용하는 것과 동일한 유형의 서비스와 통신하는 테스트를 작성할 수 있다. 통합 테스트의 어려움 - Testcontainers를 사용해야 하는 이유오늘날 소프트웨어 시스템은 다양한 기술과 도구를 활용하여 복잡한 비즈니스 문제를 해결한다. 대부분의 소프트웨어 시스템은 독립적으로 작동하지 않고 데이터베이스, 메시징 시스템, 캐시 서버 등 다른 서비스와 상호작용한다. 시스템끼리 서로 상호작용하는 이러한 환경은 애..
2025.07.09
-
[Server] Docker를 활용한 로컬 DNS 서버 구축 방법
DNS 서버란?DNS(Domain Name System) 서버는 도메인 이름을 해당하는 IP 주소로 바꿔주는 역할을 하는 서버다. 인터넷을 구성하는 모든 네트워크 기기들은 주소 값으로 숫자로 구성된 IP를 가지고 있고 우리가 이를 기억하고 사용하는 데는 다소 어려움이 존재한다. 이를 해결하기 위해 불편한 IP 주소 대신 익숙한 문자열로 구성된 이름(도메인)을 대신 사용하는데, 도메인 이름과 IP 주소를 연결하여 관리하는 체계를 도메인 네임 시스템이라 한다.예를 들어 웹사이트 티스토리에 접근하기 위해서 아이피 주소(211.183.222.4) 대신 도메인 주소 'www.tistory.com'를 사용할 수 있다. 로컬 DNS 서버 구축하기 - Docker와 dnsmasq 기반Docker로 내부 DNS ..
2025.06.22
-
[Java] Annotation Processor 사용법 & 예제
어노테이션 프로세서(Annotation Processor)란? 어노테이션 프로세서란 Java 파일을 컴파일하거나 프로젝트 빌드 시 선언된 어노테이션을 감지하고 그에따라 정해진 작업을 수행하는 도구를 의미한다. 이러한 프로세서는 코드 생성, 검증, 문서화 등 다양한 작업을 자동화할 수 있으며, 특히 반복적인 보일러플레이트 코드(Boilerplate Code)를 줄이는데 효과적이다. 이러한 처리 과정을 Annotation Processing이라고 하며, 대표적인 예로는 롬복(Lombok) 라이브러리, Jpa 모델 검증(Hibernate), Spring REST Docs 등이 있다. 표준 annotation processing API는 새로운 파일을 생성할 수 있지만 기존 파일을 수정할 수 없다는 제약조건을 ..
2025.06.09
-
[Spring Boot] 환경변수 설정 - application.yml (Profile)
소프트웨어 개발에서는 다양한 환경(개발, 테스트, 운영 등)에 따라 설정값을 유연하게 변경할 필요가 있다.스프링은 이러한 요구사항을 효과적으로 해결하기 위해 프로파일 기능을 제공하여 환경변수를 손쉽게 관리할 수 있게 하는데, 이는 스프링의 주요 강점 중 하나로 개발자가 코드 변경 없이 애플리케이션의 동작 방식을 환경에 맞게 조정할 수 있게 해 준다. 이 글에서는 환경변수의 기본 개념을 살펴보고, 스프링 프레임워크에서 이를 어떻게 효율적으로 관리할 수 있는지 알아보도록 한다. 환경변수란?위키백과에 등록된 환경변수(environment variable)의 사전적 정의는 '프로세스가 컴퓨터에서 동작하는 방식에 영향을 미치는 동적인 값들의 모임'이다. 쉽게 말하여 애플리케이션이 정상적으로 동작하기 위해 사용..
2025.05.11
-
개발자 - 커뮤니티의 중요성?
국비학원의 백엔드 코스를 수료하며 개발자 커리어를 시작했다.학원에서 학습한 내용을 통해 동기들과 함께 프로젝트를 만드는 과정은 흥미로웠다. 하지만, 거기까지였다. 개발자가 커뮤니티에 참여했을 때 경험할 수 있는 장점은 느끼지 못했기 때문이다. 개발자를 업으로 삼는 많은 사람들이 커뮤니티 참여를 추천하며, 나 역시 이에 같은 생각이다. 그 이유는 무엇일까? 그동안 겪었던 경험을 돌아보며 커뮤니티에 참여하며 가졌던 생각을 돌아본다. 모각코 스터디모각코는 '모여서 각자 코딩'의 줄임말로 정해진 장소에 모여서 각자 해야할 작업을 하는 스터디를 의미한다.이름 그대로 프로젝트를 위한 코딩을 할 수도 있지만 회사 업무, 인강 및 서적을 통한 개발 공부 등 개인 시간을 투자해야하는 작업을 함께 할 수 있다. 다양한..
2025.04.06
-
[DB] 트랜잭션 이해하기 (동시성 이슈와 서비스의 경계)
데이터베이스 트랜잭션이란?데이터베이스 트랜잭션은 하나의 논리적 작업단위를 나타내는 작업들의 집합이다.'논리적 작업단위'는 사용자가 DBMS에 처리를 요구하는 기능으로 1개 이상의 작업으로 구성된다.간단한 예시로 이체 기능이 있다. '사용자 A가 사용자 B에게 1만원을 이체한다.' 라는 요구사항을 처리하는 과정은 다음과 같다. 1) 사용자 A의 잔고를 1만원을 차감한다.2) 사용자 B의 잔고에 1만원을 추가한다. 이 두 작업은 반드시 함께 성공하거나 함께 실패해야 하는데, 만약 A의 계좌에서 금액이 차감된 후 시스템 오류로 인해 B의 계좌에 금액이 추가되지 않는다면, 데이터의 일관성이 깨지게 되어 사용자들에게 혼란을 가져올 수 있다.트랜잭션은 이러한 상황을 방지하여 데이터베이스의 무결성을 보장한다. 트..
2025.03.24
-
코드보다 테스트가 먼저 - TDD의 핵심 원리와 실제 구현
"코드를 작성하기 전에 테스트를 먼저 작성한다"위 문장은 작성된 코드가 없는 데 어떻게 테스트를 진행할 수 있는 지 의구심을 만들 수 있다.하지만 테스트 주도 개발(TDD, Test Driven Development)의 시작과 같은 말이며,많은 개발자들이 실제 코드를 작성하기 전에 테스트를 먼저 작성하는 방식으로 개발한다. 개발자들 사이에서 TDD는 왜 떠오르게 되었을까?이 글에서는 TDD가 무엇인지 간단하게 살펴보고 어떻게 적용되는지 확인해보도록 하자. TDD란?TDD는 테스트부터 시작한다. 구현을 먼저 하고 나중에 테스트하는 것이 아니라 먼저 테스트를 하고 그 다음에 구현한다. 구현된 기능이 없는데 어떻게 테스트를 진행할 수 있을까?TDD에서 '테스트를 먼저 한다'는 것의 의미는 기능이 올바르게 동..
2025.03.16