[인프라/DevOps] Jenkins CI/CD Pipeline을 만들어보자
·
공부/인프라
0. 들어가며2026.03.12 - [공부/인프라] - [인프라/CS] 무중단 배포(Rolling Update, Blue-Green, Canary) [인프라/CS] 무중단 배포(Rolling Update, Blue-Green, Canary)무중단 배포란?무중단 배포(Zero Downtime Deployment)는 서비스의 새 버전을 배포하는 동안 사용자가 서버스 중단을 거의 느끼지않도록 하는 배포 방식입니다. 일반적인 배포방식은 기존 서버를 내리dtstation.tistory.com이전에 무중단 배포를 설명하면서 CI/CD를 간략하게 다룬적이 있습니다. 보통 프로젝트를 진행하면 GitHub나 GitLab같은 Git 저장소에 Repository를 생성하고 여러 개발자가 함께 코드를 관리합니다. 프로젝트 규..
[백엔드] MyBatis 와 JPA 중 어떤걸 써야할까?
·
공부/백엔드
0. 들어가며지난글 2026.07.17 - [공부/백엔드] - [백엔드] JDBC란? 동작 원리부터 Connection Pool과 HikariCP까지 에서 MyBatis와 JPA의 근간이 되는 JDBC를 알아봤습니다. JPA와 MyBatis 둘다 내부적으로는 JDBC를 사용하는데 반복 되는 코드가 많고 객체와 조회 결과를 직접 매핑해야 하는 단점이 있었습니다. 이번글 에서는 MyBatis와 JPA 두 기술이 무엇인지 차이점이 뭔지 알아보고 어떤 상황에서 무엇을 선택해야 하는지 알아보도록 하겠습니다. 1. MyBatis란?JDBC API에서 불편했던 Connection 관리나 Statement 준비와 실행 등을 지원하는 Spring JDBC가 등장하여 반복되던 코드 작업을 줄여주긴 했지만 SQL을 자바 ..
[백엔드] JDBC란? 동작 원리부터 Connection Pool과 HikariCP까지
·
공부/백엔드
0. 들어가며Spring Boot로 백엔드 개발을 하다보니 데이터베이스 접근 기술로 JPA와 MyBatis를 자주 접했습니다. 프로젝트를 진행하면서 상황에 따라 MyBatis를 사용하기도 하고, JPA를 사용하기도 했지만 두 기술을 사용하면서 각각 어떤 방식으로 데이터베이스와 통신하는지, 어떤 차이가 있는지 명확하게 정리하지 못한 채 필요한 기능을 구현하는데 집중했던 것 같습니다. JPA와 MyBatis는 사용방식과 목적에 차이가 있지만 내부적으로는 둘다 JDBC를 기반으로 데이터베이스와 통신하기 때문에 두 기술의 특징과 차이점을 제대로 이해하기 위해서는 먼저 JDBC가 어떤것이고 역할을 하는지, 어떤 흐름으로 동작하는지를 알아볼 필요가 있습니다. 이번글에서는 JPA와 MyBatis를 학습하기 앞서 그 ..
[백엔드/CS] 쿠키와 세션 그리고 JWT
·
공부/백엔드
평소 로그인 기능을 구현할 때 JWT나 쿠키, 세션을 사용해본 경험은 있었지만, 막상 이들을 서로 비교해서 설명하려고 하니 개념이 명확하게 정리되어 있지 않다는 것을 느꼈습니다. 특히 JWT는 어떤 상황에서 사용해야 좋은지, 어떤 부분에서 좋은지 등을 설명하기 위해서는 기본적인 개념을 정확히 정립하는게 좋을것 같다고 생각했습니다. 그래서 이번 글에서는 먼저 쿠키와 세션의 개념을 정리하고, 이후 JWT의 구조와 특징을 살펴본 뒤, 세션 기반 인증과 JWT 기반 인증의 장단점 및 선택 기준을 정리해보려고 합니다.0. 쿠키, 세션, JWT가 왜 필요한가?HTTP는 기본적으로 상태를 기억하지 않는 Stateless 프로토콜입니다. 즉, 서버는 이전 요청과 다음 요청이 같은 사용자의 요청인지 기본적으로 알 수 없..
[CS/JAVA] JDK, JRE, JVM 개념정리
·
공부/CS
자바를 공부하다 보면 JDK, JRE, JVM이라는 용어를 자주 만나게 됩니다.처음에는 비슷해 보이는 용어라 헷갈릴 수 있지만, 각각의 역할을 이해하면 자바 프로그램이 어떻게 개발되고 실행되는지 흐름을 파악할 수 있습니다. 저 역시 최근 면접 컨설팅에서 “JVM이 메모리를 어떻게 관리하는지 설명해 주세요”라는 질문을 받았습니다. 이 질문에 제대로 답하기 위해서는 단순히 JVM만 보는 것이 아니라, JDK와 JRE의 관계부터 자바 프로그램의 실행 구조까지 함께 이해할 필요가 있다고 느꼈습니다. 이번 글에서는 먼저 JDK와 JRE의 개념을 정리한 뒤, 최종적으로 JVM의 역할과 메모리 관리 방식까지 살펴보겠습니다. 1. JDK(Java Development Kit)JDK는 Java Development Ki..
[백엔드/웹] Spring과 Spring Boot
·
공부/백엔드
프레임워크란?Spring을 이해하기 전에 먼저 프레임워크가 무엇인지 알아야 합니다. 우리가 웹 애플리케이션을 만든다고 할 때 단순히 그 기능만 구현하지 않습니다. 그 기능이 원활하게 동작하기 위해 객체 생성과 관리, 예외 처리, 보안 처리, 테스트 지원 등 부가적인 것들도 함께 구현을 해야 합니다. 하지만 이런 구조를 개발할 때마다 매번 구현 해야 한다면 핵심 기능을 구현하기 전에 많은 수고를 들여야 합니다. 프레임워크는 이런 반복적인 구조나 기능을 미리 제공해줍니다. 개발자는 프레임워크가 지원하는 틀 안에서 필요한 기능만 구현하면 됩니다. 즉, 프레임워크는 개발자가 애플리케이션을 더 빠르고 안정적으로 만들 수 있도록 도와주는 도구라고 볼 수 있습니다. Spring 란?Spring은 위에서 설명한 프레임..
[CS] 고가용성(High Availability) - 장애가 나도 서비스는 동작해야한다.
·
공부/CS
1. 들어가며서비스를 운영하다 보면 서버가 항상 정상적으로 동작할 것이라고 기대하기 어렵습니다. 서버가 갑자기 죽을 수도 있고, 네트워크 문제가 발생할 수도 있으며, 데이터베이스나 외부 API 장애로 인해 서비스가 중단될 수도 있습니다. 사용자 입장에서는 내부에서 어떤 장애가 발생했는지 알 수 없습니다. 중요한 것은 서비스가 계속 사용할 수 있는 상태인지입니다.이처럼 장애가 발생하더라도 서비스를 최대한 중단 없이 제공할 수 있도록 설계하는 개념을 고가용성, High Availability이라고 합니다. 2. 고가용성이란?고가용성이란 시스템이 오랜 시간 동안 정상적으로 서비스를 제공할 수 있는 능력을 의미합니다. 단순히 서버 성능이 좋은 것을 의미하는 것이 아니라, 일부 구성 요소에 장애가 발생하더라도 전..
[벡엔드/웹] Spring에서 생성자 주입을 쓰는 이유
·
공부/백엔드
1. Spring에서 생성자 주입을 쓰는 이유들어가며Spring을 처음 배울 때 의존성 주입(DI)은 자주 접하게 되는 개념입니다. 저 역시 강의를 들을 때는 이해했다고 생각했지만, 부끄럽지만 시간이 지나고 나니 “왜 생성자 주입을 권장한다고 했지?”라는 생각이 들어 다시 정리해보게 되었습니다.Spring에서는 의존성을 주입하는 방식으로 필드 주입, setter 주입, 생성자 주입을 사용할 수 있습니다. 이 중에서도 생성자 주입은 객체의 안정성, 테스트 용이성, 유지보수성 측면에서 많이 사용되는 방식입니다. 이번 글에서는 Spring에서 생성자 주입을 권장하는 이유와, 다른 주입 방식과 비교했을 때 어떤 차이가 있는지 정리해보겠습니다.생성자란?생성자는 객체가 생성될 때 호출되는 특별한 메서드입니다.보통..
[CS/백엔드]코드 커버리지(Code Coverage)가 뭐야
·
공부/CS
들어가며새로운 프로젝트를 들어가기 앞서 테스트코드 작성과 더불어 코드 커버리지에 대해 공부해보려 합니다. 코드 커버리지가 무엇이고 어떤게 있는지, 보통 어느정도를 요구하는지 등을 알아보고 프로젝트에 적용할수 있다면 최대한 적용해보고 싶었습니다. 코드 커버리지코드 커버리지는 소프트웨어에서 테스트 케이스를 얼마나 충족하는지를 나타내는 지표중 하나 입니다. 테스트를 진행했을때 '코드 자체가 얼마나 실행 되었느냐' 로 이는 수치를 통해 나타낼수 있습니다. 또한 코드 커버리지는 소스 코드를 기반으로 수행하는 화이트 박스 테스트를 통해 측정됩니다. 코드 커버리지 종류(코드 커버리지 측정하는 기준)코드의 실행 여부를 측정하는 방식에는 여러 기준이 있으며, 일반적으로는 코드의 구조를 기준으로 구문(Statement)..
[백엔드/웹개발] Swagger에서 Execute가 동작하지 않았던 이유(무한 로딩)
·
공부/백엔드
1. 문제 발견: 이거 안되는데요..?핀테크 프로젝트에서 계좌관련 api 개발을 담당하게 됐고, 계좌 입금, 계좌 출금, 계좌 이체 등의 기능을 개발했습니다. 서비스의 기반이 되는 기능이라 가장 먼저 개발했고 거래 내역을 확인하기 위해 계좌 입금이나 출금을 종종 사용하기도 했었습니다. 분명 테스트도 끝났고 중간에 코드수정을 한 적이 없던 기능이였는데, 얼마 전 팀원이 프론트 연동을 위해 swagger에서 요청을 했을 때 무한로딩이 발생하는 문제를 발견했습니다. 'oo님 이거 안되는데요?' 2. swagger에서 excute 클릭하면 무한 로딩 발생문제가 발생한 api 3. 원인 분석처음에는 혹시 다른 개발자의 작업 영향이 있었는지 확인하기 위해 Jira의 관련 이슈와 최근 MR을 먼저 살펴봤습니다. 다만..