이전 포스팅에서 톰캣의 lib 실행순서를 직접 확인했다. 첫 번째로.class 파일을 읽고두 번째로 WEB-INF/lib세 번째로 tomcat/lib 를 읽었다. 사실 이 lib 실행순서는 톰캣 문서에 적혀 있다.나는 톰캣7을 사용했으니 톰캣7문서를 읽어보겠다. 톰캣문서 : (https://tomcat.apache.org/tomcat-7.0-doc/class-loader-howto.html) 톰캣은 클래스나 리소스를 로딩할때 아래의 순서로로딩한다고 적혀있다. 이전 포스팅에서 테스트했던 순서이다. 를 사용하면순서가 바뀌는데 한번 사용해보자. 먼저 위에서 바뀌는 실행순서를 보면 기존에는 WEB-INF/lib 가 먼저 로딩됬지만tomcat/lib 가 먼저 로딩되는것으로 순서가 바뀌게 된다. WEB-INF/li..
이번엔 명령프롬프트 창에서직접 톰캣을 구동해 직접 lib 를 읽어보는테스트를 해보자. 먼저 이전 포스팅처럼 getMessage.java 클래스를 만들고getMessage~~!!를 출력하게끔 만들었다. 이제 jsp 에서 한번 실행한 후.class 파일을 바탕화면으로 복사해둔다..class 파일은 생성경로를 따로 설정하지 않았으면아래처럼 Navigator 에서 classes 경로에서 가져올 수 있다. 이제 아래처럼 first getMessage~~!!를 출력할 jar 파일을 만들어준다. first 부터 thrid 까지 총 3개를 만들어준다. getMessage.class 파일과 3개의 jar파일, 실행할 jsp파일을 생성해 모아두면 된다 jsp파일은 이전 포스팅에서 사용하던것과같은 jsp 파일이다. 이제 위..
이제 저번 포스팅에서 만든getMessage.java 클래스를 jar파일로만들어 lib 에 jar파일을 넣고 실행을 해보자 우선 아래처럼 java 파일을 선택후 Export 해준다. 다음 JAR file을 선택해 Next해준다. JAR file이 없다면위 Select an export destination 에서검색을 해준다. 다음 아래처럼 해당 패키지를 클릭하면 오른쪽에 패키지 안에 존재하는java파일들이 보이며원하는 java파일을 선택해 Finish를 눌러준다JAR 파일이 생성될 경로도 정해준다. 아래처럼 jar파일이 생성된것을 볼 수 있다. 이제 생성한 jar파일을 아래처럼이클립스의 WEB-INF/lib 경로에 넣어준다.다음 test 패키지 안에있는 getMessage.java 파일을삭제해준다. 이제..
개발을할때 엄청난 양의 lib를 사용한다. 보통 프로젝트에서 우린 lib를 추가할때WEB-INF/lib 경로에 라이브러리를 추가해 사용한다. 하지만 lib의 경로는 WEB-INF/lib 에만있는게 아니다. 톰캣을 설치받은 경로 안에 lib도 있다. 이제 직접 lib에 jar파일을 생성해 넣어보고위에서 말한 두 가지 경로의 lib를 사용해보자.일단 아래처럼 테스트용 프로젝트를 생성하고아래에 표시된 클래스와 jsp파일을 하나씩 만들자 test패키지를 하나 생성해주고 그 안에 getMessage 라는 class를 생성했다.다음 아래처럼 getMessage!!라는 문자를 반환 하게 했다 jsp에서는 위에서 생성한 클래스를 사용하게했다. 다음 클래스가 잘 만들어졌는지jsp를 실행시켜보자. 아래처럼 클래스안에 정의..
저번주 토비의 스프링 3.1의 Vol.1 을 다 읽었다.. 엄청 오래 걸렸다. 원래 금방 읽을수 있었는데..보기 귀찮아서 미루다보니 뭔 책 한권 보는데몇달이 걸린건지... 원래는 토비의 스프링을 보면서 중간중간 좋은 부분들을블로그에 정리하려했는데 이건 뭐 내용이 계속 이어져있어서정리를 못했다. 일단 토비의 스프링 Vol.1을 읽으면서느낀건 "참.. 오래된 책이다..." 라는것이다. okky 에서도 많은 분들이 스프링 공부를 할때이제 토비의 스프링을 추천하지 않는다.너무 오래된 책이고 책안에 많은 내용들이이제는 쓰이지 않거나 너무 심오있게 필요없는 것까지깊게 알려주기 때문이란다. Vol.1을 읽고 저 말에 동의했다.너무 오래된듯한 느낌이다. 그리고 너무 내용이 깊다JDBC 커넥션을 뭐그렇게 깊게 설명하는지..
예외 처리 - 자바 개발자가 가장 신경 쓰기 귀찮아하는 것정상적인 결과와 흐름을 보여주는 것도 힘든데예외상황까지 처리해야 한다. 그래서 예외와 관련된 코드는 자주 엉망이 되거나무성의하게 만들어지기 쉽다. 아래는 자바 기초를 배울때 만들어내는 JDBC 코드에서흔히 볼 수 있다. 예외를 잡고 아무것도 하지 않는다. 예외 발생을 무시해버리고 정상적인상황인 것처럼 다음 라인으로 넘어가겠다는의도가 있는게 아니라면 절대 만들어서는안되는 코드이다. 예외가 발생하면 catch로 잡아내는 것까지는 좋은데아무것도 하지않고 넘어가는것은 정말 위험한 일이다.왜냐하면 프로그램 실행 중에 어디선가오류가 있어서 예외가 발생했는데 그것을 무시하고 계속진행해버리기 때문이다. 최종적으로 오작동을 하거나 시스템 오류가 나서 운영자가알아차..
스프링은 IoC/DI 를 이용해 객체지향 프로그래밍 언어의 근본과 가치를 개발자가 손쉽게 적용하고사용할 수 있게 도와주는 기술이다.동시에 스프링은 복잡한 엔터프라이즈 애플리케이션을효과적으로 개발하기 위한 기술이다. 애플리케이션은 계속 변하고 복잡해져간다.그 변화에 대응할 수 있는 것이기술, 테스트이다. 스프링으로 개발을 하면서 테스트를 만들지 않는다면이는 스프링이 지닌 가치의 절반을 포기한 셈이다. 테스트는 스프링을 학습하는데 있어 가장 효과적인 방법의 하나이다. 보통의 웹 프로그램에서 사용하는 DAO를테스트하는 방법은 DAO를 만들고서비스 계층, MVC 프레젠테이션 계층 까지포함한 모든 입출력 기능을 만든후,웹 화면을 띄어 폼을 열고 값을 입력하고버튼클릭하여 값을 컨트롤러로 보내고 서비스 걸쳐서 DAO..
제어의 역전 - 프로그램의 제어 흐름 구조가 뒤바뀌는 것 일반적 프로그램의 흐름은 main() 메소드와 같이프로그램이 시작될때 다음에 사용할 오브젝트를 결정하고결정한 오브젝트를 생성하고 생성된 오브젝트의메소드를 호출하고 그 오브젝트 메소드 안에서 다음에 사용할것을 결정하고 호출하는 식의 작업이 반복됨 제어의 역전은 오브젝트가 자신이 사용할 오브젝트를스스로 선택하지 않음.생성하지도 않음. 모든 제어 권한을 자신이 아닌 다른 대상에게 위임하기 떄문이다. 제어의 역전 개념은 이미 많이 적용되어있다.대표적으로 서블릿 서블릿은 개발을해서 서버에 배포할 수는 있지만그 실행을 개발자가 직접 제어할 수 있는 방법이 없다대신 서블릿에 제어 권한을 가진 컨테이너가 적절시점에 서블릿 클래스의 오브젝트를 만들고그 안의 메소드..
이번 포스팅에서는 StringBuilder와 StringBuffer의 차이에 대해 알아보자. StringBuilder와 StringBuffer의 차이는 대표적인 면접 단골 질문이기 때문에 면접 준비를 해봤던 사람이라면 누구나 한번쯤 들어봤을거라 생각한다. StringBuffer, StringBuilder 클래스는 String 클래스와는 다르게 값이 변한다. 예를 들어 String aaa = ""; 선언을 하고 aaa 에 반복문을 이용해 aaa += 1 과 같이 값을 계속 넣어준다면 aaa 는 1,2,3,4,5. . . 값을 계속 해서 가지게 된다. aaa 가 4에서 5가 됐을때도 4라는 값을 계속 가지고 있기 때문에 메모리 낭비가 된다. 반복문을 이용해 적은양의 데이터를 String에 저장한다면 큰 문제..
자바에서 바탕화면이나 원하는 경로에 있는txt파일을 불러와 읽는 방법에대해 알아보자 먼저 간단하게 바탕화면에 테스트용 txt 파일을 만들자. 다음 아래와같이 소스를 작성한다. 어려운건 없으니 소스 해석은 생략하겠다. 이제 출력을 해보면 바탕화면에있는 txt 파일안의 내용을 불러와 콘솔창으로출력시켜준다. 하지만 바탕화면에 txt 파일을 불러와 DB에넣어야하는 상황이 올 수 있으므로한 단계 더 진행해보자.StringBuilder을 생성해준 후for문을 이용해 한 줄씩 읽어온txt 파일의 내용을 append를 이용해붙여준다. append로 붙은 내용을 출력하면 아래와 같이 한 줄로 쭉 붙여지게 된다. 파일을 줄바꿈을 적용해 출력하려면 append를 할때 \n을 붙여주자.
indexOf 를 이용해 문자열에서 부분 문자열을 검색하는 방법에 대해 알아보자.사용법은 굉장히 쉽고 간단하니한번만 보면 바로 알수있을것이다. indexOf를 사용해서 부분 문자열을 쉽게 검색할 수 있다. 해당 문자열을 검색했을때 값이 존재할 경우검색한 문자열의 시작 인덱스를 반환한다. 문자열이 없을 경우 -1을 반환한다. 위 테스트코드에서 aaa bbb ccc ddd 문자열에서bbb 를 검색하였다. 4번째 인덱스부터 bbb가 시작되어4라는 값을 반환하게 된다.
String, 객체 equals 비교 return 값
클래스는 보통 일반 클래스와 추상 클래스로 나뉜다.추상 클래스는 클래스 안에 추상 메소드가 하나 이상 포함되거나abstract로 정의된 경우이다. 인터페이스는 모든 메소드가추상 메소드인 경우이다. 추상 클래스와 인터페이스의 차이는명확하다. 구조, 사용법 등이 다르다. 하지만 하는 일은 비슷하다. "추상 클래스와 인터페이스는 상속받는 클래스 또는 구현하는 인터페이스 안에있는 추상 메소드를 구현하도록 강제한다." 라고 하는데 한번 읽어 본다면 "추상 메소드를 구현하는것" 이라고만생각될 수 있다. 그럼, 추상 클래스 하나만 존재를 해야하고추상 클래스 안에 추상 메소드를 여러개를 만들거나 전부 추상 메소드로만 두면될 것인데 왜 인터페이스가 존재하는 것일까? 이것은 인터페이스와 추상 클래스의 존재 목적이 다르기 ..
이번 포스팅에서는 자바스크립트와 제이쿼리의 실행 속도비교를 해보겠다. 간단하게 비교하는 방법이라 소스가 짧다.먼저 input태그를 하나 만들어주고자바스크립트와 제이쿼리에서 id가 text인 타겟에 속도테스트라는value값을 넣어줄 수 있도록 해주자. 다음 실행 속도비교를 위해 timer 라는 function을 하나 만들어주고performance.now()를 이용해 실행 속도를 체크하자. (performance.now()는 API문서를 참고했고 링크는 제일 밑에있다.) 아래는 만약을 위해 적어준다 실행을 하고 크롬 개발자도구의 콘솔창에서 확인을 하면 차기아 많이나야 약 3배 정도의 차이가 나는데단위가 ms 이니 거의 똑같다고 보면된다. 하지만 방금 테스트를 위해선 그냥 input태그에 5글자를 넣어준것이다..
데이터베이스에서 컬럼을 만들때 자바에서변수명이나 메소드명을 만들때처럼 2개이상의 영어단어를 조합하여 만들 때가 있다. 2개 3개 이상의 긴 영어단어로 만들게되면변수명이나 메소드명처럼 가독성이 떨어지게 되는데변수명과 메소드명을 만들때는 카멜케이스를 사용하면 되지만컬럼명은 카멜케이스로 만들수 없다. 그렇기 때문에 데이터베이스에서 컬럼명을 길게 만들어야 할 때 에는 언더바 _ 를 사용 하게 되는데 예를 들어 조회수 컬럼명을 만든다고 한다면 viewcnt로 만드는것이 아닌view_cnt로 만드는 것이다. 보통 데이터베이스의 값들을 jstl로 화면상에 뿌려줄때는VO를 통해 값을 뿌린다. 하지만 jsp 화면단에서 이 컬럼명으로 값을 불러 올수 없다. 그렇기 때문에 보통 스프링에서 언더바를 사용한 컬럼명을 사용해야할..
게시판에서 글 수정 삭제는 해당 글 작성자만 할수 있어야한다.우리는 전에 메인컨트롤러에서 로그인을 대체하는 세션을 만들었다. 이제 이 세션과 글작성자를 이용해 글 수정과 삭제를 작성자만 할수 있도록 할것이다글 상세 보기 페이지에서수정 삭제 버튼을 태그로 아래처럼 조건을주자.세션에 저장된 ID와 글 작성자가 같아야 수정, 삭제 버튼이화면에 그려진다. 다음 조회수를 위해 아래처럼 수정하자 처음에 DB에서 조회수 의 기본값을 아무것도 안줬는데 0을 줄수 있도록하자. 그리고 조회수는 글 상세보기를 누르는 순간 조회수가 1 올라갈 수 있도록 글 상세보기 컨트롤러에서 위처럼 수정해준다.먼저 세션에 id값을 가져온후 if문을 써 글작성자와 로그인된id값이 같지않다면 boardService.updateViewCnt를 ..
이제 게시글의 수정과 삭제에 대해 알아보자.게시글의 수정과 삭제버튼은 보통 게시글을상세볼수있는 페이지에 위치한다 또한 다시 목록으로 갈수있도록"목록으로" 버튼도 존재한다. 일단 상세보기 페이지에서목록으로, 삭제, 수정 버튼을 만들어주자. 이제 스크립트단안에 detailForm이라는 클래스를하나 만들어준다음 버튼이 눌려질때마다 각 컨트롤러로 이동될수 있도록 해주자. 다음 상세보기 페이지에서 form태그에 id값을 달아준다음. form태그가 submit될때글 번호도 같이 submit될수 있도록input태그를 사용해 글번호를 적어주자.화면상에 보여질 필요는 없으니 타입을 hidden으로 주자. 이제 컨트롤러에서 글수정 form 을 위한 맵핑을 시켜준다음 글수정 폼으로 갈수있도록 리턴해주자.boardServic..
이전 포스팅들에서는 게시판의 글 리스트 불러오기와 글 상세보기를 했다. 이번포스팅에서는게시글 작성을 한번 만들어 보자. 먼저 글쓰기 버튼을 만들어준 다음 버튼에 id값을 설정한다. 다음 게시글리스트 jsp에서 글쓰기 버튼을 눌러주면글작성 Form 으로 이동할수 있도록 스크립트단을아래와 같이 만들어준다. 다음 컨트롤러에서 boardInsertForm을 맵핑시켜준다. 이제 글 작성자를 위한 세션을 하나 만들겠다. 게시판에 글을 작성하기위해선 로그인이 필요하다 보통 글 작성을 할때 글 작성자에는 로그인한 아이디값이 들어가지게 된다. 이를 위해 메인 컨트롤러에서간단하게 세션을 하나 만들어준 후 작성자로 사용하겠다. 위처럼 메인 컨트롤러에서 세션을 만들어준후. 게시판 글 작성 컨트롤러에서 세션을 불러와 사용할수 ..
이번엔 저번 포스팅에서 다룬 table, tr, td 태그를핸들링을 해보도록 하자. 저번 포스팅과 다르게 rowSum function을 추가했다. 그리고 행을 추가할때도 "수량" 이라는 로우에는 onkeyup 을 추가했다.onkeyup에 this를 파라미터로 넘겨주었다. rowSum 함수에서는 parentNode를 2번이용해 tr 태그 까지 접근한다.(input 태그 -> td태그 -> tr태그) cells를 이용해 내가 입력한 로우의 열에 접근한다. cells[0]은 과일이름 [1]은 가격 [2] 은 수량이 된다. 가격을 입력하고 수량을 입력하면 가격 * 수량의 합계금액이계산되어 자동으로 입력되어지게 된다.
HTML에서 table, tbody, tr, td 를 이용해 간단하게 표를 만들고 버튼을 눌러 행을 추가하는 기능을 만들어보자. 일단 행을 추가해줄 버튼과 아이디, 이름, 전화번호, 주소를 td 태그를 이용해 만들어 주자.이제 "로우추가" 라는 버튼을 누르면 행이 추가될 수 있도록 function을 만들어주자. 간단하게 insertRow() 를이용해 행(로우)을 추가할 수 있다.insertCell() 은 열을 추가하는 것인데 insertRow 가 tr 태그를 추가하는거라면inserCell은 td 를 추가하는 것이다.innerHTML을 이용해 input 태그를 넣어줬다. 로우추가 버튼을 누르면 아래와같이 로우가 추가되고innerHTML을 이용해 input 태그가 들어가 있는 상태이므로아래처럼 값을 입력할 ..
jQuery는 앞단에서 중요 핵심이라고 생각한다. 제이쿼리를 사용할때 타겟을 잘 잡아서원하는 값을 java단으로 보내줘야 원할하게데이터가 흐를수 있다. 제이쿼리는 책을보며 따라치는 것도좋지만 미리 만들어져 있는 예제들을수정해보며 타겟잡는 연습을 해보는것이 좋다고 생각한다.아래 링크에 들어가 https://www.w3schools.com/jquery/jquery_traversing_descendants.asp 여러가지 제이쿼리 예제를 볼수 있으며 아래처럼 Try it Yourself 를 눌러실행 예제를 볼수있다. 소스를 직접 수정해 Run을 눌러 실행도 해볼 수 있다.
로그인, 회원가입 등 화면에서 우리는 여러가지 값을 입력 할때가 많다. 로그인을할때 ID에 우린 영어를 입력하고주소, 이름 등에는 한글을 입력한다. 입력 폼을 우린 jsp에서 input 태그를 사용하는데input 태그를 사용해 기본적인 로그인, 회원가입 등에서쓰이는 입력 폼을 만든다. 회원가입을 할때 이름, 주소에는 보통 한글을 입력한다.근데 간혹 영어부터 입력되는 사이트들이 있다. 또한 로그인을 할때도 ID란에 우린 영어를 입력해야 하는데한글이 써지는것을 보고 꼭 한/영 버튼을 누른다.별거 아니지만 굉장히 귀찮다. 그래서 이를 방지하기 위해 input 태그에서 ime-mode라는 style 속성을사용할 수 있다. ime-mode를 통해 한글 또는 영어를 기본값으로 넣어입력되는 언어를 선택할 수있다. 사..
데이터 바인딩(Data Binding)은 HTML 화면 요소를 뷰 인스턴스에 있는 데이터와 연결을 하는것이다.주요 문법으로 {{ }} 와 v-bind 가 있다. 먼저 {{ }} 는 뷰 인스턴스에 데이터를 HTML 태그에연결 할 수 있는 가장 기본적인 텍스트 삽입 방식이다.뷰 뿐만 아니라 다른 언어나 프레임워크에서도 자주 사용되는템플릿 문법이다. 간단하게 형식을 보자. 위 소스는 data 속성이 message 속성값인Test!! 를 div 태그의 {{ message }} 에 연결하여화면에 출력시켜주는 소스이다. 여기서 data 속성의 message값이 바뀌면 뷰 반응성에 의해 화면이자동으로 갱신 될것이다. 만약 뷰 데이터가 변경되도 값을 변경시키고 싶지않다면아래와 같이 v-once 속성을 사용하면된다. v..
뷰의 템플릿은 HTML, CSS등의 마크업 속성과뷰 인스턴스에서 정의한 데이터와 로직들을 연결해서 사용자가 브라우저에서 볼 수 있도록 HTML형태로 변환해 준다. 템플릿의 속성을 사용하는 방법은 두 가지로 되어있다.먼저 첫 번째는 ES5에서 뷰 인스턴스의 템플릿 속성을사용하는 방법으로 아래와 같다. ------------ 이때 템플릿 속성에 대해 알아둬야할 특징이 있는데사용자가 볼 수는 없지만 라이브러리 내부적으로템플릿 속성에서 정의한 마크업 + 뷰 데이터를 가상 DOM기반의 render() 함수로 변환하는 것이다.변환된 render()함수는 최종적으로 사용자가 볼 수 있게 화면을그려주는 역할을 한다. 그리고 그 과정에서 뷰의 반응성이화면에 더해진다. 두 번째 방법은 싱글 파일 컴포넌트 체계의 코드를사용..
액시오스 (Axios)는 현재 뷰 커뮤니티에서 가장 많이 사용되는 HTTP통신 라이브러리다. 에반도 뷰 리소스 라이브러리를 통해공식 라이브러리에서 제외하면서 액시오스를 언급했다고한다.액시오스는 깃허브 리포지토리의 별이 3만개가 넘는다. 이는뷰 리소스의 8천개에 비해 압도적으로 많다. 그만큼 많은 개발자들이관심을 갖고 이용하고 있다는 증거이다. 일반적으로 오픈소스 라이브러리의장래성은 깃허브 리포지토리가 얼마나 활성화되어 있느냐로판단할 수 있는데, 액시오스가 그런면에서 뷰 리소스 보다 더 안정적으로지원되는 라이브러리 라고 할 수 있다. 또한 액시오스는 Promise 기반의 API형식이 다양하게 제공되어별도의 로직을 구현할 필요 없이 주어진 API만으로도간편하게 원하는 로직을 구현할 수 있다. 간단하게 액시오..
뷰 리소스를 사용하는 방법은 CDN을 이용해서 라이브러리를로딩하는 방식과 NPM으로 라이브러리를 설치하는 방법이 있다.CDN 설치 방법을 이용하여 간단히 뷰 리소스로 서버에서 특정데이터를 받아와 로그로 출력해보겠다. 아래 소스를 보자. 먼저 위 코드는 버튼을 하나 추가해 클릭하면지정한 URL의 데이터를 가져오는 소스이다.여기서 불러오는 데이터는 JSON 형식의 간단한 파일이며 프레임워크 종류 - 프레임워크 이름 형태로 키- 쌍 조합으로총 7개의 데이터 쌍으로 되어있다. 먼저 7line에서는 버튼을 인스턴스 영역안인 태그안에태그로 추가했다. 그리고 v-on:click을 이용해버튼을 클릭하면 getData가 호출되도록 한다. 17line은 getData()에는 뷰 리로스 에서 제공하는 API인this.$ht..
cmd 에서 오라클 계정을 생성하고 권한을 주고 테이블을 덤프하는 명령어이다. sqlplus "/as sysdba" -> cmd에서 sqlplus로 오라클 접속 create user abc identified by 1234; ->abc라는 계정을 생성하고 비밀번호는 1234로 설정한것이다. alter user abc account unlock; -> abc계정의 lock을 푼다. grant connect, resource, dba to abc; -> abc계정에 db작업에 필요한 모든 작업을 준것이다. grant create session to abc; -> 세션생성 권한 grant create table to abc; -> abc 계정에 테이블 생성권한 주기 grant drop any table to ..
게시판의 댓글 쿼리가 마리아DB쿼리로 되어있어 이 쿼리문을 오라클쿼리로 바꿨다. 처음에 난 저 쿼리문을 오라클 쿼리로 따로바꿔줘야 되는지 몰랐다.. 위 쿼리문은 댓글을 Insert하는 쿼리인데댓글을 get하는 쿼리문에서 repNo값이 계속null로 나와 오류가 났다. 내가 사용하고있는프로젝트와 위 마리아DB를 사용한 프로젝트가 달라오류 찾기가 어려웠다. 변수명과 컬럼명이 다 달랐기 때문에난 당연히 컨트롤러 쪽이나 뭐 어디선가 내가 오타를 낸줄 알고계속 찾았는데 1시간동안 해결도 못하고 멍때리고 있는순간 갑자기 jqgrid사용했을때 쿼리문에서 keyProperty를 사용한것이떠올랐다. 바로 구글에 검색을 해보니 마리아DB/Mysql 이랑오라클에서 keyProperty를 사용할때 문법이 다르다고 한다... ..
요즘 MariaDB 쿼리를 오라클 쿼리로 바꾸면서배우는게 많은것 같다.이번엔 MariaDB에서 ON DUPLICATE KEY 를 오라클에서사용하기위해 바꿔 보겠다. 먼저 내가 바꾸려고 했던 MariaDB를 보자대부분 ON DUPLICATE KEY 를 사용하기 위해선아래와 구성이 비슷할 것이다. ON DUPLICATE KEY 에 대한 구성과 기능을 알아보자. INSERT INTO로 favorite 라는 테이블에 데이터를 삽입하려 한다.hno, member_nm 이라는컬럼에 VALUES로 파라미터값 #{hno}, #{memberNm}의 값을 넣는다. 이때 hno와 member_nm에 이미 값이 들어있다면ON DUPLICATE KEY 가 쓰이게 된다. ON DUPLICATE KEY 를 사용하여 만약 INSER..
게시판 댓글 기능에서 댓글은 해당 작성하고 있는게시글의 번호를 가지고 있어야 한다. 즉, 게시글 번호가 3번인 게시글에 댓글을 달려면 이 댓글은 게시글 3번 값을 가지고 있어야 한다. 보통 게시판 기능과 댓글 기능의 테이블은서로 다르다. Board 라는 게시판 글 작성테이블이 있다면 Board_Reply 라는 게시글의 댓글을작성하는 테이블이 있어야 한다. 게시글 번호의 컬럼이 hno라고 생각해보자.이 컬럼이 있는 테이블은 Board 가 될것이고, Board_Reply테이블에서는 hno 값을 가지고 있어야하기 때문에 외래키를 사용할 수 밖에 없다. 먼저 HeidiSQL 에서는 외래키 설정이 쉽다. 위처럼 그냥 메뉴탭에 외래키 설정이 있다왼쪽에 +추가 버튼 누르고 참조하려는 테이블과컬럼을 적어주면 된다. s..
컴퓨터를 하다가 갑자기 내가 최근에 만들었던 프로젝트가 생각 났다. 그래서 생각난 김에 한번 다시 실행시켜 보고프로젝트가 깃 허브에 있지만 그래도 USB로 한 번더 백업 시키고자실행을 시켜 보는데 게시판 조회수 부분에서 약간 오류가 있는거 같았다. 내가 쓴글을 내가 들어 갔을때 조회수가 늘어나지 않도록 했는데늘어나길래 컨트롤러에서 수정을 하고 기존에 쓰여있던 필요없는 sysout 이 있길래 sysout 을 지우고실행시켜봤다. 그런데 난 분면 sysout을 지우고조회수 부분도 확실히 수정을 했는데 프로젝트에 반영이 안되는것이다. 혹시 몰라 JSP부분을 수정했는데 JSP부분은 반영이 되는데JAVA파일과 sql문들이 반영이 안되는 것이다. 그리고 프로젝트 클린을 하고 실행을 하면404에러가 뜨면서 첫 화면도 ..
jstl 을 공부해서 사용하다 보면 500 에러가 생길때가 있다보통 아래의 오류는 사용 하고있는 jstl 버전이 낮을때 생긴다. 해결 방법은 간단하다 lib 에 jstl 파일을 넣어 주면된다 위 파일들을 다운받는곳은 내 블로그 jsp 카테고리에jstl을 다루는 글에서 볼수있다
eclipse 에서 톰캣을 사용하여 공부하다 보면 가끔 포트번호 오류가 나올때가 있습니다읽어보면 보통 포트번호가 중복으로 사용된다하여 서버실행이 안될때가 있는데전 이럴때 그냥 서버 포트번호를 바꿔버립니다. 먼저 위 이미지에 톰켓 서버를 더블클릭 합니다. 그럼 아래와 같은 창이 뜹니다 위의 사진에서 빨간색으로 표시된 포트번호를 바꾸고 저장합니다
eclipse 사용하다가 톰캣 오류가 생길때가 있습니다 예를들어 위와같은 오류가 나올때가 있는데 대부분 저오류의 원인은여러프로젝트를 서버에 등록해서 그렇습니다 오류를 제거하기 위해서는먼저 이클립스 화면좌측 Project Explorer 에서 Servers ->server.xml을들어가줘야 합니다 다음 server.xml 파일 맨 아래쪽에 아래이미지와같이여러 프로젝트가 서버 xml에 들어가있는것을 볼수있습니다. 실행시키려는 서버의 Context 만 남겨두고 다른 프로젝트 Context 는 지워 주시고Ctrl+s 눌러 저장해주시면 됩니다.
최근에 OKKY에서 많은 좋아요를 받아Weekly Best 에 오른글을 퍼왔다. 신입이던 신입이 아니던 한번 읽어보면 좋을것 같다. 원글 출처 : (https://okky.kr/article/681218) ============================ 2001년 1월말에 신입으로 입사해서 이제 만 19년이 막 지났네요.배도 안나왔고, 머리숱도 아직 멀쩡하고 결혼도 했으니 나름 성공했네요.뭐 딱히 글을 잘 쓰는것도 아니라서 필력좋게 길게는 못씁니다. 그간 많은분들과 일해봤었는데 (회사에서 일하거나 SI를 하거나)생각나는 아쉬운 부분들만몇가지 써볼께요. 시간 되시면 그냥 슬쩍 읽어보세요. 아.. 저는 여전히 코딩합니다. 설계도 하고요. 그냥 개발자1 입니다. 1. 디버깅디버깅은 공부를 시작했건 현업에서..
출처 : (https://okky.kr/article/576238) ================== 경력을 쌓다보니 이런저런 일을 많이 겪었습니다.그리고 이런저런 생각을 하게 되었습니다. 지난 세월동안 만난 IT쪽 인연들을 소홀히 하지 않으려 노력한 결과조금의 주기적으로 만나는 사람들이 생겼습니다.그리고 그 모임들 속에서 듣던 이야기들이 기억나서 조금 적어봅니다. 주로 신입 분들, 특히나 비전공 SI 개발자들에게 해당되지 않을까 싶습니다. 건강을 우선으로 챙기세요.건강이 무너지면 정말 모든게 무너집니다.쌍코피 터트리며 치열하게 일하고 공부하는 것도 좋지만더 좋은 것은 건강하게 공부하고 건강하게 일하는 거라고 생각합니다.공부라는것은 오래 달리기라 생각하고 하는 것이 좋고일하는 것도 오래 달리기라 생각하고..
스택오버플로우... 이 사이트는 개발 공부를 해본사람이라면 한번쯤 들어가봤을 사이트이다.전세계의 수많은 개발자들이 이 사이트를 이용해개발관련 정보를 공유한다. 나또한 웹개발 공부를할때 정말 많이사용했던 사이트이다. 지금도 많이 사용하고있다.그런데 스택오버플로우에서 올해초 재밌는 설문조사를했다. 여러 방면의 재밌는 주제로 설문조사를 했으며약 9만명의 개발자들이 설문조사에 참여했다. 심심할때 한번쯤 보면 재밌을것같다. 물론 영어로 되어있어서보기좀 힘들지만 우리에겐 한글번역이있다. https://insights.stackoverflow.com/survey/2019
블로그에 올릴 포스팅 소재거리를 찾다가 SI관련 글이 보여 내 블로그로 퍼왔다.일단 글쓴이 분은 오랜 개발자 경력을 갖고있다지금은 SI를 떠나 교육을 주로 두고 있는 듯하다.우아한형제의 우아한 테크코스 과정을 만드신분 같다. 원글 : (https://brunch.co.kr/@javajigi/4) ========================= 좋은 소프트웨어(이하 SW) 개발자를 키우고 싶다면 좋은 SW교육자를 키워라. 라는 글을 썼다.이 글은 정부에 전하고 싶은 메시지였다. 이런 글을쓰고 많은 사람들의 공감을 받는다고 세상이 쉽게변하지 않는다는 것을 안다. 특히 정부는 쉽게 바뀌지 않는다.변화는 SW개발자인 우리가 만들어야 한다. 더 빠른 변화를 만들어 가려면SW 개발자인 우리가 행동해야 한다. 나는 2..
[펌] 출처 : https://www.facebook.com/groups/codingeverybody/permalink/4294604973913339 ========================================== SI 업체에 다녀본 경험으로 취업 준비생분들, 그리고 이직 준비중이신 분들께 이 글을 바칩니다.시작하기에 앞서 제가 지금 말하는 SI 업체는 일부 악덕 SI업체를 말하는 것이며SI 회사를 다니시는 분들께는 미리 죄송하다는 말씀 드립니다.제가 말하고자 하는 SI 업체는 소위 보도방 이라고 불리는 업체이며IT랑은 전혀 관련 없는 회사라고 생각합니다.이 업체들의 특징을 나열하며 여러분들의 선택에 도움이 되시길 바라겠습니다.1. 면접을 보러 갔는데 공고란에 표기된 총 직원수 반의 반도 안..
최근 OKKY 에서 비전공자분들을 위한 좋은 글이 나와 내 블로그로 퍼왔다.OKKY에서 많은 좋아요를 받아 Weekly Best에 올라갔다. 비전공으로 개발입문을 하고자 한다면 꼭 읽어보자 원글 주소 : (https://okky.kr/article/680617) ======================================= Okky라는 국내 최대의 개발자 커뮤니티를 꽤 오랜기간눈팅하면서 때로는 자신감도 얻었고,때로는 자괴감도 얻었습니다. '와 저렇게까지 공부하고 노력하는 사람도 있구나... 대체 난 뭐하는 놈이지?' 사실 자신감보다는 자괴감을 더 많이 얻었습니다.(그 자괴감이 채찍이 돼서 겨우 여기까지 오게 된 것 같습니다.) 그렇습니다. 저는 그렇고 그런, 비전공 학원출신 개발자입니다.정말 힘..
보통 취업을 한다고 이력서를 낼때 대부분이여러 회사에 이력서를 넣어 몇십, 몇백에 가까운 이력서를내게된다. 하지만 몇가지 고려사항이 있는데이것은 이력서를 낼때나 회사에 합격해 입사선택에 있어서고려해야 할 사항들이다. 개인적으로 1, 4번 은 정말 필수 사항이다.특히 1은 어떤 사수를 만나냐에 따라 나의 성장속도가 달라지기 때문이다. 출처 : (https://okky.kr/article/581302) ========================= 학원 수료를 맞치시거나 다른업종에서 일하시다가개발자 하실려는 분들 회사고르시는데 무척이나 고생하시는거 같은데저의 첫 개발회사 입사할때느낌이라 오버랩이 많이되네요..제가 회사 고르는 기준으로 가시면 못해도 막장은 아닐꺼라 생각합니다. 1. 사수가 있는 회사로 간다...
이 글 또한 okky에서 퍼왔다.위클리 베스트에서 많은 좋아요 를 받은 글 이다. 출처 : (https://okky.kr/article/531199) ================================== 안드로이드 개발자고. 몇년차 됐습니다.사실 누군가한테 조언이란걸 하긴 부끄럽습니다. 오키에 날아다니는 분들이 얼마나 많은데... 근데, 그냥 우연히 다른 커뮤니티에서 컴공인데 입사 어떻게 해요? 라는 말에 댓글 쓰다보니제가 삽질했던 경험들이 생각나서 울컥 하면서 댓글이 죽 길어졌고, 그 댓글들을 보다보니 2가지 생각이 떠올랐습니다. 1)오키에도 신입으로 입사하려는 분들 질문글 많이 올라오는데, 조금 도움되지 않을까?2)제가 개발 실력은 그저 그래도 삽질 경험은 좀 됩니다. 하하하!(그게 자랑이냐..