환경 세팅

 

jupyter notebook 설치 - 아나콘다에서 제공하는 하나의 툴

※ 파이썬 설치가 되어있어야 함 ※

 

기존에 설치되어 있던 anaconda3 를 삭제하고 진행

기존 설치 Anaconda 삭제

 

Anaconda 다운로드를 위해 접속

 

 

Distribution | Anaconda

Anaconda's open-source Distribution is the easiest way to perform Python/R data science and machine learning on a single machine.

www.anaconda.com

 

Skip registration 클릭

 

installer 다운로드

 

data_set 다운로드

data_set-master.zip
2.34MB

 

출처 : https://github.com/ChoHeeWon00/data_set

 

GitHub - ChoHeeWon00/data_set

Contribute to ChoHeeWon00/data_set development by creating an account on GitHub.

github.com

 

파이썬 기본 문법

arr = [10, 20, "안녕"];

print(arr);

print(type(arr));

for i in arr :
    print(i);

print("=" * 20);
dic = {};
dic['num'] = "아무거나";
print(dic);

for k, v in dic.items():
    print(k, " : ", v);

arr = 100;
print(type(arr));

while arr < 103:
    arr += 1;
    print( arr );


for i in range(5):
    print(i);


for i in range(1,5):
    print(i);


bool = True
if bool == True:
    print("같다");

bool = 100;
if bool > 90:
    print("90보다 크다")
elif bool > 80:
    print("80보다 크다")
else:
    print("그 외의 값")

def test(a, b, c):
    print("test 호출");
    arr = [10, 20, 30];
    arr.append(a);
    arr.append(b);
    arr.append(c);
    return arr;

list_num = test(10, 1.123, "안녕");
print(list_num);

 

Anaconda3 설치

Next > I Agree > Just Me(recommended) 체크 후 Next > Next > Install

 

깃허브에서 받은 zip 파일 압축해제 및 디렉토리 이름 data_set 으로 변경

 

- Dataset 구하는 사이트 -

 

Find Open Datasets and Machine Learning Projects | Kaggle

Download Open Datasets on 1000s of Projects + Share Projects on One Platform. Explore Popular Topics Like Government, Sports, Medicine, Fintech, Food, More. Flexible Data Ingestion.

www.kaggle.com

 

Dataset 구하는 사이트 - 캐글

 

Jupyter Notebook 검색해서 실행 ( anaconda3 가 설치되었다면 검색될 것임 )

 

Jupyter Notebook 이 실행된 모습 ( 이제부터 축약해서 jupyter 라고 칭하겠음 )

 

Jupyter 기본 경로 : C 드라이브 > 사용자 > 사용중인 home 디렉토리

 

기본 경로를 변경할 것임

 

 

 

메모장으로 열기

 

workspaces_dir 에 내가 만든 폴더를 설정

 

Jupyter Notebook 마우스 우측 클릭 > 속성 > 바로가기 탭에서 대상의 위치를 내가 만든 디렉토리로 변경 > 적용 > 확인 후 Jupyter 재시작

 

홈 디렉토리가 변경되었음

 

마우스 우측클릭하여 새 폴더 생성 및 폴더 더블클릭하여 접속

 

New > Notebook 을 클릭하여 새로운 파일 추가

 

리눅스의 쉘과 사용법이 비슷.... ( esc 누른 뒤 m 을 누르면 해당 셀이 파이썬 코드를 작성하는 부분이 아닌 Markdown 용도로 바뀐다 - 설명은 Mardown 으로 바꿔서 작성하였음 ) > pandas 라이브러리를 가져와 pd 이름으로 별칭하고 해당 라이브러리 내장 함수인 read_csv 를 사용하여 1.pandas.csv 파일을 읽어서 출력함

 

특정 자료만 뽑아오는 방법 2가지

 

데이터 프레임 형태로 값을 가져오는 방법 : 대괄호 2개로 묶어서 출력하기

 

데이터 슬라이싱 : 데이터는 0번부터 시작.... 1부터 3번 이전까지의 데이터를 슬라이싱, 처음부터 3번 전까지의 데이터를 슬라이싱, 1번부터 끝번까지 데이터를 슬라이싱

 

loc 함수를 사용하여 1 행부터 3 행까지 가져올건데 name 컬럼의 값만 가져오겠다

 

데이터 프레임 형태로 출력

 

아래와 같이 표현할 수도 있음

 

여러 컬럼의 값도 꺼내올 수 있음

 

모든 행의 name ~ grade 컬럼의 값을 슬라이싱하여 가져오겠다

 

