본문 바로가기
Spring

스프링부트로 쇼핑몰 만들기 - 1주차

by 향로 (기억보단 기록을) 2019. 1. 6.
반응형

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)에서는 메소드 이름을 중복으로 만들면 안된다.
  • 아래의 경우 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
  • 빌드 / 배포 / 테스트 자동화

본인이 계속 운영할 사이트를 만들어보는게 가장 중요

반응형