TIL

52일차

haedal-uni 2021. 11. 4. 02:59
728x90

본 전공 졸업시험은 오늘 끝이 났다!

아직 복수전공 졸업시험 5과목이 남았지만 그동안 시험공부랑 병행하느라

aws 강의 복습도 1~2일차 정도만 되어있고 5일차는 강의에서 해야하는 부분도 아예 못했다.

aws 과금 나와서 NAT 없앴더니 5일차 실강에서 진행이 불가능 했다.

(주말에 다시 처음부터 하기 위해서 아예 없애기로 했다.. AWS 과금 나와서 깜짝 놀라가지고 다 없앴다. 😭)

 

이번주 시험은 없으므로 이번주부터 평일에는 당일 공부한 내용 정리하고 

이후에는 java 강의를 듣고 주말에 밀린 aws 용어정리를 해야겠다.


강의 내용 정리

 

springboot를 사용하면 써야하는 코드

@SpringBootApplication

이 클래스는 springbootApplication 이라는 의미

이 클래스 안에 springbootApplication 의 메인함수가 있다 라는 의미

 

* 한 파일당 한개의 클래스밖에 설정되지 않는다.

 

@SpringBootApplication
public class 클래스이름{
    main()
}

이런 모양이 되어야 한다.

 

 

👉🏻 클래스 안에 여러 함수는 올 수 있지만 클래스는 하나이다!!

클래스 상속을 할 때는 다른 파일에서 작성하고 import 한다.

 

 

* 함수를 묶은 것이 클래스이고 클래스 묶은 것이 패키지이다.

 

*  스프링 분석할 때는 스프링을 분석하는게 아니라 사용하는 방법을 알아야한다.

이 기능은 이렇게 사용하는 구나 이런식으로,,

 

일단 spring boot를 쓴다면!

@SpringBootApplication 이 코드를 제일 앞에 쓴다! 이렇게 기억해놓았다.

 

 


 

 

public class HelloWorld {
	public static void main(String[] args) {
    	System.out.println("Hello, world");
    }
}

HelloWorld에서 첫 글자(H)는 대문자. 이어지는 글자(W)도 대문자.

 

 

int choiceNumber = 3

숫자라는 것을 알려주기 위해 int로 써줘야한다. (strong type)

*  강력한 타입(strong typing)을 사용하는 언어는 타입과 함께 변수를 선언해야만 한다.

 

 

쓰는 이유?  실수↓  &  실행할 때의 속도가 빨라진다.

 

 

* 파이썬에서는 snake case를 사용했지만 자바에서는 camel case를 사용한다.!!

 

snake case는 언더바(_) 형식을 사용하여 표현                       ex) hello_world

camel case는 중간에 있는 글자가 대문자(낙타 모양과 비슷)     ex)helloWorld

 

 

 

* Coding Convention

내가 작성한 코드를 다른사람들도 쉽게 이해할 수 있게 가독성 있는 코드를 작성하는 법에 대한 규칙

<코드컨벤션(Code Convention) / 코딩 컨벤션 (Coding Convention) 란>, https://hsunnystory.tistory.com/145

 

 

 

출처

 

* <자바스크립트의 느슨한 타입(Loose Typing) 이해하기>, https://bestalign.github.io/dev/understanding-loose-typing-in-javascript/

 

* <표기법 - 스네이크 케이스, 파스칼 케이스, 카멜 케이스>, https://velog.io/@leyuri/%ED%91%9C%EA%B8%B0%EB%B2%95-%EC%8A%A4%EB%84%A4%EC%9D%B4%ED%81%AC-%EC%BC%80%EC%9D%B4%EC%8A%A4-%ED%8C%8C%EC%8A%A4%EC%B9%BC-%EC%BC%80%EC%9D%B4%EC%8A%A4-%EC%B9%B4%EB%A9%9C-%EC%BC%80%EC%9D%B4%EC%8A%A4

 

 

 

 

TIP! 자바 실행 후 밑에 있는 로그 보는 습관 들이기

 

* 공식문서는 여기서 (모음집) >> https://devdocs.io/

* 강의에서 참고했던 ioc 사이트 :  https://martinfowler.com/articles/injection.html

 


용어 정리

 

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

 

 

Portable

다른 PC에서도 사용할 수 있는 이동 가능한 프로그램

 

 

 

 

Multithreaded 

멀티스레딩을 사용하면 애플리케이션의 응답성을 높일 수 있으며

애플리케이션이 다중 프로세서 또는 다중 코어 시스템에서 실행되는 경우 처리량을 높일 수 있다.

 

멀티스레딩은 CPU( 중앙 처리 장치 ) 기능으로 두 개 이상의 명령 스레드가

동일한 프로세스를 공유하면서 독립적으로 실행할 수 있도록 한다.

