![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/n7FPV/btrndGs8NSc/Ys1gk1aebfknEKfZpCG1kk/img.png)
1. Settings에 있는 이전 포스트와 동일하게 세팅하는 부분만 적어 놓는다. 어디에나 있는 내용은 안쓰려고 한다. 2. 내용은 Gradle, Tomcat, Eclipse로 기본 Spring MVC를 세팅하는 부분이다. 3. 우선 이클립스와 톰캣을 설치한다. 이클립스는 2021-09 버전, 톰캣은 9버전이다. 3-1 2021-09버전은 Gradle 개발지원 plugin이 설치되어 있다. gradlew가 6.8을 사용한다. JDK11이면 충분하다. 3-1-1 Gradle 버전은 중요한데 17을 지원하는 최초의 Gradle이 7.3인데, 7.3 이하는 동작하지 않는다는 말이다. 3-2 톰캣 9버전을 설치한 이유는 Servlet 4.0을 지원하므로 web.xml 없이 서블릿을 구동할 수 있기 때문이다. 3..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/YZehR/btrm1idWphF/0pwkUIJyCCrT5KOqtSCh21/img.webp)
처음 스프링을 접하는 사람에게 스프링의 사상과 근본적인 학습에 관한 내용을 핵심만 추려 작성하려고 하였지만 너무 길어질 것 같아서... 계속 정리할지는 모르겠다. 서블릿의 구조를 이해하고 서블릿의 어떤 문제점을 스프링이 해결하려 했는지 등을 쓰고 싶었다. 핵심적인 것을 알만 나머지는 따라 오기 때문인데 솔직히 핵심적인 것이 너무나 많다. 1. 스프링이 어려운 이유 - 대부분 스프링을 웹개발용도로 사용하는데 스프링을 알아도 Servlet을 모르면 어려운 게 당연하다. 2. 스프링 web 기반은 Servlet이다. Servlet을 이해하고 어떻게 스프링 web이 Servlet을 편리하게 사용할 수 있게 만들어 주었는지 알면 스프링의 어려움도 대부분 해소된다. 3. Servlet을 이해한다고 해도 Servle..
1. 최근 수도 동파관련 데이터조회 하는 로직을 작성하였는데, 로직이 상당히 까다롭다. 5개의 쿼리의 길이가 600라인 정도가 된다. 1-0 동파 기간은 11월에서 3월이다. 이번 동파시즌은 시작한 지 알마되지도 않았지만 1-1 이번 시즌 새로운 기준으로 작성한 쿼리 5개의 쿼리를 MyBatis를 적용한 실행 시간은 10초 정도가 걸렸다. 1-2 작년 풀시즌을 조회하면 MyBatis로 조회를 하니 20초 정도가 소모되었다. 1-3 수정한 방식에서는 올 시즌은 1.2초 작년 풀시즌은 2.5초 정도가 소요되도록 개선되었다. 1-4 아래에 비교 성능비교한 동영상이다. 첫 번째 부분은 20일 정도 쌓인 데이터이고 바로 앞자료는 1년 치 자료를 조회하는 부분이다. 차이가 명확하다. https://www.youtu..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/caj2DK/btrmrn7dX1m/wpTjiKaWphWK8veA6HYAX0/img.png)
0. 기본적인 스프링과 자바 개발 설정이 가물가물해서 다시 적어 보는 포스트이다. 1. 지난 번에 프로젝트 만들고, DB, 유저 만들고, 기본 라이브러리를 가져왔다. 이젠 코드를 붙일 부분이다. 1-1 여기에 붙이는 소스는 토비의 스프링 책의 DB와 User 클래스를 사용한다. 귀찮다. 1-2 다만, 책에 구현되지 않은 나머지 count, get의 내용을 추가로 구현한 부분이 있다. 2. 우선 테스트 코드이다. 기본적인 코드 없이 테스트 부터 생성하였다. 2-1 기본적인 테스트를 수행하는 코드이다. 어떻게 UserDao를 작성할지와 상관없이 입출력만으로 작성할 수 있다. 2-2 @ExtendWith(SpringExtension.class)는 ApplicationContext를 공유하기 위해서 사용한다. ..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/byOfvX/btrmoq38LBr/8Jlnhq4295D7DyNKRHOD7K/img.png)
0-1. 이거 적는 이유는 오라클 데이터베이스에서 돌리면 3초 짜리 쿼리가 MyBatis에서는 20초나 걸려 JDBC로 직접 호출하는 코드를 만들려고 하는데 기본 프로젝트 설정을 하려는데 도무지 생각이 나지 않아서 천천히 다시 생각을 떠올리며 작성한다. 0-2. 최근에 x64 Assembly와 Linux Kernal 모듈 개발에 집중하고 있다보니 이런 것들이 또 기억이 나지 않는다. 0-3. 어차피 나중에 머리에 남는 것은 기본적인 흐름이다. 그래서 기억할 것만 적어 본다. 0-4. 기본적인 코드는 토비의 스프링의 것을 가져왔다. 구조는 물론 다르다. 1. Gradle Java 프로젝트 생성 1-1 이건 기본적인 내용이라서 적을 것이 별로 없다. gradle 7.3부터 Java 17을 지원한다. 1-2 ..
1. Distinct는 Select 절에서 사용되는 중복 제거 구문이다. 2. 우선 SQL 구문의 처리 순서를 알 필요가 있는데 2-1 FROM -> ON -> OUTER -> WHERE -> GROUP BY -> CUBE, ROLLUP, HAVING -> SELECT -> DISTINCT -> 2-2 ORDER BY -> LIMIT, TOP 3. 내부적인 처리 방식은 SELECT로 가져온 모든 대상 결과물을 가지고 DISTINCT 대상이 되는 컬럼(들)로 정렬을 한 후, 앞뒤로 동일한지를 비교해서 동일한 대상 컬럼의 경우 삭제를 한다. 대상 컬럼으로 정열이 되기 때문에 부하가 있는 작업이다. ORDER BY는 DISTINCT 뒤에 수행되기 때문에 DISTINCT로 정리된 결과물을 다시 정렬하게 된다. ..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/bbYd1Y/btrfWMe9wrK/jL1b37JOdUwUIDndDr20S1/img.png)
1. vim 기능에서 많이 사용하는 것들 1-1 여러 개 파일을 같이 열면서 화면 분할을 사용하고 싶을 때는 -O 옵션을 사용한다. vim -O hello.c hello.py 1-2 위와 같이 열린 상태에서 ctrl + w를 누르면 위의 오른쪽 하단의 ^W 가 나타나고 좌우 화살표로 어떤 면을 수정할지를 결정한다. 1-2-1 처음에 실행될 때는 좌우의 넓이가 동일한데 창을 확대할 경우 오른쪽 창만 커진다. 1-2-2 동일하게 다시 맞출 때는 ctrl + w 후에 = 를 누른다. 높이를 변경할 때는 ctrl + w 후에 +, - 를 눌러서 조정한다. 1-3 vim에서 쓸 만한 설정은 /etc/vim/vimrc에서 정의할 수 있다. 기본적으로 : 을 누른 후 설정을 하면 된다. 1-3-1 set number..
1. 코틀린은 자바를 기반하고 있기 때문에 toString(), equals(), hashCode() 메소드를 기본적으로 제공한다. 코틀린의 기본 클래스는 Any로 자바와 차별화를 시도하고 있는데, 사실 코드는 별차이가 없다. 2. 그런데 문제는 코틀린의 equals, hasCode는 생각하고는 다르게 동작한다. 여기에 ==, === 가 더해지면 더 이상 공부하기 싫어진다. 그래서 여기에 메모해 둔다. 3. 상속받은 equals 기본 동작은 객체의 주소 값의 비교이다. 이것은 코틀린의 == 이 수행 되었을 때 동작과 일치한다. 3-1 == 는 기본적으로 객체의 주소값을 비교하여 일치값을 판단한다. 3-2 코틀린에서 객체의 값을 비교하고 싶을 때는 별 수 없이 생성한 클래스의 equals를 override..
- Total
- Today
- Yesterday
- 도커 개발환경 참고
- AWS ARN 구조
- Immuability에 관한 설명
- 자바스크립트 멀티 비동기 함수 호출 참고
- WSDL 참고
- SOAP 컨슈머 참고
- MySql dump 사용법
- AWS Lambda with Addon
- NFC 드라이버 linux 설치
- electron IPC
- mifare classic 강의
- go module 관련 상세한 정보
- C 메모리 찍어보기
- C++ Addon 마이그레이션
- JAX WS Header 관련 stackoverflow
- SOAP Custom Header 설정 참고
- SOAP Custom Header
- SOAP BindingProvider
- dispatcher 사용하여 설정
- vagrant kvm으로 사용하기
- git fork, pull request to the …
- vagrant libvirt bridge network
- python, js의 async, await의 차이
- go JSON struct 생성
- Netflix Kinesis 활용 분석
- docker credential problem
- private subnet에서 outbound IP 확…
- 안드로이드 coroutine
- kotlin with, apply, also 등
- 안드로이드 초기로딩이 안되는 경우
- navigation 데이터 보내기
- 레이스 컨디션 navController
- raylib
- jsp
- one-to-many
- RestTemplate
- 설정하기
- spring boot
- 설정
- Security
- Rest
- crud
- 하이버네이트
- Many-To-Many
- mapping
- 매핑
- form
- Validation
- login
- 자바
- Spring
- Spring Security
- 외부파일
- 로그인
- hibernate
- WebMvc
- one-to-one
- XML
- 상속
- MYSQL
- 스프링
- 스프링부트
- Angular