Reflection API 구체적인 클래스 타입을 알지 못해도 메서드, 타입, 변수 등 해당 클래스의 정보에 접근할 수 있게 해주는 자바 API 스프링 프레임워크, 마이바티스, 하이버네이트 등의 라이브러리에서 사용 JVM에서 실행되는 애플리케이션의 런타임 동작을 검사하거나 수정할 수 있는 기능이 필요한 경우 사용 리플렉션을 사용해 개발자가 등록한 빈을 애플리케이션 내에서 사용할 수 있음 대표 예시 스프링 프레임 워크 : DI에서 사용 MVC : View에서 넘어오는 데이터를 객체에 바인딩 할 때 사용 Hibernate : @Entity 클래스에 setter가 없으면 해당 필드에 값을 바로 주입 JUnit : ReflectionUtils 클래스를 내부적으로 정의하여 사용 주의사항 오버헤드 발생 : 성능 저..
의존성 주입에는 4가지의 방법이 존재한다. 필드 주입(Field Injection) 수정자 주입(Setter Injection) 생성자 주입(Constructor Injection) 일반 메서드 주입(Method Injection) 필드 주입(Field Injection) 필드에 @Autowired를 붙여 바로 주입하는 방법 특징 코드가 간결해진다. 그러나 외부에서 변경이 불가능 하여 테스트하기 어렵다. DI 프레임워크 없이 아무것도 할 수 없다. 애플리케이션의 실제 코드와 상관없는 특정 테스트를 하고싶을 때 사용 정상적으로 작동되게 하려면 결국 setter가 필요 @Autowired(required=false) 옵션 처리를 통해 의존관계가 필수가 아님을 명시할 수 있음 @Service public cl..
스프링에서 어노테이션을 활용한 빈 등록 방법은 크게 2가지가 존재한다 @Configuration + @Bean @Component (@Controller, @Service, @Repository) 오늘은 첫 번째 방법으로 스프링이 어떻게 빈을 등록하고 싱글톤으로 관리하는지 알아본다. @Configuration + @Bean 스프링 컨테이너는 @Configuration이 붙어있는 클래스를 자동으로 빈으로 등록후 해당 클래스를 파싱해서 @Bean이 있는 메서드를 찾아 빈을 생성한다. // 빈으로 등록할 클래스 public class MyBean { public void sayHello() { System.out.println("hi~!"); } } @Configuration public class Confi..
스프링 빈과 의존관계 스프링 빈을 등록하는 2가지 방법 컴포넌트 스캔과 자동 의존관계 설정 우리가 만들었던 MemberController가 MemberService를 통해 가입하고, 데이터를 조회할 수 있어야하는데, 이러한 관계를 MemberController가 MemberService를 의존하는 관계라고한다. 먼저, 아래 코드와 같이 새롭게 객체를 생성해서 사용할 수 있다. @Controller public class MemberController { private final MemberService memberService = new MemberService(); } 그러나 이렇게 객체를 새로 생성한다면, 해당 컨트롤러(멤버 컨트롤러)말고 다른 여러 컨트롤러들이 해당 서비스를 가져다 쓸 수 있다. 고..
회원 관리 예제 - 백엔드 개발 비즈니스 요구사항 정리 데이터: 회원ID, 이름 기능: 회원 등록, 조회 아직 데이터 저장소가 선정되지 않았으나 개발을 해야하는 상황(가상의 시나리오) 웹 애플리케이션 계층 구조 일반적으로 웹 애플리케이션 계층 구조는 컨트롤러, 서비스, 리포지토리, 도메인, DB로 구성된다. 컨트롤러: 웹 MVC의 컨트롤러 역할, API 개발 서비스: 비즈니스 도메인 객체를 가지고 핵심 비즈니스 로직을 구현한 클래스 (ex:회원의 가입 여부 확인 로직) 리포지토리: 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리 도메인: 회원, 주문, 쿠폰 등 주로 데이터베이스에 저장하고 관리되는 비즈니스 도메인 객체 아직 데이터 저장소가 선정되지 않았으므로 인터페이스로 구현 클래스를 변경할 수..
웹 개발은 크게 아래 3가지로 나뉜다. 정적 컨텐츠 파일을 그대로 웹브라우저에 내려주는 것 스프링부트에서는 기본적으로 /static or /public or /resources or /META-INF/resources의 경로에 위치한다. css, js, ttf 등등등 바뀌지않는 리소스 파일들이 위치하는 곳이다. 아래의 문서에 더 자세한 내용이 있다. https://docs.spring.io/spring-boot/docs/2.3.1.RELEASE/reference/html/spring-boot-features.html#boot-features-spring-mvc-static-content Spring Boot Features Graceful shutdown is supported with all four ..
프로젝트 생성 사전 준비 Java 11 설치 IDE : IntelliJ 또는 Eclipse 설치. - 요즘은 IntelliJ를 많이 사용하고, 강의 내용에 따라가기 힘들 수 있으므로 나또한 IntelliJ 커뮤니티 버전으로 듣는다. 과거에는 Spring 프로젝트를 밑바닥부터 다 만들었지만 요즘은 Spring boot를 사용해 프로젝트를 생성한다. 아래의 링크는 Spring boot기반으로 Spring 프로젝트를 빌드해주는 스프링에서 운영하는 사이트다. https://start.spring.io/ Project 과거(레거시 프로젝트) - Maven : 정형화된 빌드 시스템, 플러그인으로 구동되어 build 진행 요즘 - Gradle : JVM 기반의 빌드 시스템, Task 기반으로 작업 수행. 캐시를 이용..
본글은 'Do it 자바 완전 정복' 책을 통한 공부내용을 정리한 글입니다. 앞에서 알아본 byte 단위의 입출력만으로도 파일, 콘솔, 네트워크 전송까지 전혀 문제 없이 입출력을 수행할 수 있지만, 실제 입출력에서 가장 많이 사용되는 데이터는 단연 문자열이다. 대표적으로 채팅 프로그램이 있다. char 단위의 입출력은 문자열 입출력을 위해 특화된 기법으로, char 단위로 입출력을 수행하는 기본 클래스는 Reader와 Writer 추상 클래스다. Reader와 Writer 상속 구조 Reader 클래스의 자식 클래스에는 FileReader, BufferedReader, InputStreamReader가 있다. Writer의 자식 클래스에는 FileWriter, BufferedWriter, OutputSt..
본글은 'Do it 자바 완전 정복' 책을 통한 공부내용을 정리한 글입니다. 자바 입출력(Java IO)는 프로그램을 기준으로 외부로부터 데이터가 들어오는 입력(input)과 프로그램에서 외부로 나가는 출력(output)으로 구성된다. byte 단위 입출력과 char 단위 입출력 자바의 입출력은 크게 byte 단위의 입출력과 char 단위의 입출력으로 나뉘는데, byte 단위의 입출력은 말 그대로 송수신하고자 하는 데이터를 byte 단위로 쪼개 보내고 받는 것이다. 모든 데이터는 byte의 모음이므로 어떠한 파일이든 상관없다. char 단위 입출력은 채팅 프로그램과 같이 텍스트 전송에 특화된 방법이다. 물론 byte 단위 입출력으로도 텍스트 정보를 송수신 할 수 있지만, char 단위 입출력이 훨씬 효츌..
본글은 'Do it 자바 완전 정복' 책을 통한 공부내용을 정리한 글입니다. 데이터를 처리하는 모든 프로그램은 처리 대상이 되는 데이터를 읽거나 처리한 데이터를 저장 또는 출력하는 기능을 포함한다. 19장에서는 파일 또는 콘솔에서 다양한 형태로 데이터를 읽고, 이를 다시 파일 또는 콘솔로 출력하는 방법에 대해 알아본다. 파일 관리와 문자셋 자바의 입출력을 이해하려면 자바에서 파일을 관리하는 방법과 문자셋(charset)의 개념을 알 필요가 있다. 먼저 자바에서 파일을 관리하는 방법을 알아본다. 자바로 파일 관리하기 파일 객체 생성 자바의 File 클래스는 파일(file)과 폴더(directory)를 관리하는 클래스로, 다음처럼 대표적인 4개의 생성자 중 하나를 이용해 객체를 생성한다. 클래스의 이름이 F..