새로운 일을 받았다.

1. postfix를 구축해라

2. 사용자 인증을 받게하라

3. smtp서버에 바로접근하는게 아니라, 2개의 smtp서버 구축 후 relay를 시켜라!


나는 smtp에대한 지식이 전무하다.

구축하면서 얻는 지식에대해 정리해갈 예정이다.


1. postfix를 구축하라는 인터넷에 많아서 그냥 구축했다. (https://www.lesstif.com/pages/viewpage.action?pageId=18219586) 이거보고 구축했다.


2. 사용자 인증을 받게하라 .. 이게 매우 애매했다. 일단 시작해 보자!

인터넷에 찾아보니, SASL인증을 받으면 해결 될 것같다.

SASL(Simple Authentication and Security Layer)은 인터넷 프로토콜에서 인증과 데이터보안을 위한 프레임워크이다. 

일단은 이게 맞는지 모르겠다. ㅋㅋㅋㅋ


일단은 방금 안 사실 postfix는 리눅스 계정과 연계된다고 한다.


예를들어) 리눅스 계정 id가 asdf1234이면, main.cf에서 설정 한 domain이 메일주소가 된다.

asdf1234@설정한도메인값

아래는 한 블로그에서 퍼온 내용이다.


 ID는 linux 기본 계정 설정과 공유된다.


-계정생성

#useradd 사용자계정 (홈 디렉토리는 생성 안됨) <---- 이걸로 계정만 생성하면 해당 도메인으로 이메일이 주고받기 가능


#adduser 사용자계정 (홈 디렉토리까지 같이 생성)


-비번생성 및 수정

#passwd 사용자계정


-계정삭제

#userdel -r 사용자계정

(-r옵션은 홈디렉토리까지 한번에 삭제시켜준다)


위 명령어들로 linux 기본 계정은 물론 sendmail, postfix 메일 계정까지 동시에 관리한다.


출처: http://mosei.tistory.com/entry/sendmail-postfix-메일-계정-설정 [씹어먹는 블로그]



SASL Authentification 설정

설정을 위해, cyrus-sasl 패키지 설치하자!

sudo yum install cyrus-sasl
 
cd /etc/sasl2 
vi smtpd.conf


smtpd.conf가 다음 내용임을 확인

pwcheck_method: saslauthd
mech_list: plain login

sasl 실행

systemctl start saslauthd
계정 선택 후 비밀번호 입력


그다음 하나더 설치 해 줘야 할것이 있다.

너무 슬프게도 나는 이걸 몰라서 하루종일 헤맸다.

sudo yum install cyrus-sasl-plain
 
설치확인
saslauthd -v


main.cf수정

sudo vi /etc/postfix/main.cf
 
아래에 다음을 추가
smtpd_sasl_path = smtpd
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_security_options = noanonymous
smtpd_client_restrictions = permit_sasl_authenticated, reject
smtpd_relay_restrictions = permit_sasl_authenticated, reject
smtpd_recipient_restrictions = permit_auth_destination,permit_sasl_authenticated,reject

인터넷에 올라간 많은 설정을 보면 permit_mynetworks 설정이 있지만, 나는 빼버렸다. 

permit_mynetworks를 하게되면, mynetworks에 등록되어 있으면, 따로 인증을 거치지 않고 무조건 허용하겠다는 말이다.

하지만 그건 우리가 원한게 아니였기때문에 빼버렸다!

무조건 sasl인증을 받은 사람만이 우리 메일서버를 통해 메일을 보낼 수 있다.

main.cf를 변경했으니, smtp를 재시작 시키자!

sudo postfix stop
sudo postfix start


메일 인증을 받기전에, base64인코딩 된 idpw를 얻자

echo -ne '\0username\0password' | base64


$ telnet localhost 25 Trying ::1... Connected to localhost. Escape character is '^]'. 220 도메인 ESMTP Postfix helo localhost 250 도메인 ehlo localhost 250-도메인 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-AUTH PLAIN LOGIN 250-AUTH=PLAIN LOGIN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN   AUTH PLAIN 위에서받은 base64문자열   235 2.7.0 Authentication successful mail from:xxx@daum.net 250 2.1.0 Ok rcpt to:txxx@daum.net 250 2.1.5 Ok data 354 End data with <CR><LF>.<CR><LF> subject:test asdf . 250 2.0.0 Ok: queued as 5F1305FBB89 quit 221 2.0.0 Bye

사용자 인증이 완료되었다.

오늘은 REST에 대해 공부했다.

난 사실 이런 기본용어를 아예 모르는것 같다..^^

사용은 하고있지만 이게 뭔지 모르고 쓰는거..?

