728x90
컴포넌트 스캔으로 스프링 빈 자동 등록- @Component 가 있으면 스프링 빈이 자동 등록된다.- @Controller, @Service, @Repository 은 @Component 를 포함하기 때문에 모두 스프링 빈으로 자동 등록된다.- 해당 패키지를 포함한 하위 패키지까지들만 스프링 빈을 자동 등록한다.(ex. hello > hellospring > Application.java 라면, hello 와 형제 패키지인 demo 패키지는 등록 X)- 일반적으로 정형화된 컨트롤러, 서비스, 리포지토리 같은 코드에 사용 > 참고 - @Autowired 로 생성자를 등록하면 스프링이 의존성 주입하여 연결해 준다.- 이때, 스프링 빈으로 등록되어 스프링이 관리하는 객체에서만 동작한다. - 스프링 빈은 싱글..
정적 콘텐츠- static/index.html 을 올리면 Welcome page 기능 제공- 정적 리소스를 제공 (HTML, CSS, JS, 이미지 등)- 브라우저가 요청하면 spring 이 그대로 반환- 파일 자체로 클라이언트로 전달 resources/static 폴더에 html 파일을 생성하고주소창에 localhost:8080/hello-static.html 을 입력하면, 소스 코드 파일 그대로 전달된다. (hello-static 은 임의의 viewName)1. resources/static/hello-static.index 파일을 생성한다.2. localhost:8080/hello-static.html 을 입력하여 서버에 접속한다.3. 파일이름과 일치하는 @GetMapping("hello-stati..
프로젝트 생성하는 법스프링부트 스타터(https://start.spring.io/)에 들어간다. (스프링부트 스타터 홈페이지) Project : Gradle - Groovy (요즘은 거의 다 Maven 보다 Gradle 사용)Language : 원하는 언어 선택SpringBoot : 정식 릴리즈 버전 선택 (SNAPSHOT(만드는 중), M1(정식 릴리즈 X))Project Metadata : Group(보통 기업 명), Artifact(프로젝트 명), 나머지 기본값Dependencies : Spring Web, Thymeleaf(아니면 FreeMarker) 이렇게 선택한 후, `Generate` 를 눌러 다운로드하고 압축을 풀어 저장한다.인텔리제이를 열어 `Open or Import` 를 눌러 파일 안..
[기본 개념] 9 | (2.2) 스트림 중간 연산1 스트림이란?2 스트림 만들기3> 스트림의 중간연산4> Optional와 OptionalInt5 스트림의 최종연산6 collect( )7 Collector 구현하기8 스트림의 변환3. 스트림의 중간연산스트림 자르기 - skip( ), limit( )skip( )은 요소를 건너뛰고, limit( )는 요소의 개수를 제한한다. IntStream intStream = IntStream.rangeClosed(1, 10) ; // 1 ~ 10의 요소를 가진 스트림intStream.skip(3).limit(5).forEach(System.out :: println) ; // 45678 스트림의 요소 걸러내기 - filter( ), distinct( ..
[기본 개념] 9 | (2.1) 스트림1> 스트림이란?2> 스트림 만들기3 스트림의 중간연산4 Optional와 OptionalInt5 스트림의 최종연산6 collect( )7 Collector 구현하기8 스트림의 변환1. 스트림이란? 스트림은 데이터 소스를 같은 방식으로 다룰 수 있게 하고, 자주 사용되는 메서드를 정의해 놓았다. 스트림은 데이터 소스를 변경하지 않는다. 스트림은 데이터를 읽기만 할 뿐 변경하지 않는다. 스트림은 일회용이다. 스트림도 Iterator처럼 한번 사용하면 닫혀서 다시 사용할 수 없다. 필요하다면 다시 생성해야 한다. strStream1.sorted( ).forEach(System.out :: println) ;int numOfStr = strStream1.count( ) ;..
[기본 개념] 9 | (1.2) Java.util.funcion 패키지, Function 합성, Predicate 결합, 메서드 참조1 람다식이란?2 람다식 작성하기3 함수형 인터페이스(Functional Interface)4> java.util.function패키지5> Function의 합성과 Predicate의 결합6> 메서드 참조4. java.util.function패키지 java.util.function패키지에 일반적으로 자주 쓰이는 형식의 메서드를 함수형 인터페이스로 정의해 놓았다. 가능하면 이 패키지의 인터페이스를 사용하는 것이 메서드 이름도 통일되고, 재사용성이나 유지보수 측면에서 좋다. 함수형 인터페이스메서드설명java.lang.Runnablevoid run( )매개변수도 없고, 반환값도 ..
[기본 개념] 9 | (1.1) 람다식, 람다식 인터페이스1> 람다식이란?2> 람다식 작성하기3> 함수형 인터페이스(Functional Interface)4 java.util.function패키지5 Function의 합성과 Predicate의 결합6 메서드 참조1. 람다식이란? 람다식은 메서드를 하나의 식으로 표현한 것이다. 메서드를 람다식으로 표현하면 메서드의 이름과 반환값이 없어지므로, '익명 함수'라고도 한다. int method( ) { return (int) (Math.random( ) * 5) + 1) ;} 위 식을 람다식으로 하면 '( ) -> (int) (Math.random( ) * 5) + 1'로 표현된다. 이처럼 람다식으로 인해 메서드를 변수처럼 다룰 수 있게 되었다. 2. 람..
[기본 개념] 8 | (1.6) 스레드 동기화(Lock, Condition, Volatile, Fork&Join 프레임웍1 프로세스와 쓰레드2 쓰레드의 구현과 실행3 start( )와 run( )4 싱글쓰레드와 멀티쓰레드5 쓰레드의 우선순위6 쓰레드 그룹(thread group)7 데몬 쓰레드(daemon thread)8 쓰레드의 실행제어9 쓰레드의 동기화 9.1 synchronized를 이용한 동기화 9.2 wait( )와 notify( ) 9.3> Lock과 Condition을 이용한 동기화 9.4> volatile 9.5> fork & join 프레임웍9.3. Lock과 Condition을 이용한 동기화 synchronized블럭으로 동기화를 하면 같은 메서드 내에서만 l..