멀티스레딩을 사용하면 단일 프로세스 내에서 여러 동시 작업을 수행할 수 있다.

 

 

 

 

Object-Oriented Programming(OOP) : 객체 지향 프로그래밍

클래스로 정의한 상태와 동작이라는 틀을 갖고 실제 대상들을 계속 찍어내는 프로그래밍 방법을

객체지향 프로그래밍

 

 

 

 

Object : 객체

객체(object)란 실생활에서 우리가 인식할 수 있는 사물

 

붕어빵을 정의해 보면,

  • 밀가루 반죽으로 된 빵.
  • 붕어모양.
  • 실제 붕어는 아니다.(죽어있다?)
  • 팥이 들어있음.

 

으로 정의할 수 있다.

이렇게 생각하여 정의한 것 클래스(Class)라고 하고

실제로 붕어빵 틀에 의해 생성된 붕어빵 객체(Object)라고 한다.

 

* 이전에 정리한 글 참고 >> 객체(Object) 알아보기면접 기초 정리

 

 

 

 

Interface

사물 간 또는 사물과 사용자 간의 의사소통이 가능하도록 일시적 혹은 영속적인 접근을 목적으로 만들어진

물리적, 가상적 매개체를 의미

 

USB 포트에 연결할 수 있는 기기는 하드디스크, 메모리스틱, 디지털카메라 등등 무척 많다.

바로 이 USB포트가 물리적 세계의 인터페이스라고 할 수 있다.

USB포트의 규격만 알면 어떤 기기도 만들 수 있다.

또 컴퓨터는 USB 포트만 제공하고 어떤 기기가 만들어지는 지 신경쓸 필요가 없다.

바로 이 점이 인터페이스의 핵심이다.

 

 

 

 

Complier

컴파일(Compile)은 주어진 language로 작성된 컴퓨터 프로그램을

다른 언어의 동등한 프로그램으로 변환하는 프로세스이다.

컴파일러는 이 작업을 실행하는 소프트웨어이다.

 

자바 소스 코드를 실행시키려면 기계가 알아들을 수 있는 bytecode로 변환 시켜야 한다.

변환하기 전의 원본 코드인 source code를 기계에서 실행할 수 있도록

bytecode로 변환하는 일을 하는 프로그램이 자바 컴파일러다.

<JAVA :: 자바 컴파일러(Java Compiler)와 JVM(Java Virtual Machine)>, https://blog.wanzargen.me/9

 

 

 

 

◾ Spring

Spring이란 JAVA 기술들을 더 쉽게 사용할 수 있게 해주는 오픈소스 프레임 워크

 

* Spring Boot 기반 애플리케이션 을 생성하여 Spring Framework 사용을 시작할 수 있다 .  

  - Spring Framework : 자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크

  - Spring Boot는 생산 준비가 된 Spring 기반 애플리케이션을 생성하는 빠르고(독단적인) 방법을 제공

* 프레임워크와 라이브러리 : https://lu-delight.tistory.com/118

 

정리!

spring이 java 프레임워크이고, spring boot는 spring 기반으로 빠르고 간단하게 사용할 수 있는 거라서
spring으로 사용해도 되는데 편하게 사용하기 위해서 springboot로 사용하는 것이다.

* 스프링이 처음에는 간단하게 나왔다

그런데 점점 기능이 추가되고 많아지면서 스프링의 처음 나왔을 때의 의도했던 것처럼

가볍고 간단한 스프링이 더이상 아니게 되었다.

그래서 스프링만든 회사에서 기존 스프링을 간단하게 사용할 수 있도록 나온 것이 스프링부트이다.

 

 

 

 

Gradle

Gradle은 그루비(Groovy)를 기반으로 한 빌드 도구이다. 

Ant Maven과 같은 이전 세대 빌드 도구의 단점을 보완하고 장점을 취합하여 만든 오픈소스로 공개된 빌드 도구

 

* 빌드란 소스코드 파일을 실행가능한 소프트웨어 산출물로 만드는 일련의 과정

[코딩 공작소], <컴파일과 빌드 차이점>, https://freezboi.tistory.com/39 

 

 

 

 

Spring Web

Spring Web을 구글링 했다. 근데 Spring Web MVC라는 글들이 보여서

Spring Web이라고도 하고 Spring Web MVC라고도 하는 걸까?? 궁금했다.

 

👉🏻 Spring Web 은 오늘 dependency 설정할 때 내가 스프링부트를 이용해서 Web 페이지를 띄우려면

설정해야 하는 dependency이다.

Spring MVC 는 스프링부트가 나오기 전에 스프링 MVC 모델을 이용해서 코드를 짰는데 그거 말하는거 같다. 

 

Spring Web MVC는 둘 중 어떤걸 말하는 걸까?

