JAVA
JVM
JDK, JRE, JVM 관계 : https://blog.naver.com/writer0713/221137806267
GC(garbage collection) : https://blog.naver.com/writer0713/221137865138
좀 더 궁굼하면 : https://yckwon2nd.blogspot.com/2014/04/garbage-collection.html
JAVA 언어 강좌 링크(생활코딩) : https://opentutorials.org/course/1223
자바 문법 기초 소스 코드 및 연습 문제 : https://github.com/matyb/java-koans
JAVA7 변경 요약 : http://www.hanbit.co.kr/channel/category/category_view.html?cms_code=CMS9451408435
JAVA8 변경 요약 : https://skyoo2003.github.io/post/2016/10/25/introduction-to-java8
Spring 5 & Spring boot 2의 권장 버전은 JAVA8
JAVA9 변경 요약
JAVA10 변경 요약 : https://itstory.tk/entry/Java-10-%EC%8B%A0%EA%B7%9C-%EA%B8%B0%EB%8A%A5%ED%8A%B9%EC%A7%95-%EC%A0%95%EB%A6%AC
JAVA11,12 릴리즈됨... 곧 13 릴리즈 예정...
(옵션)Java6 이후 챙겨봐야하는것들
스트림 API
람다 표현식
Spring Framework & 주로 함께 사용하는 Framework & etc.
Spring Framework 개념 강좌 링크
스프링 부트 공식 레퍼런스 : https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/html/
공식 가이드 : https://spring.io/guides
공식 스프링 전체 프로젝트 : https://spring.io/projects
Spring Legacy Framework
hello world 따라하기 링크 : https://its-easy.tistory.com/7
위 따라하기 중 주의사항 : 라이선스 문제로 인하여 Oracle JDK를 설치하면 안됨(http://www.itdaily.kr/news/articleView.html?idxno=92150)
Open JDK로 설치
공식 사이트 : https://openjdk.java.net/
설치 가이드 : https://openjdk.java.net/install/
윈도우즈 설치 파일 : https://github.com/ojdkbuild/ojdkbuild
Spring Boot Framework
Spring Boot란 : https://gist.github.com/ihoneymon/8a905e1dd8393b6b9298
Spring Boot 2.0 변경 요약 : https://medium.com/@goinhacker/spring-boot-2-0-%EC%88%98%EB%B0%95-%EA%B2%89-%ED%95%A5%EA%B8%B0-9bc1f3800fd4
백기선의 Spring Boot 강좌 노트 : https://www.slideshare.net/whiteship/ss-108533045
백기선의 Spring Boot 유료 강좌 링크(비싸요) : https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8
백기선의 Spring Boot 너튜브 강좌 : https://www.youtube.com/playlist?list=PLfI752FpVCS8tDT1QEYwcXmkKDz-_6nm3
Spring Boot + Kotlin 따라하기 : https://infoscis.github.io/2018/08/30/spring-boot-kotlin/
참조할만한 소스 코드들
https://github.com/gothinkster/spring-boot-realworld-example-app
https://github.com/in28minutes/spring-boot-examples
ORM
ORM이란 : https://gmlwjd9405.github.io/2019/02/01/orm.html
JPA
JPA란 : https://blog.woniper.net/255
Spring Data JPA : https://spring.io/projects/spring-data-jpa
Spring Boot에서 Spring Data JPA 사용 예제 : https://lemontia.tistory.com/597
Hibernate
소개 : http://hibernate.org/orm/
Spring Boot + Hibernate : https://medium.com/@SlackBeck/%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B6%80%ED%8A%B8-auto-configuration%EA%B3%BC-jpa-%ED%95%98%EC%9D%B4%EB%B2%84%EB%84%A4%EC%9D%B4%ED%8A%B8-sql%EB%AC%B8-%EB%A1%9C%EA%B9%85-424de95ed171
SQLMapper
Mybatis
Mybatis 소개 및 사용법 : http://www.mybatis.org/mybatis-3/ko/index.html
구 iBatis와 Mybatis의 차이점 : https://sjh836.tistory.com/127
Spring Boot + Mybatis : https://taetaetae.github.io/2019/04/21/spring-boot-mybatis-mysql-xml/
Templet Engine
Templet Engine이란 : https://gmlwjd9405.github.io/2018/12/21/template-engine.html
Spring에서 view templet으로 사용하는 것들 : FreeMarker, Groovy, Thymeleaf, Velocity, JSP
Freemarker : https://freemarker.apache.org/
Freemarker 기본 사용법 : http://wiki.gurubee.net/pages/viewpage.action?pageId=1343682 , https://freemarker.apache.org/docs/ref.html
Spring Boot + Freemarker 사용 : https://jsonobject.tistory.com/424
Velocity : https://velocity.apache.org/
Velocity 기본 사용법 : https://androphil.tistory.com/525 , https://velocity.apache.org/engine/1.7/user-guide.html#variables
Spring Boot + Velocity 사용 : https://blog.woniper.net/233
STS(Spring Tool Suite) 다운로드 : https://spring.io/tools
배포하기
https://jojoldu.tistory.com/263
빌드 도구
빌드 도구 설명 : https://jj-one-a-week.blogspot.com/2017/05/ant-maven-gradle.html
maven vs gradle : https://bkim.tistory.com/13
maven 빌드 설정파일 설명 : https://jeong-pro.tistory.com/168
gradle 빌드 설정파일 설명 : https://effectivesquid.tistory.com/entry/Gradle-%EB%B9%8C%EB%93%9C%EC%8B%9C%EC%8A%A4%ED%85%9C-%EA%B8%B0%EC%B4%88
웹서버
Apache : https://httpd.apache.org/docs/2.4/ko/
NginX : https://nginx.org/en/
WAS
Tomcat : http://tomcat.apache.org/
톰캣 성능 Question?
https://cwiki.apache.org/confluence/display/TOMCAT/Performance+and+Monitoring
기타
오픈소스 : glassfish, JBoss 등
상용 : WebSphere, WEBLogic, JEUS 등
DB, NoSql 등
DB 종류 별 랭킹 : https://db-engines.com/en/ranking
redis : https://redis.io/
couchbase : https://www.couchbase.com/
다운로드 : https://www.couchbase.com/downloads
System Resource Requirements : https://docs.couchbase.com/server/6.0/install/pre-install.html
설치 가이드 : https://docs.couchbase.com/server/6.0/install/install-linux.html
infinispan : https://infinispan.org/
mongodb : https://www.mongodb.com/
cassandra : http://cassandra.apache.org/
mariadb : https://mariadb.org/
mariadb storage engine들 : https://mariadb.com/kb/en/library/storage-engines/
mariadb columnstore
설치 : https://knoow.tistory.com/180
리눅스
Linux 강좌 링크 : https://opentutorials.org/course/2598
Linux 설치
CentOS7 설치 가이드 : https://jootc.com/p/201806031103
로컬 PC Windows에 Linux를 설치하려면 먼저가상 머신 설치(Mac은 다들 잘 아시니...)
Hyper-V : Windows 10 Pro, 8 Pro인 경우 Hyper-V 설치 사용 가능
Hyper-V 설치 : https://docs.microsoft.com/ko-kr/virtualization/hyper-v-on-windows/quick-start/enable-hyper-v
Vmware : Vmware Workstation Player는 설치하면 안됨. 무료 버전이지만 상업조직에서는 사용 불가. 집 PC에는 상관 없음
VirtualBox : 가장 많이 사용하지만 라이선스 정책이 좀 애매함
VirtualBox 라이선스 관련 링크
https://www.oss.kr/oss_license_qna/show/dab50438-d8a4-4260-a3c9-a38c61edcf56
Container
Container 개념 : https://captcha.tistory.com/46
Docker : https://captcha.tistory.com/45?category=830258
Kubernetes : https://kubernetes.io/ko/docs/concepts/overview/what-is-kubernetes/
APM : Application Performance Management
상용 APM : 한국에서는 dynatrace, New Relic, 제니퍼 등을 주로 사용함. 매우 비싼 가격...
오픈소스 APM
Pinpoint(NHN 공개 오픈소스)
소개, 설치, 사용 가이드 : https://docs.ncloud.com/ko/pinpoint/pinpoint-1-2.html
Scouter(LG CNS 공개 오픈소스, 전 제니퍼소프트CTO가 직접 개발)
소개, 설치, 사용 가이드 : https://github.com/scouter-project/scouter/blob/master/README_kr.md
기타 : https://www.joecolantonio.com/apm/
DB 모니터링 솔루션
상용 : Sherpa(http://www.sherpasoft.com/subPage/product/product_sherpasqlServer.html), MaxGauge(https://m.ex-em.com/product/maxgauge) 등... 비싼 가격...
트라이얼 or Free : https://www.comparitech.com/net-admin/best-database-monitoring-tools/
JAVA NIO Server Framework, 초고성능 REST API 혹은 TCP서버 등을 개발할때 주로 활용
Netty : https://netty.io/
Grizzly : https://javaee.github.io/grizzly/
Thrift : https://thrift.apache.org/
Thrift는 바이너리 직렬화 프로토콜 용도로만도 사용됨
(곁가지)주로 사용되는 바이너리 직렬화 프로토콜 : Thrift, Protocol Buffer, Avro 등
(곁가지)바이너리 직렬화 프로토콜 참고 자료
성능 비교 : https://labs.criteo.com/2017/05/serialization/
ttps://ko.wikipedia.org/wiki/%EC%95%84%ED%8C%8C%EC%B9%98_%EC%8A%A4%EB%A6%AC%ED%94%84%ED%8A%B8
ttps://ko.wikipedia.org/wiki/%EC%95%84%ED%8C%8C%EC%B9%98_%EC%95%84%EB%B8%8C%EB%A1%9C
ttps://ko.wikipedia.org/wiki/%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C_%EB%B2%84%ED%8D%BC
성능테스트
읽어보면 좋은 글 : http://woowabros.github.io/experience/2018/05/08/billing-performance_test_experience.html
오픈소스 성능테스트 툴
비교 : https://atyou73.github.io/itrepo/post/compare-loadtest-tool-1/
Jmeter : https://jmeter.apache.org/
사용법(매우 쉬움) : https://qjadud22.tistory.com/35 , https://jmeter.apache.org/usermanual/get-started.html
특이사항1 : 대량 부하 투입을 위한 [Controller-멀티 부하Agent] 구성이 가능하나 고사양의 머신 필요함. 단독 부하기로 사용시에는 PC에서도 무리 없음.
특이사항2 : GUI툴 기능으로 간단한 시나리오는 쉽게 구현되나 시나리오의 복잡도가 높을 경우 JAVA로 일부 프로그래밍 필요
nGrinder : https://github.com/naver/ngrinder
설치 : https://kamang-it.tistory.com/entry/nGrindernGrinder-%EC%84%A4%EC%B9%98%EB%B0%8F-%EC%82%AC%EC%9A%A9%EB%B2%951 , https://github.com/naver/ngrinder/wiki/Installation-Guide
사용법 : https://github.com/naver/ngrinder/wiki/User-Guide
시나리오 스크립트 : Groovy 혹은 Jython으로 작성(https://github.com/naver/ngrinder/wiki/Scripting-Guide)
성능테스트 진행 시, 주의사항
타사 웹서비스를 대상으로 부하를 발생시키면 안됨(공격으로 분석되어 IP가 차단될 수 있고, 법적 책임이 발생할 수도 있음)
우리 웹서비스 실서버를 대상으로 부하를 발생시키면 안됨
웹서버 다운이나 사이트 속도 다운을 유발할 수 있음. 경우에 따라서는 DB서버에는 심각한 영향 발생 가능
우리 보안 장비의 룰에 의해서 IP가 차단될 수 있음
혹시 실서버 대상으로 성능테스트를 진행할 경우 어플리케이션, 서버, 네트워크, DB의 실시간 모니터링 하에서 테스트를 시작하고, 이상이 감지될 경우 즉시 중지해야함
혹시 실서버 대상으로 성능테스트를 진행할 경우 웹보안 장비에 부하기 머신 IP를 예외 허용 등록해야함
부하 쓰레드 조절 컨트롤러를 사용하여 낮은 수의 쓰레드로 테스트를 시작, 일정 시간씩 텀을 주고 순차적으로 목표 부하 쓰레드까지 올라가는 형태로 진행해야함
TPS(transaction per second) 개념 설명 : https://www.whatap.io/blog/14/
참고 : TPS를 throughput per second으로 부르기도 함.
참고 : 웹서비스 성능테스트 엔지니어들은 일반적으로 웹서비스 페이지 1개를 브라우저에 로딩하기 위해 포함되는 Request(ex : url call + ajax call + javascript call + css call + image call)들의 집합을 Transaction이라 칭함.
트러블 슈팅
인텔리J에서 Could not autowire. No beens of 'xxx' type found.
인텔리J에서 롬복 적용 방법
https://chan7ee.tistory.com/entry/intellij-lombok-적용
자바 12 or 11을 설치하고 나서 스프링 부트 프로젝트를 시작할때 Caused by: java.lang.ClassNotFoundException: javax.xml.bind.JAXBException 에러가 발생하면