물음표 살인마의 개발블로그

개인 프로젝트

주식정보 가져와서 보기좋게 출력하기 [완료] - 221029

BEstyle 2022. 10. 17. 23:10

Aim:

회사를 다닐때 코로나 관련해서 마스크나 진단키트 대란이 일어났었다. 그 당시 들었던 생각은, 뉴스를 계속 보면서 현재 상황을 조금 더 잘 알았다면 미리 준비할 수 있었을거 같았다.

또한, 해외 주식을 시작하면서 느낀점은 국내주식이 어느정도 해외주식 트랜드에 맞춰가는 느낌이 들었다.

이러한 정보들을 정기적/선택적으로 받을 수 있으면 좋았을 것같다.


Hypothesis:

기능 1. 해당 URL과 회사의 주가 정보를 가져와서 텍스트 파일에 저장.

기능 2. 저장한걸 가져와서 분석과 출력에 사용.


Method:

[기능1]

1. 특정 시간에 Jsoup으로 해당 URL로 들어가 내용을 가져온다. (아직 기술이 부족....)

2. 잘 손질한다. (데이터 전처리)  v(221021)

3. 경로안에 텍스트 파일이 없으면 새로 만들고, 값을 넣는다. (구분자 "  ") v(221021)

4. 파일이 있으면, 해당 파일 정보를 불러와서 기존 넣으려는 정보와 중복확인(Keyfield = CompanyName + Date)을 한다. v(221021)

5. 문제가 없으면 정보를 넣는다. v(221021)

 

[기능2]

1. 경로안에 텍스트 파일에서 정보를 가져온다. v(221022)

2. Companies[] 객체배열을 가져온 데이터 갯수 크기만큼 만든다. (문제가 없으면 구분자 "  "로 할 예정)  v(221022)

3. 이런식으로 객체 배열에 하나씩 넣는다.  v(221022)

4. 객체 배열로 날짜별 / 회사별로 정렬 + 등등)   v(221025)

5. 정렬된 데이터를 출력.   v(221025)

 

-추가

  • URL을 작성하면 해당 주식 페이지로 이동해서 내용을 가져오고, 다른 텍스트 파일에 해당 리스트를 추가해서 저장.(중복확인) (221023)
  • 배운 Test Annotation 사용해보기. (221023)
  • h2 Database 이용해서 한번 해보기. (221024)

Progress Notes:

221022:

이전 애니팡 프로젝트를 하면서, 내가 짠 코드들을 수정해야할때 굉장히 힘들었었던 기억이 있다. 직접 만드는 것보다, 나중에 수정할 일이 생겼을때, 그 코드들을 이해하는 시간이 오래걸렸고, 이번에는 최대한 길게, 써보도록 노력했고, //코멘트를 자주 이용해서 Input, process, work를 적어놓으려고 노력해봤다. 또한 클래스 이름, 메서드 이름들을 상세하게 작성함으로써 코드를 작성할때는 불편하더라도 이해하는데는 오래걸리지 않도록 해보았다.

221023:

Jsp, Servlet을 새로 배우면서 개발할 시간이 없다.. JAVA에 대해 한번씩 더 보면서 확실히 개념을 잡으려고 하고 있고, 새로운 것들을 배우고 이해하면서 이 프로젝트에 적용, 활용하며 연습할만한게 있는것 같다.

221025:

이전 TOY프로젝트를 하면서 써먹었던 코드들을(Sorting) 그대로 가져와서 조금 변형해서 사용했다. 저번주부터 배우던 jsp 수업내용을 복붙해서 어떻게든 적용해보려 했지만.. 모듈로 만들어버리는 순간 거의 모든 클라스에 에러발생.. 이유는 모르겠다.. 좀 더 배우고 해보자.......

예상 시나리오:

  • 회원가입부분만 copy해와서 (web/, /css, /icon, /img, /WEB-INF) 쪼금 변형(?)한 후, URL을 받는다. (유저 입력)
  • URL을 받으면 해당 사이트를 들어가서 회사이름을 검색.
  • 회사이름과 URL을 txt파일에 저장하고, 저장되있는 회사이름과 URL을 불러와 웹에 띄운 페이지에 유저를 redirect한다.