여튼 내가 공부한 RESTful에 대해 정리해 봐야겠다.


RESTful


Representational State Transfer이란 약자로 별도의 전송장치를 사용하지 않고, HTTP를 이용하여 전송하는것을 말한다.

모든자원(리소스,이미지 등)에 대해 고유의 URL을 부여한다. 뭐 쉽게 말하면  리소스의 구조자체가 URL이라 생각하면 된다.

REST하면 CRUD를 빼놓을 수 없는데, CREATE(post), READ(get), UPDATE(put), DELETE의 약자이다.

CRUD를 HTTP Method를 통해 날리고 해당 리소스에서는 각각 create, read, update, delete를 적용한다.

Laravel Framework를 사용 할 당시 Router에서 post, get, put, delete를 각각 설정해 줬었는데 이게 RESTful이였다 ㅡㅡ



URL구성


url을 구성할 때는 해당 url만 보고도 많은 정보가 들어가도록 구성해야한다.

또한 소문자로 구성하고, 스페이스 대신 '-'를 사용하는 것을 권장한다.

반응형 Web에서 모바일과 pc의 url이 다른건 RESTful하다고 할 수 없다.

ex) www.m.naver.com , www.naver.com

위 방법은 User - Agent header를 사용하고, 최적화된 사이트를 이동하는 것인데,

그것보다 URL은 그대로이지만 화면만 장비에 따라 최적화 되도록 설계하는것이 바람직하다.

나중에 안 사실이지만 git명령어 보단 EGit를 통해 git를 더 많이 사용할것 같다.

eclipse는 neon3를 사용한다.

Egit를 따로 설치하지 않아도 제공해준다.(Luna버전 부터는 기본으로 포함되어 있다고 한다.)

혹시 Egit를 설치해야 한다면 Help-Eclipse Marketplace를 선택 후 


다운받으면 된다.


Git 사용 전에 이름과 Email을 사용해 주면 좋다.

다음과 같이 설정해 준다.

user email 설정 시 Add Entry를 클릭 후 key에 user.email value에 이름을 적으면 된다.

나머지 방식도 동일하다.

  

Window - Prefernces를 선택 후 git를 검색한다.


내 공부를 위한 블로그이기 때문에 내가 필요하지 않은 정보는 간단하게 적어야겠다.

캡처하기가 개귀찮네


1.저장소 생성 (내가 프로젝트를 생성하고, Git에 올릴경우 사용)->현재는 사용x 추후 사용할 수도)


프로젝트 선택후 오른쪽마우스 클릭

Team - Share Project...선택 Git선택 후 Next

Git저장소 생성 위치 지정 후 Finish
하면 Git 저장 소 생성 완료 프로젝트 이름옆에 저장소 정보가 표시되어있음.
후에 커밋
이건 사용하게 되면 좀더 자세히 적어야 겠다.



2. 소스 클론(소스를 최초에 받아오기)




이건 회사 사수님이 알려준 방법과 책에서 읽은 방법 2가지가 있다.

사수님이 알려준방법.

 1. Git Repositories를 연 후 

없다면

오른쪽 상위에 저 파란색 네모를 클릭하여 Git를 찾아 추가해준다.

그 후 저 Git를 클릭하면 Git Repositories가 나타남.



오른쪽 버튼 클릭 후 Paste Repository Path or Url에 해당 Git주소를 넣은 후 받을 Workspace경로를 선택 해 준 후

완료 하면 소스를 Local로 받아온다.

이걸 실제로 이클립스에서 사용하려면 프로젝트에 추가해 주어야 한다.

File - Open Projects from File System...을 클릭 후 해당 파일을 추가 해주면 해당 Project를 사용 할 수 있다.



2.책에서 알려준 방법(따로 프로젝트를 추가해 주지 않아도 됨.)

File-Import-Git-Project를 통해서 가져온다.

후에 from Git-Clone Url선택 Import using the new Project wizard선택해서 가져오면 된다


 

3.merge


커밋 후 충돌나면 알람을 띄워준다

Result에 conflicting이 있으면 충돌 난것.

충돌난 파일 선택 후 오른쪽 마우스에 Team-Merge Tool을 선택해 준 후 

SVN과 마찬가지로 Merge실행한다(내가 소스보고 필요한건 넣고 필요없는건 뺴야함.)

후에 충돌을 해결했다는 표시로 Team - Add to Index를 선택해 줘야 한다.






뭐 대충 이클립스에서 Git를 사용하는 방법은 위와 같다.

실무에서 쓰다가 추가할 부분이 있으면 추가해야겠다.


이번에는 로컬저장소와 원격저장소간의 명령어를 정리해봤다.


