728x90

자신을 마케팅하라

  • 자신에 대해 어떤 메시지를 전달할지 선택한 뒤 이러한 메시지를 잠재고객이나 사용자에게 활발히 알려야한다.
  1. 어떤 사람이 되고 싶은지 생각한다.
  2. 자신의 이미지를 어떻게 표현할지 생각한다.
    • 블로그 포스트
    • 팟캐스트
    • 동영상: 유투브
    • 잡지 기사: 소프트웨어 개발잡지 기고
    • 책: 소프트스킬과 같은 책 출판
    • 코드 캠프: 누구나에게 강연기회를 준다
    • 콘퍼런스: 인적 네트워크를 형성하는 좋은방법이다. 강연자가 되어도 좋다.
  • 브랜드 이미지를 만들어라
    • 예를들어 심플 프로그래머 - 복잡한 것을 단순하게 만들겠다는 메시지
    • 틈새시장을 공략하는 메시지면 좋다
  • 시각요소스를 만들어라
    • 스타벅스 초록색 이미지 처럼 아이콘을 만들어라
  • 일관성을 가져라
    • 메시지 내용, 메시지 전달 방법, 전달 시기에 대해 일관성을 가져라.
  • 반복 노출되게 만들어라
    • 활발히 활동하라. 블로그, 기고, 강연, 동영상, 팟캐스트 등 온갖 매체를 활용하라.
    • Wordpress.com: 무료 워드 프레스 호스팅 서비스.
    • 다른사람 글에 댓글을 많이달고 자신의 블로그 링크를 넣도록 한다.
    • 컨텐츠 수준이 괜찮거나 논란의 소지가 많은 흥미로운 컨텐츠는 레딧이나 해커뉴스에 올려라

'Books' 카테고리의 다른 글

프로그래머, 열정을 말하다  (0) 2022.12.26
소프트 스킬 3  (0) 2020.12.13
소프트 스킬 1  (0) 2020.12.13
728x90

자신을 사업가라 생각하라

  • 내가 제공하는 서비스를 사업으로 생각한다.

    • 어떤 서비스를 제공할지, 그 서비스를 어떻게 마케팅할지 고민하라
      • 서비스를 널리 알리고 고객을 찾을 수 있는 최적의 방법 (링크드인, 정부 공모대회)
    • 서비스 개선방법을 고민하라
    • 소수의 특정 유형 고객에게 필요한 특수 서비스를 제공하는 전문가가 돼라.일자리가 필요할 때는 일단 고객 한 명만 확보해도 충분하다

    성취할 목표를 설정하라

    • 목표의 개수가 중요한 것이아니다. 중요한 것은 목표중 단 하나라도 이루려면 그 목표를 정확히 이해해야한다는 사실이다. 목표는 명확해야한다.

      1. 큰 목표를 정한다. 방향을 제시할 정도면 된다.

        • 회사의 관리자나 경여자가 되길 원하는가
        • 소프트웨어 개발 회사를 차리고 싶은가
        • 개업가가 되어 개발한 제품을 시장에 도입해보고 싶은가
      2. 거기에 이르기까지 밟아갈 작은 목표를 세운다.

        • 큰목표를 이뤘다고 가정하고 그 사이에 어떤 단계를 거쳐왔을지 상상해라.
      3. 큰목표에 이루기까지 작은목표만 보고 가자.

      4. 목표를 주기적으로 점검하고 업데이트하라

'Books' 카테고리의 다른 글

프로그래머, 열정을 말하다  (0) 2022.12.26
소프트 스킬 3  (0) 2020.12.13
소프트 스킬 2  (0) 2020.12.13
728x90

ES6와 비교하여 ECAM Script 2020(ES11)에서 새로 생긴 문법은 다음과같다.

  1. BigInt
  2. Import
  3. Promise.allSettled( )
  4. globalThis
  5. Nullish Coalescing Operator
  6. Optional Chaing Operator

BigInt

ES6에서 int 의 범위는 +/- 2^53 - 1(=9007199254740991) 이었다.

※ 9007199254740992까지 출력이 가능하지만 9007199254740992나 9007199254740993이나 9007199254740992로 출력되기때문에 reliable 하지않아 제외.

ES11에서 새로운 Number표현법인 BigInt가 도입됨에 따라 숫자의 max min의 제한이 사라지게 되었다.

