8월 1주차 WIL_04

Jobmania·2022년 8월 7일
0

항해 과정 기록

목록 보기
4/19
post-thumbnail

이번주의 키워드 : ORM, SQL,MVC


1.ORM

ORM은 Object Relational Mapping의 줄임말로 객체 관계 매핑을 의미합니다. 자바와 같은 객체지향 언어에서 의미하는 객체와 RDB(Relational Database)의 테이블을 자동으로 매핑하는 방법입니다.

클래스는 데이터베이스의 테이블과 매핑하기 위해 만들어진 것이 아니기 떄문에 RDB 테이블과 어쩔 수 없는 불일치가 존재합니다. ORM은 이 둘의 불일치와 제약사항을 해결하는 역할입니다. 간략하게 애플리케이션의 클래스와 데이터베이스의 테이블을 매핑하는 것을 그림으로 나타내면 다음과 같습니다.

JPA

JPA(Java Persistence API)는 자바 진영의 ORM 기술 표준으로 채택된 인터페이스의 모음입니다. ORM이 큰 개념이라면 JPA는 더 구체화된 스펙을 포함합니다. 즉, JPA 또한 실제로 동작하는 것이 아니고 어떻게 동작해야 하는지 매커니즘을 정리한 표준 명세로 생각하면 됩니다. 아래처럼 JPA의 역할이 ORM이라고 보면 무난합니다.

2.SQL(Structured Query Language)

SQL은 관계형 데이터베이스 관리 시스템(RDBMS)의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어이다.

데이터베이스 언어 SQL 문법의 종류는 다음 세 가지로 대별된다.

  • 데이터 정의 언어 (DDL : Data Definition Language)
  • 데이터 조작 언어 (DML : Data Manipulation Language)
  • 데이터 제어 언어 (DCL : Data Control Language)

데이터 정의 언어

테이블과 인덱스 구조를 관리한다. DDL의 가장 기본적인 요소는 CREATE, ALTER, RENAME, DROP과 TRUNCATE 구문이다:

CREATE (데이터베이스 개체 (테이블, 인덱스, 제약조건 등)의 정의)
DROP (데이터베이스 개체 삭제)
ALTER (데이터베이스 개체 정의 변경)
TRUNCATE 테이블에서 모든 데이터를 빠르게 삭제. 내부 테이블의 데이터를 삭제하는 것이지, 테이블 자체를 삭제하는 것은 아니다.

데이터 조작 언어

INSERT INTO (행 데이터 또는 테이블 데이터의 삽입)
UPDATE ~ SET (표 업데이트)
DELETE FROM (테이블에서 특정 행 삭제)
SELECT ~ FROM ~ WHERE (테이블 데이터의 검색 결과 집합의 취득)
뒷부분의 “동적 SQL”에서 SELECT 문은 한 번 실행에 1행의 결과를 얻는 “단일행 SELECT 문장”과 커서로 여러 줄의 결과를 얻는 “커서 SELECT 문”이 있다.

데이터 제어 언어

GRANT (특정 데이터베이스 사용자에게 특정 작업을 수행 권한을 부여)
REVOKE (특정 데이터베이스 이용자로부터 이미 준 권한을 박탈 함.)
SET TRANSACTION ( 트랜잭션 모드 설정 (동시 트랜잭션 격리 수준 (ISOLATION MODE) 등))
BEGIN (트랜잭션 시작)
COMMIT (트랜잭션의 실행)
ROLLBACK (트랜잭션 취소)
SAVEPOINT (무작위로 롤백 지점을 설정)
LOCK (TABLE 등의 자원을 차지)


3.MVC : (Model - View - Controller) 디자인 패턴

화면과 데이터 처리를 분리해 코드간의 종속성을 줄이고 구성요소간의 역할을 명확하게 함으로써 코드 분리가 쉽고 협업을 용이

  1. Client 의 요청을 Model 로 받아 처리
  2. Template engine 에게 View, Model 전달
    A. View: 동적 HTML 파일
    B. Model: View 에 적용할 정보들
  3. Template engine
    A. ViewModel 을 적용 → 동적 웹페이지 생성
  4. Client 에게 View (동적 웹 페이지, HTML) 를 내려줌

Model 이란?