* 콩이의 개발블로그, <Spring Web MVC를 이용하여 웹 서버 띄우기>,  https://rimkongs.tistory.com/47

 

아까 스프링 부트는 기존 스프링의 단점을 고치고자 스프링 부트를 만들었는데

그래서 스프링부트의 기반은 이전버전의 스프링으로 만들어졌다.

이전 버전의 스프링은 MVC 모델로 코드를 작성했기 때문에 스프링 부트에서도 MVC 모델을 사용하기 시작했다.

그래서 스프링 부트에서도 MVC 모델을 사용한다 

위 본문에서 작성한 글의 사진은 Spring Web MVC 맞다

 

❓ 그럼 Spring MVC라고도 부르고  Spring Web MVC 라고도 부르는데 Spring Web이랑은 다른 개념이다 !!!
이렇게 이해한게 맞을까??

 

Spring Web MVC : 스프링부트 이전에 스프링에서 사용했던 코드 작성 방법으로

Model, View, Controller 구조를 의미하며 코드 작성 방식이다.

스프링부트에서도 이 방식을 사용하여 웹페이지를 작성한다.


Spring Web : 스프링부트를 설정할 때 dependency 이름이다.

스프링을 이용하여 웹페이지를 띄울 때 dependency 설정한다. 

하나는 코드 작성방식이지만, 하나는 dependency 이름이다.

 

의미는 서로 비슷하지만 사용되는 곳은 전혀 다르다.  이부분을 캐치해야 한다.

 

* MVC, MTV 정리 https://lu-delight.tistory.com/119

 

 

 

 

Spring Data JPA

JPA란 Java 진영에서 ORM(Object-Relational Mapping) 기술 표준으로 사용하는 인터페이스 모음

자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스

인터페이스 이기 때문에 Hibernate, OpenJPA 등이 JPA를 구현함

 

 

 

 

Lombok

Lombok이란 어노테이션 기반으로 코드를 자동완성 해주는 라이브러리이다.

[ Lombok의 장점 ]

어노테이션 기반의 코드 자동 생성을 통한 생산성 향상

반복되는 코드 다이어트를 통한 가독성 및 유지보수성 향상

Getter, Setter 외에 빌더 패턴이나 로그 생성 등 다양한 방면으로 활용 가능

 

 

 

 

H2 Database

  • 매우 빠른 오픈 소스, JDBC API
  • 내장형 및 서버 모드, 내장형 데이터베이스
  • 브라우저 기반 콘솔 응용 프로그램
  • 작은 설치 공간: 약 2MB jar 파일 크기

 

 

 

MySQL Driver

mysqldriver을 검색하면 mysql이 무엇인지만 떴다. 그래서  driver는 그냥 있는건가 싶었다.

 

특정 프로그램이나 모듈을 사용할 수 있게 해주는 프로그램이나 모듈을 드라이버라고 한다.

프린터 드라이버라고 하면 프린터를 사용할 수 있게 해주는 프로그램이고

그래픽카드 드라이버는 그래픽카드를 사용할 수 있게 해주는 프로그램이다.

 

mysqldriver은 mysql을 사용해주는 모듈로 생각하면 된다.

👉🏻 mysql을 사용할 수 있도록 mysql 접속 모듈을 스프링 프로젝트 안에 설치하는 것이다.

 

dependency에 mysqldriver를 import 하면 프로젝트에서 mysql 사용 가능하다.

 

* Dependency(의존성)란?

  • 코드에서 두 모듈 간의 연결.
  • 객체지향언어에서는 두 클래스 간의 관계라고도 말함.
  • 일반적으로 둘 중 하나가 다른 하나를 어떤 용도를 위해 사용함.

 

 

** 정리

코드에서 두 모듈 간의 연결 → 의존성

그럼 의존이 걸리는 모듈과 의존을 거는 모듈이 생긴다. (이 것들을 구분해야 한다!)

 

객체지향언어에서는 두 클래스 간의 관계라고도 말함. 

→ 클래스간의 관계는 has-a 관계와 is-a 관계가 있다.

그리고 dependency는 일반적으로 클래스와 클래스 관계가 아니라 모듈과 모듈 관계이다.

 

***

객체들 간의 '관계'는 객체 간의 관계를 정의하는 키(key)라고 볼 수 있다.

IS-A관계는 "~는 ~이다."가 성립되는 관계이고, HAS-A관계는 "~가 ~을 소유한다."가 성립되는 관계이다.

학생클래스가 사람클래스를 상속받고 있다.

"학생은 사람이다". 이러한 관계를 위처럼 표현했을 때 IS-A관계 라고 한다.


"경찰은 총을 가진다."의 구조로

경찰클래스안에 권총클래스의 객체를 멤버로 가지고 있는 경우를 HAS-A 관계라고 한다.

