게시판 만들기
목적 ::: 학습용으로 만든 게시판
작업환경 ::: win 10 pro 64bit,intel(R) Core(TM) i7-9750H @ 2.60 Gz, RAM 16GB, 무선랜(WIFI)
사용언어 ::: JAVA,SQL,JSP,HTML,JS
사용 program ::: Eclips,SqlDeveloper, Oracle11g
사용 tool 및 라이브러리 ::: -SPRING4, MAVEN, Tomcat 9.0, oracle 11g, mybatis, log4j, common-io, thumnail,등등
MVC 패턴
작업하면서 느낀 문제점들
-컨벤션이 없다 보니 처음에는 작업이 빨랐지만 조금만 복잡해지면 해매었다. 작업 효율이 떨어지고 조그마한 기능도 어떻게 처리할지 어떤게 맞는 것인지 해매었다.(테이블은 어떻게 할지, 이미지는 어느 경로에 저장할지, 썸네일은 저장할지말지 등등) URL에 통일성이 없었다. 해결책 ::: REST API
-어떠한 기능을 구현할 때 서버(서비스)에서 처리하는 방법과 DB에서 처리하는 방법, JS로 클라이언트에서 처리하는 방법 -여러가지 방법이 있는데 어떤것이 작업 능력이나 효율성이 높은지 모르겠다. 해결책 ::: REST API, 리엑티브 스프링5, 쓰래드
-SQL에서 count(*) 이 count(칼럼) 보다 빠르다. selectKey가 DB에 트리거랑 비슷하다.
-암호화에 대한 생각 자바 시큐리티에서 암호알고리즘 지원 MessageDigest로 SHA-256사용 salt를 다른 보안이 강화된 곳에 두고 작업을 하는 것도 좋겠다.
그런데 클라이언트에서 값이 넘어 올떄 이미 데이터에 대한 정보가 넘어와서 server에서 암호화 작업을 한다. 즉, 서버에서 작업하고 DB에 입력되니까 DB에 안전성은 지킬 수 있으나 보안적인 측면은 부족한듯하다 클라이언트에서 암호화작업을 한 값이 넘어오도록하면 되지 않을까? 그게 더 암호화적인 측면에서 좋은 것 같다.
네트워크적인 보안을 강화 문자인증으로 하면 네트워크상에서 데이터가 갈취되었더라고 키값이 다른 네트워크(폰과 서버)로 주고 받아서 좀더 안정적이다.
해결책 ::: 스프링 시큐리티가 내가 생각한 것을 이미 벌써 구현을 해놓았다. CSRF토큰은 스프링 시큐리티가 적용된 프로그램의 모든 POST방식에는 토큰방식 적용 위조방지 목적으로 특정 값의 토큰을 적용하는 방식 이걸 이미지테그나 js로 다양한 URI를 몰래 추가해서 올리고 서버 관리자가 그걸 실행하거나 보는 순간 권한을 변경해서 해킹이 가능하다. 이것도 내가 보안에서 생각한거랑 비슷한 문제인데 서버에들어오는 값을 검증하지않는 문제를 이용한 해킹이다. bcrypt는 해시암호화하고 받는 쪽에서는 체크만 하고 되돌릴 수 없다.
부족한 기능 :::
- 코드 리펙토링,
- 비밀번호 암호화,
- JS 게임은 만든 것을 넣을려고 하였으나 부족한 실력에 잘 하는 것 처럼 보일까봐 넣지 않았음.,
- AJAX 적용할지 여부,
- API 사용 여부
TDD 미사용 자바 AOP 기능 자바 시큐리티 기능 JSON객체를 활용하는 것들을 다시 해봐야 한다.
내 프로젝트 외부에서 접근하기
cmd ipconfig 에서 기본 게이트웨이 값 을 주소창에 입력 하면 설정창이 뜬다.
1.고정 아이피 사용체크하고 이건 공유기에 달려있는 비밀번호 =0110****** 내 ip (네이버에서 치면 나온다.) 이게 외부 ip주소이고 기본 게이트 웨이는 외부 ip 주소에서 마지막 숫자를 1로 바꿔준다.
서브넷 마스크는 255.255.255.0 으로 기본으로 셋팅 해주고 DNS서버는 일단 건드리지 않는다. 그렇게 고정 IP(외부)와 내부 IP셋팅이 끝나면
2.nat/라우터 설정 포트포워딩 설정 (DMZ나 다른 설정이 있지만 보안에 매우 취약하다. 즉 모든 포트를 다 열어버린다.)
- 외부에서 접속시 어떤 내부 포트와 연결할지 셋팅한다.
- 나 같은 경우는 와이파이로 노트북을 사용하는데 이렇게 할때는 DHCP에서 할당받은 IP와 외부 IP포트포워딩 한다.(즉 외부와 연결하기 전에 내부 네트워크망이 있는 것)
- 방화벽에서 인바운드 규칙을 설정한다. 참조 https://kamang-it.tistory.com/entry/JSP%EB%82%B4-%EC%9B%B9%EC%84%9C%EB%B2%84-%EC%99%B8%EB%B6%80%EC%97%90%EC%84%9C-%EC%A0%91%EA%B7%BC%ED%95%98%EA%B8%B0 https://qortn.tistory.com/202 https://4sii.tistory.com/3
ip차단 및 추적 https://blog.naver.com/siwoo9999/90170092153
작업하면서 느낀점 :::
1.클린코드와 리펙토링의 중요성을 알게 되었다. 일부러 이것 저것 해볼려고 여러가지 방법으로 코드를 만들었는데 이것이 학습에는 도움이 되었지만 버그(에러)도 많이 일어났고 진행속도가 매우 더디었다.
-
나만의 그림과 툴을 만들어야 한다는 생각을 하게 되었다. 좀 복잡한 것이 나오면 생각이나 글로 써서 작업을 할려고 했는데 아무리 글로 잘 표현해도 한계가 존재했다.주석과 메모장을 활용하였지만 부족함을 매우 느끼게 되었다.
-
기록을 반드시해야한다. 분명히 몇번을 작업을 하였고 알고 있다고 생각한 것도 몇일 있다가 다시 보면 기억이 잘 나지않았다. 정말 눈감고 칠 정도로 코드를 많이 치던지 아니면 기록을 열심히 해서 사고의 흐름을 체크를 해야겠다.
-
멘탈관리와 집중력관리 나도 모르게 코딩을 하다가 스트레스를 받았다.특히 내가 소리에 매우 민감하게 반응한다는 사실을 알았고 생각보다 집중력 지속시간이 짧았다. 작업을 하면서 집중력이 매우 떨어질 때가 있었는데 그럴 때 산책을 하고 오니까 좋아졌다. 그리고 복잡하거나 풀리지 않는 작업을 할때는 좀 쉽게 할 수 있는 작업을 옆에 두고 쉬운작업을 하다가 생각이 나면 그 때 다시 어려운 작업을 할 수 있도록 작업환경을 만들어야된다. 나는 문뜩문뜩 생각나는 스타일이라서 계속 붙잡고 있어도 별로 효율이 없으며 그렇다고 다른 너무 복잡하고 어려운 작업을 하게 되면 넉다운이 되었다.