데이터 관련된 일, 저장, 가공 등등..
비즈니스 로직과 관련된 일을 처리..
데이터 베이스 관련된 로직을 처리..
어플리케이션 데이터를 표현 .

View 란?

사용자에게 알맞는 화면을 보여주는 역할
데이터를 시각적으로 보여주는것
ex) 결과값 출력, 사용자 요구, 사용자 데이터 입력..

Controller 란?

Model과 View를 연결해주는 매개체
사용자가 View(GUI)를 통해 입력을 하면 Model(데이터)를 변경해주는 것.
어플리케이션 흐름이나 사용자의 처리요청을 구현.
Servlet의 역할
Model,View 각자의 역할에 집중할 수 있도록 해준다.
장점) 객체지향적, 비용절감, 유지보수, 업무분담.

Controller 역할 예시

(View를 통해 전달된) 사용자의 요청 분석 > (사용자가) 입력한 데이터 얻어오기 > 모델클래스 객체 생성 (메소드 호출, 리턴된 데이터 저장) > 페이지 이동, 이동할 페이지 선택 > 유효성 검사 (Valid Check,선택사항)

Swing MVC 예시(심플계산기)
뷰 : 계산기 폼(CalcView.java)
모델 : 더하기, 빼기, 곱하기, 나누기 등(Calculator.java)
컨트롤러 : 전체프로그램제어(main()메소드 포함)


추가적인 키워드

1. API란 무엇인가?

API(Application Programing Interface)는 응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻한다.

어떠한 응용프로그램에서 데이터를 주고 받기 위한 방법을 의미합니다. 어떤 특정 사이트에서 특정 데이터를 공유할 경우 어떠한 방식으로 정보를 요청해야 하는지, 그리고 어떠한 데이터를 제공 받을 수 있을지에 대한 규격들을 API라고 하는것입니다! API라고 하는것이죠!

API의 종류

  • SOAP API
    이 API는 단순 객체 접근 프로토콜을 사용합니다. 클라이언트와 서버는 XML을 사용하여 메시지를 교환합니다. 과거에 더 많이 사용되었으며 유연성이 떨어지는 API입니다.
  • RPC API
    이 API를 원격 프로시저 호출이라고 합니다. 클라이언트가 서버에서 함수나 프로시저를 완료하면 서버가 출력을 클라이언트로 다시 전송합니다.
  • Websocket API
    Websocket API는 JSON 객체를 사용하여 데이터를 전달하는 또 다른 최신 웹 API 개발입니다. WebSocket API는 클라이언트 앱과 서버 간의 양방향 통신을 지원합니다. 서버가 연결된 클라이언트에 콜백 메시지를 전송할 수 있어 REST API보다 효율적입니다.
  • REST API
    오늘날 웹에서 볼 수 있는 가장 많이 사용되고 유연한 API입니다. 클라이언트가 서버에 요청을 데이터로 전송합니다. 서버가 이 클라이언트 입력을 사용하여 내부 함수를 시작하고 출력 데이터를 다시 클라이언트에 반환합니다. 아래에서 REST API에 대해 더 자세히 살펴보겠습니다.

REST API란 무엇인가요?

REST는 Representational State Transfer의 줄임말입니다. REST는 클라이언트가 서버 데이터에 액세스하는 데 사용할 수 있는 GET, PUT, DELETE 등의 함수 집합을 정의합니다. 클라이언트와 서버는 HTTP를 사용하여 데이터를 교환합니다.

REST API의 주된 특징은 무상태입니다. 무상태는 서버가 요청 간에 클라이언트 데이터를 저장하지 않음을 의미합니다. 서버에 대한 클라이언트 요청은 웹 사이트를 방문하기 위해 브라우저에 입력하는 URL과 유사합니다. 서버의 응답은 웹 페이지의 일반적인 그래픽 렌더링이 없는 일반 데이터입니다.