public 상속을 사용할 때는 is-a관계가 성립되도록 만들어야 한다.

예를 들어서 "사과는 과일이다"은 성립한다. 사과는 과일이기 때문이다.

틀린 예로 "과일은 사과이다."가 있다. 문장 그대로 과일이라는 단어는 사과를 의미하지 않기 때문이다.

그래서 Apple 클래스는 파생클래스로 Fruit 클래스를 상속할 수 있는 것이다.

 

 

 

 

CORS

교차 출처 리소스 공유(Cross-Origin Resource Sharing, CORS)는 추가 HTTP 헤더를 사용하여,

 출처에서 실행 중인 웹 애플리케이션이 다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여하도록

브라우저에 알려주는 체제

 

 

🤔❓

음? origin?? 어디서 들어봤는데?? 했다가 git의 origin이 떠올랐다..!!

뭔가 관계가 있는건가?? 싶었다

 

깃의 origin은 원격브랜치를 가리키는 유래, 원천, 소스 같은 의미라면 CORS 에서의 orign은 출처 개념이다.

CORS에서 origin은 출처 개념이라 내가 불분명한 출처(다른 도메인)의 데이터는

사용을 못하게 만드는 방법이다.

 

GIT 의 orign은 원격브랜치를 가리키는 이름이다.

 


출처

 

Portable 

<무설치와 포터블을 구별하자>, https://dis1.tistory.com/5

 

Multithreaded 

<Threads and threading>, microsoft, https://docs.microsoft.com/en-us/dotnet/standard/threading/threads-and-threading

techopedia, <What Does Multithreading Mean?>, https://www.techopedia.com/definition/24297/multithreading-computer-architecture

 

 

 

Object

TCP SCHOOL.com, <객체의 개념>, http://tcpschool.com/javascript/js_object_concept

poiemaweb, <5.10 객체>, https://poiemaweb.com/js-object

Cremazer, <JAVA - 클래스와 객체(Class and Object)>, https://cremazer.github.io/java-Class-and-Object/

 

 

interface

<UI 이해하기 - 인터페이스란 무엇인가> , https://ditoday.com/ui-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80/

 

WikiDocs, <점프 투 자바>, https://wikidocs.net/217

생활코딩, <인터페이스>, https://opentutorials.org/course/1223/6063

 

 

Complier

mdn, <Compile>, https://developer.mozilla.org/ko/docs/Glossary/Compile

 

 

spring

spring, <projects>, https://spring.io/projects

spring, <Spring Framework Overview>, https://docs.spring.io/spring-framework/docs/current/reference/html/overview.html#overview

<스프링 프레임 워크란?> , https://hyunmin1906.tistory.com/207

쩨리쩨리, <[Spring] Spring 이란?>, https://jerryjerryjerry.tistory.com/62

 

 

Gradle 

<Gradle이란 무엇일까?>, https://madplay.github.io/post/what-is-gradle

 

 

Spring Data JPA

사용자 dbjh , <[Spring JPA] JPA 란?>, https://dbjh.tistory.com/77

 

 

Lombok

MangKyu's Diary, <[Java] Lombok이란? 및 Lombok 활용법>, https://mangkyu.tistory.com/78 

 

 

H2 Database

https://www.h2database.com/html/main.html

 

 

MySQL Driver

https://spring.io/guides/gs/accessing-data-mysql/

 

 

Dependency 

<DEPENDENCY (의존성) 이란??>https://tony-programming.tistory.com/entry/Dependency-%EC%9D%98%EC%A1%B4%EC%84%B1-%EC%9D%B4%EB%9E%80

 

 

has-a 관계와 is-a 관계

<객체 지향적 관점에서의 has-a와 is-a 차이점>, https://minusi.tistory.com/entry/%EA%B0%9D%EC%B2%B4-%EC%A7%80%ED%96%A5%EC%A0%81-%EA%B4%80%EC%A0%90%EC%97%90%EC%84%9C%EC%9D%98-has-a%EC%99%80-is-a-%EC%B0%A8%EC%9D%B4%EC%A0%90

 

<IS-A 관계와 HAS-A 관계>, https://shelob.tistory.com/entry/IS-AHAS-A

<C++ is-a 관계와 has-a 관계>, https://blog.plorence.kr/513

 

 

CORS

mdn, <교차 출처 리소스 공유(CORS)>, https://developer.mozilla.org/ko/docs/Web/HTTP/CORS

 

 

728x90

'TIL' 카테고리의 다른 글

54일차  (0) 2021.11.06
53일차(미완)  (1) 2021.11.04
51일차  (0) 2021.11.02
50일차(1일차 용어정리)  (0) 2021.11.01
48일차  (0) 2021.10.30