첫번쨰 예상시나리오에서 패키지를 그냥 모듈로 만들면 될줄 알았다... 근데 에러들이 생기고, 뭔가 건드릴수록 더 이상해지는것 같다... 일단 롤백해서 건드리지 않기로......추가로, Web관련해서 진도가 아직 덜 나갔지만, 한가지 확실한건, 웹에서 뭘 구현하든 어쩄거나 URL을 받는다는것. 그러므로 URL을 받았을떄, 작동할 것들을 작성했다. 추가로, 현재는 txt파일에 저장하고 있지만, 나중에는 database를 이용할걸 알기에(아닐수도..?) 데이터베이스에 저장하는 메서드들을 최대한 보수가 편하게 바꿔놨다.

221026:

강사님이 수업시간에 올려주신 예제 파일에서 파일들(css, icon, footer,header.jsp 등)을 긁어왔다. 긁어온 후, 프로젝트에 필요없는 것들은 지워버리고, 적당히 내 입맛에 맞게 변형을 했다.

아주 적당하다. 댄디하고 깔끔한게 내 스타일이다.

221027:

강사님의 예제파일을 봐도 잘 모르겠다. Web에서 받는 request 값을, java언어로 처리한 후, sql언어로 h2 db에 넣는건데, jsp를 써야하는지 servlet을 써야하는지도 모르겠고, 연결 또한 어떻게 해야하는지 감이 안온다. 스케일이 너무 커진 느낌이다.

새로운 프로젝트를 만들었다. 우선 기본부터 해야할 것같아서, 차근차근 하나씩 해보기로했다.

1. 웹에서 받은 input을 "A" 만 붙여서 그대로 웹에 출력

2. java에서 db로 쓰기

3. 웹에서 받은 input을 java를 거쳐, db로 넣기

4. db에 있는 값을 java를 거쳐 웹으로 출력하기.

포맷은 일단 신경안쓰고 출력만 신경썼더니 성공! 뿌듯하다!

이제 어떤식으로 작동하는지 알았으니, 남은건 시간싸움이다. 내일부터 Spring을 배우게 되는데, 이번주안에 마무리를 지어야겠다.

웹에서 구현한 기능은 총 4가지다.

1. URL을 입력하여 주식정보 가져올 회사목록에 추가.

2. 주식정보 가져올 회사 목록 총 출력

3. 클릭으로 등록되있는 회사 목록들의 URL들을 타고, 주식 정보를 가져와서 중복확인하고 데이터베이스에 입력

4. 지금까지 저장된 모든/회사별 주식정보 출력.

//TODO : 아마 3번과 4번은 합쳐서 만들어놔야할 것 같다.

//TODO : 뒤로가기 버튼, 메세지 팝업 등, 필요없는것들은 지우고, 필요한 것들은 넣는 작업.

내일이면 마무리를 지을 수 있을것 같다.

221029:

html을 조금 만져보고 수정을 해봤다. 이제 어떤식으로 작동하는지 감이 잡히는 것같다. 추가로 데이터를 분석하여 결과를 보여주는 기능을 넣어서, 프로젝트 답게 만들고 싶지만, 아직은 조금 이른것 같아 나중에 다시 돌아와서 해봐야겠다.


Estimated Result:

---------------------------------------

회사별 오름차순

회사        날짜             저가     고가

------------------------------------------

삼성전자 2022.10.19  55000 50000 .....

삼성전자 2022.10.20  56000 51000 .....

------------------------------------------

카카오     2022.10.19  55000 50000.....

카카오     2022.10.20  56000 51000.....

-------------------------------------------

.....................

 

-------------------------------------------

 


Code:

https://github.com/724thomas/DailyStockCrawling.git


Conclusion:

 

기능1

 

기능1
기능2
기능 3
기능4

 

 

기능4 전체

 

기능4 카카오

10월 29일 결과물

 

 


Bibliography:

 

[자바]

[Java] - Jsoup을 이용한 크롤링 (feat. 인프런)

https://zzang9ha.tistory.com/m/337 -(주발2 2021.5.11)

[Java] - Jsoup 사용하여 크롤링