사용법은 숫자뒤에 n을 붙이거나 BigInt로 숫자또는 숫자문자열을 감싸면 된다.

Number에서 사용할 수 있던 연산자(+,-,*./,||,&&...)를 똑같이 사용할 수 있다.

See the Pen ES11 - BigInt by zakelstorm (@zakelstorm) on CodePen.

BigInt가 가지는 Number와의 차이점은 다음과 같다.

  • Math object의 함수와 사용될 수 없다.

    • Cannot convert a BigInt value to a number
  • Nubmer와 연산에 함께 사용될 수 없다. 사용하기위해서는 Number를 BigInt로 (또는 BigInt를 Number로) 캐스팅 해야한다.

    • Cannot mix BigInt and other types, use explicit conversions

Import

ES11부터 import는 promise를 return 한다. 따라서 async/await 로 함수 내부 코드의 동기 처리가 가능하다.

const helpModule = './helper.js';
import(helpModule).then((module)=>{
  module.doStuff1();
  module.doStuff2();
})

(aysnc function importCheck(){
  const helpModule = './helper.js'
  const module = await import(helpModule);
  module.doStuff1();
  module.doStuff2();
}) 

Promise.allSettled( )

promise.all 의 단점을 보완하기 위해 만들어진 Promise 함수.
기존 promise.all은 단 하나의 request라도 error 발생 시 그 뒤의 request를 기다리지 않고 다음 catch phrase를 시행하는 문제가 있었다.
이로 인해 어떤 request가 성공하고 실패했는지 알 수 없었고 마지막 request의 response를 기다린 후 시행되어야 할 코드를 만들기 어려웠다.(가능은 하다...)
promise.allSettled는 모든 request가 response를 받을때까지 기다린 후 다음 then phrase를 시행하도록한다.

이때 response에 error가 있더라도 then으로 가게되어 catch구문이 사실상 필요가 없게된다.

See the Pen ES11 - Promise.allSettled( ) by zakelstorm (@zakelstorm) on CodePen.


globalThis

window ,self, global 의 기능을 하는 변수이다.

Window {parent: Window, postMessage: ƒ, blur: ƒ, focus: ƒ, close: ƒ, …}

다른 점은 window는 browser에서 사용.

selfwebworker에서 사용.

global은 node.js에서 사용.한다는 점이다.

이러한 각각의 환경에대한 특수성 때문에 이를 한 변수로 통일하고자 globalThis라는 변수를 ES11부터 사용할 수 있게 되었다.


Optional Chaining Operator (?.)

ES6까지는 undefined variable object의 key값 참조 시 발생하던 에러 때문에 Ternary Operator 또는 if 구문으로 예외상황에 대해 항상 준비해야했다.

ES11부터 이 예외상황에 대한 준비를 보다 간소하게 하기위해 operator를 만들었는데 이를 Optional Chaning Operator라고 한다.

Optional Chaning Operator가 존재함에 따라 variable object의 key값을 참조시 해당 변수가 undefined 라면 false를 return하게 된다.

const person1={ // nested Object
    name:'Ellie`,
    job:{
        title:`S/W Engineer`,
        manager:{
            name:'Bob',
        }
    }
}

const person2={
    name:'Bob',
};

function printManager(person){
    console.log(person.job.manager.name);
}
console.log(person1); //OK
console.log(person2); //ERROR. resolve with ternary Optional or if phrase

function printManagerES11(person){
    console.log(person.job?.manager?.name);
}

Nullish Coalescing Operator (??)

ES6 까지는 Boolean의 false, Object의 null,undefined, String의 '', Number의 0 은 모두 false로 인식되었다. 여기서 DB에서 참조했을 뿐인데 empty string이나 0 nubmer를 false로 규정하는 문제때문에 이 경우 true를 return 하도록 예외상황을 구분하는 코드를 작성해야했다.

ES11 부터는 이를 간소화 하고자 operator를 만들었는데 이를 Nullish Coalescing Operator라고 한다.

Nullish Coalescing Operator은

empty string과 0 number의 경우 true를 return 하도록 하고,

false,null,undefined의 경우에만 false를 returng하도록 한다.

//Logical OR operator  
// false: false, '' , 0, null , undefined  
const name='Ellie';  
const userName = name || 'Guest';  
console.log(userName);

