일정 시간 동안 같은 사용자(브라우저)로부터 들어오는 일련의 요구를 하나의 상태로 보고, 그 상태를 유지시키는 기술이다. 여기서 일정 시간은 방문자가 웹 브라우저를 통해 웹 서버에 접속한 시점부터 웹 브라우저를 종료하여 연결을 끝내는 시점을 말한다.

 

세션 특징

웹 서버에 클라이언트의 정보를 저장한다.

웹 서버의 저장되는 쿠키(=세션 쿠키)

브라우저를 닫거나, 서버에서 세션을 삭제했을 때만 삭제가 되므로, 쿠키보다 비교적 보안이 좋다.

각 클라이언트에 고유 Session ID를 부여한다. 

 

세션의 동작 방식

클라이언트가 서버에 로그인 요청을 한다.

서버는 로그인 요청의 유효성을 확인하고 session-id를 response 헤더에 추가하여 응답한다.

클라이언트는 session-id를 저장해놓고 추후 재요청시 포함하여 사용한다.

 

사용 예시

다른 화면으로 이동해도 로그아웃이 되지않고 로그아웃하기 전까지 유지된다.

 

 

쿠키와 세션 차이점

 

저장위치

  - 쿠키는 클라이언트, 세션은 서버에 저장

 

보안

 - 쿠키는 클라이언트 로컬에 저장되기 때문에 변질되거나 request에서 스니핑 당할 우려가 있어서 보안에 취약하지만 세션은 쿠키를 이용해서 session-id만 저장하고 그것으로 구분하여 서버에서 처리하기 때문에 비교적 보안성이 높다.


라이프사이클

 - 쿠키는 브라우저를 종료해도 파일로 남아있지만, 세션은 브라우저 종료되면 만료기간과는 상관 없이 삭제한다.

속도

 - 쿠키가 우세하다. 쿠키는 파일에서 읽고, 세션은 요청마다 서버에서 세션 저장소에서 찾아서 처리해야 한다.

 

 

'IT > general' 카테고리의 다른 글

[네트워크] 쿠키?  (0) 2022.02.09
[UUID] Universally Unique Identifiers - 범용 고유 식별자  (0) 2022.02.09
로깅(Logging)?  (0) 2021.12.14
SSL(Secure Sockets Layer)  (0) 2021.12.07
[방화벽] 기본 포트 차단  (0) 2021.11.22

 HTTP 쿠키는 웹 쿠키, 브라우저 쿠키로도 불리는데 서버가 사용자의 웹 브라우저에 전송하는 작은 데이터 조각을 의미한다. 쿠키는 주로 세션 관리(서버에서 관리하는 로그인 등의 정보를 의미), 개인 설정유지, 사용자 트래킹 용도로 사용된다.

쿠키는 브라우저를 끄게 되면 삭제되는 방식과 지정된 날짜에 삭제되는 방식이 있다.

 

쿠키 특징

1. 이름, 값, 만료일(저장기간), 경로 정보로 구성되어 있다.

2. 클라이언트에 총 300개의 쿠키를 저장할 수 있다.

3. 하나의 도메인 당 20개의 쿠키를 가질 수 있다.

4. 하나의 쿠키는 4KB(=4096byte)까지 저장 가능하다.

 

쿠키 작동 방식

1. 클라이언트가 서버로 HTTP 요청을 하면 서버에서는 HTTP Header에 쿠키를 담아서 Response를 보낸다.

2. 클라이언트는 Response를 받아 쿠키를 저장한다. 

3. 클라이언트가 서버에 재요청을 할 때 쿠키를 같이 포함하여 전송한다.

4. (만약 쿠키가 업데이트 됐다면) 서버에서 Response를 보낼 때 업데이트 하여서 보낸다.

 

사용 예시

1. 방문 사이트에서 로그인 시, "아이디와 비밀번호를 저장하시겠습니까?"

2. 팝업창을 통해 "오늘 이 창을 다시 보지 않기" 체크

'IT > general' 카테고리의 다른 글

[네트워크] 세션 - Session  (0) 2022.02.09
[UUID] Universally Unique Identifiers - 범용 고유 식별자  (0) 2022.02.09
로깅(Logging)?  (0) 2021.12.14
SSL(Secure Sockets Layer)  (0) 2021.12.07
[방화벽] 기본 포트 차단  (0) 2021.11.22

범용 고유 식별자는 소프트웨어 구축에 쓰이는 식별자 표준으로, OSF에서 분산 컴퓨팅 환경의 일부로 표준화 하였다. 주로 분산 컴퓨팅 환경에서 사용되는 식별자이다. 

 

