일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- Java
- 자바스크립트
- 쿼리
- 튜닝
- Git
- 현재날짜 구하기
- github
- ANTI PATTERN
- javascript
- 설치프로그램
- CMD
- 채용공고
- Custom URI Schemes
- mave project
- sql
- 안티 패턴
- Oracle
- 레지스트리
- mybatis
- NSIS
- 마켓보로
- spring
- framework
- spring framework
- DB
- Stash
- Runtime.getRuntime.exec()
- MVC
- 자바에서 응용프로그램 실행
- Runtime
- Today
- Total
목록전체 글 (24)
corn-cheese
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bjrEyr/btqFS0N9tws/wk7IgYo9KsKi1W3BqqraFk/img.png)
1. 폴더구조 파악 우리가 만들었던 first 프로젝트는 다음과 같은 구조를 가지고 있다. 이 구조를 간단히 살펴보자. 1) src/main/java는 java 파일이 모여있는 디렉토리이다. 우리가 앞으로 만들 java 파일은 전부 이 디렉토리에 구성된다. 2) src/main/resources는 여기서는 사용하지 않지만, 추후 스프링 설정 파일이나 쿼리가 저장될 디렉토리이다. 3) src/test/ 관련 폴더는 test 관련 폴더인데, 우리는 TDD(Test Driven Development) 방법론이나 테스트코드를 따로 작성하는 방식은 아직까지는 사용하지 않기 때문에, 현재로써는 필요없는 폴더이다. 과감히 삭제. 4) 우리는 메이븐을 사용하는데, 메이븐의 기본 폴더는 src/main/webapp 폴더..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/CmSl6/btqFRBukQ9k/mSs0QKEsMRReOANIO02Pak/img.png)
간단히 스프링 프레임워크를 살펴보겠습니다. 1. 스프링은 POJO (Plain Old Java Object) 방식의 프레임워크로서, 일반적인 J2EE 프레임워크에 비해 특정 라이브러리를 사용할 필요가 없어서 개발이 쉬우며, 기존 라이브러리의 지원이 용이합니다. 2. 스프링은 관점지향프로그래밍, AOP(Aspect Oriented Programming)를 지원합니다. 트랜잭션, 로깅, 보안 등 여러 모듈, 여러 계층에서 적용되는데, 이런 코드들을 실제 비지니스 로직과 분리할 수 있도록 도와줍니다. 한때, AOP가 OOP(Object Oriented Programming)를 대체하는 기술로 생각되기도 했지만, 실제로 AOP는 OOP를 더욱 OOP스럽게 보완해 주는 기술입니다. 3. 스프링은 의존성 주입, D..
개발자라면 옵티마이저가 실행계획을 생성할 때, 최대한도로 성능을 발휘할 수 있도록 불필요한 로직을 타지 않게 쿼리를 작성해야 한다. 같은 결과를 산출하는 쿼리는 여러 가지 형태로 작성될 수 있으므로, 개발자는 SQL 문장 단에서 최대한 효율적인 문장을 작성해야 한다. "쿼리를 이렇게 작성하면 좋은 성능을 발휘한다"라는 일반적인 가이드 라인을 알아보자! 가급적 WHERE 조건에서는 인덱스 컬럼을 모두 사용한다. 인덱스를 만들어 놓더라도 WHERE 조건을 어떻게 명시하느냐에 따라 옵티마이저가 인덱스를 사용할 수도 있고 사용하지 않을 수도 있다. 예를 들어 A와 B라는 컬럼의 인덱스를 만들었는데, WHERE 조건에서 A 컬럼만 사용한다면 인덱스를 타지 않게 된다. 예) CONTRACT 테이블에서 CONTRAC..
쿼리 튜닝은 온라인 SQL이냐 대용량 배치 SQL이냐에 따라 튜닝방법이 달라집니다. 하지만 대용량 배치는 프로그램 수가 많지 않은 편입니다. 온라인 SQL 튜닝에서도 관점에 따라 튜닝방법이 다르게 됩니다. 예를 들어 Peak Time에 Insert 문이나 Update 문, Select 문이 집중적으로 몰릴 때의 튜닝 방법이 있고, 단순히 SQL 하나에 집중해서 응답시간을 최소화하는 튜닝방법이 있습니다. 본 포스팅은 일반적으로 가장 많은 튜닝 사례에 해당하는 Select문 튜닝방법론을 기술한 포스팅입니다. 학습 용도로 작성한 포스팅으로 본 포스팅의 원본 출처는 Science of Database 블로그 SQL 튜닝방법론 입니다. 온라인 Select문 튜닝 방법론 온라인 SQL의 튜닝방법은 여러 가지가 있을..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/WoYg9/btqEJhQ9a9v/JRU27VCh6C2z6sVpavobRK/img.webp)
좀 어렵기는 하지만 Git은 정말 좋은 도구이다. Git을 쓰기 시작하면서 SVN이 얼마나 불편하고 구린지를 이해할 수 있다. 어쨌든 Github의 엄청난 성장아래 이제는 대부분의 오프소스 프로젝트들이 Github로 이전하면서 회사에서 Git을 사용하지 않더라도 Git을 사용하지 않으면 안되는 때가 왔다. 하지만 Git은 상당히 어려운 도구이고(git 홈페이지에 나온 easy to learn은 홍보성 문구로 거짓말이다. 어렵다!!) 그룹스터디를 할 때 Github을 사용하는 경우가 꽤 많았는데 사람들이 숙제를 해도 제출을 못하는 사태가 자주 발생하면서 각각의 명령어에 대한 사용법에 대한 설명도 중요하지만 전체적인 사용방식을 좀 설명할 필요가 있다고 느껴졌다. 내가 생각하기에 사람들이 Git을 이해하는데 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/b5wCmz/btqELyKJRbY/xKxik2co1sUXGV6yUM7lEK/img.png)
최근에 A브랜치에서 작업을 완료 후 pull Request를 올렸다. 그리고 새로운 기능의 작업을 위해 B브랜치를 따서 쭉 작업하는 중, A브랜치에서 작업한 내용의 코드 리뷰를 받아 수정할 사항이 생겼다. A브랜치로 넘어가 코드 수정을 해야하는데, B브랜치에서는 작업 중이다 보니 A브랜치로 그냥 넘어갈 수가 없다. 위 상황을 해결할 수 있는 방법은 아래와 같다. 현재 작업 중인 상황을 그대로 commit을 한다. 새로운 브랜치를 따서 commit 후, 다시 현재 브랜치로 돌아온다. git stash 명령어를 이용한다. 3번의 git stash 명령어를 이용하면, branch를 새로 따거나, 불필요한 commit을 막을 수 있다. #git stash 현재의 상태를 임시로 저장한다. # 사용법 예시를 위한 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/CbHoP/btqCMnMDusB/iiCTqKk3wSyrTU0KCDLJk1/img.png)
조회한 다수의 SELECT 문을 하나로 합치고싶을때 유니온(UNION) 을 사용 할 수 있습니다. UNION 은 결과를 합칠때 중복되는 행은 하나만 표시해줍니다. UNION ALL 은 중복제거를 하지 않고 모두 합쳐서 보여줍니다. UNION 두개의 SELECT 결과를 합칠수 있습니다. 합친 결과에서 중복되는 행은 하나만 표시합니다. 단, 컬럼의 개수가 같아야하고, 각 컬럼의 데이터타입이 같아야합니다. 사용법 SELECT * FROM A UNION (ALL) SELECT * FROM B 기본테이블인 COUNTRIES테이블과 REGION 테이블을 UNION 해보겠습니다. 두개의 테이블을 UNION 하기위한 조건으로 컬럼의 갯수와, 타입이 같아야합니다. 때문에 COUNTRIES에서는 COUNTRY_NAME 과..
테이블에 데이터가 이미 존재하면 업데이트 하고, 존재하지 않으면 입력을 해야 하는 경우가 종종 있습니다. 오라클에서 이런 작업을 한번에 할 수 있는 쿼리가 MERGE INTO 문 입니다. 현실적인 예는 아니지만 간단하게 성적 테이블을 생각해 보겠습니다. 과정코드과 학생코드가 주키이고, 성적 필드를 가지고 있습니다. CREATE TABLE TB_SCORE ( COURSE_ID VARCHAR2(10) NOT NULL, STUDENT_ID VARCHAR2(10) NOT NULL, SCORE NUMBER(5, 2) NULL, CONSTRAINT PK_SCORE PRIMARY KEY (COURSE_ID, STUDENT_ID) ); 1. 동일한 테이블 구조를 가지고 있는 TMP_SCORE 테이블로부터 데이터를 옮기..