Rest Api에 더 잘 알고 싶다면?(https://aws.amazon.com/ko/what-is/api/)

2.Client와 Sever란 무엇인가?

서버-클라이언트(server-client) 구조란 데이터를 저장하고 관리하는 서버 부분과 해당 서버에 접속하여 데이터를 열람하는 클라이언트 부분으로 구성된 네트워크 구조를 말한다.

  • 구조
    서버와 클라이언트는 1:N 구조로 연결되어 있다. 즉, 한 대의 서버에 다수의 클라이언트가 접속하여 서비스를 이용한다.
    대부분의 인터넷 웹 사이트는 서버-클라이언트 구조로 작동한다. 예를 들어 네이버, 구글, 페이스북, 유튜브 등 인터넷 포털 사이트에 방대한 데이터를 저장하고 다수의 사용자들이 개인 PC나 스마트폰 등의 단말기를 사용하여 해당 서버에 접속하여 필요한 정보를 열람할 수 있다. 서버의 경우 하루 24시간, 1년 365일 인터넷에 연결되어 있어야 한다. 반면 클라이언트의 경우 필요할 때만 켜서 인터넷에 접속하면 된다.

    3.WAS란 무엇인가? Web Server와 차이점은 무엇인가?

    Web :

  • 인터넷을 기반으로 한 정보를 공유하거나 검색할 수 있게한 서비스.

  • URL(주소), HTTP(통신규약),HTML(내용)

Server :

-클라이언트에게 네크워크를 통해 정보나 서비스를 제공하는 컴퓨터 시스템

WebServer :

인터넷을 기반으로 클라이언트에게 웹 서비스를 제공해주는 컴퓨터!!

  • 클라이언트에게 정적 페이지만 제공할 수 있다.(html, css, 이미지 등)

  • 따라서 상황에 따라 다른 정보를 제공할 수 없고, 모든 클라이언트에게 동일한 페이지를 제공한다.

  • 대표적인 웹 서버로 Apache가 있음

    WAS (Web Application Server)

    웹 어플리케이션과 서버 환경을 만들어 동작시키는 기능을 제공하는 소프트웨어 프레임 워크
    웹 어플리에키션을 실행시켜 필요한 기능을 수행하고 그 결과를 웹서버에게 전달.

  • 웹 애플리케이션이 돌아가는 서버로, 상황에 따라 클라이언트에게 다른 정보를 제공할 수 있다!

  • 웹서버+웹컨테이너로 이뤄져 있다.

  • 정적인 정보 제공시에는 웹서버를 통해 정보를 제공하지만, 상황에 따라 다른 정보(동적 정보)를 제공해야 할 때에는 웹서버를 거쳐 웹 컨테이너에서 처리하게 된다. 웹 컨테이너는 서블릿을 통해 클라이언트가 요청하는 정보를 가공한다.

  • 대표적인 WAS로 Tomcat이 있음

Web Container웹 컨테이너

  • 서블릿을 실행시키는 소프트웨어

++++ 언어별 웹서버 구성

-(JAVA) JSP, Servlet -> 아파치 톰켓 -> WAS 서버 (WEB서버 내장)
-(C,C++) PHP -> RWAPM -> WAS 서버 (WEB서버 내장)
-(MFC, .NET) ASP, ASPX -> IIS ->WAS 서버 (WEB서버 내장)

Web Server가 필요한 이유?

클라이언트(웹 브라우저)에 이미지 파일(정적 컨텐츠)을 보내는 과정을 생각해보자.
이미지 파일과 같은 정적인 파일들은 웹 문서(HTML 문서)가 클라이언트로 보내질 때 함께 가는 것이 아니다.
클라이언트는 HTML 문서를 먼저 받고 그에 맞게 필요한 이미지 파일들을 다시 서버로 요청하면 그때서야 이미지 파일을 받아온다.
Web Server를 통해 정적인 파일들을 Application Server까지 가지 않고 앞단에서 빠르게 보내줄 수 있다.
따라서 Web Server에서는 정적 컨텐츠만 처리하도록 기능을 분배하여 서버의 부담을 줄일 수 있다

WAS가 필요한 이유?

웹 페이지는 정적 컨텐츠와 동적 컨텐츠가 모두 존재한다.
사용자의 요청에 맞게 적절한 동적 컨텐츠를 만들어서 제공해야 한다.
이때, Web Server만을 이용한다면 사용자가 원하는 요청에 대한 결과값을 모두 미리 만들어 놓고 서비스를 해야 한다.
하지만 이렇게 수행하기에는 자원이 절대적으로 부족하다.
따라서 WAS를 통해 요청에 맞는 데이터를 DB에서 가져와서 비즈니스 로직에 맞게 그때 그때 결과를 만들어서 제공함으로써 자원을 효율적으로 사용할 수 있다

그렇다면 WAS 혼자 기능을 수행하면 되는 거아닌가??
자원 이용의 효율성 및 장애 극복, 배포 및 유지보수의 편의성 을 위해 Web Server와 WAS를 분리한다. -> Web Server를 WAS 앞에 두고 필요한 WAS들을 Web Server에 플러그인 형태로 설정하면 더욱 효율적인 분산 처리가 가능하다.

결론!
웹 서버는 html파일만 읽을 수 있고, 정적 페이지의 한계를 극복하기 위한 방안으로 was서버가 나왔다.

그 동적 페이지 내의 로직을 구성하기 위해 JSP, ASP, PHP 등이 나온 거고 웹 서버는 html이 아닌 파일(JSP, ASP, PHP)을 웹 컨테이너로 보내서 로직을 통해 html을 생산해내 다시 클라이언트에게 보낸다!

https://sweeteuna.tistory.com/112?category=403528
https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html

4. HTTP 프로토콜이란 무엇인가?

HTTP(Hypertext Transfer Protocol)는 인터넷상에서 데이터를 주고 받기 위한 서버/클라이언트 모델을 따르는 프로토콜 이다. 애플리케이션 레벨의 프로토콜로 TCP/IP위에서 작동한다.

  • 서버/클라이언트 모델이란?
    서비스 제공자 (service provider)과 서비스 요청자 (service requester)로 구분되는 네트워크 모델이다. 서비스 제공자의 역할을 하는 측을 서버, 서비스 요청자의 역할을 하는 측을 클라이언트라고 한다. 서버/클라이언트 모델에서 모든 자원은 서버에 집중된다. 클라이언트는 데이터 프리젠테이션 (재현) 을 위한 최소한의 자원을 가지는게 일반적이다.

  • TCP/IP 프로토콜이란?
    인터넷 프로토콜 중 가장 중요한 역할을 하는 TCP와 IP의 합성어로 인터넷 동작의 중심이 되는 통신 규약으로 데이터의 흐름 관리, 데이터의 정확성 확인 (TCP 역할), 패킷을 목적지까지 전송하는 역할 (IP 역할) 을 담당한다. IP는 데이터를 한 장소에서 다른 장소로 정확하게 옮겨주는 역할을 하며, TCP는 전체 데이터가 잘 전송될 수 있도록 데이터의 흐름을 조절하고 성공적으로 상대편 컴퓨터에 도착할 수 있도록 보장해주는 역할을 한다.

HTTP는 어떤 종류의 데이터든지 전송할 수 있도록 설계돼 있다.
HTTP로 보낼 수 있는 데이터는 HTML문서, 이미지, 동영상, 오디오, 텍스트 문서 등 여러종류가 있다.
하이퍼텍스트 기반으로(Hypertext) 데이터를 전송하겠다(Transfer) = 링크기반으로 데이터에 접속하겠다는 의미이다.

웹브라우저의 통신 과정

클라이언트에서 요청(request)를 보내면 서버는 요청을 처리해서 응답(response)한다.

  • URL 분석 및 접속
    웹 브라우저는 URL을 분석해 서버의 IP 주소와 포트(기본은 80)를 이용해 서버와 TCP/IP 연결을 요청합니다.

  • Request 헤더 전송
    브라우저에서 요청 파일명 등이 기술된 헤더를 전송합니다.

  • Request 바디 전송
    필요한 경우에, 로그인 폼에 입력한 데이터나 첨부 파일 등의 추가적인 데이터를 전송합니다.

  • Response 헤더 해석
    서버에서 헤더를 수신하고 응답 상태(404 등)를 확인하며, 바디의 Content-Type 등을 확인합니다.

  • Response 바디 해석
    바디가 있는 경우에, 서버에서 수신한 바디를 헤더에 기술된 Content-Type에 따라서, text/html인 경우에 HTML을 렌더링하고, image/jpeg인 경우에는 그림을 띄우는 등 적절히 해석합니다.

Connectless & Stateless

HTTP는 Connectless 방식으로 작동한다. 서버에 연결하고, 요청해서 응답을 받으면 연결을 끊어버린다. 기본적으로는 자원 하나에 대해서 하나의 연결을 만든다.

  • 장점: 불특정 다수를 대상으로 하는 서비스에 적합한 방식이다. 수십만명이 웹 서비스를 사용하더라도 접속유지는 최소한으로 할 수 있기 때문에, 더 많은 유저의 요청을 처리할 수 있다.

  • 단점: 연결을 끊어버리기 때문에, 클라이언트의 이전 상태를 알 수가 없다. 이러한 HTTP의 특징을 stateless라고 하는데, Connectless로 부터 파생되는 특징이라고 할 수 있다. 클라이언트의 이전 상태 정보를 알 수 없게 되면, 웹 서비스를 하는데 당장에 문제가 생긴다. 클라이언트가 과거에 로그인을 성공하더라도 로그 정보를 유지할 수가 없다. HTTP는 cookie를 이용해서 이 문제를 해결하고 있다.

URI

클라이언트 프로그램 (웹 브라우저)은 URI를 이용하여 자원의 위치를 찾는다. URI는 HTTP와는 독립된 다른 체계다. HTTP는 전송 프로토콜이고, URI는 자원의 위치를 알려주기 위한 프로토콜이다. Uniform Resource Identifiers 의 줄임로, World Wide Web 상에서 접근하고자 하는 자원의 위치를 나타내기 위해서 사용한다. 자원은 "문서", "이미지", "동영상", "프로그램", "이메일"등 모든 것이 될 수 있다.

http://www.example.co.kr/index.html
1. http : 자원에 접근하기 위해서 http 프로토콜을 사용한다.
2. www.example.co.kr, 도메인 주소 : 자원의 인터넷 상에서의 위치이다. 도메인은 ip 주소로 변환되므로, ip 주소로 서버의 위치를 찾을 수 있다.
3. index.html : 요청할 자원의 이름이다.

이렇게 "프로토콜", "위치", "자원명"으로 (인터넷 상에서) 어디에 있던지 자원에 접근할 수 있다.

HTTP Request

웹 브라우저는 웹 서버에 데이터를 "요청"하는 "클라이언트 프로그램" 이다. 요청은 서버가 인식할 수 있는 약속된 형식 (HTTP 형식)을 따라야 한다.
요청 데이터는 "HEADER"와 "BODY"로 구성된다.

필수 요소로 요청의 제일 처음에 와야 하는 3개의 필드가 있다.

  • 요청 메서드 : GET, PUT, POST, PUSH, OPTIONS 등의 요청 방식이 온다.

  • 요청 URI : 요청하는 자원의 위치를 명시한다.

  • HTTP 프로토콜 버전 : 웹 브라우저가 사용하는 프로토콜 버전이다.
    그 외의 키값

  • Host : 요청을 보내는 Host
    (예) www.google.co.kr

  • Content-Type : 요청에 바디가 있는 경우 그 파일 포맷
    (예) Content-Type: application/json

  • Cookie : 웹 브라우저에 저장된 쿠키들

  • User-Agent : 클라이언트의 정보, 이를 통해 사용하는 브라우저 감지

HTTP Response

  • 프로토콜과 응답코드 : 웹 브라우저가 사용하는 프로토콜, 서버의 응답 상태 (1xx~5xx), 응답 메시지를 보여준다
  • Set-Cookie : 웹 브라우저에게 쿠키 생성을 요청
    (예) Set-Cookie: UserID=tester; Max-Age=3600; Version=1
  • Content-Type : 응답에 바디가 있는 경우 그 포맷
    (예) Content-Type: text/html; charset=utf-8

HTTP Status Code

2xx (성공), 4XX(요청 오류), 5xx (서버 오류)

HTTPS

SSL은 전자상거래에서의 데이터 보안을 위해서 개발한 통신 레이어다. SSL은 표현계층의 프로토콜로 응용 계층 아래에 있기 때문에, 어떤 응용 계층의 데이터라도 암호화해서 보낼 수 있다.
HTTP는 기본적으로 평문 데이터 전송을 원칙으로 하기 때문에 개인의 프라이버시가 오가는 서비스들 (전자상거래, 전자메일, 사내문서)에 사용하기 힘들다. HTTPS는 SSL 레이어위에 HTTP를 통과 시키는 방식이다. 즉 평문의 HTTP 문서는 SSL 레이어를 통과하면서 암호화 돼서 목적지에 도착하고, 목적지에서는 SSL 레이어를 통과하면서 복호화 돼서 웹 브라우저에 전달된다.

간혹 HTTPS를 하나의 프로토콜로 인식하기도 하는데, HTTP와 SSL은 전혀 다른 계층의 프로토콜콜의 조합이다. HTTPS over SSL로 보는게 좀더 정확한 시각이다

HTTP와 다른점

  • HTTPS URL은 "https://" 로 시작한다. 기본 포트번호는 443이다. HTTP URL은 "http://" 로 시작한다. 기본 포트번호는 80이다.
  • HTTP는 평문 데이터를 기반으로 하기 때문에, 유저정보와 같은 민감한 정보가 인터넷 상에 그대로 노출된다. 이 정보는 수집되거나 변조될 수 있다. HTTPS는 이러한 공격을 견딜 수 있도록 설계돼 있다.
  • HTTPS는 인증서를 이용해서, 접속 사이트를 신뢰할 수 있는지 평가할 수 있다.
  • 일반적으로 HTTPS는 HTTP에 비해서 (매우 많이)느리다. 많은 양의 데이터를 처리할 경우 성능의 차이를 체감할 수 있다. 많은 웹 사이트들이 민감한 정보를 다루는 페이지 (로그인 혹은 유저정보) 페이지를 HTTPS로 전송하고, 기타 페이지는 HTTP로 전송하는 방법을 사용한다.

5. Restful API는 무엇인가?

  • RESTful은 일반적으로 REST라는 아키텍처를 구현하는 웹 서비스를 나타내기 위해 사용되는 용어이다.
    ‘REST API’를 제공하는 웹 서비스를 ‘RESTful’하다고 할 수 있다.
  • RESTful은 REST를 REST답게 쓰기 위한 방법으로, 누군가가 공식적으로 발표한 것이 아니다.
    즉, REST 원리를 따르는 시스템은 RESTful이란 용어로 지칭된다.

RESTful의 목적

이해하기 쉽고 사용하기 쉬운 REST API를 만드는 것
RESTful한 API를 구현하는 근본적인 목적이 성능 향상에 있는 것이 아니라 일관적인 컨벤션을 통한 API의 이해도 및 호환성을 높이는 것이 주 동기이니, 성능이 중요한 상황에서는 굳이 RESTful한 API를 구현할 필요는 없다.

RESTful 하지 못한 경우

Ex1) CRUD 기능을 모두 POST로만 처리하는 API
Ex2) route에 resource, id 외의 정보가 들어가는 경우(/students/updateName)