const name = null;  
const userName = name || 'Guest';  
console.log(userName);

//문제가 생기게되는데 문자열이 비어있는 경우에도('') 아무런 이름쓰고싶지않은데 Guest 출력  
// false의 조건을 좀더 까다롭게 해주자 오직 false null undefined만 false로 인식

cosnt name = '';  
const userName = name ?? 'Guest';  
console.log(userName); //''

const num = 0;  
const message = num ?? 'undefined';  
console.log(message); //0

'Javascript' 카테고리의 다른 글

prototype  (0) 2021.02.14
var vs let (const)  (0) 2021.01.13
비동기 처리 - async/await  (0) 2020.12.27
비동기 처리 - Promise  (0) 2020.12.20
동기/비동기 처리 - Callback, Callback 지옥  (0) 2020.12.20
728x90

transform

element의 모양,크기,위치,회전 변경시키는 CSS attribute.

 

translate( )

element를 현재 위치에서 x,y만큼 이동

See the Pen transform - translate by zakelstorm (@zakelstorm) on CodePen.

rotate( )

rotate() 메소드는 해당 요소를 주어진 각도만큼 시계 방향이나 반시계 방향으로 회전시킨다.

주어진 각도가 양수이면 시계 방향으로, 음수이면 반시계 방향으로 회전시킨다.

See the Pen abmZNGP by zakelstorm (@zakelstorm) on CodePen.

sclae( )

scale() 메소드는 해당 요소의 크기를 주어진 배율만큼 늘리거나 줄인다.

주어진 배율이 1보다 크면 크기를 늘리고, 0보다 크고 1보다 작으면 크기를 줄인다.

  • transform-origin

    • transform 속성과 함께 사용되는 속성으로서, 회전 중심(원점·기준점)을 지정한다.

See the Pen wvzWGEJ by zakelstorm (@zakelstorm) on CodePen.

 

skew( )

skew() 메소드는 해당 요소를 주어진 각도만큼 각각 x축과 y축 방향으로 기울인다.

See the Pen transform - skew by zakelstorm (@zakelstorm) on CodePen.

 

matrix( )

해당 메소드는 모든 transform 메소드를 한 줄에 설정할 수 있도록 해준다.

 

이 메소드는 2D 변형(transform)과 관련된 6개의 매개변수를 가진다.

matrix() 메소드의 매개변수 순서는 다음과 같다.

matrix(scaleX(), skewY(), skewX(), scaleY(), translateX(), translateY());

 

 

'CSS' 카테고리의 다른 글

100 % vs auto vs inherit  (0) 2021.01.15
7. 위치 속성 CSS - Flex  (0) 2020.12.01
6. 위치 속성 CSS - 정렬  (0) 2020.12.01
5. CSS 위치 속성 - float, clear, overflow  (0) 2020.11.30
4. 위치 속성 정보 - position  (0) 2020.11.25
728x90

Cross-site Request Forgery

웹 어플리케이션 취약점 중 하나로 인터넷 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 등록, 삭제 등)를 특정 웹사이트에 요청하게 만드는 공격.

주로 이미지에 source로 공격자가 의도한 행위를 넣어, 해당 이미지가 담긴 페이지를 여는것만으로 공격을 받게된다.

 

CSRF가 이뤄지기 위해서는 다음과 같은 선행조건이 이뤄져야한다.

  • 사용자가 이용하는 사이트(bank.com)에 로그인 상태
  • 공격자가 만든 사이트 또는 메일에 사용자가 접속

예시

옥션에서도 CSRF로 인한 해킹사건이 일어났는데 방법은 다음과같다.

  1. 옥션 관리자 중 한명이 관리 권한을 가지고 회사내에서 작업을 하던 중 메일을 조회한다.
  2. 해커는 다음과 같이 태그가 들어간 코드가 담긴 이메일을 보낸다. 관리자는 이미지 크기가 0이므로 전혀 알지 못한다.
  3. <img src="http://auction.com/changeUserAccount?id=admin&password=admin" width="0" height="0"/>
  4. 피해자가 이메일을 열면 API가 호출된다.(비밀번호 1111초기화 같은)

