메일 발송 함수를 만들어, 다양한 자동화 프로그램에서 이용하기

* 참고로, 네이버 메일 발송 함수를 이해하면 Target을 구글 등으로 변경해서 이용하기 쉽고, 본인이 개발하거나 구상하는 여러 업무 자동화 프로젝트에 호출만 하면 되기에 활용도가 매우 높음.
'함수명 (변수로 수신받는자, 메일 제목, 메일 내용, 첨부파일)' 만 호출하면 됨
* 메일 발송은 실제 메일 서버를 구축해서 직접 발송하는게 아니라, 네이버에 메일을 보내주세요. 라고 요청하는 것입니다. 따라서 특정 규격(SMTP)에 만 맞게 설정하면 됩니다. 기본적으로 서버명, 포트(465), 이용자, 비밀번호 정도를 가지고 요청합니다. 포트 번호 등 확인이 원하시면, 네이버 메일에 접속하셔서 [네이버메일 > 환경 설정 > POP3/IMAP 설정 ] 화면에 서버명과 포트 정보를 확인하실 수 있습니다.

네이버 환경설정 > POP3/SMTP 설정 화면.

* 메일 발송은 2가지 타입을 만들어서 이용하는 것을 추천

  메일 제목 메일 내용 참조 숨은 참조 첨부파일 유무
간단 메일 발송 O O X X O
대량 메일 발송 O O O O O

* 첨부파일 유무에 따른 소스는 10줄 내외로 복잡하지 않으며, 메일 발송시에도 첨부파일이 없는 경우 함수 호출할 때 첨부파일명을 생략하면 기본값(False) 로 처리되어 추가 작업을 해줄 게 없다.
* 다만, 참조, 숨은 참조는 기능 등에 따라 구현이 필요 없을 수도 있다. CC(참조), TO(수신자)를 설정한 후 발송하면 TO, CC목록에 없는 이메일 주소는 BCC(숨은참조)가 되는 것이다.
* 다수에게 발송할 경우 기본적으로 TO, CC, BCC는 콤마(,)를 구분자로 하여 문자열로 던져주면, 규격에 맞게 함수에서 smtp요청시 배열로 변경하여 발송하고 있음.
아래의 샘플소스는 네이버메일, 비밀번호만 변경해서 저장한 후 바로 이용 가능하다.

# 간단 네이버 메일 발송(my_navermail.py)  #
from email.mime.text import MIMEText          # 여기서 부터
from email.mime.multipart import MIMEMultipart
from smtplib import SMTP_SSL
from email.mime.base import MIMEBase
from email import encoders                            # 여기까진 메일 발송을 위한 라이브러리

from os.path import basename                       # 파일 경로 확인 목적

SMTP_SERVER = "smtp.naver.com"             # 메일발송 요청서버
SMTP_PORT   = 465                                      # 공통
SMTP_USER   = "naverID@naver.com"        # 네이버 계정(메일)
SMTP_PASSWORD = "naver_password"      #비밀번호 기재로, 해당 파일 관리 잘 해야 함


def send_email(recvs, mail_title, contents, attachment=False) :
    msg = MIMEMultipart("alternative")            # 기본은 첨부파일이 없는 경우
    
    if attachment :                                             # 만약 첨부파일이 있다면,
        msg = MIMEMultipart('mixed')
        file_data = MIMEBase('application', 'octet-stream')        
        f = open(attachment, 'rb')
        file_contents = f.read()
        file_data.set_payload(file_contents)
        encoders.encode_base64(file_data)

        filename = basename( attachment )
        file_data.add_header('Content-Disposition', 'attachment', filename=('utf-8', '', filename))
        msg.attach(file_data)

    msg['From'] = SMTP_USER
    msg['To']   = recvs
    msg['Subject'] = mail_title
     
    text=MIMEText(contents)
    msg.attach(text)

    smtp = SMTP_SSL(SMTP_SERVER, SMTP_PORT)
    smtp.login(SMTP_USER, SMTP_PASSWORD)
    smtp.sendmail(SMTP_USER, recvs.split(','), msg.as_string())
    smtp.close()

#호출은 다른 py파일에서 import하여 호출