https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html


이번주 내용 정리

220731

오늘의 목표 :
-스프링 심화 2장 다듣기 / 시간당 1강.

  • WIL 적기
  • 발표과제 읽고 정리

스프링 심화

인증과 인가 차이 구분하기
인증 : 출입권한
인가 : 접근권한

Enum (열거형) : 특정한 값만 한정하여, 사용하고 싶다. (ex 남자여자)

java optional 사용이유 : null 에대해서 입력할 수있다.

#############################################################

220801

API 작성명세서 작성연습을 해봐야 한다.


스프링 심화 2-8강

패스워드 암호화 기능 구형


##스프링 심화 2-9,10강
인터페이스 : 구현은 하지않고 기능에 대한 것만 모아두는.
로그인, 로그아웃, 그리고 그것에 따른 상품조회

스프링 심화 2-11강

관리자

스프링 심화 2-12강

접근 불가 페이지 .

http 신호가
4로 시작하면 Client가 잘못
5로 시작하면 Server가 잘못
자세한 내용 : https://developer.mozilla.org/ko/docs/Web/HTTP/Status/403


제너릭 https://coding-factory.tistory.com/573

정규표현식 https://gh402.tistory.com/54?category=890133


CS스터디 준비완료
1. N VS NP
2. 알고리즘

