반응형

전체 글 63

[Java] Virtual Thread 등장 배경 & Platform Thread와 비교해보기

Spring Boot 3.2 버전부터는 Java 21 버전을 사용하면 application.yml 설정을 통해 Virtual Thread를 비교적 간단하게 사용할 수 있습니다 SpringApplication :: Spring Bootimport org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class MyApplication { public static void main(String[] args) { SpringApplication.run(MyApplication.class,docs.spring.i..

Back-end/Java 2026.08.23

[Spring] HikariCP는 어떻게 동작할까? Connection Pool 내부 구조와 튜닝 기준

Spring Boot에서 JPA나 JDBC를 사용하면 대부분 별도의 설정 없이 HikariCP를 Connection Pool로 사용하게 됩니다 properties.yaml 설정을 통해 maimum-pool-size 같은 값을 변경하여 설정할 수 있습니다server: port: 8080spring: datasource: url: ${SPRING_DATASOURCE_URL} username: ${SPRING_DATASOURCE_USERNAME} password: ${SPRING_DATASOURCE_PASSWORD} driver-class-name: com.mysql.cj.jdbc.Driver hikari: maximum-pool-size: 10 jpa: ..

Back-end/Spring 2026.08.09

[BackEnd] 처리량(Throughput)과 응답 시간(Response Time)의 차이와 성능 개선

웹 서비스의 성능을 이야기할 때 자주 등장하는 개념이 처리량(Throughput)과 응답 시간(Response Time)입니다두 가지 모두 서버의 성능을 나타낼 때 사용되지만 의미는 서로 다르게 해석됩니다응답시간: 사용자의 요청을 처리하는 데 걸리는 시간을 의미처리량: 서버가 일정 시간 동안 얼마나 많은 요청을 처리할 수 있는지를 의미1. 응답 시간클라이언트가 서버에 요청을 보낸 시점부터 결과를 받을 때까지 걸린 시간입니다 사용자가 조회 API를 호출한 뒤 200ms 후에 응답을 받았다면 해당 요청의 응답 시간은 약 200ms입니다 HTTP 요청의 응답 시간은 응답 데이터가 도착한 시점을 기준으로 TTFB와 TTLB로 나누어 확인할 수 있습니다TTFB(Time to First Byte): 응답 데이터 ..

Back-end 2026.07.26

[Spring] Optional 개념과 사용하는 이유 정리 (Spring Data JPA)

Spring 백엔드 개발을 할 때 Optional이라는 객체를 자주 사용하게 되는데 Spring Data JPA를 사용할 때 findById() 메서드의 반환 타입이 Optional으로 되어 있는 걸 볼 수 있는데 조회 결과가 없을 수 있는 상황(Null)을 명확하게 표현하기 위해서 사용된다1. Optional이란?Optional은 Null값을 포함할 수도 있고 포함하지 않을 수도 있는 컨테이너 객체입니다 결과 없음을 명확하게 나타내야 할 필요가 있고 null 오류가 발생할 가능성이 높은 메서드 반환 타입으로 사용됩니다 JDK 26 Documentation - HomeThe documentation for JDK 26 includes developer guides, API documentation, an..

Back-end/Spring 2026.06.29

[Oracle] Oracle Cloud 인스턴스에서 80, 443 포트가 열리지 않을 때 iptables 설정하기

Oracle Cloud 인스턴스에 Nginx를 설치하고 HTTPS를 적용하는 과정에서 인증서 발급을 위해 80번 포트를 개방해야 했습니다 일반적으로 Let’s Encrypt 인증서 발급 과정에서는 도메인 소유권 확인을 위해 외부에서 서버의 80번 포트로 접근할 수 있어야 합니다 처음에는 Oracle Cloud 콘솔에서 VCN 보안 목록의 Ingress Rule만 추가하면 바로 접속될 것이라고 생각했습니다 그래서 VCN 보안 목록에서 80, 443 포트를 개방했음에도 브라우저에서는 접속이 되지 않았고 Nginx와 Certbot 설정 과정에서도 정상적으로 외부 요청이 들어오지 않는 문제가 있었습니다 원인은 Oracle Cloud 보안 목록뿐만 아니라 인스턴스 내부의 iptables에서도 포트가 막혀 있..

DevOps 2026.06.19

웹 개발자가 알아두면 좋은 CSRF, XSS, Clickjacking 공격과 대응 방법

웹 서비스를 개발할 때 인증 기능만 구현했다고 해서 안전한 서비스가 되는 것은 아닙니다 사용자가 로그인된 상태를 악용하는 CSRF,악성 스크립트를 삽입하는 XSS,화면을 속여 의도하지 않은 클릭을 유도하는 Clickjacking과 같은 공격이 어떤 방식인지 알고 해당 공격에 대해 대응할 수 있어야 합니다CSRF (Cross-Site Request Forgery)사이트 간 요청 위조 공격으로 인증된 사용자가 특정 서비스에 로그인된 상태에서 악성 사이트에 접속했을 때 공격자가 사용자의 브라우저를 이용하여 사용자 몰래 원치 않는 요청을 서버에 보내도록 만드는 공격 CSRF가 공격이 가능한 이유는 브라우저가 요청을 보낼 때 해당 도메인의 쿠키를 자동으로 포함하여 서버에 전송하기 때문입니다서버가 요청의 출처를 ..

Back-end 2026.06.19

[Oracle] Oracle Cloud MySQL HeatWave Always Free로 무료 MySQL DB 만들기

개인 프로젝트를 운영하다 보면 MySQL 데이터베이스를 주로 사용하게 되는데요 AWS의 RDS를 사용했지만 프리티어가 끝나서 최근 Oracle로 클라우드를 옮기고 있습니다 기존에 AWS의 RDS에서 Oracle의 MySQL HeatWave으로 이전하는 작업을 통해 Oracle에서는 DB를 어떻게 구성하는지 정리하려고 합니다MySQL HeatWave란? Oracle Cloud의 MySQL HeatWave는 Oracle에서 제공하는 완전 관리형 MySQL 데이터베이스 서비스입니다직접 서버에 MySQL을 설치하고 관리하는 방식이 아니라 클라우드에서 DB 인스턴스를 생성하면 Oracle이 데이터베이스 운영에 필요한 인프라를 관리해 주는 방식입니다 AWS의 RDS와 비슷한 역할을 하는 서비스라고 볼 수 있습니다..

DevOps 2026.06.17

[Oracle] 인스턴스 퍼블릭 IP 적용 후 SSH 접속 방법

Oracle 인스턴스를 생성하고 접속을 하기 위해서 퍼블릭 IP를 발급받고 인스턴스에 할당해줘야 한다1. 인스턴스에 할당할 퍼블릭 IP 발급먼저 Oracle의 우측 상단 메뉴바를 누르면 아래와 같은 화면이 나오는데 오른쪽에 Ip 관리 - 예약된 퍼블릭 IP에 접속예약된 퍼블릭 IPv4 주소 페이지에 접속하면 퍼블릭 IP 주소 예약 버튼이 있는데 클릭하여 진행합니다예약된 퍼블릭 IP 주소 이름만 간단하게 설정하고 퍼블릭 IP 주소 예약 버튼을 눌러줍니다이후 목록에서 발급 받은 퍼블릭 IP 주소를 확인할 수 있습니다2. 발급 받은 퍼블릭 IP 인스턴스에 할당하기퍼블릭 IP를 할당할 인스턴스 세부정보 페이지로 이동해서 네트워킹 메뉴를 눌러줍니다이후 아래로 이동하면 연결된 VNIC에 있는 기본 VNIC에 접속인..

DevOps 2026.06.17

[TOPCIT] 탑싯 25회 정기평가 715점 후기

시험 후기 (715점)TOPCIT 25회 정기평가에 응시해서 715점 이라는 고득점을 받았습니다!! SQLD,정보처리기사 4학년 전공 과목을 중점으로 공부하다 보니 자연스럽게 실력이 좋아지는것 같습니다 [TOPCIT] 탑싯 24회 정기평가 후기 및 준비 방법재학 중인 대학교가 SW 중심대학으로 선정되어 있어 교내에서 TOPCIT 시험을 학교에서 응시하도록 지원을 하고 있으며또한 시험 장소가 재학 중인 학교에서 시험을 치르기 때문에 TOPCIT 시험을 응white63ser.tistory.com이전에 응시했던 24회 정기평가에서는 537점 이라는 점수를 얻었지만 수준 4 & 700점을 넘겨보자 했던 목표를 달성했네요 700점 넘겼는데 교내 1등을 할 수 있을지는 모르겠네요 하지만 수준 4를 넘긴 만큼 성..

[Oracle] Oracle Cloud 인스턴스 생성 해보기

평소에 AWS를 주로 사용하고 있었는데 프리티어가 끝나버렸다 대체할 클라우드를 찾던 중 오라클 클라우드의 프리티어를 보고 사용하기 적합하다고 판단하여 오라클 클라우드로 프로젝트 인프라 마이그레이션도 진행 하면서 인스턴스 생성하는 방법에 대해서 기록해보려고 합니다Oracle Coude Free Tier1. 메인 페이지 인스턴스 생성오라클 클라우드에 접속하여 메인 페이지의 VM 인스턴스 생성을 클릭하여 인스턴스를 생성합니다1-1 이미지(OS) 설정인스턴스의 이미지는 OS 즉 운영체제를 의미하고 원하는 이미지를 선택하여 생성할 수 있습니다기본 이미지는 Oracle Linux 9 으로 설정되어 있습니다 저는 Ubuntu 이미지를 선택하여 설정하도록 하겠습니다다음으로 이미지의 세부 버전을 설정할 수 있습니다 저는..

DevOps 2026.05.25

백준 서비스 종료 선언...

백준이 서비스를 종료한다는 공지를 처음 봤을 때 솔직히 믿기지 않았다 아니 믿고 싶지 않았다늘 당연하게 접속하던 사이트였고 코딩테스트를 준비할 때도 알고리즘 공부를 할 때도 그냥 습관처럼 들어가던 곳이었다 solved.ac와 함께 매일 티어를 올리고 푼 문제 수를 늘리고 새로 생긴 문제를 구경하는 일이 너무 익숙했다 최근에는 다시 PS 공부를 제대로 해보려고 마음먹고 있었다하루에 한 문제씩이라도 꾸준히 풀자는 생각으로 1일 1백준도 다시 시작했다예전처럼 브론즈부터 차근차근 감을 되찾고 골드 문제도 다시 풀어보고 언젠가는 플래티넘 문제도 다시 도전해보려고 했었다 그런데 갑자기 서비스 종료 공지를 보니 머리가 멍해졌다뭔가 해야 할 일이 있는데도 손에 잘 안 잡히고, 공부를 하려고 해도 집중이 안 된다사이트 ..

[Spring] Spring Data JPA Native Query 사용법 및 매핑 방법

MVP 모델을 빠르게 만들 때는 Spring Data JPA를 사용하면 대부분의 조회는 JPA에서 제공하는 쿼리 메서드를 통해 충분히 처리 할 수 있습니다 간단한 CRUD 정도를 빠르게 개발하는데 목적이 있기 때문입니다 하지만 프로젝트가 점점 커지고 요구사항이 많아지면서 조회해야 할 데이터가 많아질수록 단순 조회로는 처리할 수 없는 상황이 생깁니다 예를 들어 - 여러가지 테이블을 JOIN 하여 한 번에 조회해야 하는 경우- 테이블의 여러 데이터를 조합하여 계산해야 하는 경우- CASE WHNE,GROUP BY,SUM,LIMIT,윈도우 함수 같은 SQL 기능이 필요한 경우- 성능 최적화를 위해 DB레벨에서 직접 통제해야 하는 경우 이러한 상황에서 Native Query를 사용하면 SQL을 통해 제어할 수 ..

Back-end/Spring 2026.04.05

[GitHub] GitHub 학생 인증 혜택 Pro 플랜 라이선스 재발급 방법

GitHub Pro 플랜을 학생 인증을 통해 무료로 업그레이드하여 사용하고 있었는데 최근 라이선스가 만료된다는 이메일을 받게됐다저 아직 학생인데요 뭐야 혜택 돌려줘요... 이메일은 GitHub 계정 학생 인증을 통해 무료로 Pro 플랜을 제공하는 쿠폰이 2026년 3월 25일 라이선스가 만료된다는 내용이었다최근에 알게 됐는데 GitHub 학생 인증 혜택은 2년간 유효한다는 것이었다 자동 연장이 되지 않기 때문에 유효 기간을 확인하고 재발급받을 수 있도록 체크하는 게 좋을 것 같습니다 즉 아직 학생 신분을 유지하고 있더라도 2년이 경과했다면 다시 학생 인증을 해야 한다는 말이다GitHub Pro 플랜 혜택 및 발급 방법 [GitHub] 대학생 Pro 플랜으로 무료로 업그레이드 하기 (뱃지 증정)깃허브 P..

Git & GitHub 2026.03.19

[TOPCIT] 탑싯 24회 정기평가 후기 및 준비 방법

재학 중인 대학교가 SW 중심대학으로 선정되어 있어 교내에서 TOPCIT 시험을 학교에서 응시하도록 지원을 하고 있으며또한 시험 장소가 재학 중인 학교에서 시험을 치르기 때문에 TOPCIT 시험을 응시했었습니다 TOPCIT 시험 후기와 고득점을 위해서 준비하면 좋은 방법을 정리해보려고 합니다TOPCIT 이란? 홈 | TOPCIT온라인학습센터 TOPCIT 에센스에서 TOPCIT 학습에 필요한 강의를 무료로 수강하실 수 있습니다.www.topcit.or.kr TOPCIT(Test Of Practical Competency in IT) 은과학기술정보통신부와 정보통신기획평가원(IITP)에서 시행하는 IT 역량 평가 시험입니다 일반적인 자격증 시험과는 다르게 단순한 암기 위주의 문제가 아니라실제 IT 실무 능력과..

[Spring] @Transactional 내부 동작 원리

Spring Boot로 백엔드 개발을 하면서 자주 사용되는 어노테이션 중 하나가 @Transactional입니다이번에 정보처리기사,SQLD를 취득하기 위해서 공부를 하다 보니 트랜잭션(Transaction)에 관심이 많이 가지게 되었는데 Spring에서 트랜잭션을 다루는 어노테이션 @Transactional의 내부 동작 원리에 대해 알아보려고 한다 보통 @Transactional 을 해당 메서드를 하나의 트랜잭션으로 실행한다라고 간단하게 생각하며 사용한다하지만 실제로는 Spring 내부에서 여러 컴포넌트가 결합하여 트랜잭션을 관리한다 먼저 트랜잭션에 대해서 짚고 넘어가 보려고 한다 트랜잭션은 무엇이고 어떤 특징을 가지며 왜 사용되는지 간단하게 알아본다 트랜잭션(Transaction) 트랜잭션은 데이터..

Back-end/Spring 2026.03.10

[Spring] Spring Boot 운영 환경 모니터링 시스템 구축 방법 (Prometheus + Grafana + Docker)

해커톤에서 Prometheus와 Grafana를 활용해 모니터링을 도입해 본 경험이 있다하지만 당시에는 시간이 촉박해 구현에 집중하느라, 모니터링 시스템의 구조나 구현 과정을 체계적으로 정리하지 못했다 이후 AWS 환경에서 Spring Boot 기반 서비스를 배포하고 운영하면서 AWS의 모니터링 시스템만으로 측정하는 것에 한계가 느껴졌다 - 현재 API 응답 시간이 안정적인가?- JVM 메모리는 충분한가?- 특정 시간대에 요청이 집중되고 있는가? 기존 클라우드 환경에서 제공하는 기본 모니터링(CPU,메모리 사용량 등)만으로는 애플리케이션 내부 상태까지 파악하기 어려웠다 이번 글에서는 Spring Boot + Docker + AWS 환경에서 Prometheus와 Grafana를 활용하여운영 환경 모니터링 ..

Back-end/Spring 2026.02.23

[Spring] Spring Boot JPA 비관적 락(Pessimistic Lock)을 활용한 동시성 제어 방법

이전 글에서 낙관적 락(Optimistic Lock)을 적용하여 동시성 제어를 하는 방법에 대해서 다뤄봤습니다 [Spring] Spring Boot JPA 낙관적 락(Optimistic Lock)을 활용한 동시성 제어 방법웹 서비스는 기본적으로 동시에 여러 요청을 처리한다 문제는 여러 사용자가 동시에 같은 데이터를 접근하여 수정할 때 발생한다예를 들어 재고가 현재 1개만 남아 있는 상품이 존재한다고 했white63ser.tistory.com이번에는 비관적 락(Pessimistic Lock)을 적용하여 동시성 제어를 하는 방법에 대해서 작성하려고 합니다 공연 티켓 예매를 해본 사람이라면 익숙한 문장이 있습니다 수많은 대기열을 뚫고 들어가서 포도알(좌석)을 보고 눌렀더니 나오는 한 줄의 메시지이미 선택된 좌..

Back-end/Spring 2026.02.15

[Spring] Spring Boot JPA 낙관적 락(Optimistic Lock)을 활용한 동시성 제어 방법

웹 서비스는 기본적으로 동시에 여러 요청을 처리한다 문제는 여러 사용자가 동시에 같은 데이터를 접근하여 수정할 때 발생한다예를 들어 재고가 현재 1개만 남아 있는 상품이 존재한다고 했을 때 여려 명의 사용자가 주문을 하게 된다면 어떻게 될까 기본적인 설정에서 동시성 처리를 하지 않는다면재고가 1개만 남아 있는 상황에서도 동시에 여러 요청이 들어와 재고가 -1이 되는 현상이 발생할 수 있다 이러한 상황을 Race Condition (경쟁 상태) 이라고 한다 Race Condition (경쟁 상태) 은 여러 스레드(또는 트랜잭션)가 동시에 하나의 자원에 접근하면서의도하지 않은 결과를 만들어내는 현상이다 해당 문제는 일상에서 사용하고 있는 실제 서비스에서도 발생할 수 있다재고량을 초과한 상품 판매하나의 좌석이..

Back-end/Spring 2026.02.13

[Spring] Spring Boot(Log) Slf4j, Logback 로깅 레벨 관리하는 방법

평소에 로깅에 대해서 많이 고려하지 않고 간단하게 @slf4j 어노테이션을 통해서 간단하게 로그 확인용으로 사용하기만 해서 로깅을 어떤 상황에 사용하고 왜 사용하는지 궁금증이 생기기 시작했습니다 그리고 사이드 프로젝트로 개인 운영 서버를 몇 개 운영하는 입장에서도 로깅에 대한 필요성을 느끼고 있으며 이번에 로깅에 대해서 정리해보려고 합니다로깅(Loggin)이란?소프트웨어 애플리케이션이 실행되는 동안 방생하는 모든 상태,흐름,이벤트,오류 정보를 순서대로 기록으로 남기는 행위를 말한다 이 기록은 단순히 개발 중 확인용이 아닌 운영 중인 애플리케이션(서버)의 상태를 기록하고 문제를 추적하기 위한 근거 자료라고 볼수 있다 즉 이 시스템에서 어떤 일이 일어나고 있는지 확인할 수 있는 자료를 기록하는 행위이다로깅..

Back-end/Spring 2026.02.12

[IntelliJ IDEA] 인테리제이에서 오랫동안 열지 않은 프로젝트 라이브러리 인식 오류 해결 방법

이전에 작업했던 Spring 프로젝트를 IntelliJ IDEA로 작업하려고 하면 매번 동일한 오류가 발생하는데 외부 라이브러리를 인식하지 못하는 상태가 지속되었다 해당 프로젝트는 과거에는 정상적으로 동작했던 프로젝트인데 인식하지 못하고 빨간 줄이 뜨며 프로젝트 실행이 안 되는 상황을 마주하니 원인 분석과 문제 해결 방법을 직접 기록하는 게 좋다고 생각해서 작성을 하게 되었습니다💡 원인 분석이전에는 잘 돌아가던 프로젝트가 오랫동안 사용하지 않아서 실행이 안된다이런 프로젝트가 세월에 흔적을 남기듯 먼지가 쌓여서 문제가 발생하는 하드웨어도 아닌데 왜 이런 상황이 반복되는걸까 주요 원인으로는 3가지로 추측된다 1. Gradle/Maven 의존성 캐시 불일치오랜 기간 프로젝트를 사용하지 않아 로컬 캐시와 프로..

IDE 2026.02.09
반응형