Back-end Skill/Springboot

11월 3일 spring 실시간 강의 정리본

Sophie소피 2021. 11. 11. 18:59

자바에서 객체 지향 프로그래밍은 무엇인가? 

클래스(class)

사물의 특성을 소프트웨어적으로 추상화하여

모델링 한 것으로 객체를 만들 수 있는 (Template)로써 오브젝트의 정적인 상태

 

객체(object)

 클래스를 실제 사용할 수 있도록 만든 것으로

메모리 공간을 할당해 놓은 인스턴스(Instance)라고도 하며

클래스의 동적인 상태를 의미합니다.(new 명령어를 통해 생성)

 

자바 화이트 페이퍼 백서 

https://www.mit.edu/afs.new/sipb/user/marc/hotjava/doc/overview/java/index.html

요약 ) 객체지향을 잘 사용하기 위해서 

온갖 좋은 말 다 써서 갖다붙임.

야 우리 심플해 자바는 다 찢는다 내용

우리는 심플에 씨랑 씨플플이랑 달라 

객체지향적이고 분산처리, 데이터처리 , 강력하고 안전한 아키텍쳐 중립적이며 이식 가능한 고성능, 

portable, 멀티쓰레드(중요개념)  다중스레드 동적 언어야!

다 찢었어! 

 

 

 

Programming 

- Coding convention (규칙) 

- Framework vs Library 

   -  loC (제어 역전, Inversion Of Control)

쓴코드들을 제어하고 실행하고 하는 것 

   - 마틴 파울러 아저씨 (코드 리팩토링) 블로그 참고

    https://martinfowler.com/articles/injection.html

 

Inversion of Control Containers and the Dependency Injection pattern

Explaining the Dependency Injection pattern, by contrasting it with Service Locator. The choice between them is less important than the principle of separating configuration from use.

martinfowler.com

 

 

 

 

Java 

- object oriented - OO 에 대한 개념을 탑재해야한다. 

    -OOP

          [Todo] 

                -concept 

                - 기본 사용 - 클래스 , 객체, 상속, 인터페이스 ...

- 함수형 프로그래밍의 컨셉을 가져온다 #lambda 

    -[ref] 도서, 레퍼런스 볼 때, java8(책의 버전을 잘보자) ->람다나 함수 잘배우고 싶을 때

- 자바 컨벤션은 카멜케이스 낙타모양 eg) HelloTest 

- main 부분 sout이 실행된다.  

   -쉽게 말해서 pirnt의 의미 

 

 

JDK (java development kit) 자바의 컴파일러 debugging tools , 각종 개발 툴

etc) 라인의 open JDK적용기 읽어보기 

 https://engineering.linecorp.com/ko/blog/line-open-jdk/ 

Oracle JDK와 Open JDK의 차이점 비교 Robin ROBIN 님이 작성 2021년 4월 22일

   -하위 호환성

           -Deprecated package는 사용안됨.

공식 문서를 보면 deprecated 표기가 되어있음.

(버전을 확 올릴 순 없어서 조금씩 올리거나 개선해서 올린다.) 

 

 -Zulu 1.8 설치(open JDK Zulu Java8)

   - 비슷한거 SDK (development kit) 

   -Write onced Run Everywhere (예전에는 컴퓨터마다 세팅을 하나하나 해야했음.)

   - compiler(javac)

          -  인간코드 -> byteCode 변환.

  •  Kottlin ..? (jetbrains에서 만들고 관리중) null... 해결함!!

         -요즘 Spring이랑 kottlin을 같이 쓰는 추세이다

          - first-class citizen 

 

public class HelloWorld // HelloWorld라는 클래스를 만들었다.
        public static void main (string[]args){
            System.out.println("Hello, world!");
        }
        
int realNumber = 3 // 얘는 숫자라고 직접 알려줘야함, datatype을 strong하게 써준다 

//파이썬 같은 경우
num = 3 //알아서 숫자로 인식해줌
num = '3' //아, string(문자열)이구나하고 문자열로 인식하고 넘어감

int real_Number= 3 //이렇게 스네이크케이스로 쓰면 어머! 왜저래 하고 욕먹음, code convention(규칙)없이 쓰면 가독성 확 떨어짐, 조직마다 규칙이 있음
public class HelloWorld 
        public static void main (string[]args){
            System.out.println(HelloWorld);  //이게 메인안에 들어가니까 메인으로 알고 있어라! 이것(3번라인)부터 실행되는 문장이다!
        }

 

 

 

JVM

Java가 실제로 동작하는 가상 환경. 이 JVM덕분에 하나의 Java프로젝트를

개발해도 여러 환경에서 원활하게 실행시킬 수 있다

   -Java virtual machine

    -자바 가상 머신의 약어 (코드 실행시키는 아이) 

    - byteCode 실행 (Runtime) 

    -  Java API 

 

JRE (Java Runtime Environment)

실행할 때 (Runtime) 필요한 실행 환경 

- Java가 동작하는데 필요한 JVM, 라이브러리 등 다양한 파일들을 포함한다.

- Java를 실행하려면 JRE를 설치해야한다

-  Java API

 

 

- Object-Oriented

객체지향 시스템은 협력하는 객체들의 연결망이다. 

객체 --- 협력 -----객체 ----- 객체 ----협력 ----- 객체 

객체..? 

- 객체가 각각의 역할과 책임이 있고 메시지로 상호작용해서 협력해나가는 것 

- 객체 (역할/책임) ----메시지----객체(역할/책임) ----객체(역할/책임)

---메시지---객체 (역할/책임)

 