대처

  • Referrer(요청 전송 페이지) 검증
    • request의 referrer을 확인하여 domain이 일치하는지 확인하는 검증방법
      • 위의 상황에서는 옥션 홈페이지가 아닌 메일에서 악의적인 요청이 발생한 것처럼 서버가 해킹당하지 않는 이상 referrer는 다를 수 밖에 없다. 
  • Security Token(CSRF Token) 사용 (OTP와 유사)
    • 랜덤한 Token을 세션에 저장하여 사용자의 요청마다 해당 token을 삽입. 서버에서 해당 token이 맞는지 검증하여 request 허용/불허 판단 
  • CAPCHA
    • 사람이 하려고하는 행위인지 봇이 하려고 하는 행위인지 판단하는 시스템. 원치않는 행위인지 사용자가 판단하게 해준다.

CAPCHA


XSS vs CSRF

XSS CSRF
개요: 악성 스크립트가 클라이언트에서 실행
공격대상 : 클라이언트
목적: 개인정보 갈취, 웹사이트 변조
개요: 권한을 도용당한 클라이언트가 가짜 요청을 서버에 전송
공격대상: 서버
목적: 권한도용

'Security & Errors' 카테고리의 다른 글

1.SOP (Same Origin Policy)  (0) 2020.12.02
728x90

SOP란?

<script></script>안 같은 Origin 내에서의 HTTP Reqeust/Response의 경우에서만 허용하는 browser 정책이다.

같은 IP와 Port 끼리의 HTTP Request/Response의 경우에만 SOP정책에 허용된다.

SOP란?

SOP가 필요한 이유

iframe 을 이용한 공격을 방어하는데 사용될 수 있다.

해커가 심어둔 iframe을 이용한 구글 로그인 화면이 들어있는 악의적인 화면이 있다고 가정하자

피해자는 해당 로그인 화면이 해커가 공격코드를 심어둔 악의적인 화면인지 알수있는 방법이 없다.  피해자는 해당 로그인 화면에서 로그인을 진행할 것이다.

만약 sop 가 없다면 악의적인 화면에서 구글 로그인이 성공하게되고 실시간으로 피해자의 신상, 메일 정보 등이 해커에게 전송될 수 있다.

sop가 있다면 애초에 iframe 으로 심어둔 구글 로그인이 성공할 수 없게 되고 공격으로부터 안전할 수 있다

 

 

SOP 우회 방법

  1. JSONP (Backend) -> Not Recommended
  2. Proxy (Frontend, new Backend(proxy server)) -> browser에게 눈속임 
    proxy with proxy server
  3. CORS (Backend) -> 가장 보편적으로 사용한다.

'Security & Errors' 카테고리의 다른 글

Cross-site Request Forgery ( CSRF or XSRF )  (0) 2020.12.07
728x90

Flex의 탄생 배경

기존 css로는 layout을 표현하기 어렵다는 단점을 보완하기 위해 만든 css attribute.

과거 layout을 표현하기 위해 사용한 attribute의 역사는 다음과 같다.

  1. tabe -> layout을 위한 table과 실제 의미가 있는 table과 헷갈림.
  2. position -> 좋은 방법. 하지만 element겹침 문제 발생
  3. float -> 본래의도(어울림 효과)와 거리가 있다.

오직 layout 설정용으로 불의의 element 겹침을 방지하기위해 탄생한 것이 flex 되시겠다.


Flex

기본적으로 container와 item의 역할을 하는 tag가 존재해야한다.

<container>
  <item>...</item>
  <item>...</item>
</conatainer>

container(=flex container) 와 item(=flex item) 각각에는 다음과 같이 적용이 가능한 flex 관련 css attribute가 정해져있다.

Conatainer Item
diplay : 해당 flex box의 박스 타입을 결정 order : 플렉스 컨테이너 안에 있는 플렉스 요소들의 순서를 설정
flex-direction : 플렉스 컨테이너(flex container)안의 플렉스 요소(flex item)가 위치할 방향을 설정 flex-grow
flex-wrap : 플렉스 라인에 더 이상의 여유 공간이 없을 때, 플렉스 요소의 위치를 다음 줄로 넘길지를 설정 flex-shrink
flex-flow : flex-direction + flex-wrap 과 같다. flex-basis
justify-content : 플렉스 요소의 수평 방향 정렬 방식을 설정 flex : flex-grow + flex-shrink + flex-basis 와 같다
align-items : 플렉스 요소의 수직 방향 정렬 방식을 설정 align-self : 플렉스 요소마다 서로 다른 align 속성값을 설정
align-content : flex-wrap 속성의 동작을 변경할 수 있으며, 플렉스 요소를 정렬하는 대신에 플렉스 라인을 정렬  

 이중에 많이 쓰이는 요소만 뽑아 예시를 보이도록 하겠다.