UUID는 총 36개의 문자열(32개 문자와 4개의 하이픈)으로 구성되어 있고, 8-4-4-4-12 의 자릿 수로 구성되어 있다.

> 9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d

 

버전마다 특정 자리와 특정 문자(Version, Variant Field)에는 의미가 있다고 하는데 공부하다보니 내가 굳이 거기까지 기억할 필요는 없는 것 같다.

 

고유 식별자로 사용되지만 꼭 중복 될 확률이 0%는 아니다. 다만 0%에 수렴할 뿐이다. 그렇기 때문에 단일로 PK키로 사용하진 말아야 할 것 같다. 

 

UUID의 버전은 1~5 까지 있는 것 같고, 대부분의 개발자들이 많이 쓰는건 v4 인듯 하다.

  - 버전 1 (시간 + MAC 주소)

  - 버전 2 (시간 + DCE 보안)

  - 버전 3 (시간 + MD5 해시)

  - 버전 4 (시간 + 랜덤)

  - 버전 5 (시간 + SHA-1 해시)

 

UUID의 장점

 - UUID가 생성할 수 있는 340,282,366,920,938,463,463,374,607,431,768,211,456개의 키를 생성할 수 있기 때문에 중복은 쉽지 않다.

 - 연속성이 없기 때문에 데이터를 유추하기 어렵다.

 

UUID의 단점

  - 연속성이 없기 때문에 Indexing을 할 때 성능 저하 및 시간과 자원을 더 사용하게 된다.

  - 보통의 순차증가키보다 공간을 더 많이 차지한다.

 

 

 

https://ko.wikipedia.org/wiki/%EB%B2%94%EC%9A%A9_%EA%B3%A0%EC%9C%A0_%EC%8B%9D%EB%B3%84%EC%9E%90

 

범용 고유 식별자 - 위키백과, 우리 모두의 백과사전

범용 고유 식별자(汎用固有識別子, 영어: universally unique identifier, UUID)는 소프트웨어 구축에 쓰이는 식별자 표준으로, 개방 소프트웨어 재단(OSF)이 분산 컴퓨팅 환경(DCE)의 일부로 표준화하였다. U

ko.wikipedia.org

 

https://www.rfc-editor.org/info/rfc4122

 

Information on RFC 4122 » RFC Editor

 

www.rfc-editor.org

 

 

'IT > general' 카테고리의 다른 글

[네트워크] 세션 - Session  (0) 2022.02.09
[네트워크] 쿠키?  (0) 2022.02.09
로깅(Logging)?  (0) 2021.12.14
SSL(Secure Sockets Layer)  (0) 2021.12.07
[방화벽] 기본 포트 차단  (0) 2021.11.22

로깅은 서버에서 중요한 처리 중 하나로써 어떤 일들이 일어나고 있는지 알 수 있고, 버그나 의도하지 않은 동작 등이 있을 때 빠르게 원인을 파악할 수 있다. 단순히 로깅은 디버깅용으로 개발자가 에러나 테스트 중 사용하는 용도 뿐 아니라 굉장히 광범위하게 사용할 수 있다.

 

데이터베이스 접속 기록 , 사용자 행동 로그 등 많은 것들을 로그로 저장해놓을 필요가 있다. 아래의 예를 간단히 보자.

 

  • 서버 : 특정 API의 Request , Respone 정보를 기록함. 클라이언트나 웹에서 API 호출할 경우 저장함
  • 앱(IOS/Android) : 로그인을 하며, 화면에서 유저가 어떤 화면에 진입했는지, 어떤 버튼을 클릭했는지 등을 기록함
  • 웹 : 로그인을 하며, 어떤 웹 페이지에 진입했고 어떤 버튼을 클릭했는지 등을 기록함

결국 사용자가 어떤 것을 샀고, 어떤 것을 팔았고, 레벨업을 언제 했는지 또는 서버에 요청을 했는지 다른 서버에서 어떤 데이터를 요청하는 등의 로그로 저장해놓는다. 나중에는 이런 데이터를 분석하여 데이터를 추출할 수 있게 말이다.


로그 수준

 

로깅의 수준 또한 중요하다. 어찌보면 로그의 처음을 보는 것은 수준일 수도 있을 것 같다. 많은 로그 중 Critical 또는 Warning을 먼저 보게되면 많이 당황스러울 수 있을 것 같다. 수준은 어딜가나 다른 것 같다. 그래서 내가 찾아보고 배운 내용을 대부분 다 적어봤다.

 