컬럼 명시를 생략하여 모든 컬럼에 대한 값을 가져올 수도 있음

 

grade 의 값이 A 이면 true 출력, 아니면 false 출력..... > 조건식을 넣어서 grade 컬럼의 값이 A 인 데이터만 출력할 수 있다

 

data 를 drop ( drop 을 사용한 값을 다시 자기 자신에게 대입해줘야 적용됨, 실제로 데이터가 삭제된 것은 아니기 때문 )

 

inplace 옵션을 사용해 바로 자기 자신에게 적용시킬 수도 있다

 

axis 를 사용해서 데이터를 drop

 

데이터 여러 방식으로 꺼내와보기

 

컬럼과 값, 자료형 꺼내오기

 

isin() 을 사용하여 데이터 중 특정 값을 포함한 데이터를 출력 > index 를 변경

 

변경한 index 값으로도 값을 출력할 수 있다

 

그냥 저장하게 되면 ipynb 확장자로 저장되는데 이 파일은 Jupyter 를 사용해야 읽을 수 있는 파일이므로 필기같은 내용은 HTML 파일이나 PDF 파일로 변환하여 저장할 수 있다

 

1.pandas 사용법.html
0.34MB

 

내용 정리 파일

 

 

 

 

 

 

 

 

 

 

실습 예제

1.Quiz.pdf
1.11MB

 

1.Quiz-풀이.pdf
1.18MB

 

비밀번호는 댓글

 

 

 

 

 

예제 풀이

example1.html
0.29MB

 

 

 

 

 

 

 

 

 

 

 


 

머신러닝 예시

데이터의 전처리 과정이 필요하나, 현재 생략된 상태

( 전처리 과정을 진행하기 위해 위의 기본 코드들을 학습해야 한다 )

 

Survived : 생존 여부

Pclass : 티켓 클래스 ( 1등석, 2등석, 3등석 )

Sex : 성별

Age : 나이

SibSp : 동반한 형재자매와 배우자의 수

Parch : 동반한 부모, 자식의 수

Fare : 티켓의 요금

표본이 들어있는 csv 파일을 불러온 뒤 컬럼 값을 얻고자 하는 값, 속성(변수) 값으로 나눠서 X 와 y 변수로 저장한다

 

데이터 표본을 나눠주는 sklearn.model_selection 에서 제공하는 train_test_split 을 import 한 뒤에 전체 표본 중 80% 는 머신 러닝에 사용하고 나머지 20% 의 데이터는 러닝된 머신의 테스트 용도로 사용한다 ( 정확성 측정 ) > .shape 를 통해 데이터의 갯수를 확인할 수 있다 > sklearn.ensemble 에서 제공하는 RandomForestClassifier 을 import 한 뒤 r 이라는 변수에 RandomForestClassifier() 를 담아 .fit() 을 사용하여 훈련시킬 알고리즘의 test 값을 넣어준다 > 그 후 테스트용으로 분리시켰던 20% 의 데이터를 .score() 에 담아 예측에 대한 정답률이 어느정도 나오는지 확인한다 > 확인 결과 : 78.7709...%

 

.predict() 를 통해 결과 값을 예측하여 출력하게 만들 수도 있으며 해당 값을 y_test( 살았는지? 죽었는지? ) 와 직접 비교해볼 수도 있다. > 또한 임의의 값을 집어넣어 러닝된 머신에 값을 .predict 로 집어넣어 결과 값을 받아 처리해볼 수도 있다

 


 

728x90

 

 

 

 

 

매핑 어노테이션 종류

어노테이션 설 명
@Column 컬럼 매핑
@Temporal 날짜 타입 매핑
ex) @Temporal(TemporalType.TIMESTAMP)


@Enumerated enum 타입 매핑
ex) @Enumerate(EnumType.STRING)
@LOB BLOB, CLOB 매핑 ( 대형 오브젝트를 의미 )
( String 자료형을 @Lob 어노테이션을 사용해 매핑하면 DB 에는 자동으로 CLOB 으로 매핑된다 )
@Transient 특정 필드를 컬럼과 매핑하고싶지 않은 경우 사용
( 데이터베이스에 저장 X, 조회 X )
주로 메모리상에서만 임시로 어떤 값을 보관하고 싶을 때 사용

 

 

 

 

 

@Column 속성

속성 설명 기본 값
name 필드와 매핑할 테이블 컬럼 이름

ex) @Column(name = "user_id")
객체의 필드 이름
insertable
updateable
등록, 변경 가능 여부

ex) @Column(updatable = false)
TRUE
nullable (DDL) null 값의 허용 여부를 설정
false 로 설정하면 DDL 생성 시에 not null 제약 조건이 붙는다