#############################################################

220802


소셜로그인OAuth2

  • Optional에 대해 알아보자
    Java8에서는 Optional 클래스를 사용해 NPE를 방지할 수 있도록 도와준다. Optional는 null이 올 수 있는 값을 감싸는 Wrapper 클래스로
    출처: https://mangkyu.tistory.com/70 [MangKyu's Diary:티스토리]
  • Extract method 메소드 추출!/ 리펙터링할때 쓴다 .
  • 항목에 코드 -> IMPORT문 최적화

JWT 만드는데 이것을 참조하라 !!
https://velog.io/@jkijki12/Spring-Boot-OAuth2-JWT-%EC%A0%81%EC%9A%A9%ED%95%B4%EB%B3%B4%EB%A6%AC%EA%B8%B0
https://bcp0109.tistory.com/301


자바 정규표현식
https://staticclass.tistory.com/87
https://gh402.tistory.com/54?category=890133

@Configuration
스프링 기동시 자동적으로 시작

@Transactional(readOnly = true)가 멀까?
https://junhyunny.github.io/spring-boot/jpa/junit/transactional-readonly/

@RestController 어노테이션
api가 넘어 갈때 Body에 입력값을 이어준다. 안넣으면 templates로 간다.
예시) null값이 존재할때
Servlet.service() for servlet [dispatcherServlet] in context with path [] ..........


