전체 글 45

[Java] Exception : 예외 처리

Exception이란?프로그램 실행 중 발생하는 예외적인 상황을 표현하는 객체이다. 예외적인 상황이란 정상적인 흐름을 벗어난 상황을 의미한다.(ex. Null 참조, 파일 없음, 사용자 없음 등)Exception의 계층Throwable이 최상위 객체이며 아래에 Error와 Exception이 존재한다.ThrowableError (시스템 오류)ExceptionRuntimeException (UnChecked Exception)NullPointerExceptionIllegalArgumentException...그외 Exception (Checked Exception)IOExceptionSQLException...Error와 Exception의 차이Error - 심각한 오류발생원인 - JVM 혹은 시스템 문제..

[JAVA] Test code : 2. Service 통합 테스트 (TestContainers 적용)

Java Test cod : 1. Service 단위 테스트단위 테스트는 DB를 사용하지 않아 빠르다는 장점이 있지만, 실제 DB와 연동 했을 때 로직이 의도와 다르게 동작할 수 있다.이러한 문제점을 해결하기 위해 Spring Boot Test를 진행할 수 있다.Service 통합 테스트실제 스프링 환경에서 진행하는 테스트이며,Service의 통합 테스트는 Service 검증 + Repository 검증 + DB 검증이 동시에 진행할 수 있다.하지만 테스트를 위해선 스프링을 가동하면서 생기는 시간이 추가적으로 발생해 단위 테스트보다 상대적으로 시간이 걸린다. 기본적으로 구조는 다음과 같다.import static org.assertj.core.api.Assertions.assertThat;import ..

[JAVA] Test code : 0. Assertions

테스트 코드를 작성할 때 결과값이 예상과 일치하는지 검증하는 것을 Assertion이라고 한다. Spring Boot에서는 spring-boot-starter-tes에 다양한 테스트 도구(JUnit, AssertJ, Mockito등)가 포함되어 있으며, 이 내부의Assertions 클래스를 주로 사용하게 된다. spring-boot-starter-test 확인은 build.gradle에서 확인이 가능하다.하지만 예시와 같이 spring-boot-starter-test가 존재하지 않을 수 있는데이런 경우는 다음과 같다.spring-boot-starter-data-jpa-test가 존재할 때spring-boot-starter-webmvc-test가 존재할 때직접 spring-boot-starter-test를..

[JAVA] Test code : 1. Service 단위 테스트

기존 테스트를 진행한 방식은 직접 HTTP 요청을 보내 확인하는 방식으로 정상 값과 틀린 값을 만들어내서 API 문서 만드는 방식으로 진행했었다. 이에 대해 불편한 점은 다음과 같다.실행 후 의도되지 않은 결과 값이 나온 경우 수정하고 다시 Run을 진행 후 요청을 보내야한다.Application.yml의 설정된 DDL-AUTO값이 CREATE 혹은 CREATE-DROP가 아닌 경우 값이 들어가 매번 요청을 다르게 보내거나 DB에 저장된 값을 지워야한다.실질적으로 내가 원하는 결과값이 맞는지 읽어봐야한다.이러한 불편함을 해결하기 위해 Spring에서 지원하는 JUnit 테스트를 적용 해보았다.JUnitJava에서 가장 널리 사용되는 테스트 프레임 워크로, 어노테이션 기반으로 테스트 코드를 작성하고 실행 ..

[JAVA Spring] 트랜잭션 심화