수준 내용
Critical 서버 문제 또는 중요한 조건이 발생할 때마다 이벤트가 로그에 기록
Error 오류 조건이 발생할 때마다 이벤트가 로그에 기록 - ex)클라이언트나 다른 서버에 대한 연결시도가 실패한 경우
Warning 경고 조건이 발생할 때마다 이벤트가 로그에 기록 - ex)클라이언트가 보낸 통신을 서버가 인식할 수 없는 경우
Notice 일반적으로 중요한 조건이 발생할 때마다 이벤트가 로그에 기록 
Information 서버 실행되는 모든 중요 작업에 대한 이벤트를 로그에 기록 - ex)클라이언트가 로그인 했거나 폴더를 이동시키는 이벤트의 경우
Debug 가장 세밀한 로깅으로 디버깅 용도에만 적합하며 데이터의 흐름 또는 문제를 나타내기 위해 각 프로세스나 작업 내의 개별 단계에서 이벤트 로그를 기록

 

 

'IT > general' 카테고리의 다른 글

[네트워크] 쿠키?  (0) 2022.02.09
[UUID] Universally Unique Identifiers - 범용 고유 식별자  (0) 2022.02.09
SSL(Secure Sockets Layer)  (0) 2021.12.07
[방화벽] 기본 포트 차단  (0) 2021.11.22
[VSCode] 원격 SSH 접속  (0) 2021.10.08

SSL 인증서란 클라이언트와 서버간의 통신을 제 3자가 보증을 해주는 문서이다.

 

클라이언트가 서버에 접속하면 서버는 클라이언트에게 인증서를 전달하면 클라이언트는 이 인증서를 보고 신뢰할 수 있는 사람인지 확인 후 데이터를 보내는 등 다음 절차를 진행한다.

 

여기서 보통 SSL을 잘 몰랐다. 크롬이나 브라우저창에 www 또는 https를 볼 수 있다. 여기서 HTTPS는 HTTP와 TLS가 조합된 프로토콜만을 말한다. 여기서 TLS는 SSL의 후속 버전이지만 아직 SSL이 더 많이 사용되는 용어같다. 그렇지만 일단 둘 다 기억은 해두자!!

 

SSL을 쓰는 이유를 정리해보면 전달되는 내용이 다른 사람에게 노출되는 것을 막을 수 있으며 접속하는 클라이언트가 신뢰할 수 있는 서버인지 알 수 있고 전달되는 내용이 변경되는 것을 막을 수 있다.

 

통신 단계는 3단계다.

1. 핸드셰이크    2. 전송    3. 종료

 

여기서 가장 중요한건 핸드셰이크다. 헨드셰이크는 공개키와 대칭키 2가지 방법을 함께 사용한다.

 

1. Client Hello : 서버에 접근하여 클라이언트는 현재 자신이 가능한 암호화 방식과 랜덤 데이터를 서버에게 전송한다.

2. Server Hello : 서버는 클라이언트에게 제시한 암호화 방식 중 하나를 선정하여 알려주고 서버의 인증서를 전달한다. 또 서버에서도 랜덤 데이터를 생성하여 전달한다.

3. Client Pre Master Secret 생성 : 클라이언트는 자신이 가지고 있는 CA 리스트에서 서버가 보낸 인증서를 복호화 한다. 만약 성공 했을 시 클라이언트와 서버가 전송한 랜덤한 데이터를 조합하여 Pre Master Secret 키를 생성한다. 그 후 인증서에 있는 공개키를 이용하여 Pre Master Secret 키를 암호화 하여 서버로 전송한다. (이 때 Pre Master Secret는 절대 노출되면 안된다.)

4. Server Pre Master Secret 암호화 : 서버는 Pre Master Secret 키를 자신의 비밀키로 복호화하여 클라이언트와 서버는 서로 Pre Master Secret 키를 공유한 상태가 된다.

5. Session Key 생성 추후 Pre Master Secret 키를 이용하여 Master Secret 키를 만들고 Session Key를 만들어 세션을 형성하고 대칭키 방식으로 데이터를 주고 받는다.

 

 

 

 

 

'IT > general' 카테고리의 다른 글

[UUID] Universally Unique Identifiers - 범용 고유 식별자  (0) 2022.02.09
로깅(Logging)?  (0) 2021.12.14
[방화벽] 기본 포트 차단  (0) 2021.11.22
[VSCode] 원격 SSH 접속  (0) 2021.10.08
[IDE] 이클립스 설치  (0) 2021.06.03

회사에서 개발 도중 해당 페이지가 안열린다고 연락을 받았다. 물론 내가 엔지니어는 아니기 때문에 잘 모르지만...

 

트래픽 모니터를 보니 계속 차단된다고 나온다...

 

해당 방화벽은 기본 차단 포트가 있다고 한다. 각 포트마다 이유가 있었다.

혹여나 포트를 개방했는데 접속이 안된다면 이런게 있을 수 있으니 찾아보자