시큐리티 허용에 대해서
// 회원 관리 처리 API (POST /user/**) 에 대해 CSRF 무시
http.csrf()

            .ignoringAntMatchers("/user/**");

스프링 시큐리티에서 '권고'하고 있는 'BCrypt 해시함수'를 사용해 패스워드를 암호화하여 DB 에 저장(심화강의자료 2-1참조)
암호화 알고리즘을 "빈(Bean)" 으로 등록

@Bean
public BCryptPasswordEncoder encodePassword() {
return new BCryptPasswordEncoder();
}

############################################################

220803

@EnableWebSecurity 기본적인 웹보안을 활성화 하겠다.


스프링 시큐리티 참고 및 JWT 정리..

-------====
ResponseEntity vs ResponseStatus
헤더(header)에 내용 추가하기
https://joojimin.tistory.com/54

#############################################################

220804

토큰 참고.
https://github.com/DongHyunKIM-Hi/jwtSecurityPrac

@Getter
@Setter
@NoArgsConstructor >기본 생성자를 만들어줌
@AllArgsConstructor > 여기에 필드에 쓴 모든생성자만 만들어줌
https://velog.io/@tkaqhcjstk/AllArgsConstructor-NoArgsConstructor%EC%9D%98-%EC%9D%98%EB%AF%B8