-인터페이스  

   -UI, GUI, CLI, API

   -화면 -- 상호작용 -- 유저 

   -특징  

       -내부동작 알바아님 

       -버튼 누르기(메시지)전달 --- 화면 제대로 동작할 책임(역할)

-인터페이스만 유지하면 외부에서는 알 필요가 없음 

-인터페이스 메시지를 주고 상호작용 

-객체의 인터페이스는 객체가 수신할 수 있는 메시지 목록으로 구성됨

-객체가 어떤 메시지를 수신할 수 있는지가 객체가 제공하는 인터페이스의 모양을 빚는다. 

 

설정이 잘되어 있으면 감동을 받는다.

쿠키와 세션까지 정리를 하자.  

https://spring.io/projects 

 

Spring | Projects

Spring Framework Provides core support for dependency injection, transaction management, web apps, data access, messaging, and more.

spring.io

 

 

컨트롤러 서비스 레파지토리 

contrller - service - repository 까지알고가자. 

 

Spring  

-응애 ~

-EJB(Enterpisise Java Bean)

 컴포넌트 강결합/ 겨울 끝 (하나하나의 덩어리라고 생각하면 된다)

 얘네들이 원래 결합이 미친듯이 뭉쳐있었다. 

 설정하는 것도 엄청 복잡하고 야 이거! 안되겠다. 

 이거 새롭게 만들어보자 ! 우리는 앞에 것들 이런것들 안해 ~!

 해서 나온게 Spring이다. 우리는 결합되있는거..? 그런거 없어 !(진짜 혁신이였다고 한다) 

 야~! 이제 겨울은 가고 봄이온다..? 그래서 이름이 스프링이라고 한다. 

- 2004 -> 또커짐 

- Spring boot 2014 1.0 

    -너무 무거우니까 간결하게 코드를 짜는게 컨셉, spring concept 다 있음. 

    - Spring boot 안에는 웹서버(WAS)가 내장되어있음. #tomcat 

 

Spring Cloud , Spring security 

여기서 핵심은 Spring Boot가 core 핵심이다. 

 

Spring security는 인증 인가에 대해 배울 것이다. 이건 나중시간에!

- Spring Boot, Spring Security, Spring Cloud, SpringData(JPA), Spring REST Docs 

- Test (for Java)

   - Junit Java 테스팅 프레임워크 

     - Java+ Unit Test (단위테스트) => 그냥 이걸 합쳐서 Junit이라고 한다. 

 

 

Spring - OO 답게 써보자. 

-여러가지 프로젝트 관리하고 설정하는 법 

      -spring boot 가 core이다 

           그 외에 dataJPA , spring cloud, spring security, spring REST docs 를 사용해보자. 

- Mockito - Mock 객체( 가짜값을 만들고 돌리는 것을 배운다) 

-Annotation

    -spring에서는 java의 reflection을 이용해서 기능을 실시 ... 

https://velog.io/@gillog/Spring-Annotation-%EC%A0%95%EB%A6%AC

 

[Spring] Annotation 정리

Annotation(@)은 사전적 의미로는 주석이라는 뜻이다. 자바에서 사용될 때의 Annotation은 코드 사이에 주석처럼 쓰여서 특별한 의미, 기능을 수행하도록 하는 기술이다.

velog.io

 

여기서 잠깐! 웹에서의 인증 인가에 대해서 간단하게 살짝 알아보고가자 ~

인증 Authentication 사용자 신원을 확인하는 행위 

인가 Authorization 사용자의 권한 을 확인하는 행위 

 

 

Spring Mapping 

Spring ----- CURD ------JPA(nosql, 설정하는 것은 tool kit= lombok사용) ---- DATABASE 

 

Spring 

-편하게

- 응집도 높이고, 결합도 낮추기

- 다형성  

 

스프링의 주요컨셉 

-DI
-IoC 

-AOP 

=>Objected Oriented 다형성의 특징에서 나옴

 

Layered Architecture = Controller - Service - Repository(이 구조를 써서 스프링을 씀) 

NVC와는 다른개념 

 

[DATA를 접근할 때 쓰는 것] 

-JDBC 

-JPA 

 

쿠키 세션 +HTTP msg 세팅 

인증 인가 

접근권한 부여

 

 

 

오류났을 떄 등골이 서늘한 이유.....................

디버깅이 안되서 

 

Annotation 

원래 Annotation이라고 하는 것은 이것은 스프링 뿐만 아니라 

원래 자바에서 사용되는 개념 프로그래밍에서 사용되는 개념 

사실 우리는 annotation을 Flask에서 써보았다. 

app.py파일에서  app.route 할 때 썼었다. 

app. route는 짜잔 ~ 어떤 Url도 줄 수있고, GET, POST 줄 수 있었다. 

파이썬에서는 함수의 함수라는 개념이다. 

- spring에서는 Java의 reflection을 사용해서 기능을 실시 

   - reflection? 

    객체를 통해 클래스의 정보를 분석해 내는 프로그램 기법을 말한다
     출처: https://gyrfalcon.tistory.com/entry/Java-Reflection [Minsub's Blog]

그러나, 자바에서는 살짝다르다.

@CrossOrigin origins = "http://example.com", maxAge = 3600)

나중에 코드 읽을 떄 annotation부터 읽기! 

왜? 스프링에서 얘가 어떤 역할을 하고 어떤 기능을 하는지 알기위해서

 

 

 

[ToDoList] 

  -concept

  - 기본 사용, 클래스, 객체, 상속, 인터페이스 ....

  - annotation