from  my_navermail import send_email 
send_email('receiver@mail.com', '홍길동님, 메일이 왔습니다.', 'Welcome to Python')
send_email('receiver@mail.com', '홍길동님, 메일이 왔습니다.', 'Welcome to Python', 'auto.xlsx')

만약, 참조와 숨은 참조를 이용하려고 한다면, 위의 my_navermail.py 파일에 아래의 함수를 추가한다.

def send_email_with_cc(recvs, cc, hidden_cc, mail_title, contents, attachment=False) :
    msg = MIMEMultipart("alternative")

    if attachment :
        msg = MIMEMultipart('mixed')
        file_data = MIMEBase('application', 'octet-stream')
        f = open(attachment, 'rb')
        file_contents = f.read()
        file_data.set_payload(file_contents)
        encoders.encode_base64(file_data)

        filename = basename( attachment )
        file_data.add_header('Content-Disposition', 'attachment', filename=('utf-8', '', filename))
        msg.attach(file_data)

    msg['From'] = SMTP_USER
    msg['To']   = recvs    
    msg['CC'] = cc
    msg['Subject'] = mail_title
    targets = ','.join((recvs, cc, hidden_cc))
     
    text=MIMEText(contents)
    msg.attach(text)

    smtp = SMTP_SSL(SMTP_SERVER, SMTP_PORT)
    smtp.login(SMTP_USER, SMTP_PASSWORD)
    smtp.sendmail(SMTP_USER, targets.split(','), msg.as_string())
    smtp.close()

#호출은 다른 py파일에서 import하여 호출하고, cc(참조)와 bcc(숨은참조)를 콤마(,) 로 구분하여 입력하여 발송.

from my_navermail import send_email, send_email_with_cc

send_email_with_cc('recv1@mail.com, recv2@mail.com', 'cc1@mail.com, cc2@mail.com', 'bcc1@mail.com', '홍길동님, 메일이 왔습니다.', 'Welcome to Python' )

send_email_with_cc('recv1@mail.com, recv2@mail.com', '', 'bcc1@mail.com', '홍길동님, 메일이 왔습니다.', 'Welcome to Python' )
send_email('recv1@mail.com, recv2@naver.com', '홍길동님, 메일이 왔습니다.', 'Welcome to Python' )
Posted by 목표를 가지고 달린다
,

shutil : 파일, 폴더와 관련된 함수와 클래스를 제공하는 라이브러리
os : 운영체제와 관련된 함수와 클래스를 제공하는 라이브러리

* listdir : 폴더의 파일 목록 조회
* makedirs : 폴더 생성
* isdir : 폴더가 이미 존재하는지 확인
* copyfile : 파일 복사

from os import listdir, makedirs
from os.path import isdir
from shutil import copyfile

input_dir = 'C:\\input\\'
output_dir = 'C:\\output\\'

file_list = listdir(input_dir)
for file in file_list :
    f_name = file[3:-4] + '.xlsx'
    if not isdir(output_dir) :
         makedirs(output_dir)
    copyfile(input_dir + f_name, output_dir + f_name)

위는 단순히, input_dir폴더에 있는 것을 output_dir폴더로 옮기는 것이다. 만약 특정 기준으로 폴더별로 옮기거나 , 파일명을 바꿀 수도 있다. 파일복사 참 쉬움...copyfile 끝.
* (폴더 복사) shutil.copytree : 원본 폴더가 파일이거나, 대상경로에 파일 또는 폴더가 존재할 경우 오류 발생
* (폴더 삭제) shutil.rmtree : 입력값이 파일인 경우 오류 발생
* (파일 삭제) shutil.unlink : 입력값이 폴더인 경우 오류 발생
ex) from shutil import copytree
copytree('c:\\input_dir' , 'c:\\output_dir')
rmtree('c:\\output_dir')
unlink('c:\\input_dir\\download.txt')
* (파일 삭제) shutil.unlink : 입력값이 폴더인 경우 오류 발생
* 파일열기 및 쓰기(CSV 파일 포함)
afile = open('test.csv' , 'w')
afile.write('년월,매출\n')
* 파일열기 및 읽기
ex) f = open(testfile , 'r')
while True :
row = f.readline()
if not row :
break


파이썬 엑셀다루기