@RequiredArgsConstructor > 생성자 주입(필드의 생성자를 생성)
https://velog.io/@developerjun0615/Spring-RequiredArgsConstructor-%EC%96%B4%EB%85%B8%ED%85%8C%EC%9D%B4%EC%85%98%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%9C-%EC%83%9D%EC%84%B1%EC%9E%90-%EC%A3%BC%EC%9E%85

@Transactional 개념숙지하기..
https://tecoble.techcourse.co.kr/post/2021-05-25-transactional/

스프링 시큐리티에 대하여..
https://00hongjun.github.io/spring-security/securitycontextholder/


yml, mysql 설정
https://velog.io/@ikerbm94/SpringBoot-MySQL-%EC%97%B0%EA%B2%B0-%EC%84%A4%EC%A0%95-application.yml


Authentication(인증 객체)
2가지 용도로 사용된다. 인증 용도 또는 인증 후 세션에 담기 위한 용도
1.인증시 id와 password를 담고 인증 검증을 위해 전달되어 사용
2.인증시 id와 password를 담고 인증 검증을 위해 전달되어 사용된다.

인증 후 최종 인증 결과(user 객체, 권한 정보)를 담고 SecurityContext에 저장되어 아래와 같은 코드로 전역적으로 참조가 가능하다.

Authentication authentication = SecurityContexHolder.getContext().getAuthentication()

#########################################################

220805

08/05 할일 :
테스트코드
심화강의 듣기

@ManyToOne
@OneToMany...
@ManyToMany
양방향 단방향..
@ManyToOne(fetch = FetchType.LAZY) // 엔티티끼리 연관관계
Lazy에대해 알아보자.. EAGER..
https://velog.io/@devsh/JPA-%EC%97%B0%EA%B4%80-%EA%B4%80%EA%B3%84-%EB%A7%A4%ED%95%91-OneToMany-ManyToOne-OneToOne-ManyToMany