ex) @Column(nullable = false)
 
unique (DDL) @Table 의 uniqueConstraints 와 같지만 한 컬럼에 간단히 유니크 제약조건을 걸 때 사용

ex) @Column(unique = true)
( 유니크 제약조건의 이름이 랜덤으로 생성되므로 잘 사용하지 않는다 )
 
columnDefinition (DDL) 데이터베이스 컬럼 정보를 직접 줄 수 있다

ex) @Column(columnDefinition = "varchar(100) default 'EMPTY'")
=> varchar(100) 으로 컬럼 생성, 기본 값은 'EMPTY' 로 지정된다
필드의 자바 타입과 방언 정보를 사용
length (DDL) 문자 길이 제약조건, String 타입에만 사용한다

ex) @Column(length = 10)
=> varchar(10) 으로 컬럼이 생성된다
255
precision,
scale (DDL)
BigDecimal 타입에서 사용한다 ( BigInteger 도 사용 가능 )  

 

 

 

 

 

@Enumerated 속성

※ 주의 ! ORDINAL 은 사용 X ( 기본 값이기 때문에 변경해서 사용!!! ) ※

속성 설명 기본 값
value • EnumType.ORDINAL : enum 순서를 데이터베이스에 저장

• EnumType.STRING : enum 이름을 데이터베이스에 저장

ex) @Enumerated(EnumType.STRING)
EnumType.ORDINAL

 

 

 

 

 

@Temporal 속성

JAVA 에서 자료형을 LocalDate, LocalDateTime 을 사용하는 경우는 자동으로 매핑해준다

즉, 속성 생략이 가능 ( 최신 하이버네이트 지원 )

LocalDate : DB 의 DATE 와 매핑

LocalDateTime : DB 의 TIMESTAP 와 매핑

속성 설명 기본 값
value TemporalType.DATE : 날짜, 데이터베이스의 date 타입과 매핑
( 예 : 2024-05-20 )

TemporalType.TIME : 시간, 데이터베이스 time 타입과 매핑
( 예 : 10:57:23 )

TemporalType.TIMESTAMP : 날짜와 시간, 데이터베이스 timestamp 타입과 매핑
( 예 : 2024-05-20 10:57:23 )
 

 

 

728x90

 

 

 

 

 

연습 프로젝트

11.Quiz게시판.pdf
0.79MB

 

11_Quiz게시판-풀이.pdf
2.00MB

 

비밀번호는 댓글

728x90

 

 

 

 

 

웹소켓 ( Web Socket )

8_websocket 프로젝트 생성

프로젝트 버전 변경, 한글 인코딩 설정, 메이븐 프로젝트 업데이트, 이전에 만들었던 프로젝트와 /root 경로 겹치면 Servers > server.xml 에서 이전 경로 주석처리까지 진행

 

Spring WebSocket 라이브러리 버전 아무거나 추가 >> pom.xml 에 추가한 뒤 버전을 현재 사용 스프링 버전으로 변경해준다

 

데이터가 넘어올때 json 형식으로 넘어오므로 Jackson Databind 라이브러리 추가 ( 2.12.1 버전 라이브러리 추가 )

 

com.care.root 하위에 TestSocket.java 파일 생성하여 소켓에 대한 설정을 해줄 것임

 

servlet-context.xml > 하단에 Namespaces 클릭 > websocket 체크 > Source 로 이동

Namespaces 에서 websocket 활성화

 

servlet-context.xml 작성 >> /chat 경로로 요청하면 ts 를 바라보라는 의미!!!

 

TestSocket.java 클래스에서 TextWebSocketHandler 상속받기

 

Test.socket 에서 위 메소드 3가지 오버라이딩

 

afterConnectionsEstablished() : 클라이언트가 연동되면 실행

handleTextMessage() : 메세지를 받으면 실행

afterConnectionClosed() : 연결이 끊겼을 경우 실행

 

우선은 연결 시, 끊길 시, 메세지 받을 시 각 내용을 출력해볼 것임

 

HomeController.java 에 기본 경로 생성

 

test_socket.jsp 에 코드 작성 ( 상담사 연결 페이지를 출력하는 버튼 )

 

 

rec_data : 내용을 수신하기 위한 div

send_msg : 데이터를 보내기 위한 용도의 textarea

socket.jsp 작성

 

정상적으로 출력되는 것 확인

 

socket.jsp 에서 jquery 사용할 것이므로 CDN 값 추가

 

 

wsUri : 웹소켓 경로 설정 ( /chat 경로가 아까 servlet-context.xml 에서 설정한 경로 )

 

