Which branch should be used for bringing forth production releases? - master Branch name for production releases: [master] Branch name for"next release" development: [develop]
How to name your supporting branch prefixes? Feature branches? [feature/] Bugfix branches? [bugfix/] Release branches? [release/] Hotfix branches? [hotfix/] Support branches? [support/] Version tag prefix? [] Hooks and filters directory? [C:/Users/ChoiYonghun/Documents/dev/branch-practice/.git/hooks]
Summary of actions: - The feature branch 'feature/test' was merged into 'develop' - Feature branch 'feature/test' has been locally deleted - You are now on branch 'develop'
~/Documents/dev/branch-practice (develop) $ git flow release start v0.0.1 Switched to a new branch 'release/v0.0.1'
Summary of actions: - A new branch 'release/v0.0.1' was created, based on 'develop' - You are now on branch 'release/v0.0.1'
Follow-up actions: - Bump the version number now! - Start committing last-minute fixes in preparing your release - When done, run:
~/Documents/dev/branch-practice (release/v0.0.1) $ git flow release finish v0.0.1 Switched to branch 'master' Merge made by the 'recursive' strategy. index.html | 65 ++++++++++++++++++++++++++++------------------------ static/css/style.css | 3 +++ 2 files changed, 38 insertions(+), 30 deletions(-) create mode 100644 static/css/style.css Already on 'master' Switched to branch 'develop' Already up to date! Merge made by the 'recursive' strategy. Deleted branch release/v0.0.1 (was ab55d8e).
Summary of actions: - Release branch 'release/v0.0.1' has been merged into 'master' - The release was tagged 'v0.0.1' - Release tag 'v0.0.1' has been back-merged into 'develop' - Release branch 'release/v0.0.1' has been locally deleted - You are now on branch 'develop'
위와 같이 feature start를 통해 단발적인 branch를 만들어 새로운 기능을 개발한다.
$ git flow feature finish {branch 이름}을 통해 종료하면 develop과 자동으로 merge 후 삭제된다.
branch를 release startrelease finish한다.
release finish를 할 때 노트가 총 세 개 열린다. 열심히 자세히 양식에 최대한 맞춰서 적어본다!
문제 설명 문자열 s를 숫자로 변환한 결과를 반환하는 함수, solution을 완성하세요.
제한 조건 s의 길이는 1 이상 5이하입니다. s의 맨앞에는 부호(+, -)가 올 수 있습니다. s는 부호와 숫자로만 이루어져있습니다. s는 0으로 시작하지 않습니다. 입출력 예 예를들어 str이 1234이면 1234를 반환하고, -1234이면 -1234를 반환하면 됩니다. str은 부호(+,-)와 숫자로만 구성되어 있고, 잘못된 값이 입력되는 경우는 없습니다.
나의 답
1 2 3 4
functionsolution(s) { var answer = parseInt(s); return answer; }
감탄한 타인의 답안
1 2 3
functionstrToInt(str) { return str / 1; }
정수로 연산할 경우 문자열이 정수로 형변환되는 것을 이용했다.
2.자릿수 더하기
문제 설명 자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요. 예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.
제한사항 N의 범위 : 100,000,000 이하의 자연수 입출력 예 N answer 123 6 987 24
입출력 예 설명 입출력 예 #1 문제의 예시와 같습니다.
입출력 예 #2 9 + 8 + 7 = 24이므로 24를 return 하면 됩니다.
나의 답
1 2 3 4 5 6 7 8 9
functionsolution(n) { var num = n.toString(); var answer = 0;
for (let i = 0; i < num.length; i++) { answer += parseInt(num[i]); } return answer; }
반응형 웹에서 iframe을 이용하여 영상을 삽입할 경우, viewport의 너비에 따라 영상 비율을 유지 시켜줄 필요가 있다.
1 2 3 4 5 6 7 8 9 10 11 12
<figureclass="ediya-youtube-wrapper"> <iframe style="background: url(./images/youtube-cover.jpg) no-repeat center center cover" src="https://www.youtube.com/embed/UGPo0RqhbKU" frameborder="0" allowfullscreen aria-labelledby="ediyaYoutube" ></iframe> <figcaptionclass="a11y-hidden"id="ediyaYoutube"> [이디야커피] 고객감사 영상 </figcaption> </figure>
테마를 사용할 경우 모든 CSS의 색상을 변경하지 않고 변수에 할당된 값만 변경할 수 있기 때문에 유용하다.
공부한 javaScript 코딩 문제
1.같은 숫자는 싫어
문제 설명 배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은 수들을 반환할 때는 배열 arr의 원소들의 순서를 유지해야 합니다. 예를 들면,
arr = [1, 1, 3, 3, 0, 1, 1] 이면 [1, 3, 0, 1] 을 return 합니다. arr = [4, 4, 4, 3, 3] 이면 [4, 3] 을 return 합니다. 배열 arr에서 연속적으로 나타나는 숫자는 제거하고 남은 수들을 return 하는 solution 함수를 완성해 주세요.
제한사항 배열 arr의 크기 : 1,000,000 이하의 자연수 배열 arr의 원소의 크기 : 0보다 크거나 같고 9보다 작거나 같은 정수
나의 답
1 2 3 4 5 6 7 8 9 10 11 12 13
functionsolution(arr) { var answer = []; var j = 0; answer[0] = arr[0];
for (var i = 1; i < arr.length; i++) { if (answer[j] != arr[i]) { j++; answer[j] = arr[i]; } } return answer; }
문제 설명 두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요. 예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다.
제한 조건 a와 b가 같은 경우는 둘 중 아무 수나 리턴하세요. a와 b는 -10,000,000 이상 10,000,000 이하인 정수입니다. a와 b의 대소관계는 정해져있지 않습니다.
입출력 예 a b return 3 5 12 3 3 3 5 3 12
나의 답
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
functionsolution(a, b) { var answer = 0;
if (a < b) { for (var i = a; i <= b; i++) { answer += a; a++; } } else { for (var i = b; b <= a; i++) { answer += b; b++; } } return answer; }
감탄한 타인의 답안
1 2 3 4
functionadder(a, b) { var result = 0; return ((a + b) * (Math.abs(b - a) + 1)) / 2; }
수학 공부를 열심히 하자.. 댓글 중 ‘가우스의 재림’ 이라는 댓글이 있었는데 웃겼다.
3.문자열 내 p와 y의 개수
문제 설명 대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 ‘p’의 개수와 ‘y’의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요. ‘p’, ‘y’ 모두 하나도 없는 경우는 항상 True를 리턴합니다. 단, 개수를 비교할 때 대문자와 소문자는 구별하지 않습니다.
예를 들어 s가 pPoooyY면 true를 return하고 Pyy라면 false를 return합니다.
제한사항 문자열 s의 길이 : 50 이하의 자연수 문자열 s는 알파벳으로만 이루어져 있습니다.
작은 디바이스 레이아웃에서 확장시키는 것을 권장한다.(하지만 현업에서는 대부분 데스크탑 레이아웃을 이미 갖고있어서 큰 디바이스에서 작은 디바이스로 확장시키는 과정도 많이 사용 중이다.)
@media queries
@media queries의 내용은 다음과 같다.
1 2 3 4 5 6 7 8 9
@media all and (min-width:100px){ 사용자 해상도가 100px 이상일 때 코드 실행 } @media all and (min-width:100px) and (max-width:200px){ 사용자 해상도가 100px 이상이고 200px 이하일 때 코드 실행 } @media all and (min-width:201px){ 사용자 해상도가 200px을 초과할 때 코드 실행 }
위의 예처럼 사용자 viewport에 따라 다른 코드를 실행함으로써 layout 등을 유동적으로 보여줄 수 있다.
반응형 img
1 2 3 4
img { max-width: 100%; height: auto; }
그냥 width로 크기를 지정할 경우 원본 이미지보다 큰 viewport일 경우 이미지가 깨질 수 있기 때문에 이미지의 최대 크기만큼만 크기를 지정한다.
이미지 이슈
디바이스나 환경마다 이미지의 용량 최적화가 필요하다. 그렇지 않다면 필요 이상의 큰 용량의 크기를 가진 이미지를 불러오느라 성능이 저하되며 클라이언트의 데이터 사용량이 필요 이상으로 증가한다.
고해상도 디스플레이(Retina Display)가 들어오면서 비트맵 이미지가 깨지는 현상이 발생하기 때문에 고해상도 이미지가 필요하다. 이미지를 백터 이미지, 초고해상도 이미지로 준비하고 상황에 따라 다르게 뿌려줄 필요가 있다.(<img srcset>을 이용할 수 있다).
Art direction: 기기 지원 해상도에 비해 불필요하게 해상도가 높은 이미지를 쓰는 경우 클라이언트의 데이터 낭비로 직결된다.
<img srcset> / <picture> (srcset보다 직관적이긴 하지만 현업에서 잘 쓰이지 않음(IE11 호환 안 된다.)등을 사용한다.
<divclass="btn-event"> <buttontype="button"class="btn-prev"aria-label="이전 이벤트 보기"></button> <buttontype="button"class="btn-next"aria-label="다음 이벤트 보기"></button> </div>
위처럼 aria-label 값에 padding trick을 사용할 때 쓰는 text를 넣어주면 간단하게 해결된다. 굳이 배경처리를 위해 text를 숨길 노력이 필요없다.
<sectionclass="news"> <h2class="news-heading"id="newsHeading">새소식</h2> <articleclass="news-article"> <ahref="#"class="news-article-link"> <h3class="news-article-subject">W3C 사이트가 리뉴얼 되었습니다.</h3> <timeclass="news-article-date"datetime="2020-10-28T13:30:34" >2020.10.28</time > <pclass="news-article-brief"> 디자인 및 다양한 view 환경을 고려하여 구성되어 있으며, 기존보다 최신 정보 및 개발자를 위한 기술 가이드도 찾기 쉽도록 구성되어 있습니다. </p> <figureclass="news-article-thumbnail"> <img src="./images/news.gif" alt="" aria-labelledby="newsArticleThumbnail" /> <figcaptionid="newsArticleThumbnail">W3C 리뉴얼</figcaption> </figure> </a> <aclass="news-more icon-plus"href="#"aria-labelledby="newsHeading" >더보기</a > </article> </section>
위와 같이 <h2></h2>, <h3></h3> 등 heading 태그를 사용하면 아래와 같이 목차에 일목요연하게 정리되는 것을 볼 수 있다.
위와 같은 논리적이고 높은 접근성을 가진 페이지를 구축하기 위해서는 heading 태그를 잘 이용해야한다.
normarl flow
normal flow란 CSS 레이아웃 기법 중 어떤 것에도 제어받지 않고 자연스러운 흐름대로 배치되는 것을 뜻한다.
사실 상 마크업 이후 CSS로 레이아웃 관련 속성을 주지 않은 상태로 자연스럽게 배치된 상태이다.
레이아웃으로 요소를 배치하는 속성은
display: block, inline, inline-block
float
position
flex
grid 등이 있다.
아래 영상은 float 속성이 레이아웃을 어떻게 움직이고 normal flow 상태인 요소는 어떤 영향을 받았는지 설명하는 영상이다.
Grid
본래 웹 페이지에 레이아웃을 줄 때는 고전적인 <table>을 이용한 레이아웃부터 frame레이아웃을 거쳐, 지금도 많이 쓰이는 <float>, <position> 등으로 발전하였다. 하지만 비교적 최근 flex를 통해 좀 더 합리적이고 편리한 레이아웃 방법이 나왔다.
위의 레이아웃 방법들 보다 더 발전한 레이아웃 기술은 grid 속성이다. grid는 말 그대로 화면에 격자를 그려 선들의 교차로 이뤄진 바둑판에 요소를 배치하는 것이다.
아쉽게도 IE 브라우저 등에서 호환성 문제가 발생해 아직 상용화되지 못 하였다. 하지만 매우 합리적인 레이아웃 기술로 앞으로가 기대된다.
Example
위에서 heading 설명에 사용한 HTML에 디자인을 해보려한다.
위와 같은 디자인을 위해 CSS를 작성하였다.
1 2 3
.news-article { padding: 000130px; }
<img>는 position: absolute로 배치하였고 새소식란의 <heading>, <time>, <p> 등의 배치를 위해서 padding 속성을 이용했다.
margin 병합 현상은 block 속성을 가진 요소들이 상하로 쌓일 때, 마주보는 부분의 margin이 병합되는 현상을 뜻한다.
margin은 마주보는 블록 중 margin 값이 큰 블록의 margin만 적용되는 속성을 갖고있다.
예를 들어 A 블록의 margin-bottom: 20px; B 블록의 margin-top: 10px;일 때 두 블록 사이는 20px + 10px로 30px 이어야하지만 실제로는 20px만 적용된다.
이는 부모와 자식 요소 간의 margin에도 영향을 미친다.
margin 병합 현상은 원래 블록 요소가 상하로 쌓일 때, 간격을 일정하게 유지하기 위해 생긴 기능이지만 가끔 이런 현상으로 불편을 겪을 때도 있다.
margin 병합 현상 해제
flex 속성을 부여하면 margin 병합 현상이 발생하지 않는다.
자식 요소에 inline-block 속성을 부여하면 발생하지 않는다.
부모요소에 overflow:hidden을 설정하면 발생하지 않는다. 이는 overflow에 의해 BFC를 부모요소가 생성하기 때문이다.
background: linear-gradient
1 2
background: #ccc linear-gradient(#ccc, #eee); /*앞에 ccc를 또 붙이는 이유는 linear가 안될때를 상정해서 기본값을 정하기 위함이다.*/
위와 같이 linear-gradient 속성값을 통해 배경 이미지를 지정하지만 그 앞에 fallback을 위해 배경 색상인 #ccc를 또 붙여놨다.
그 이유는 브라우저마다 배경 이미지의 linear-gradient속성값을 지원하지 않거나 배경 이미지를 불러오지 못 하는 경우가 있는데, 이때 앞에 미리 붙여둔 배경 색상이 기본색상으로 지정되어 브라우저 호환성 문제를 부분적으로 해결할 수 있다.
Tab UI
탭 인덱스를 만들 때는 <ul role=”tablist”> 다음과 같이 role="tablist 속성을 통해 만들 수 있다.
<li tabindex=”0”>tabindex를 통해 탭 포커스 가능하게 만들어주지만 논리적인 흐름을 방해하기 때문에 좋지 못 하다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
<!--그렇기 때문에 아래와 같이 aria=controls 속성값을 이용한다.--> <ulrole="tablist"> <!--role="none" 이면 역할이 없다는 의미이다. --> <!--aria-controls와 tabpanel의 id가 연결된다. --> <lirole="”none”"> <a role="”tab”" id="tab01 aria-controls=”section01” id></a></li> <!--- tab list 내부 하위 목록은 tab panel이다. --> <!--- tab의 id 값과 본문의 aria-labelledby가 이어진다. --> <section role=”tabpanel" id="section01" aria-labelledby="”tab01”" > </a> </li> </ul>
block 상자에 inline 상자가 배치될 때 배치 위치가 block 상자의 상단이기 때문에 하단에 gap이 발생한다.
마크업 시 공간을 분리하고 세분화할 때는 암묵적 보다는 명시적으로 알려줄 필요가 있다. 예를 들어 form 안에서 label태그로 input태그를 묶는 암묵적 방식 보다는 따로 분리하는 것이 더 낫다. 또한 label태그로 input태그를 묶을 시 디자인 이슈도 존재한다.
<input required> 필수 입력 서식이라는 뜻이다. 값을 입력하지 않으면 form으로 전송되지 않는다.
border-bottom: 0;와 border-bottom-color: transparent;는 모두 동일하게 border의 밑변을 없앨 때 사용한다. 하지만 전자는 border의 굵기를 아예 없애버리는 반면 후자는 border의 밑변이 존재하지만 색상이 투명색이라 보이지 않을 뿐이다.
line height로 인해 옆 이미지와 높이가 평행하지 않을 때는 margin을 음수값을 줘서 맞출 수 있다.
오늘 느낀 것
margin 병합은 처음 의도는 편기함을 위한 기능이었을 텐데 지금은 나를 괴롭힌다..
마크업은 쉽지만 CSS가 어렵다.. CSS는 할만하지만 마크업은 모르겠다.. 사실 둘 다 어렵다. 언제쯤 익숙해질까?
포기하지말자 어렵고 이해 안되고 힘들더라도 일단 끝까지 해보자 분명 어느 순간 이해를 꿰뚫는 날이 올테니!
font-size는 12px 이상으로 설정하자, 미만이라면 접근성도 떨어지며 SEO(검색최적화) 점수가 낮아서 검색 결과에 반영이 안되는 경우가 발생한다.
접근성 측면에서 마우스로 접근 가능한 콘텐츠는 키보드로도 접근이 가능하게 설계하는 것이 좋다.
background
1 2 3
background-color: red;
background: url(./images/icon.png) no-repeat 25px 50% / 20px 20px;
위와 같이 Background y 50% 좌표를 백분율로 주면 소속된 요소의 백분율 값과, 이미지의 좌표 백분율 값을 둘 다 계산하여 콘텐츠를 배치한다.
위와 같은 경우 앞의 background-color: red;는 무시되는데, 그 이유는 개별 속성을 정의하고 단축 속성으로 재정의할 경우 앞선 개별 속성 값은 초기화된다. (중요)
article vs section
article은 완전 독립된, 홀로 서는 콘텐츠를 뜻한다. 문맥상 독립적이고 홀로 완전한 것을 말한다.
section은 ‘1장 1절, 2절’ 같은 대주제의 안에서 나눠지는 부분들을 나눌 때 쓰인다.
하지만 둘 다 콘텐츠를 묶는 요소로써 쓰이기 때문에 이것에 대한 의견이 많이 갈리는 편임이다. 개인의 기준을 갖고 사용하면 된다.
dl, dt, dd
Heading(h1~6)이 아니라 <dl>을 사용하는 이유는 용어 정의 정도로 제목을 낭비해서는 안되기 때문이다.
<dt><dd> 는 일대일 대응으로 작성하는 것을 권장한다.
<dl> 내부에서 <dt><dd>를 <div>로 엮을 수 있지만 딱 거기까지만 허용한다. (이 이상으로 division을 사용하여 묶는 것은 안 된다.) 다음 문서의 <div> as a child of a <dl> element. 부분을 참고하자. > dl과 div의 상관관계
기타
Css의 답답함 때문에 전처리기인 SASS, LESS, STLY 등이 쓰인다. 특징으로는 변수 생성 기능, float해제 등에 대한 믹스인 기능, placeholder 기능, 내장 함수 로직 기능, 모듈화 제공 등과 더 발전하면 BEM표기법과 결합하여 모듈화 시킬 수 있는 특징이 있다. (CSS에 익숙해지면 꼭 익혀봐야지!)