프론트엔드에서 data type 요구하는 데이터를 뽑아주는 걸 연습해줘라..
데이터 핸들링을 많이 생각해야한다....


지난주차 과제 정보 / Spring Security에 대해서..
https://github.com/DongHyunKIM-Hi/jwtSecurityPrac

상속(implement vs extends)
https://velog.io/@hkoo9329/%EC%9E%90%EB%B0%94-extends-implements-%EC%B0%A8%EC%9D%B4


git branch 작성(깃 전략)
https://velog.io/@kw2577/Git-branch-%EC%A0%84%EB%9E%B5


관계형 데이터 베이스
https://opentutorials.org/module/4134/25259

mappedBy 가 뭘까?????????


220806

One to many
앞에가 엔티티(본인) 뒤에가 대상
만약 대상이 List라면 many
리스트가 없는 객체하나 라면 One


@Validated 유효성 검증


@RestController와 @Controller 차이
[ Controller로 View 반환하기 ]
전통적인 Spring MVC의 컨트롤러인 @Controller는 주로 View를 반환하기 위해 사용합니다. 아래와 같은 과정을 통해 Spring MVC Container는 Client의 요청으로부터 View
[ RestController ]
@RestController는 @Controller에 @ResponseBody가 추가된 것입니다. 당연하게도 RestController의 주용도는 Json 형태로 객체 데이터를 반환하는 것입니다. 최근에 데이터를 응답으로 제공하는 REST API를 개발할 때 주로 사용하며 객체를 ResponseEntity로 감싸서 반환합니다. 이러한 이유로 동작 과정 역시 @Controller에 @ReponseBody를 붙인 것과 완벽히 동일합니다.

출처: https://mangkyu.tistory.com/49 [MangKyu's Diary:티스토리]


!!JPA 연관관계

  • JPA 의 경우는 Enitity 클래스의 필드 위에 연관관계 어노테이션 (@) 을 설정해 주는 것만으로 연관관계가 형성됩니다!

(https://www.notion.so/74a0765c6bd945fba2335e22a2567b3c)


!! 페이징 및 정렬 설계
페이지네이션(페이징) = 우리가 원하는 정보를 일부분만 보여주는것
ex)_검색 apple 결과 40억개 >> 페이지 1~200개로 놔눠서 보여줌.
https://tecoble.techcourse.co.kr/post/2021-08-15-pageable/


!!테이블 설계 .
JPA 연관관계 더 나은 방식..
One to Many
Many to One
One to One
Many to Many

등등

AOP란
- AOP (Aspect Oriented Programming) 를 통해 부가기능을 모듈화
- '부가기능'은 '핵심기능'과는 관점(Aspect), 관심이 다름
- 따라서 '핵심기능'과 또옥~!! 분리해서 '부가기능' 중심으로 설계, 구현 가능

그래서 핵심기능 전에 부가기능 을 붙일 때 쓰고 @Aspect라는걸 붙여야 빈이 인식함.

-https://teamsparta.notion.site/2-3-AOP-Transaction-38021945fef04250b1fd603a30e44c1f

-+---------------------

트랙잭션 : 데이터 논리적 실행단계, ACID (원자성, 일관성, 고립성, 지속성)는 데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질을 가리키는 약어
db입장에서 최소단위의 작업 .


DB 운영 방식 (Primary, Replica)
Primary 쓰기전용
Replica 읽기전용.
db를 여러대를 운영


http 상태코드 종류
1. 2xx Success
2. 4xx Client Error
3. 5xx Server Error


스프링 Global 예외 처리 방법
@ControllAdvice / 글로벌한 ExceptionHandler를 처리해준다.
@RestControllAdivce / json형태의 Responsebody를 처리..


Form-Data가 뭘까 란 궁금증 (S3 이미지 URL 넣을때 쓰드라구..)

FormData는 폼을 쉽게 보내도록 도와주는 객체입니다. 이름을 보고 유추하셨듯이 FormData 객체는 HTML 폼 데이터를 나타냅니다.


다음주의 목표

  • 매일 TIL 작성해서 반영하기
  • 테스트코드 및 깃에 대해서 자세히 알기 ..
profile
HelloWorld에서 RealWorld로

0개의 댓글