* openpyxl 이용... (cmd 창에서 > 'pip install openpyxl' 로 설치)
회사 PC의 경우 파일 암호화 등으로 오류 발생이 가능하므로, try 문을 추가하여 트러블 슈팅에 참고...

from os import listdir
from openpyxl import load_workbook, Workbook

jobdir = "C:\\workspace\\org\\"
outdir = "C:\\workspace\\out\\"
files = listdir(jobdir)

files.sort(reverse=True)

result_xlsx = Workbook()
result_sheet = result_xlsx.active        #최근 활성화된 탭


try :
    for myfile in files :
        if myfile[-4:] != "xlsx" :                    # 폴더에서 엑셀파일이 아닌 경우 skip
            continue
        print(myfile)
        tg_xlsx = load_workbook(jobdir + myfile, read_only=True)
        tg_sheet = tg_xlsx["Sheet1"]
        
        for row in tg_sheet.iter_rows() :
            row_data = []
            for cell in row :
                row_data.append(cell.value)
            result_sheet.append(row_data)

     result_xlsx.save(outdir + "result.xlsx")
except Exception as e :
    print(e)
finally :
    print('end')

정말 단순

#특정셀, 열, 행을 읽는 샘플 코드#


from openpyxl import load_workbook

xlsx = load_workbook('sample.xlsx', 'read_only=True) #read_only로 읽으면, 필요시마다 행간을 메모리로 읽어 속도 향상
sheet = xlsx.active

rows = sheet['1:2']           # 1~2행 읽기
rows = sheet['1']              # 첫 번째 행 가져옴
for row in rows :              # A1, B1, C1 읽기
col    = sheet['A']              # 첫 번째 열을 가져옴
for cell in col :                  # A1, A2, A3 읽기..

wb.close()                        # 닫기.

 

Posted by 목표를 가지고 달린다
,

"내일을 바꾸는 업무 자동화" 프리렉(2020년)

기본 IT 소양이 있는 개발자라면, "Head First 파이썬"과 본 도서를 추천한다. 해당 도서가 2년이 지났기에 책에 나온대로 설치를 하다보면 라이브러리 버전 차이로 실행이 되지 않아 간혹 인터넷에서 새로운 버전에 따른 문법을 찾아야 할 때도 있지만, 전체적으로 "파이썬이 편리하다." 라는 생각과 자바처럼 "반복되는 코드없이 단순하게 호출하고 이용하는 것에 경이롭다."는 생각도 든다.

본 후기는 파이썬을 처음 접하는 개발자가 책을 읽지 않더라도 또는 내용이 기억나지 않은 파이썬 입문자를 위해 정리한 것이다. 개인적으로 책을 읽는 것을 추천하고, 책을 읽은 후 자기업무(생활)에 활용해 볼지 고민할 수 있는 시간을 갖기 바란다.


  1. 파이썬 설치 : https://www.python.org : 이하 설명 생략(easy)
  2. PyCharm, IDLE Shell, Visual Studio Code, Atom 등을 설치하면서 환경설정(설치과정에 포함됨)을 하면, CMD 창이 아니라 편집기에서 F5로 실행 가능.
  3. CMD 창에서 c:\> pip install library-name 을 수행하면 해당 라이브러리의 최신 버전을 설치하고, 유지보수, 참고자료의 버전 등 이유로 과거버전을 다운 받을려면, c:\> pip install library-name==3.4(원하는 버전) 을 수행하면 된다.
    cf) 설치삭제= c:\> pip uninstall library-name
    cf) 버전확인= c:\> python (enter)
    >>> import library-name
    >>> print(library-name.__version__) -- 버전 출력
  4. 자동화 프로그램 : 프로그램 개발 이후 crontab(리눅스 등), 시작프로그램 등록(윈도우) 등을 통해 실행
    ex) 네이버 메일 발송, 네이버 기사 크롤링(모두 100줄 이하로 간단)
    ex) 인스타그램 로그인 후, 좋아요 클릭 등
    ex) 특정사이트 게시판 읽어서 엑셀 파일로 정리한 후, 네이버 메일 발송
  5. 웹서비스 : 장고(큰 규모), 플라스크(작은 규모) 등을 이용하여 서비스
  6. BOT : 텔레그램(https://core.telegram.org/bots/api) 을 활용하여 챗봇 서비스

기본적인 X 곱하기 Y = X * Y 이런 내용은 생략한다.(^^, 생소하다면 블로그가 아닌 책을 읽으셔야 합니다)

가. x*y : print('*' * 7) > ******* : 문자열(*)을 숫자 Y번(7번) 반복하는 연산자다. 만약 x(문자) + y(숫자)인 경우에는 형변환이 발생하지 않아, TypeError 오류 발생. 즉, print('홍길동' + 100) 은 오류이다.

나. 인덱스가 잼이 있다. 인덱스 숫자가 양수, 음수 모두 가능하며 첫글자는 0으로 시작한다. 접근 편리함

문자열(data) Y o u C a n d
인덱스(양) 0 1 2 3 4 5 6
인덱스(음) -7 -6 -5 -4 -3 -2 -1

* 슬라이싱(문자열에 대한 접근 범위) : print(data[2:4]) > uCa, print(data[:4]) > YouCa, , print(data[:]) > YouCand, print(data[-4:-2]) > Can, print(data[-4:]) > Cand

다. 문자열 내장함수 :
* data.count('0') > 1 (문자열에 특정 문자(열)의 수 반환)
* data.find('C') > 3 (문자열에 특정 문자(열)의 가장 작은 위치 반환, 없으면 -1 반환)
* '#'.join(data) > Y#o#u#C#a#n#d (문자열 사이에 특정 문자를 추가한 결과를 반환)
* data.upper(), data.lower() > (문자를 대문자(소문자)로 변환하여 반환)
* data.split('C') > You and (특정 문자로 문자열을 쪼개서 반환)
* data.strip() > (문자 양 끝의 공백 문자를 제거하여 반환, 자바의 trim() 기능)
* data.isdigit() > false (숫자만으로 이루어졌는지 검증 true/false)
* f-string포매팅(문자열에 변수를 쉽게 포함할 수 있게 지원)
ex) name = '홍길동'
age = 18
res = f'My name is {name} and i am {age} old.'