https://jul-liet.tistory.com/209 -(랭쥬 2021.7.13)

자바 텍스트(TXT) 파일 read/write

https://blog.naver.com/since201109/222481527289 (SoSoCEO 2021.8.23)

[Java] 자바 HashMap 사용법 & 예제 총정리

https://coding-factory.tistory.com/556 (코딩팩토리 2020.5.29)

자바 객체 배열 다루기

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=ndb796&logNo=221201655333 - (안경잡이개발자 2018.2.5)

자바 객체 배열(Arrays of Objects) 자바 강좌 6-3

https://digiconfactory.tistory.com/entry/%EC%9E%90%EB%B0%94-%EA%B0%9D%EC%B2%B4-%EB%B0%B0%EC%97%B4 -(코딩각 2020.7.20)

객체 배열이란(클래스를 배열로 선언하기)

https://peonyf.tistory.com/5 -(PeonyF 2020.1.3)

[Java] 객체 [Object] List 중복된 ID 목록만 뽑기 (추출)

https://velog.io/@kdhyo/Java-%EA%B0%9D%EC%B2%B4Object-List-%EC%A4%91%EB%B3%B5%EB%90%9C-ID-%EB%AA%A9%EB%A1%9D%EB%A7%8C-%EB%BD%91%EA%B8%B0%EC%B6%94%EC%B6%9C (kdhyo 2021.6.13)

[JAVA] 자바 인터페이스란?(Interface) 이글 하나로 박살내자

https://limkydev.tistory.com/197 (Lim-ky 2019.12.10)

[JAVA] Quartz job Scheduler 기본 사용법 정리

https://byul91oh.tistory.com/275 (꼬바리 2021.05.24)

Quartz Tutorials: Lesson 5

http://www.quartz-scheduler.org/documentation/quartz-2.3.0/tutorials/tutorial-lesson-05.html

Quartz Tutorials: Lesson 6

http://www.quartz-scheduler.org/documentation/quartz-2.3.0/tutorials/tutorial-lesson-06.html

crontab에 java class 등록하여 사용

https://yjh5369.tistory.com/entry/crontab%EC%97%90-java-class-%EB%93%B1%EB%A1%9D%ED%95%98%EC%97%AC-%EC%82%AC%EC%9A%A9 (노란아부지 2019.07.31)

Quartz Job Scheduler란?

https://blog.advenoh.pe.kr/spring/Quartz-Job-Scheduler%EB%9E%80/ (Frank's blog 2019.09.07)

Quartz 사용법 공유

https://velog.io/@tjeong/Quartz-%EC%82%AC%EC%9A%A9%EB%B2%95-%EA%B3%B5%EC%9C%A0 (tjeong 2021.07.11)

Getting Started : Quartz with Java - Quartz & Cron

https://www.youtube.com/watch?v=uDkleDfmvBg (Marco Behler 2018.07.17).

Java에서 현재 작업 디렉토리를 얻는 방법

https://www.delftstack.com/ko/howto/java/how-to-get-the-current-working-directory-in-java/ (DelftStack 2020.11.22)

[Java] 2차원 배열 값 출력하는 2가지 방법 (반복문, Arrays.deepToString)

https://hianna.tistory.com/511 (hi.anna 2021.04.16)

[Java] Spring Boot - H2 DB사용 방법

https://blog.naver.com/PostView.naver?blogId=dktmrorl&logNo=222007335075 (seek 2020.06.21)

[ToyProject] JDBC-Java-h2 회원관리 프로그램

https://velog.io/@yeppi/ToyProject-JDBC-Java-h2-%ED%9A%8C%EC%9B%90-%EA%B4%80%EB%A6%AC-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8 (yeppi 2022.05.25)

 

 

[파이썬]

https://wikidocs.net/85739 - (주발2 2021. 5. 11.)

 

 

'개인 프로젝트' 카테고리의 다른 글

[스프링 부트] 대학교 도서관  (1) 2022.12.11
[Spring] 유저 주문내역  (0) 2022.11.11
(중단)  (0) 2022.11.02
ATM 기계  (0) 2022.10.30
[완료]애니팡! 자동화 [Java / Python] - 221104  (0) 2022.10.17