flex-direction / justify-content / align-items

container속성으로 가장 빈번히 쓰이는 flex 관련 css attribute이다.

item의 정렬을 간단히 하며 주로 item간의 배치를 유연하게 만들 때(item 간 겹치지않는다) 사용한다.

각 css 속성이 가질 수 잇는 값은 다음과 같다.

flex-direction row : item을 가로로 배치한다. (default)
col : item을 세로로 배치한다.
justify-content flex-start : container 시작점 부터 순차적 배치
flex-end: container 끝 부터 순차적 배치(item간 순서변경은 없다)
center: container 중앙 순차적 배치
space-around : item 주위에 동일한 간격을 두고 배치
space-between: item 사이에 동일한 간격을 두고 배치 
space-evenly : item 사이에 간격에 동일한 간격을 두고 배치 ( item 시작전과 끝난 후에도 동일 간격)
align-items flex-start : container 시작점 부터 순차적 배치
flex-end: container 끝 부터 순차적 배치(item간 순서변경은 없다)
center: container 중앙 순차적 배치
base-line : container 시작위치에 정렬
stretch : 정렬없이 container 크기에 맞게 item크기를 늘린다.

 

justify-content는 flex-direction과 수평한 방향으로의 item배치를 하고 align-items는 flex-direction과 수직한 방향으로의 item 배치를 한다. 그러므로 justify-content와 align-items는 항상 수직관계를 가지고 있다.

flex-direction justify-content align-items
row 가로배치 정렬 세로배치 정렬
col 세로배치 정렬 가로배치 정렬

See the Pen Flex - direction, justify content, align-items by zakelstorm (@zakelstorm) on CodePen.

 

 

 

 

flex-wrap

container에서 사용하는 속성으로 Flex container에서 Flex item을 한 줄로 표시할 지, 또는 행(行)을 개행(줄 바꿈)해서 복수의 행(行)으로 표시할지 여부를 지정

wrap: flex item이 flex container 안에서 표시되도록 개행 허용.

nowrap: flex item이 flex container 밖에서 표시되더라도 개행 불허.

wrap-reverse: flex item이 flex container 안에서 표시되도록 개행 허용. 단, 역순으로 표시된다.

See the Pen Flex-flex-wrap by zakelstorm (@zakelstorm) on CodePen.

 

 

align-content

flex-wrap이 wrap상태일때 개행이 이뤄졌을때 내부 item을 어떻게 배치할 것인지에 대한 속성이다.

기본속성은stretch이다.

  • flex-start: 개행이 될때 stretch되지 않은상태로 아이템들이 맨 윗줄에 배치된다.
  • flex-end: 개행이 될때 stretch되지 않은상태로 아이템들이 맨 아랫줄에 배치된다.
  • center: 개행이 될때 stretch되지 않은 상태로 가운데에 배치된다.
  • space-between: 개행이 될때 stretch 되지 않은 상태로 맨윗줄과 맨 아랫줄에 배치된다.
  • space-around: 개행이 될때 stretch 되지 않은 상태로 동일한 여백을 가지도록 배치된다.

 

align-self

item의 속성으로 item의 개별 align 상태를 지정한다. (align-items의 개별item 적용 버전)

auto(default) : align-items의 속성을 상속받는다.

stretch : container에 맞게 늘어난다:

center : container기준 중앙 align

flex-start : container 시작점에 위치.

flex-end : container 끝점에 위치

baseline : container의 기준선에 위치

See the Pen Flex - align-self by zakelstorm (@zakelstorm) on CodePen.

 

 

 

 

 

flex-grow / flex-shrink / flex-basis / flex

