본문 바로가기

개발자 일지129

[토비의 스프링 vol.1]4장 예외 -토비의 스프링 3.1 vol.1의 4장을 정리 및 실습한다. 4.1 사라진 SQLException 3장 템플릿/콜백에서 JdbcContext를 JdbcTemplate로 바꾼 후 예외를 던지는 코드가 사라졌다. //jdbcTemplate 적용 전 public void deleteAll() throws SQLException { this.jdbcContext.executeSql("delete from users"); } //jdbcTemplate 적용 후 public void deleteAll() { this.idbcTemplate.update("delete from users"); } 위의 throws SQLException이 어디로 갔을까? 이번 장에서는 그 이유를 살펴본다. 그 전에 난감한 예외처리의.. 2021. 6. 11.
[리눅스 기초]cron을 사용하여 정기적으로 실행하기 -리눅스 크론(cron)을 사용하여 정기적으로 프로세스를 실행하는 방법을 학습한다. -생활코딩의 리눅스 강의를 바탕으로 학습 및 보충학습하였다. -ubuntu 12.10을 사용하였다. 크론이란 특정 시간에 특정 작업을 자동으로 수행해야 할 때 크론(cron)을 사용한다. 스케쥴링 역할을 한다. 예를 들어 새벽 4시에 정기적으로 사용자들에게 메일을 발송하는 경우가 대표적이다. 크론 작업 설정은 crontab에서 한다. crontab은 /etc/crontab에 위치해 있다. 여기 설정된 크론 설정 정보를 통해 자동으로 수행될 프로세스가 결정된다. 크론 설정은 crontab 명령어를 통해 할 수 있다. crontab -e를 입력하면 편집할 편집기를 설정하라는 메뉴가 나온다.(최초1번만 나옴) 2번 nano를 .. 2021. 5. 16.
[토비의 스프링 vol.1]3장 템플릿 -토비의 스프링 3.1 vol.1의 3장을 정리 및 실습한다. 1장의 초난감DAO코드에 템플릿 기법을 적용하여 완성도를 높여본다. 3.1 다시 보는 초난감 DAO 3.1.1 예외처리 기능을 갖춘 DAO JDBC 수정 기능의 예외처리 코드 1장에서 만든 UserDao에 예외 처리를 추가한다. DB 커넥션 관련 코드는 리소스를 공유하기 때문에 예외가 발생하여 정상적으로 close()가 안 되면, 리소스 반환이 안 되어 나중에 리소스 부족과 관련된 에러가 발생할 수 있다. 일반적으로 서버에서는 제한된 DB 커넥션을 만들어 풀(Pool)로 관리한다. close()를 안 하면 다시 풀에 리소스를 넣지 못해서 반환하지 못한 커넥션이 쌓이면 다음 커넥션 요청 때 풀에 리소스가 없어서 서버 중단이 될 수 있다. 다음과.. 2021. 5. 16.
[토비의 스프링 vol.1]2장 테스트 -토비의 스프링 3.1 vol.1의 2장을 정리 및 실습한다. 2.1 UserDaoTest 다시 보기 2.1.2 UserDaoTest의 특징 1장에서 테스트한 UserDaoTest의 특징은 다음과 같다. 가장 손쉬운 테스트 방법인 main()을 사용 UserDao의 오브젝트를 가져와서 메소드 호출 테스트 전용 입력값(User 오브젝트)를 직접 만들어 인자로 넣음 콘솔에 결과 출력 웹을 통한 DAO 테스트 방법의 문제점 일반적으로 DAO를 테스트하는 방법은 서비스 계층, MVC 프레젠테이션 계층까지 포함한 모든 입출력 기능을 대충이라도 만든 후 서버에 배치한 후에 웹 화면에서 직접 값을 입력하여 버튼을 눌러 등록하여 테스트한다. 이러한 방법의 문제점은 다음과 같다. 시간이 오래 걸림 에러 발생시 정확히 어.. 2021. 5. 12.
[리눅스 기초]daemon,service에 관하여 -daemon의 개념 및 명령어와 이를 실행하는 service 명령어를 알아본다. -생활코딩의 리눅스 강의를 바탕으로 학습 및 보충학습하였다. -ubuntu 12.10을 사용하였다. daemon이란 백그라운드에서 항상 실행되고 있는 프로세스로 메모리에 상주해 있다가 사용자 요청이 오면 응답하는 프로세스이다. 리눅스 시스템의 1번프로세스(PID=1)인 init 프로세스가 실행한다. 데몬 프로그램의 명령어들은 명칭뒤에 d가 붙는다. httpd,ftpd 등이다. 아파치를 설치(sudo apt-get install apache2)한 후, cd /etc/init.d명령어로 디렉토리 이동후 ls -al로 명령을 내리면 apache2 데몬을 확인할 수 있다. /etc/init.d라는 디렉토리에는 데몬 프로그램들이 위.. 2021. 5. 9.
[리눅스마스터2급]1차 시험 문제 학습하기 -리눅스마스터 2급 1차 시험의 내용들을 복기하며 모르는 것들은 최소한으로 정리해본다. -족보 문제를 기준으로 나왔던 문제들을 분석하는 식으로 한다.(족보 출처는 맨 아래 명시) 리눅스마스터2급을 왜 보는가 자격증이 필요해서 따려는 것은 아니다. 그냥 번아웃 증상 완화를 위한 긴급처방 + 리눅스 관련 상식들을 전반적으로 알고 싶은 욕구 정도의 목적을 갖고 있다. 아무래도 시험이라는 목적이 있으면 단기간에 흡수하는 효율이 높아지기 때문에 출퇴근 시간이나 회사에서 짬낼 때 공부하기가 좋다. 인터넷에 족보들이 많고 구글 검색만 해도 나오기에 온라인 시험인 1차 시험은 아마 대부분 붙을 것이라고 본다. 그러나 붙고 끝나는 것이 아니라 몰랐던 것들은 최소한으로 정리해놔야 15,000원이 안 아까울 것이라고 생각했.. 2021. 5. 8.
[리눅스 기초]백그라운드, 포그라운드 프로세스 -리눅스에서 프로세스가 실행되는 방식인 포그라운드, 백그라운드 프로세스를 학습한다. -생활코딩의 리눅스 강의를 바탕으로 학습 및 보충학습하였다. -ubuntu 12.10을 사용하였다. 포그라운드와 백그라운드란 프로세스가 실행되는 방식에는 두 가지가 있다. 포그라운드(foreground)와 백그라운드(background)인데 해석 그대로 앞과 뒤에서 실행되는 프로세스를 의미한다. 포그라운드는 터미널에서 우리가 작업할 때 화면에 출력된 결과를 보고 명령을 입력하는 대화식 작업을 한다. 명령을 실행하고 결과 출력때까지 기다리는 방식으로 처리된다. 백그라운드는 포그라운드 프로세스가 실행되는 동안에 뒤에서 다른 프로세스를 실행하여 한 터미널에서 여러 프로세스를 동시에 실행한다. 데몬, 백신 프로그램같은 것이 예이.. 2021. 5. 6.
[리눅스 기초]파일을 찾는 방법(location,find,whereis) -리눅스에서 파일, 명령어 정보를 찾는 명령어들을 알아본다. -생활코딩의 리눅스 강의를 바탕으로 학습 및 보충학습하였다. -ubuntu 12.10을 사용하였다. find 리눅스에서 파일을 검색할 때 가장 기본적으로 사용되는 명령어이다. 단점은 처음부터 하나씩 검색을 수행하여 속도가 느리다는 것이다. 그렇기 때문에 다음에 소개할 locate를 더 많이 사용한다. find . -name *.log : 현재 디렉토리(.)를 기준으로 모든 log확장자를 가진 파일 검색 find / -name *.log : 루트디렉토리(/)를 기준으로 모든 log확장자를 가진 파일 검색 find ~ -name *.log : 자신의 홈디렉토리(~)부터 모든 log확장자를 가진 파일 검색 find . -type f -name tec.. 2021. 5. 4.
[리눅스 기초]프로세스 확인하기(ps, top) -리눅스의 프로세스를 확인하는 명령어와 옵션들을 살펴본다. -생활코딩의 리눅스 강의를 바탕으로 학습 및 보충학습하였다. -ubuntu 12.10을 사용하였다. 실행중인 프로그램을 '프로세스'라고 한다. 프로세스를 보기 위한 명령어는 ps와 top가 있다. ps와 top 명령어의 차이가 어떤건지 헷깔렸는데 KLDP에 잘 정리가 된 댓글이 있었다.(출처는 글 마지막에 명시) top : 그때 그때의 cpu 사용률. ps : 프로세스 전체 사용시간 동안의 cpu 사용률 top은 모니터링 툴, ps 는 스냅샷이라고 비유했다. 또 다른 블로그들에 공통적으로 정리된 차이점이 있는데, ps는 ps한 시점에 proc에서 검색한 cpu 사용량 top은 proc에서 일정 주기로 합산해 cpu 사용율 출력 라고 정리되어 있다.. 2021. 5. 3.
[ibatis]SELECT 결과가 이상할 때(remapResults 사용하기) -실무에서 ibatis 사용시 SELECT 쿼리 콘솔 결과와 실제 애플리케이션 출력 결과가 다른 문제를 발견하였다. -이 문제를 해결하기 위한 remapResults라는 아이바티스 xml 속성을 알아본다. 프로젝트가 오래된 시스템이라 아직도 ibatis를 사용한다. 사실 xml에 작성하는 쿼리들의 기본적인 속성들은 알아도 모르는 속성들이 상당히 많다. 대표적으로 어제 알게된 remapResults라는 속성... 쿼리... 위처럼 false로 잡혀 있었는데 이게 왜 잡혀있는지 궁금해하지 않았음에 반성한다ㅜㅜ 일단 발생한 문제는 다음과 같다. 메뉴를 클릭하면 조회할 데이터 리스트를 불러온다. 그때 저 위의 getList라는 이름의 쿼리를 사용한다. 그리고 리스트 위에 엑셀 다운로드 버튼이 있는데 이것을 클릭.. 2021. 4. 23.
[인프런]파이썬 알고리즘 기초 문법 정리2 -파이썬의 기초적인 문법과 새로 알게된 문법 등을 정리한다. -인프런의 김태원님 파이썬 강의를 학습한 내용을 간단하게 정리한다. 문자열과 내장함수 파이썬은 문자열과 관련한 여러가지 내장함수가 있다. 문자를 대문자료 표현, 소문자로 표현, 문자 안의 특정 값 찾기, 문자 길이 찾기 등 여러가지 함수가 있으니 기본적인 건 다 익혀둬야 할 것 같다. msg="It is Time" print(msg.upper()) #IT IS TIME print(msg.lower()) #it is time tmp=msg.upper() print(tmp.find('T')) #1 (T라는 문자 찾아 인덱스 번호 반환) print(tmp.count('T') #2 (T라는 문자 개수 반환) print(msg[:2]) #It (처음부터.. 2021. 4. 18.
[인프런]파이썬 알고리즘 기초 문법 정리1 -파이썬의 기초적인 문법과 새로 알게된 문법 등을 정리한다. -인프런의 김태원님 파이썬 강의를 학습한 내용을 간단하게 정리한다. 변수와 출력 등 변수 대입 방법과 출력 방법 등을 아래와 같이 정리하였다. a,b=10,20 #a=10, b=20과 같은 의미 print(type(a)) #a의 타입을 알려준다(int) c=10.5 print(type(c)) #c의 타입을 알려준다(float) d='student' print(type(d)) #d의 타입을 알려준다(str) a,b,c = 1,2,3 print(a,b,c, sep=',') #1,2,3이라는 결과가 나옴. sep은 separator의 약자로 출력값 사이에 원하는 sep을 넣을 수 있음 #end로 내려쓰기를 띄어쓰기로 바꾸기(결과는 1 2 3) pri.. 2021. 4. 11.
[토비의 스프링 vol.1]1장 오브젝트와 의존관계 -토비의 스프링 3.1 vol.1의 1장을 정리 및 실습한다. 1장은 스프링 관심 대상인 오브젝트 설계와 구현, 동작원리 등을 dao 예제를 통해 설명하려고 한다. 개인적으로 토비의 스프링은 시도할 때마다 새롭게 뭔가 보이는게 있어서 좋은 것 같다. 디자인패턴을 조금 공부하고 나니(아직 맛보기 수준이지만..) 좀 더 이해가 깊어진 것 같기는 하다. 이 책은 간단하게 요약하면 나중에 봤을 때 항상 뭔 흐름인지 헷깔리고 실제로 너무 좋은 내용이 많아서 쌩요약보다는 좀 길더라도 적절하게 요약했다. 나중에 책 대신에 차근차근 빠르게 읽을 수 있을 정도로만 요약헀다. 1.1 초난감 DAO 사용자 정보를 JDBC API를 통해 DB에 저장하고 조회하는 간단한 DAO를 아래와 같이 만든다. 1.1.1 User DAO.. 2021. 4. 9.
[파이썬 기초] XSS(Cross-Site Scripting) 개념 및 방어 방법 -보안공격인 XSS(Cross-Site Scripting)에 대해 알아보고 이를 파이썬에서 막는 방법을 살펴본다.-CSRF(Cross-Site Request Forgery)와의 차이점을 간단하게 살펴본다.-생활코딩 파이썬 강의를 바탕으로 학습 및 보충학습 하였다.-파이썬은 3.9.2 ver를 사용한다.XSS란? 가장 흔한 보안 공격 중 하나로 공격자가 웹사이트에 스크립트 태그()를 사용하여 쿠키탈취나 특정 코드를 실행하여 공격하는 보안 공격을 말한다. 학습 중 CSRF(Cross-Site Request Forgery)라는 보안 공격이 생각나서 차이점을 찾아보았다. CSRF의 개념 및 XSS와 CSRF 차이점  CSRF는 해석하면 사이트 간 요청 위조이다. 사용자가 자신의 의지와 무관하게 공격자가 의도한 .. 2021. 4. 4.
[파이썬 기초]함수,모듈 작성법 및 활용 -함수를 작성하는 방법과 모듈을 작성하는 방법을 학습한다. -함수,모듈로 이전에 만든 웹어플리케이션 예제를 리팩토링 해본다. -생활코딩 파이썬 강의를 바탕으로 학습 및 보충학습 하였다. -파이썬은 3.9.2 ver를 사용한다. 함수 사용법 파이썬에서 함수 작성법은 다음과 같다. def 함수명(): 코드... 평균값을 구하는 함수를 작성하면 다음과 같다. func.py #평균을 구하는 함수 def average(a,b,c): s=a+b+c r=s/3 return r #합을 구하는 함수 def plus(a,b): return a+b #pi값 pi = 3.14 #평균값 출력 print(average(10,20,30)) def라는 키워드는 함수의 시작을 의미한다. average() 함수를 예로 살펴보면, 함수명.. 2021. 3. 28.
[파이썬 기초]form 데이터 전송 및 처리방법(CRUD-Delete) -HTML form태그를 이용하여 파이썬 애플리케이션이 데이터를 받아서 처리하는 방법을 알아본다. CRUD중 Delete를 구현한다. -생활코딩 파이썬 강의를 바탕으로 학습 및 보충학습 하였다. -파이썬은 3.9.2 ver를 사용한다. (이전 파이썬 포스팅 예제와 연결되니 참고 부탁드립니다) CRUD의 마지막인 Delete를 만들어본다. Delete는 os.remove 함수로 간단하게 만들 수 있다. Delete 버튼 만들기 우선 delete버튼을 만드는데 delete버튼을 a태그를 통한 링크 방식으로 만들면, 누군가 링크를 공유한 경우 그 사람들도 delete를 할 수 있는 보안 문제가 발생하기 때문에 form 방식으로 다음과 같이 만든다. index.py 일부 if 'id' in form: pageI.. 2021. 3. 24.
[파이썬 기초]form 데이터 전송 및 처리방법(CRUD-Update) -HTML form태그를 이용하여 파이썬 애플리케이션이 데이터를 받아서 처리하는 방법을 알아본다. CRUD중 Update를 구현한다. -생활코딩 파이썬 강의를 바탕으로 학습 및 보충학습 하였다. -파이썬은 3.9.2 ver를 사용한다. (이전 파이썬 포스팅 예제와 연결되니 참고 부탁드립니다) 목록의 데이터를 클릭하여 목록제목과 내용을 업데이트하는 방법을 알아본다.create버튼 옆에 update버튼을 만드는데, WEB이라는 메인페이지로 이동하면 update버튼이 안보이고 목록을 클릭하면 update버튼이 보이도록 분기처리한다. update 버튼 만들기 index.py 일부 form = cgi.FieldStorage() #a태그 클릭시 id값에 따른 pageId 분기처리 if 'id' in form: pa.. 2021. 3. 24.
[디자인패턴]빌더 패턴(Builder Pattern) -객체를 생성하는 패턴 중 하나인 빌더 패턴(Builder Pattern)을 알아본다. -빌더 패턴 이전에 객체를 생성하는 가장 일반적인 패턴인 점층적 생성자 패턴, 자바빈 패턴을 먼저 알아본다. -이번 포스팅은 기계인간 John Grib님의 블로그를 많이 참고하여 학습하였다.(출처는 아래에 표시) 빌더 패턴이란? 객체를 생성하는 방법은 여러가지가 있는데, 일반적으로 생성자에 인자를 넣어 인스턴스를 생성하는 방법이나 setter를 이용하는 자바빈 패턴을 많이 사용한다. 빌더패턴은 이런 패턴들의 단점을 좀 더 개선한 방법이다. 우선 빌더 패턴을 소개하기 전에 점층적 생성자 패턴, 자바빈 패턴을 소개한 후, 이들의 단점을 개선한 빌더 패턴을 마지막으로 소개한다. 점층적 생성자 패턴 생성자를 통한 인스턴스 생.. 2021. 3. 21.
[파이썬 기초]form 데이터 전송 및 처리방법(CRUD-Create,Read) -HTML form태그를 이용하여 파이썬 애플리케이션이 데이터를 받아서 처리하는 방법을 알아본다. CRUD중 Create, Read를 구현한다. -생활코딩 파이썬 강의를 바탕으로 학습 및 보충학습 하였다. -파이썬은 3.9.2 ver를 사용한다. (이전 파이썬 포스팅 예제와 연결되니 참고 부탁드립니다) form을 통해서 데이터를 입력하고 submit(제출,전송)하는 방법을 알아본다. form은 HTML의 주요태그로 내부의 input,textarea 등의 태그에 입력된 값을 서버쪽으로 전송해주는 기능을 한다. 이를 통해 CRUD의 Create, Read를 구현한다.(Read는 이미 구현되어 있기에 Create만 구현한다) 다음 예제는 index.py 화면에 create버튼을 만들고, 버튼을 클릭하면 for.. 2021. 3. 21.
[파이썬 기초]반복문(for,range,while) 및 반복문 활용 -파이썬의 반복문(for,range,while)에 대해 학습한다. -반복문을 활용하여 예제 화면의 서브타이틀(서브메뉴)를 반복문으로 뽑아본다. -생활코딩 파이썬 강의를 바탕으로 학습 및 보충 학습하였다. -파이썬은 3.9.2 ver를 사용한다. 반복문이란 프로그래밍에서 조건문(if)과 함께 가장 대표적인 문법이다. 특정 로직이나 명령 등을 여러 번 실행해야 한다면 여러 번 코드를 써주는 것이 아니라 반복문을 통해 자동적으로 반복되도록 해주는 문법이다. 대표적으로 for,while이 있으며 파이썬에는 range()라는 함수가 존재한다. 반복문 예제 예제는 아래와 같다. #for문을 사용한 list for value in ['kim','park','yoon']: #kim park yoon print(valu.. 2021. 3. 19.