라. 리스트 : data = ['data1','data2','data3']
* x + y : 리스트(x) 와 리스트(y) 연결(자바의 arraycopy() 기능 수행, 직관적인 프로그래밍ㅋ)
* x * y : 리스트(x) 를 y번 반복, 리스트(x) + 리스트(x) + 리스트(x) .. y 번 수행.
* 항목 삭제(위치, 값 기준) : del(data[2]), data.remove('data2')
* 항목 추가(맨 뒤) : data.append('data4')
* 정렬 : data.sort()
* 순서 역전 : data.reverse(), data.sort(reverse=True)
* 특정 위치에 항목 추가 : data.insert(1, 'data1.3')
* 특정값 갯수 반환 : data.count('data1')

마. 튜플 : 리스트와 동일. 주의해야 할 점은 값이 1개일 경우 변수명=(값1,) 과 같이 값 뒤에 ','를 표기해야 함. 그리고 상수처럼 수정이 불가능하다. 즉 처음 만든 이후로는 수정되지 않는데 개발자의 실수를 차단할 목적이라고 함. ex) data = (1,)
>>> print(data)
>>> (1,)

바. 딕셔너리 자료형 : key-value 형
* 변수명 = {'key1' : 'value1', 'key2':'value2', 'key3':'value3'}
* data.keys(), data.values(), data.items(), data.get('key1'), data.get('key3',0) 등이 가능하다. 마지막은 키값이 없을 경우 기본값을 지정할 수 있다.

사. if문 : 기본적으로 파이썬은 { } 가 없다. indent(탭)으로 구분하므로,
if 조건 :
코드1
elif 조건2 :
코드2
else :
코드3
형식이다. 이런 띄어쓰기 때문에 본인 보기 편한대로 편집하다 IndentationError : unexpected indent 오류가 발생할 수 있다. 문자열, 리스트, 튜플, 딕셔너리는 비어있으면(empty) false이고, 숫자인 경우 0이면 false 그외 모두 true 이다.

아. for, while : if문 과 동일하게 { } 대신 인덴트(탭, 띄어쓰기)를 이용하고, for, while 키워드 옆에 ':' 를 붙인다.
* for elem in elems : , while data-list :