flex-grow

  • flex item의 너비를 늘어나도록 정의해 줄 수 있는 속성. (default 0)
  • flex-basis로 배치 후 남은 공간 중 얼마를 지정된 플렉스 항목에 비례하여 분배해야하는지 그 정도를 제어.
    • flex-grow가 0일 때의 경우에 container 너비를 기준으로 늘어나지 않기 때문에  각각의 item의 너비 지정값이 고정 너비가 된다.
  • flex-direction에 따라 기준이 달라진다. row=>width, column=>height

flex-shrink

  • flex item의 너비를 줄어들도록 정의해 줄 수 있는 속성. (default 1)
  • flex container가 item의 너비의 합보다 작아졌을 때 각 아이템의 지정된 너비는 무시되면서 flex container 너비를 기준으로 각 item이 줄어들게 된다.
  • flex-direction에 따라 기준이 달라진다. row => width, column=>height

flex-basis

  • CSS에서 요소의 너비는 width로 정의하여 사용했지만 flex의 경우 item의 너비는 flex-basis를 사용하여 지정
  • 기본공간을 의미하며 남는공간이나 부족한 공간은 flex-grow, flex-shrink에 의해 분배된다.
  • px, %, em, rem 등의 실수치가 입력가능하다.

flex

  • flex-grow [flex-shrink] [flex-basis]의 조합 (default : 0 1 auto)
  • auto : 1 1 auto
  • initial : 0 1 auto
  • none : 0 0 auto 

See the Pen Flex- flex-grow/flex-shrink/flex-basis by zakelstorm (@zakelstorm) on CodePen.

'CSS' 카테고리의 다른 글

100 % vs auto vs inherit  (0) 2021.01.15
transform / transform-origin  (0) 2020.12.08
6. 위치 속성 CSS - 정렬  (0) 2020.12.01
5. CSS 위치 속성 - float, clear, overflow  (0) 2020.11.30
4. 위치 속성 정보 - position  (0) 2020.11.25
728x90
  • 수평 정렬

1. margin

2. text-align

3. position

4. float

  • 수직 정렬

1. padding

2. line-height

3. position & transform


수평정렬 - 가운데정렬

Margin

    • display 가 block인 Element에 width가 설정되어있는 경우 가운데 정렬 시 margin을 auto로 설정
    • Image의 경우 display를 block으로 설정 후 가운데 정렬 시 margin-left, margin-right auto로 설정

See the Pen align - margin by zakelstorm (@zakelstorm) on CodePen.

Text-align (for text inside)

    • Text Element 가운데 정렬 시 text-align:center로 설정 

See the Pen align-text-align by zakelstorm (@zakelstorm) on CodePen.


수평정렬 - 좌우정렬

Position

  • position : absolute으로 설정 후 right 또는 left값을 0으로 설정 시 좌/우쪽 정렬을 할 수 있다.

Float

  • float :right; 또는 float:left; 속성을 통해 좌/우측 정렬할 수 있다.
      • container보다 클 경우 밖으로 overflow되어 보이는데 이는 clearfix hack(부모가 다시 자식요소를 감쌀 수 있게 float 초기화하는 기법)을 통해 해결 할 수 있다.

    See the Pen align-float & clearfix by zakelstorm (@zakelstorm) on CodePen.


수직정렬 - 가운데정렬

Padding

  • padding 값으로 top,bottom에 여유공간을 적당히 설정 (일종의 노가다)

Height & Line-height (for text inside)

    • text를 세로 가운데 정렬하는데 사용하며 height와 line-height를 동일하게 설정.

        ※ 단, text의 개행이 발생하면 가운데 정렬을 보장하지 않는다

See the Pen align-height & line-height by zakelstorm (@zakelstorm) on CodePen.

 

Position & Transform

    • position: absolute; top:50%; transform: translate(0, -50%) (height의 50% 만큼 위로 이동) 의 조합으로 설정

See the Pen align-position & transform by zakelstorm (@zakelstorm) on CodePen.


수직정렬 - 상하정렬

Position 

  • position absolute; top 또는 bottom 값을 0 으로 설정 시 상/하 정렬을 할 수 있다.

'CSS' 카테고리의 다른 글

transform / transform-origin  (0) 2020.12.08
7. 위치 속성 CSS - Flex  (0) 2020.12.01
5. CSS 위치 속성 - float, clear, overflow  (0) 2020.11.30
4. 위치 속성 정보 - position  (0) 2020.11.25
3. 위치 속성 정보 - display  (0) 2020.11.25

+ Recent posts