'IT > general' 카테고리의 다른 글

로깅(Logging)?  (0) 2021.12.14
SSL(Secure Sockets Layer)  (0) 2021.12.07
[VSCode] 원격 SSH 접속  (0) 2021.10.08
[IDE] 이클립스 설치  (0) 2021.06.03
[가상화폐] 가정용 데스크탑 PC 이더리움 채굴  (0) 2021.05.28

회사에서 Putty로 서버에 많이 접속한다. 근데 그때마다 vi로 편집할 때가 많은데 vi 단축키를 잘 모르니 많이 불편했다. 그런데 유튜브를 보다가 알고리즘을 통해 영상을 하나 보게 됐는데 VSCode에서 아주 유용한 툴을 발견했다. VSCode에서 SSH 접속을 하여 디렉토리 목록도 편집기에서 노출시켜서 너무 편하게 작업을 할 수 있는 툴이다. 한번 보자.

 

1. 확장탭에서 Remote Development를 검색하여 설치한다.

2. F1를 눌러서 SSH를 검색하면 많은 메뉴 중에 Open Configuration File...있을 것인데 그것을 누르면 내 PC의 SSH config 파일을 선택한다. (C:\Users\사용자명\.ssh\config)

3. config 파일을 열면 처음에는 아래처럼 있다. 

파일 안에 호스트랑 유저를 입력하고 저장한다.

Host [계정명]@[IP 주소]:[포트번호]
    HostName [IP 주소]:[포트번호]
    User [계정명]

4. 이제 연결을 해보면된다. F1 누른 후 Remote-SSH:Connect to Host...를 선택한다.

그러면 아까 위에서 config 파일에 저장해둔 연결 호스트가 나온다. 

나는 이 부분에서 잘 안됐다. 그래서 나는 config 파일에 저장한게 안되니 ADD New SSH Host...를 하여 새로 입력하고 config 파일에 저장해줬다. 

ssh 계정명@ip주소:포트번호(또는 도메인) 형식으로 입력하고하고 Enter 키를 누르면 어디 파일에 저장해야될지 선택하면 된다.

근데 이렇게 하면 계정이름이 윈도우 계정이름으로 잡힌다. config 파일을 열어서 Host 부분을 보면 IP주소와 포트번호만 써있으니 Host IP주소 앞에 User명@IP주소:포트번호로 바꿔주자

결과적으로 config에 먼저 들어가서 저장할 필요는 없다.

 

5. Host를 선택하면 해당 SSH 의 운영체제를 선택 후 패스워드를 입력하면 끝난다.

 

 

VSCode에서 원격 디렉토리 접근이 가능하며 편집도 가능하고 터미널까지 가능하다. 너무 편리하다. 지금까진 파일질라로 PC에서 파일 편집해서 파일질라로 옮기고 했는데 그럴 필요가 없어졌다.

 

'IT > general' 카테고리의 다른 글

SSL(Secure Sockets Layer)  (0) 2021.12.07
[방화벽] 기본 포트 차단  (0) 2021.11.22
[IDE] 이클립스 설치  (0) 2021.06.03
[가상화폐] 가정용 데스크탑 PC 이더리움 채굴  (0) 2021.05.28
[통신 프로토콜] MQTT  (0) 2021.05.21

대학교 이후로는 이클립스를 처음 써본다... 안드로이드도 예전에는 이클립스를 이용했지만 지금은 분리되어 더더욱 쓸일이 없었고 왠만한건 다 VSCODE를 사용하기 때문에 쓸 일이 없었다. 갑자기 스프링을 하게 되어서 급하게 설치를 하는데 그냥 남겨봤다. 이런건 패스해도 되는데...

 

이클립스 홈페이지에서 주황색 다운로드를 누르면 된다.

그러면 exe 파일이 다운이 되면서 실행하면 된다. 실행을 하면 아래 그림 처럼 나올것이다.

우선 첫번째 Eclipse IDE for Java Developers 는 단순히 자바만 사용하는 개발자의 IDE 타입입니다. 그러나 저는 스프링을 사용해야해서 두번째꺼 Eclipse IDE for Enterprise Java and Web Developers 선택을 합니다. 

 

이 다음부터는 설치 위치나 JDK 위치경로 정도만 설정하고 설치하면 됩니다.

 

설치가 다 되면 혹시나 한글이 깨질 걸 생각에서 인코딩만 해보자.

 

메뉴에서 Window > Preferences > general > workspace 로 들어가면 하단에 Text file encoding 을 Other : UTF-8로 바꾼다.

그 다음으로 General > Editors > Text Editors > Spelling 에서 하단에 Encoding 을 Other : UTF-8로 바꿔준다.

+ Recent posts