스크립트 작성

onMessage : 서버로부터 받은 값을 여기에 저장하겠다

onclose : 서버가 끊기면 작동할 로직

 

sendBtn 을 클릭하면 sendMessage() 함수를 실행하고 send_msg 의 값을 비워라 ( 텍스트 박스 안에 입력된 값을 비우기 )

 

sendMessage() 함수 정의 ( socket 으로 send_msg 의 값을 보내라 )

 

메세지가 들어올 경우 ( onMessage 함수 ) 와 연결이 끊길 경우 ( onClose 함수 ) 정의

 

접속 테스트, 메세지 전송 테스트

 

TestSocket.java 에 넘어온 메세지를 연결된 WebSocketSession 에게 전송한다 ( 지금은 자기 자신한테만 보내는 상태이며 제대로 값을 모든 세션에게 전송하려면 연결된 session 들을 배열에 담아서 반복문으로 돌려서 전송해야한다 )

 

session 을 List 로 받아 연결되면 List 에 add 로 세션 값을 저장

 

메세지가 들어오면 세션 값을 저장해놓은 List 를 반복문으로 돌려 메세지를 전송한다

 

정상적으로 모든 세션에 메세지가 전송되는 모습

 

HomeController.java 에서 test_socket 경로로 접속되면 session 값을 설정 >> 이 세션 값을 가져와서 유저를 나눌 것임 ( 추후에는 웹 사이트 아이디를 세션으로 설정하면 된다 )

 

 

일반 Session 의 값을 웹 소켓 session 에서 가로채서 사용하겠다는 의미

bean 에 추가한 경로 : org.springframework.web.socket.server.support.HttpSessionHandshakeInterceptor

 

위 작업을 진행해주지 않으면 httpsession 의 값과 websocket 의 session 의 값을 서로 다른 세션이기 때문에 httpsession 을 설정해줬다 하더라고 websocket 의 session 에서는 해당 값을 꺼내서 확인할 수 없다.

 

메세지가 들어올 시 WebSocketSession 의 Attribute 값을 map 에 담아 저장한 뒤 해당 map 에 설정해둔 name 키의 값을 사용해서 누가 보낸 메세지인지 출력 ( getPayload() 메소드는 현재 들어온 메세지를 출력 )

WebSocketSession 의 getAttributes() 메소드는 반환 값을 Map 형태로 돌려준다

>> 위 방식대로 진행하면 메세지를 출력할 때 A 가 입력한 메세지가 B와 C 에게 도착할 때 B와 C 는 자신이 보낸 메세지로 보이게 되므로 보낸 사람의 이름으로 메세지가 도착하는 로직이 추가로 들어가야 한다

 

socket.jsp 에서 엔터를 입력하면 메세지가 전송되게 설정

엔터 값 == 13

 

 

728x90

'BE > Spring' 카테고리의 다른 글

[Spring] 연습 프로젝트  (1) 2024.05.17
[Spring] URL 로 데이터 넘겨받기  (0) 2024.05.16
[Spring] Ajax, RestController  (0) 2024.05.16
[Spring] 스케쥴러 ( Scheduler )  (0) 2024.05.16
[Spring] 이메일 전송 API, 이메일 인증 구현  (0) 2024.05.16

 

 

 

 

 

 

URL 로 데이터 넘겨받기

넘겨받고자 하는 URL 데이터를 {} 로 받아서 처리하며 해당 값은 @PathVariable 어노테이션으로 받아 처리한다

@PathVariable 어노테이션 뒤에는 자료형과 URL 로 넘어온 값을 받을 변수 이름을 지정해주면 된다

 

 

728x90

'BE > Spring' 카테고리의 다른 글

[Spring] 연습 프로젝트  (1) 2024.05.17
[Spring] 웹소켓 ( Web Socket )  (1) 2024.05.17
[Spring] Ajax, RestController  (0) 2024.05.16
[Spring] 스케쥴러 ( Scheduler )  (0) 2024.05.16
[Spring] 이메일 전송 API, 이메일 인증 구현  (0) 2024.05.16

 

 

 

 

 

Ajax, RestController

프로젝트 생성 및 버전 변경, 한글 인코딩 설정 후 메이븐 프로젝트 업데이트까지 실행할 것

 

경로설정

 

jsp 파일 생성하여 작성

 

ajax 를 사용하지 않으면 전체 페이지가 다시 요청되어 로딩된다...!!

ajax 를 사용하면 페이지 전체를 요청하는게 아닌 데이터만 요청한다

 

ajax 사용할 경로 추가

 