원격 저장소의 모든 내용을 로컬저장소로 저장

git clone


로컬 저장소를 특정 원격 저장소와 연결

git remote


로컬 저장소의 내용을 보내거나 로컬저장소의 변경사항을 원격저장소로 보냄

git push


충돌일어났을때 충돌해결

git fetch


최신내용을 로컬 저장소로 보냄 

->pull로 받아오는것 보다 fetch로 받아오는걸 추천 pull로가져오면 자동 merge를 시행한다.

git pull


모든 브랜치를 push

git push orgin -all


현재 로컬저장소 상태확인

git remote -v



다음번에는 이클립스에서 git사용법에 대해 정리해 볼거다.

나만 볼거니까 나만 알아보게 씀

나는 전 회사에서 SVN만 썼고, Git는 써보지 않았다.

이직한 회사에서 Git를 썼고, '만들면서 배우는 Git GitHub입문'이라는 책 한권을 정독했다.

SVN과 다른점은 SVN은 바로 서버에 커밋과 업데이트를 하는 반면,

Git는 로컬 컴퓨터에 커밋과 업데이트를 한 뒤, 그 파일을 서버에 올리는 방식이다.

뭐 아닐수도있는데 내가 이해한 내용은 그렇다.


여튼 처음에는 Git 기본명령어에 대해 공부했다.

추후에 안 사실이지만 이클립스에서 Git를 쓸땐 명령어를 몰라도 된다.

하지만 난 몰랐으니까 명령어에 대해서 공부했다 ㅡㅡ;


로컬에서는 Git bash라는 프로그램을 쓴다. 이 툴은 기존회사에서 Laravel 프레임워크를 사용한 프로젝트에서 사용해봤다.


이름, 이메일 Setting 

git config --global user.name "이름"

git config --global user.email "이메일"


저장소 생성 

git init


저장소에 파일추가

git add 파일이름


커밋

git commit 

(커밋 후에는 git status를 통해 상태를 확인해야 함.)


상태확인

git status


메세지 작성 후 

ESC키 :wg 입력


어떠한 branch가 있는지 확인

git branch


해당 이름으로 branch 생성

git branch 이름


해당 브런치로 이동

git checkout 이름 


branch 생성과 동시에 checkout

git checkout -b 이름


변경사항 모두 커밋

git commit -a


vim을 사용하지 않고 커밋메세지 남기기(vim사용권장)

git commit -m "커밋메세지"

git commit -am "커밋메세지"   --변경사항 모두 커밋 후 메세지


merge

git merge branch이름


실제 변경 log확인

git log -p

git log --relative -date


브랜치 분기와 병합내용을 아스키 그래프로 보여줌(이거 자주쓸듯)

git log --graph


이거 쓰다보니까 생각난건데 SVN에서는 처음 소스를 다 내려받을때 check out이라는 용어를 썼는데

Git에선 branch이동 후 해당 소스로 변경(?)하는걸 check out이라 한다.

처음 소스를 다 내려받는건 clone이라고 한다.


여튼 로컬에 branch에 저장 할 명령어는 위와 같이 쓴다.

다음엔 원격서버에 올리는 명령어를 정리해 봐야겠다.


 

 

동그라미 ,사각형 일땐 빨간색 파란색 선택가능

 

직선을 선택하면 색선택이 통제된다.

어떻게 하는 것일까?

 

 

먼저 메뉴를 선택뒤 MenuActivate 이벤트를 선택해준다.

소스는 아래와같다.

        private void menuStrip1_MenuActivate(object sender, EventArgs e)//메뉴 툭떨어질때 발생
        {
           
            동그라미ToolStripMenuItem.Checked = (shape == 1); 

/*shape==1이면 true값이 반환되여 동그라미ToolStripMenuItem.Checked =true

이면 동그라미에 체크된다.

ToolStripMenuItem.Checked =false이면 non체크*/
            사각형ToolStripMenuItem.Checked = (shape == 2);//shape==2이면 true로 동그라미에 체크된다.
            직선ToolStripMenuItem.Checked = (shape == 3);//shape==3이면 true로 동그라미에 체크된다.

            빨간색ToolStripMenuItem.Checked = (color == Color.Red);
            파란색ToolStripMenuItem.Checked = (color == Color.Blue);

            빨간색ToolStripMenuItem.Enabled = (shape != 3);

/* shape 가 3 (직선)이 아니면 true값 반환으로

 빨간색ToolStripMenuItem.Enabled =true가되어 통제

shape 가 3 (직선)이 이면 false값 반환으로

빨간색ToolStripMenuItem.Enabled =false가되어 통제가 안된다

*/

 

 

            파란색ToolStripMenuItem.Enabled = (shape != 3);
        
        }

 

 