자. 함수 정의 :
* def 함수명 (전달값_변수명, 전달값_변수명....) :
코드 1....
return data (반환값 없으면 return 생략)

차. range : 범위의 갯체를 반환
* range(A) : 0 ~A-1 까지 순번을 가진 range 객체 반환
* range(A, B) : A ~ B-1 까지 순번을 가진 range 객체 반환
* range(A, B, C) : A ~ B-1 까지 C간격으로 순번을 가진 range 객체 반환, C는 음수도 가능

카. class : 자바랑 동일한데 차이점은 함수, 변수 호출시 self 추가.(정의할때만 사용하고 이용할 때는 생략)
* class 클래스명 : << (형식)
변수명 = 값
def 함수명(self, 전달값_변수명, ..)
코드내용
* class Email : << (예제)
sender = 'dddd@gmail.com'
def send_mail(self, recv, subject, content) :
print(self.sender)
print('**', 20)
e = Email()
e.send_mail('hhhh@gmail.com', 'Welcome','Nice to Meet U')
* 클래스 활용 : from 파일명 import 클래스명, 클래스명...
cf) 만약 import한 여러 라이브러리들 간에 이름이 중첩이 된다면, 'as 별칭' 으로 구분
from my_email import send_email as SE
cf) 본인이 작성한 파일을 불러 이용할 때 from import 활용하며, import를 생략하면 from 파일명에 선언된 모든 함수와 클래스를 이용가능

타. 주석 : 한줄은 '#'을 이용하고, 여러줄은 ''' ''' 를 이용한다. 또는 편집기의 (un)comment 기능 활용.

이상 기본 문법적인 내용을 마치고, 메일발송(1), 크롤링(요소 검색법 포함), 인스타그램 자동로그인, 게시물 검색 에 대해 개별적으로 알아보자.

 

Posted by 목표를 가지고 달린다
,

자녀가 능력과 용기를 믿고, 기회를 제공하자.

  • 독립심 키우기 : 부모가 아이의 일을 도맡아 하는 것은 아이의 능력과 용기를 의심하는 것이나 마찬가지 이다. 이것은 아이가 능력을 단련할 수 있는 기회를 빼앗는 것이거니와 아이의 적극성에 공격을 가하는 것이다. 과거에는 귀족이 자식을 다른 귀족의 성에 보내 도전과 고생을 통해서 독립심을 키우는 것이 지식을 쌓는 것보다 더 중요하다고 생각해서 많은 가정이 이 전통이 계승했다고 한다. 아이는 공포심과 무력감이 들 때 본능적으로 부모를 찾고 부모의 사랑은 아이에게 따뜻함과 힘을 준다. 하지만 이런 편안함은 자칫 부모에게 의존하게 만들어 감정적으로 독립하지 못하고 정서적으로 다른 사람의 영향에 쉽게 흔들리게 한다.
  • 심리적 수용력 단련하기 : 역경과 좌절은 사람의 의지를 더 강인하게 만드는데, 강인한 의지로 역경을 이겨낸 사람은 실패의 교훈과 성공의 경험을 바탕으로 더 많은 생명력과 경쟁력을 가지기 때문이다. 따라서 아이가 용감하게 좌절을 대하게 하려면 어릴 때부터 심리적 수용력을 단련시켜야 한다. 사람은 살면서 누구나 한 번쯤 어려움과 좌절을 겪으므로 반드시 강인한 사람이 되어야 한다. 나약한 사람은 좌절 앞에 쉽게 무릎을 꿇지만 강인한 사람은 역경일수록 용기를 내서 결국에는 성공한다. 부모는 아이가 잔혹한 현실의 영향을 받지 않게 이상적인 환경을 제공하려 하지만, 아이가 현실의 문제를 처리하는 능력을 배우지 못하면, 자꾸만 현실을 도피하고 싶은 심리에 시달리게 된다.

  • 열심히 쟁취하기VS과감히 포기하기

  • 경청하기 : 경청은 부모가 아이에 대한 사랑과 존중을 표현해서 아이가 자신의 능력을 인식하게 만드는 좋은 교육방법이다. 아이는 자신의 생각을 자유롭게 발표했을 때 무시와 조롱을 받지 않으며 더 이상 자신의 생각을 말하는데 주저하지 않고, 가정, 학교, 사회에서 일어난 각종 문제도 용감하고 자신 있게 처리한다. (가족회의)