ajax01.jsp 파일 생성해서 코드 작성 후 테스트

 

>> 페이지가 완전 로딩되지 않고 요청에 return 되는 값만 출력된다!!!

 

경로 추가 ( @ResponseBody 태그를 사용해 return 값이 jsp 파일이 아닌 데이터 형식으로 반환하는 메소드임을 선언!! )

 

ajax 를 사용하여 data 매개변수로 응답 데이터를 저장한뒤 span 태그의 내부 html 을 데이터 값으로 변경

 

 

 

 

 

데이터를 json 형식으로 보내주기 위해 라이브러리 추가

2.9.5 버전 라이브러리 추가

 

라이브러리 추가

 

DTO 클래스 생성 >> 변수 선언 및 getter / setter 생성

 

Controller 에서 데이터 받아 처리하는 코드 작성

 

ajax03.jsp 작성 ( 데이터 json 형태로 넘겼다가 받아와서 값 처리 )

 

넘어오는 값을 DTO 가 아닌 Map 으로 담아서 처리할 수도 있음

Map 으로 담아서 처리

 

결과 확인

 

 

 

 

 


 

 

 

 

 

RestController 사용

@Controller : 페이지를 return 하는 컨트롤러

@RestController : 데이터를 return 하는 컨트롤러

 

Controller 작성

 

ajax04.jsp 작성

 

jquery 를 사용하여 ajax 를 사용

 

ajax04.jsp 를 출력하기 위해 HomeController 에 경로 설정

 

※ 전달받는 값이 json 형식이 아니라 text 형식이라 오류가 발생했음!!! ※

※ text 형식을 반환할거면 produces 값에 application/text 로 변환해주면 되는데 일단은 Map 에 키와 값으로 담아서 전송 ※

 

json 형태로 전송

 

응답으로 넘어온 데이터의 result 키를 확인

 

코드 실행
728x90

 

 

 

 

 

Scheduler

Scheduler 설정하는 방법

 

위와 같이 설정하면 Scheduler 설정은 끝 ( 10 초마다 한번씩 반복 )

 

시간 설정은 cron 의 값으로 설정 >> google 에 Scheduler cron 검색하면 시간 설정 값 확인할 수 있음

728x90

 

 

 

 

 

이메일 전송 API, 이메일 인증 구현

 

Spring Context Support 라이브러리 버전 아무거나 선택해서 추가 >> 현재 사용중인 스프링 버전으로 변경

 

라이브러리 추가할 것임 ( JavaMail API JAR, JavaMail API )

 

1.5.4 버전 라이브러리 추가

 

1.5.3 버전 라이브러리 추가

 

google 계정으로 발송해볼 것임 >> google 로그인 후 Google 계정 관리 클릭

 

파일 세팅

 

Mailconfig 파일 작성 ( 비밀번호 칸에는 앱 비밀번호가 들어가야 한다 )

 

- 앱 비밀번호 설정하기 -

앱 비밀번호 설정하기 >> 앱 이름 설정 후 만들기 클릭 >> 생성된 앱 비밀번호를 setPassword 부분에 넣어준다

 

sendmail 경로로 접속 시 메일을 보냈습니다. 출력되게 설정

 

Service 쪽으로 받을 메일 주소, 제목, 내용을 전달

 

MailServiceImpl 작성 후 테스트

 

sendmail 경로로 접속하면 정상적으로 메일이 발송된다

 

메일 전송된 것 확인

 

 

 

 

 

이제 메일의 내용을 html 형식으로 보내볼 것임

Controller 에 HTML 형식으로 메일 보내는 것 추가

 

Service 에서 text 형식이 아니라고 명시한 뒤 메일 다시 전송해봄 ( 이미지는 구글에 검색해서 나온 이미지주소를 아무거나 사용했음 )

 

html 형식으로 메일 정상적으로 전달되는 모습!!!

 

 

 

 

 

이메일 인증을 만들어볼 것임

Controller 에 경로 추가

 

auth.jsp 작성

 

Controller 에 경로 추가

 

Service 에 랜덤 수 생성 코드 추가, session 을 발급

 

Controller 에 이메일 인증 내용을 작성하여 아까 만들어둔 sendMail02 메소드를 사용하여 이메일 전송 ( a 태그 안에 랜덤으로 생성한 키를 userId 값으로 넘겨준다 )

 

이메일 전송 후 확인 ( 이동 경로도 정상적으로 들어오는지 확인 )

 

세션의 값과 파라미터로 넘어온 값이 같은지 확인하는 코드 작성 후 확인

 

확인

 

 

728x90

+ Recent posts