[Spring] 스프링 빈이란? / Spring Bean / 등록 방법 / 빈 스코프 / LifeCycle
·
Development & Projects/Java
1. 빈(Bean)이라는 이름의 유래자바의 유래가 커피의 공급원인 자바 섬에서 나온 것과 같이 재사용이 가능한 자바 객체를 커피콩에 비유해서 자바빈이라고 지었는데, “Bean”은 원래 자바빈(JavaBean) 개념에서 차용된 이름입니다.스프링이 등장하면서 이 개념을 확장하여, “스프링 컨테이너가 관리하는 재사용 가능한 객체”를 스프링 빈(Spring Bean) 이라고 부르게 되었습니다. 2. 스프링 빈이란?스프링 빈이란 스프링 컨테이너(IoC 컨테이너)가 생성하고 관리하는 객체를 말합니다.일반 자바 객체는 개발자가 직접 new로 생성하고 관리합니다.반면 스프링 빈은 스프링 컨테이너가 객체의 생성, 의존성 주입, 소멸 등 전체 생명주기를 관리해 줍니다.객체 간의 의존도와 결합도를 낮추고 높은 캡슐화를 제공..
[Java] 비동기 처리와 스레드 관리
·
Development & Projects/Java
Thread + Runnable가장 기본적인 스레드 생성 방식으로 Runnable 인터페이스에 작업 내용을 정의하고 Thread 객체로 감싸 실행한다.Runnable task = () -> System.out.println("새 스레드에서 작업 실행!");Thread thread = new Thread(task);thread.start(); // 비동기 실행 시작하지만 이 방법은 작업이 필요할 때마다 스레드를 생성하고 파괴해야 한다.그림에 보이는 것처럼 다중 요청이 들어오면 동시에 처리하는게 아닌 요청 1을 처리하고 요청 2를 처리하기에 매우 비효율적이라고 볼 수 있다.ExecutorService매번 스레드를 만들고 없애는 비효율을 없애기 위해 Thread Pool 개념 도입하게 된다.스레드 미리 만들어..
[Java] JVM(Java Virtual Machine)
·
Development & Projects/Java
JVM(Java Virtual Machine)운영체제에 종속받지 않고 CPU가 Java 인식하고 실행할 수 있도록 해주는 가상 컴퓨터이다.→ 이 덕분에 자바는 운영체제에 독립적이라는 장점을 가지게 된다.자바 언어 자체는 CPU가 인식하지 못하기에 기계어로 컴파일을 해줘야 하는데 이때 Java는 byte코드로 변환된 후 JVM이 binary code로 변환된다.Java 작성한 소스파일은 JVM을 거쳐 운영체제와 상호작용 함JVM 덕분에 Java는 “운영체제로부터 독립적”라는 특징을 가짐 (Write Once, Run Anywhere)구조Class Loader클래스 파일(.class)을 로드하고 링크를 통해 배치하는 작업 수행한다. 런타임 시, 동적으로 클래스 로드하고 jar 파일 내 저장된 클래스들을 JV..
[Java] 상속 정리 / 다중 상속 / 다이아몬드 문제
·
Development & Projects/Java
1. super()와 생성자 호출 규칙자바에서 자식 클래스가 부모 클래스를 상속받으면, 자식 생성자에서 부모 생성자를 반드시 호출해야 합니다.이때 super()는 자동으로 삽입되며, 항상 생성자의 첫 줄에 위치해야 합니다.class Parent { private String name; // 기본 생성자가 없음 public Parent(String name) { this.name = name; }}class Child extends Parent { // 컴파일 에러 발생 public Child() { // super(); // 자동 호출되지만 Parent() 기본 생성자가 없어 에러 }} 부모 클래스에 기본 생성자가 존재하면 → super() ..
[Java] 추상 클래스와 인터페이스 정리
·
Development & Projects/Java
추상화란?추상화는 객체들의 공통적인 속성과 기능을 정의함으로써 코드 중복을 줄이고, 클래스 간 관계를 효과적으로 설정하며 유지/보수를 용이하게 하는 기법이다.자바에서는 추상 클래스(abstract class) 와 인터페이스(interface) 를 통해 추상화를 지원한다. 추상 클래스 (Abstract Class)추상 클래스는 클래스지만 직접 인스턴스를 생성할 수 없고, 하나 이상의 추상 메서드(abstract method) 를 포함할 수 있다.즉, 오직 상속을 통해 하위 클래스에서만 완성될 수 있다. abstract class Test { abstract void doSomething(); // 추상 메서드 void commonMethod() { // 일반 메서드 ..
[Java] 자바 컴파일 과정
·
Development & Projects/Java
자바는 다양한 운영체제에서 동일한 코드로 실행되는 OS에 독립적인 특징을 가지고 있습니다. 이것이 가능한 이유는 JVM(Java Vitual Machine) 덕분입니다. JVM(Java Vitual Machine)의 어떠한 기능 때문에 OS에 독립적으로 실행시킬 수 있는지 자바 컴파일 과정을 통해 알아보도록 하겠습니다. 자바 컴파일 과정 순서① .java 파일 작성개발자는 자바 소스코드 파일을 작성합니다.② javac 컴파일러 → 바이트코드 생성 (.class 파일)작성된 소스 파일은 자바 컴파일러(javac)에 의해 컴파일되어 .class 파일이 생성됩니다.이 .class 파일에는 바이트코드(Bytecode) 라는 중간 형태의 코드가 들어 있습니다.이 코드는 CPU가 직접 실행할 수 있는 기계어가 아..
[Spring Boot] @Valid 유효성 검사가 되지 않을 때
·
Development & Projects/Java
앱에서 비밀번호 재설정을 구현하던 중 비밀번호 유효성 검사가 되지 않고 있다는 것을 깨달았습니다 ..다시 확인해보니 기존에 회원가입 시 비밀번호 입력에도 유효성 검사가 되지 않았고, 회원가입을 구현할 때에 확인을 한 것 같았는데 다시 코드를 확인해보니 DTO도 문제가 없고 컨트롤러에도 @Valid가 적용되어 있음에도 유효성 검사가 되지 않았습니다 .. 패키지 import를 잘못한 건가 확인도 해봤지만 다 올바르게 되어 있었고, 해결 방법을 찾아보다 bulid.gradle에서 implementation 'org.hibernate.validator:hibernate-validator:6.0.13.Final' 를 제거하니 정상적으로 유효성 검사가 되었습니다. Spring Boot는 spring-boot..
[Spring boot] @Transactional 이란?
·
Development & Projects/Java
1. 트랜잭션이란?트랜잭션은 데이터베이스의 상태를 변환시키는 하나의 논리적 작업 단위를 말합니다. 쇼핑몰에서 주문을 처리할 때, 주문 정보 저장, 재고 감소, 결제 처리가 모두 성공해야만 전체 주문이 완료됩니다. 이 세 가지 작업을 하나의 트랜잭션으로 묶어서 처리하면, 중간에 문제가 생겼을 때 모든 작업을 원래대로 되돌릴 수 있습니다.트랜잭션은 다음 네 가지 특성(ACID)을 가집니다.원자성(Atomicity): 트랜잭션 내의 모든 작업은 전부 성공하거나 전부 실패합니다.일관성(Consistency): 트랜잭션이 완료된 후에도 데이터베이스는 일관된 상태를 유지해야 합니다.격리성(Isolation): 동시에 실행되는 트랜잭션들은 서로 영향을 미치지 않습니다.지속성(Durability): 트랜잭션이 성공적으..