Transaction Propagation ( 트랜잭션 전파 속성 )트랜잭션이 시작되거나, 기존 트랜잭션에 참여하는 방법을 정의한다.REQUIRED기본값으로 기존 트랜잭션이 존재한다면 참여, 없다면 새로운 물리 트랜잭션을 생성한다.가장 일반적인 경우에 사용되며, 대부분의 비즈니스 로직에 사용된다.여러 작업이 하나의 단위로 성공하거나 실패해야하는 로직에 사용됨예로 주문은 저장되었으나 재고 차감이 안된다면 데이터 불일치가 발생된다.모든 작업이 같은 트랜잭션에서 처리되어야 원자성이 보장된다.하나의 물리적 트랜잭션을 공유한다는 특징을 가진다.@Transactional(propagation = Propagation.REQUIRED)public void parentMethod() { childMethod();..

[CS] DBMS 개념와 동작 원리

데이터와 정보데이터베이스를 알기전에 데이터와 정보의 차이를 알아보자Data(데이터)의미 없는 기록조각으로 아직 가공되지 않은 개별적인 사실이나 값 그 자체만으로는 의미를 갖기 어렵다.구조화된 데이터데이터의 꼬리표(Label)를 붙여 의미를 부여한 상태지만, 통찰을 주지못한다.Information목적을 가진 결과물로 구조화된 데이터를 특정 목적을 가지고 분석, 가공하여 얻어낸 유의미한 결과물데이터를 정보로 만드는 과정은 의사결정에 필수적이며, 데이터베이스 관리 시스템은 이 과정을 돕는 핵심 도구이다.데이터베이스 관리 시스템 ( DBMS )데이터베이스 관리 시스템이 대규모의 데이터를 효율적으로 관리하고 활용하기 위해 필요하다.DBMS이전 데이터 관리의 문제점데이터 중복과 불일치여러 파일에 동일정보가 중복 ..

BackEnd/CS 2026.03.24

[CS] 자바의 영속성 (JDBC, SQLMapper, ORM) 정리

JDBC ( Java Database Connectivity ) API자바 애플리케이션이 데이터베이스와 상호작용하여 데이터를 영구적으로 저장(Persistence)할 수 있도록 돕는 가장 기초적인 API이다.다음과 같은 특징을 가진다.범용성관계형 DB뿐만 아니라 스프레드시트, 플랫 파일 등 다양한 데이터 소스에 접근할 수 있는 공통 기반을 제공한다.구조Java SE 8 이상에 기본 포함된 패키지로 구성되어 있다.java.sql -> 핵심 JDBC API ( 커넥션, SQL 실행 등)javax.sql -> 데이터 소스 관리, 커넥션 풀, 분산 트랜잭션 등 확장 기능을 담당 중계자특정 DB를 사용하려면 해당 DB 제조사가 제공하는 JDBC 드라이버가 반드시 필요하다.이는 JDBC라는 표준 인터페이스를 각..

BackEnd/CS 2026.03.23

[Java Spring] Transaction

Transaction processing ( 트랜잭션 처리 )트랜잭션은 추상적인 개념으로 컴퓨터 과학에서 Transaction processing(트랜잭션 처리)는 트랜잭션이라고 불리는 개별적이고 분리 불가능한 연산으로 나누어진 정보 처리이다.각 트랜잭션은 완전한 단위로 성공하거나 실패해야하며, 부분적으로만 완료될 순 없다.트랜잭션 처리는 다음과 같은 특징을 가진다.시스템의 무결성을 알려진 일관된 상태로 유지하도록 설계 되었으며, 시스템의 상호 의존적인 작업이 모두 성공적으로 완료되거나 모두 성공적으로 취소되도록 보장한다.여러 개별 작업을 단일의 분리 불가능한 트랜잭션으로 연결하고, 트랜잭션 내의 모든 작업이 오류 없이 완료되거나, 하나도 완료되지 않도록 보장한다.일부 작업은 완료되었더라도 다른 작업을 ..

[CS] 쓰레드와 JVM의 쓰레드관리

CPU의 핵심구성 요소Core : CPU의 실제 연산을 담당하는 핵심 단위ALU (Arithmetic Logic Unit)실제 산술 연산과 논리 연산을 수행하는 장치Control Unit (제어 장치)명령어를 해석하고 데이터의 흐름을 지시하는 관리자Register (레지스터)CPU 내부에 있는 가장 빠르고 작은 메모리ALU의 연산을 돕기 위해 존재강력한 연산능력을 가진 CPU 하드웨어가 있지만 초기에는 이를 효율적으로 사용하기 어려웠다.CPU의 연산이 이뤄지는 동안 I/O 작업을 기다리는 시간이 많았기 때문이를 해결하기 위해 등장한 소프트웨어적 실행 단위가 쓰레드쓰레드 ( Thread )쓰레드의 개념은 프로세스 내부에 실질적으로 작업이 실행되는 최소 단위를 말한다.먼저 쓰레드를 이해하기 위해 스레드의 생..

BackEnd/CS 2026.03.20

[CS] Java Virtual Machine

JVM( Java Virtual Machine )이란?JVM은 C,C++로 만들어진 프로그램으로 자바 언어의 핵심 철학인 Write Once, Run Anywhere(WORA)를 가능하게 하기 위해 나타난 실행도구기존 C, C++ 언어는 운영체제나 하드웨어에 종속적이였음개발자는 각기 다른 환경에 맞춰서 프로그램을 다시 컴파일하거나, 다른 코드를 작성해야 하는 불편함이 존재이러한 문제를 해결하기 위해 자바언어를 만들면서 JVM이라는 혁신적인 개념을 도입함 핵심 아이디어중간언어 (Bytecode)자바 소스 코드(.java)를 기계어 대신, JVM이 이해할 수 있는 중간 형태의 코드(.class 또는 Bytecode)로 컴파일가상 머신(JVM)각 운영체제 및 하드웨어 아키텍처에 맞는 JVM만 설치되어 있다면..

BackEnd/CS 2026.03.20