Classpath란? 클래스나 jar파일이 존재하는 위치이다. Java 애플리케이션 실행 시 필요하다. JVM이 classpath를 통해 파일 경로를 따라 클래스 파일을 찾아서 로드한다. compileClasspath 와 runtimeClasspath 1. compileClasspath *.java 코드를 컴파일해서 *.class 파일로 만들 수 있게 하는 JDK에서 필요로 하는 라이브러리의 경로이다. 즉, 에러없이 컴파일 하기 위해 필요한 클래스와 jar의 위치를 나타낸다. 2. runtimeClasspath 컴파일된 자바 코드를 실행시킬 때 필요한 라이브러리의 경로이다. 즉, 애플리케이션이 정상적으로 실행되기 위해 필요한 클래스와 jar의 위치를 나타낸다. 의존성 구성 1. implementaion ..
1. 필드 주입 Field Injection 필드에 바로 의존 관계를 주입하는 방법이다. @Autowired가 필드에 붙어있다. 코드가 간결해보이지만, 외부에서 변경이 불가능한 문제가 있다. 동작 과정 주입받으려는 빈의 생성자를 호출해서 빈을 찾거나 빈 팩토리에 등록한다. 생성자 인자에 사용하는 빈을 찾거나 만든다. 필드에 주입한다. 주입할 빈이 없어도 빈 생성이 가능하다. ➡️ 에러가 발생하지 않는다. 앱이 실행되고 testService에 접근할 때 NPE(NullPointerException) 발생 @Controller public class TestController { @Autowired private TestService testService; } 2. 생성자 주입 Constructor Inje..
어노테이션 설명 @Controller • 자동으로 빈 등록 • Controller Bean • @Component로 감싸져있다. @RestController • 자동으로 빈 등록 • RESTfull Controller Bean • @Controller + @ResponseBody @Service • 자동으로 빈 등록 • Service Bean • @Component로 감싸져있다. @Repository • 자동으로 빈 등록 • Repository Bean • @Component로 감싸져있다. @Configuration • 수동으로 빈 등록 • 클래스에 붙임 • 설정 정보를 제공하는 클래스임을 표시 @Bean • 수동으로 빈 등록 • 메서드에 붙임 • 개발자의 컨트롤이 불가한 외부 라이브러리를 Bean으로 ..
클라이언트의 요청과 서버의 응답 그리고 Spring MVC 위의 그림은 Spring MVC 동작 과정을 담았다. 그림을 보면 개발자가 구현해야할 것은 보라색 박스임을 알 수 있다. 보라색 박스엔 스프링의 3대장이라고 할 수 있는 Controller, Service, Repository 가 포함돼 있다. 그 부분만 확대해 보면 아래와 같다. 각각의 역할은 무엇일까? Controller 프레젠테이션 계층(Presentation Layer) HTTP 요청을 받는다. HTTP 응답을 보낸다. 받은 요청을 비즈니스 계층으로 전달한다. 어노테이션 @Controller @RestController(@Controller + @ResponseBody) Service 비즈니스 계층(Business Layer) 모든 비즈니..
Entity 실제 DB의 테이블과 매핑되는 객체이다. id로 Entity를 구분한다. public class Member { private final String id; private final String name; public Member(String id, String name) { this.id = id; this.name = name; } } DTO(Data Transfer Object) 계층(Layer)간 데이터 교환을 위해 사용하는 객체이다. 데이터 교환만을 위해 사용한다. 로직을 갖지 않고, getter()/setter()만 갖는다. public class MemberDto { private String id; private String name; public MemberDto(String..
DI란? 의존성 주입(Dependency Injection, DI) 스프링 컨테이너가 필요한 객체를 제공(주입)해준다. 의존성 주입 방법 생성자 주입 수정자 주입(setter 주입) 필드 주입 일반 메서드 주입 어노테이션 @Autowired @Resource @Inject IoC란? 제어의 역전(Inversion of Control, IoC) 개발자가 객체를 직접 생성하거나 제어하는 것이 아닌 스프링 컨테이너에서 관리하고 제공하는 객체를 가져와 사용하는 것을 말한다. // 개발자가 직접 Dog 객체 생성 public class Animal { Dog dog = new Dog(); } // 개발자가 직접 Dog 객체를 생성하는 게 아닌 그냥 객체를 선언하기만 함 public class Animal { pr..