Posted by 목표를 가지고 달린다
,

최선을 다해 가르치자. 무엇을 어떻게 가르칠지 고민하자.

 

  • 행동기록장 : 행동 기록장을 통해 스스로 반성하는 습관을 가지도록 했다. 사람들은 항상 많은 것을 행동하고 생각한다. 그리고 이중에는 맞는 것도 틀린 것도 있다. 하지만 사람은 늘 나쁜 기억은 잊고 좋은 것만 기억하기에 행동 기록장이 있으면 스스로 반성하며 올바른 방향으로 발전하게 된다. 다만, 선행만 기록하면 훗날 항상 자기가 옳다고 주장할 수 있기에 스스로 반성하게 하기 위해서는 나쁜 행동도 기록하게 하는 것도 좋다.

  • 부모가 먼저 솔선수범한다 : 보통 어린 아이들은 주변의 사물을 정확하게 판단하지 못하고 도둑질과 같은 행동의 본질을 잘 이해하지 못한다. 아이들이 보는 도둑질의 기준은 질이 아니라 양이다. 그래서 적은 양을 몰래 가져가는 건 도둑질이 아니라고 생각한다. 따라서 아이에게는 사물의 본질을 분명히 가르쳐야 한다.
  • 돈 벌기가 얼마나 어려운지 가르친다
  • 돈 쓰는 법을 가르친다
  • 어떻게 해야 아이의 버릇이 나빠지지 않을까 : 지나치게 아이를 아껴서도, 또 지나치게 아이를 질책해서도 안된다.
  • 최선을 다하는 습관
  • 어떻게 해야 나쁜 습관이 생기는 것을 막을 수 있을까 : 아이들은 막다른 골목에 몰려 무력감에 어찌할 바를 모르다가 결국 화를 내고 만다. 아이가 기분이 나쁠 땐 되도록 신경을 건드리지 말고, 어려움을 겪을 땐 괜한 말로 자극하지 말고 평정을 되찾을 때까지 기다렸다가 천천히 지도하는 것이 좋다. 간단히 폭력을 써서 아이를 '진압'하지 말고 냉정함을 유지해야 한다. 부모는 아이의 나쁜 성격에 상을 줘서도 안되고 벌을 줘서도 안 되며 화를 내면 원하는 것을 얻기는 커녕 오히려 잃게 된다는 것을 가르쳐야 한다. 물론 왜 그래야 하는지 아이에게 이치를 설명해주는 것도 잊지 말아야 한다. 아이들이 커갈수록 점점 성격이 나빠지고 부모의 말을 잘 안 듣는데 이것은 아이가 서서히 독립적으로 변해간다는 뜻이다. 하지만 이때 가정교육을 소홀히 하면 아이가 나쁜 습관 더 나아가 악습에 쉽게 물들 수 있이므로 주의해야 한다.

  • 아이가 '악습'에 물들 때 : 아이의 자존심을 보호하는 것은 자녀교육의 전제조건이다. 결코 사람들 앞에서 아이를 혼내지 않아야 한다. 아이의 자존심은 여린 꽃잎같아서 상처가 잘 생긴다. 반복해서 자존심에 상처를 입히면 아이의 성격과 심신의 건강에 적신호가 켜진다. 부모는 아이의 명예감도 보호해야 한다. 사람은 누구나 인정과 격려를 받고 싶어하는데, 특히 부모에게 인정받는 것은 아이의 심신의 건강과 발전에 매우 중요하다. 특히 친구들 앞에서 창피를 당할 경우 두고두고 아이들의 놀림거리가 되어 장기적으로 심리적 장애를 앓을 수 있어 주의해야 한다. 자녀교육은 인내심을 최고로 요하는 일이다. 불같이 화내며 아이를 때리고 욕하면 표면적으로 아이의 버릇을 고친 것 같지만 사실상 해결된 것은 아무것도 없다. 가장 좋은 자녀교육법은 마음을 평화롭게 가지고 온화하게 말하는 것이다 .이렇게 하면 강압적으로 하지 않아도 자연히 부모의 권위가 선다. "하지 마!", "그만 둬" 이런 소극적이고 부정적인 말은 아이에게 무력감과 열등감을 안겨준다. 그래서 "이렇게 해봐", "열심히 하렴" 등 적극적이고 긍정적인 말로 지도해서 긍정적인 정서를 심어줘야 한다.

 

