반응형
1. 1주차
- 1주차는 Spring에서 필요한 Java 개념 위주와 Spring 의 기본적인 개념에 관해 진행
- 상속, 인터페이스, 리플렉션
- Spring의 Bean 컨테이너
- Spring Boot의 설정
1-1. Intro
java Exam03
으로 실행하면 class path에서 파일 찾는다- 클래스 정보를 읽은 뒤, 메모리에 올라감
- 클래스 정보를 메모리에 올리는건 시스템 클래스로더가 담당
- 한번 올라간 정보는 JVM 다시 시작하기 전까지 계속 유지
- static 정보는 별도의 메모리에 올림
- 즉, 이 클래스를 사용해야겠다고 읽어들일때 static 정보가 올라감
- static 블럭은 딱 한번만 실행
- 메소드에 static이 붙은 친구들은 인스턴스 없이도 실행가능
자식 인스턴스 생성시 부모 인스턴스도 생성된다.
- 자동차라는 단어는 단어는 존재하지만 실체는 존재하지 않음
- 버스, 승용차는 단어와 실체가 존재함
- 단, 자동차가 전륜구동인지, 후륜인지는 모름
- 달린다는 기능만 보임 다른쪽에서 볼때 그 내부가 어떻게 돌아가는지 알필요가 없음
자동차 c = new 스포츠카();
c.run(); // 스포츠카의 run메소드
- 만약 자식의 필드를 사용한다면 부모가 부모의 필드를 보고 사용하던 메소드들이 모두 이상하게 될 수 있음
1-2. Spring Boot 시작
- 기존 스프링은 설정하는데 하루종일 필요
- 계속 추가설정 추가설정
- 즉 진입장벽
starter
를 통해 Auto Config가 가능
프로젝트 생성
- start.spring.io 를 통해 프로젝트 생성
- CoC (Convention over Configuration)
- 니가 알다시피
- Maven 프로젝트에 들어가면 내가 알던 그 디렉토리 구조를 사용
- 익숙해져야만 한다
- 현대 대부분의 프로그래밍이 관례 중심
- 빌드도구 하나쯤은 잘쓸수있어야함
- Maven or Gradle
pom.xml
XML문서 정의
- DTD, XML 스키마
스키마에 맞게 작성된 문서
- Valid XML
Java의 패키지와 같은 역할
- namespace
- namespace도 겹치면 어떡하나?
- url주소를 prefix로 정한다
<parent>
- 한 프로젝트는 여러개의 모듈로 관리될 수 있음
- 이 여러 모듈들이 공통 설정을 가져다 쓸수도 있음
- 메이븐에서는
<parent>
으로 공통설정을 관리 sterter-parent
를 쓰기 위해 선언
Maven 프로젝트일 경우 의존성 다이어그램을 볼수 있음
- Gradle은 지원하지 않음
autoconfigure
- spring.factories
- Spring Boot가 자동으로 읽어들이는 설정파일들
Bean Container
Spring Bean의 라이프 사이클을 관리하는 객체
BeanFactory
ApplicationContext
WebApplicationContext
Spring Bean은 같은 이름의 Bean이 중복생성 될수 없다.
- 즉, Java Config (
@Bean
)에서는 메소드 이름을 중복으로 만들면 안된다.
- 즉, Java Config (
아래의 경우
cdPlayer
Bean은compactDisc
Bean을 주입받는다.- 즉, 주입받는 Bean이름을 메소드 인자의 이름과 맞춰야한다
@Bean
public CDPlayer cdPlayer(CompactDisc compactDisc) {
System.out.println("cdPlayer() 호출");
return new CDPlayer(compactDisc);
}
// 메소드 이름이 id가 된다. 메소드 이름이 중복되면 id가 중복된다는 의미기때문에 안된다.
// <bean id="compactDisc" class="soundsystem.SgtPeppers"/>
// Bean 생성을 하는 메소드는 @Bean이 붙어야한다.
@Bean
public CompactDisc compactDisc() {
System.out.println("compactDisc() 호출");
return new SgtPeppers();
}
@Bean
public CompactDisc myDisc() {
System.out.println("myDisc() 호출");
return new MyDisc();
}
웹과 쓰레드
- 하나의 박스엔 정교한 톱니바퀴들과 3개의 핸들 (A, B, C)이 있음
- 내부 구조상 B,C가 동시에 돌리면 박스에 문제가 생김
- A는 자유자재로 돌릴 수 있음
- 여기에서 배울수 있는 것은
- 톱니바퀴: 객체의 필드
- 핸들: 객체의 메소드
- 돌리는 사람들: 쓰레드
- 상자: 공유 객체
- 웹은 쓰레드 환경
- 공유 객체의 필드에 동시에 접근하면 문제가 생길수 있음
- 문제를 해결하려면?
- 메소드가 사용중일땐 lock (synchronize)을 잡는다
- 근데 이러면 많은 요청에서 오래걸리기 때문에 문제가 발생
- 필드가 없으면 여러 쓰레드가 막 요청해도 문제가 없음
1-3. 숙제
자바 인터페이스, 추상클래스, 상속, 구현, 리플렉션 공부해오기
- 스프링에선 리플렉션을 너무 많이 사용중
실습
- Bean Container 생성
getBean()
- 같은 참조인지 비교 (즉 싱글톤 객체인지)
내가 만들고 싶은 서비스 페이퍼 프로토 타이핑
1-4. 학습 로드맵
- Java8 중심으로 문법 공부
- Database
- SQL
- JDBC 개념
- PreparedStatement
- Html, css
- HTTP 프로토콜
- Servlet & JSP
- 라이프사이클
- 주요 객체
- Spring
- Spring core
- Spring MVC
- Spring Data JPA or Spring JDBC
- Template Engine
- JSP
- Thymeleaf
- Freemarker
- Handlebars
- Spring Boot
- 빌드 / 배포 / 테스트 자동화
본인이 계속 운영할 사이트를 만들어보는게 가장 중요
반응형