위 프로젝트의 전체소스는 파일로 첨부해 두겠다.

MenuItemState (2).zip

 

 

 

실제시간->현재 리얼타임 시간을 받아와서 뿌림

타이머시간->처음에만 리얼타임시간을 받고 1초마다 초를 증가시켜줌

 

컴퓨터성능에따라, 멀티프로그래밍갯수(시스템이 바쁨에따라)에 따라 타이머시간이 누락될수도있다.

처음엔 실제시간과 타이머시간이 같지만 시간의 지남에 따라

실제시간과 타이머시간이 차이나게된다.

 

 

시스템이 굉장히 바쁠 때는 타이머가 정확한 주기대로 발생하지 않으므로 이렇게 만들면 시계가 금방 느려진다.

타이머 이벤트는 작업을 해야 할 적당한 시점을 대충 알려줄 뿐이다.

 

 

--소스--

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace MyTimer
{
 public partial class Form1 : Form
 {
  private string Time;
        private string Time2;
        private int hour;
        private int min;
        private int sec;

  public Form1()
  {
            DateTime dt = DateTime.Now;
            hour = dt.Hour;
            min = dt.Minute;
            sec = dt.Second;
   InitializeComponent();
  }

  private void Form1_Load(object sender, EventArgs e)
  {
   Timer T = new Timer();
   T.Interval = 1000;//정확하게 1초가아닐수도있다. p647
        
          
   T.Tick += new EventHandler(Form1_Timer);
            T.Tick += new EventHandler(Form1_Timer2);
   T.Start();
  }

  private void Form1_Paint(object sender, PaintEventArgs e)
  {
   e.Graphics.DrawString(Time, this.Font, Brushes.Black, 10, 10);
            e.Graphics.DrawString(Time2, this.Font, Brushes.Black, 10, 30);
  }

  private void Form1_Timer(object sender, System.EventArgs e)
  {
   DateTime dt = DateTime.Now;
   Time = "리얼타임"+dt.Hour + "시 " + dt.Minute + "분 " + dt.Second + "초";
   Invalidate();
  }
        private void Form1_Timer2(object sender, System.EventArgs e)
        {

          
            sec++;
            min += sec / 60;
            sec %= 60;
            hour += min / 60;
            min %= 60;


            Time2 ="타이머타임"+ hour + "시 " + min+ "분 " + sec + "초";
            Invalidate();

           

        }

 }
}

비쥬얼 스튜디오 보기-서버탐색기를 여신후

 

데이터연결 -새SQLServer 데이터베이스만들기를 클릭

 

 서버이름을 알아야하는데 서버이름을 알기위해선 제어판-시스템보안-시스템으로 들어가줍니다.

 여기서 컴퓨터이름 DCS-PC가 서버이름이됩니다.

 서버이름에 컴퓨터이름\SQLEXPRESS를 적어주고 window인증사용클릭 데이터베이스 이름을 적어줍니다.

 그럼 DB가 만들어지는데 여기서 테이블 오른쪽클릭으로 새테이블 추가를 해줍니다.

테이블을 만들어준후

오른쪽클릭 테이블 데이터 표시로 데이터를 넣어줍니다(쿼리로도 가능)

 

헤더에 using System.Data.SqlClient; 추가후 

DB연동은 위처럼 적어주시면 됩니다.

ConnectionString아는법

 

바탕화면으로 가신뒤 텍스트 문서를 만들어줍니다.

 

 

 텍스트문서를 열어준후 다른이름으로저장 이름.UDL로 저장하여줍니다.

 파일을 연후 Microsoft OLE DB Provider for SQL Server클릭

 연결에들어가 서버이름 입력 데이터베이스 선택후 연결테스트를 눌러줍니다.

 

성공하면 확인을 눌러준뒤 저장을 시킵니다.

메모장에 .UDL파일을 열어주면 위에처럼나오는데 세번째줄이 connetion string 입니다.

이상으로 DB연동 끝!!!!!!!!!!!

 

 

1.텍스트 박스 속성에서 PasswordChar 를 찾은뒤 원하는 암호 입력

 

 

 

 

 

 

 

 버튼 1 을 더블클릭후


        private void button1_Click(object sender, EventArgs e)
        {
            Form form = new Form2();
            form.Show();
           
             
        }

소스를 적어준다.

응용도가능하다.

 Form form = new Form1();
form.Show();

을하면 폼1이 하나더뜨고

 Form form = new Form();
form.Show();

하면 아무것도 없는 폼이 하나더 뜬다.

+ Recent posts