Posted by 목표를 가지고 달린다
,

초반에 흥미를 붙이는데 실패하거나, 기독교 서적이라는 판단에 거부하시는 분들을 위해 일부 이야기를 적어본다.

  • 아이의 미래에 도움이 되는 지혜 : 잘못된 것을 사실대로 바로잡으려는 아이에게 어떻게 해야 남에게 상처받지 않고 말할 수 있는지? 왜 그래야 하는지를 알려준다. 그리고 왜 우리는 마음을 어떤 형태로 포장해서 전달을 하고 있는지를 설명한다. 많은 부모들이 아이의 순수한 마음을 보호하기 위해 사회생활을 할때 필요한 사람과 일을 대하는 법을 가르치지 않는데, 사회 교육도 다른 교육만큼이나 중요하다는 것을 깨닫게 한다.

  • 어려도 알 건 다 안다 : 아이의 거짓말에 대해 어떻게 대해야 할지? 고민할 수 있다. 나중에 가르치지 보다는 그전에 고민을 해보자.
  • 술선수범하고 아이를 존중한다
  • 어릴때 교육시키지 않으면 늦는다 : 당장의 아이 울음을 그치게 하려고 우리가 어떤 과오를 범하고 있는지 깨닫게 한다.
  • 스스로 자기 일을 하게 한다 : 아이의 모든 스케쥴을 부모가 정하고, 아이에게 통보하고 있기에 수동적인 삶을 살고 있는 아이를 보면 고민하게 되는 건, 아이가 자기 삶을 주체적으로 살길 바라는 마음이다. 영혼없이 학원을 떠도는게 아니라, 언제까지 무얼하고 그다음은... 정해진 틀(부모가 짠 학원 스케쥴)내 일지라도 본인이 주체적으로 삶을 살길 바란다.
  • 아들과 친구 사이의 모순
  • 놀이로 인생을 체험한다
  • 자신감의 근원을 발견한다 : 자신감은 간단히 말해서 스스로 자신을 믿는 것이다. 적절한 칭찬은 자신감의 근원이므로, 아이에게 적절하게 자심감을 칭찬으로 표현해야 아이가 스스로 자신감을 갖게 된다.
  • 아이는 다재다능하다 : 아이들은 선천적으로 이야기 듣는 것을 좋아해서 이야기를 몇 번이나 반복해서 들어도 싫어하지 않고, 다른 사람이 얘기할 때 빠진 부분을 발견하거나 덧붙이기도 한다. 이때 덧붙인 이야기가 앞뒤가 맞지 않더라도 아이의 적극성을 떨어뜨지 말고, 상상력이 풍부하다고 칭찬하는 것 옳다. 아이의 사상력을 칭찬하고 지도하는 것이 부모가 해야할 일이기 때문이다.
  • 실패를 대하는 법을 가르친다 : 두려워서, 실패할까봐 아이들은 스트레스를 받고 몸이 굳는다. "승부에 상관없이 그냥 노는 거니, 마음 편히 가지렴". "승부에 관계없다" 아이가 실패에서 벗어나 성공으로 향하게 하려면 아이가 실패하더라도 부모가 너그럽게 이해하면 된다. 아이가 말을 하고 길을 걷는 법을 배울 때 몇 번이나 실수했는지 우리는 기억해야 한다. 수많은 실패끝에 결국 아이는 실패를 극복하고 모든 것에 성공해 왔다.

  • 격려의 비밀 : 착한 행동을 끊임없이 칭찬하면 아이가 더 잘하려고 노력해서 결국 착한 행동이 습관이 된다. 즉 착한 행동들은 선천적인 것이 아니라, 부모의 끊임없는 격려를 통해 만들어지는 것이다. 오히려 제때해야 할 칭찬보다 싸움, 낭비, 거짓말과 같은 나쁜 행동에 벌하거나, 특별한 관심을 갖는다는 인상을 주면 아이는 부모의 주의를 끌기 위해 계속해서 나쁜 행동을 할수 있기에 조심해야 한다. 오히려 나쁜 행동이 습관이 되고 벌은 '격려'가 되기 때문이다. 따라서 부모는 아이의 불량 행동에 의연하게 대처하고 아이의 긍정적인 면에 관심을 더 보이며 제때 아이를 칭찬해야 한다. 그렇다고 아무때나 칭찬해선 안된다. 이렇게 하면 아이가 왜 칭찬을 받는지 모르기 때문이다. 그래서 잘 했을 때만 칭찬하고 왜 칭찬하는지 말해줘야 한다.
Posted by 목표를 가지고 달린다
,

고향사랑 기부제란? 개인이 거주지 이외 지자체(기초, 광역)에 기부하면, 세액공제 혜택과 답례품을 제공하는 제도

결론부터 말씀드리면, 10만원 기부하고 연말정산에서 10만원 그대로 100% 공제받아 퉁치지만, 3만원(포인트)를 받기에 지역 상품권으로 교환하여 고향에 계신 부모님에게 드리거나, 3만원(무료배송) 물건 사시면 됩니당.ㅋ

기부자혜택 

  • (세액공제) 10만원까지는 전액, 10만원 초과금액은 16.5%
  • (답례품) 기부금의 30% 내 서울사랑상품권 등 제공

기부처 및 기부 한도

  • (기부처) 주민등록상 거주지 제외 지자체(광역, 기초) 기부가능 (출생지 무관) 예) 서울시 A구 거주자 : 서울시와 A구를 제외한 모든 지자체 기부가능
  • (기부한도) 연간 최대 500만원까지 가능

기부금 사용처 취약계층 지원, 청소년 보호, 문화예술보건 증진 등 

기부 방법

  • (온 라 인) 포털사이트(네이버, 다음 등)에 고향사랑기부제 검색 -> 고향사랑e음시스템(https://ilovegohyang.go.kr) 접속
  • (오프라인) 전국 농협은행

자세한 내용은 https://news.seoul.go.kr/gov/archives/544022?tr_code=sweb 참고

Posted by 목표를 가지고 달린다
,

올바른 교육이념과 철할을 제시한 가정교육의 바이블

칼비테의 교육을 읽으면서 초반에 생긴 편견은

이책은 목사가 주님의 아이를 키우는 자기 중심적인 목사의 교육방법이구나. 왜 이런 책이 200년동안 영재교육의 경전으로 불렸지?

라는 생각이 들면서 왜이리 번역자는 직역에 가깝도록 표현이 매끄럽지 못하고 내가 좋아하는 멋진 말들을 맛깔스럽게 하지 않나 싶었다.

이책은 칼비테가 부모로써 임신 전부터 아이(생명)을 가지기 전의 마음가짐부터 칼이라는 아들이 20세가 되기 전까지를 회고한 내용이다. 초반에는 종교적인 이유로 약간 거부감을 가질 수 있겠지만 조금만 참고 읽다보면, 아이를 키우는 부모입장에서 정말 다양한 상황에서 과거의 나의 부족한, 미숙한 모습들이 떠올라 두고두고 읽으면서 되뇌이며 살아야겠다는 다짐을 하게 된다. 어떤 주제를 가지고 특정 방면에 한정해 장황한 설명을 하는 육아 도서가 아니라 아이를 키우는 과정에서 부모가 마주치게될 상황에 대해 고민하고 답을 찾아갈 수 있도록 안내하고 있다.

우리는 자기개발, 재테크에 관련한 다양한 최신의 책들을 꾸준히 섭렵하지만, 사실 나의 개발만큼이나 중요한 자녀교육에는 다소 소홀하다. 자녀교육은 우리의 미래이고 앞으로 내가 짊어져야 할 자녀의 미래이다. 

서문에 14세미만에게 더 효과가 좋다고 하는 것은 아이가 어릴 때 습관을 들이는게 중요하고, 정서적으로 어떤 것을 신경써야 하는지를 배우다 보면 이해가 된다. 지금에 접하게된게 아쉽긴 하지만 한장한장 되새기면서 아이와의 관계에서 접목해보려 한다. 

Posted by 목표를 가지고 달린다
,