FLEX 레이아웃 익히기

  1. 기존에 DIV 요소는 줄바꿈이 되어 수직으로 배치가 되는데, 수평적으로 배치한다.
  2. 자식을 부모 기준 가운데 정렬을 한다 

위 예시와 같이 요소들을 마음대로 배치하기 위해서 옛날에는 float  display 속성(table, inline-block) 등을 사용했습니다.

그러나 요새는 레이아웃을 쉽게 배치할 수 있는 Flex 라는 친구가 대세가 되었습니다. 

우리가 앞으로 배울 웹, 앱에서는 대부분의 요소를 Flex로 배치할 것이므로 정말 중요할 것이다.

만약 비주얼스튜디오가 잘 작동하지 않는다면

 

JS Bin

Sample of the bin:

jsbin.com

이곳에 들어가면 프로그램 없이 학습할 수 있습니다.

 

 

1. Flex 기본

Flex의 핵심은 Container와 Item입니다. Container(부모)의 첫째 자식이 되는 Item들을 Flex를 통해서 쉽게 정렬할 수 있습니다.

(설명 잘 해주는 링크 : https://heropy.blog/2018/11/24/css-flexible-box/)

기본 코드

<html>
    <head>
        <style>
            .parent {
                background-color: aqua;
            }

            .child {
                width: 100px;
                height: 100px;
                background-color: blue;
								margin-right: 8px;
            }
        </style>
    </head>

    <body>
        <div class="parent">
            <div class="child">
                자식
            </div>
            <div class="child">
                자식
            </div>
            <div class="child">
                자식
            </div>
				</div>
    </body>

</html>

2. 컨테이너(부모) 속성

flex-direction을 통해 기준선을 설정합니다. row는 수평으로, column은 수직으로 정렬합니다.

.parent {
	display: flex;
	**flex-direciton: column;** 
}

justify-content

아이템 정렬 방향(by flex-direction)과 같은 방향으로 아이템의 여백을 관리할 때 설정합니다.

flex-direciton이 row이면 수평으로, flex-direction이 column이면 수직으로 배치됩니다.

기본 값은 flex-start 입니다.

.parent {
	display: flex;
	**justify-content: center;**
}

align-items(수직 방향으로 관리)

아이템 정렬 방향(by flex-direction)과 수직 방향으로 아이템의 여백을 관리할 때 설정합니다.

flex-direciton이 row이면 수직으로, flex-direction이 column이면 수평으로 배치됩니다.

기본 값은 stretch 입니다.

.parent {
	display: flex;
	**align-items: flex-start;** 
}

flex-wrap

아이템이 컨테이너를 넘어섰을 때 어떻게 처리할 것인지 설정합니다. 기본 값은 nowrap 으로 부모의 크기(너비 or 높이)를 기준으로 자식들이 알아서 공간을 나눠서 나열됩니다. 즉 줄바꿈이 일어나지 않는 거죠.

많은 상품 아이템들을 보여줘야 할 때 flex-wrap에 wrap을 설정하면 알아서 줄바꿈이 됩니다.

.parent {
	display: flex;
	**flex-wrap: wrap; /*nowrap(기본), wrap ... */**
}

3. 아이템(자식) 속성

flex-basis

자식의 최소 너비를 설정할 때 사용합니다(수직정렬일 때는 높이가 되겠죠?)

기본 값은 auto입니다.

f

lex-grow

Container에 여백이 생겼을 때 아이템이 어떻게 영역을 차지할지 설정합니다. 다른 아이템들과 비교해서 해당 비율로 여백을 가져갑니다.

기본 값은 0입니다.

flex-shrink

Container가 자식들이 차지하는 공간보다 줄어들었을 때 너비를 어떤 비율로 줄일지 정합니다. 다른 아이템들과 비교해서 해당 비율로 줄어들게 됩니다.

 

기본 값은 1입니다

(실제로 flex-shrink는 계산이 복잡해서 많이 사용하지는 않습니다)

위 세가지 요소를 flex 라는 하나의 속성으로 요약해서 표현하곤 합니다.

flex: 증가너비 감소너비 기본너비; 
/*만약 해당 값들이 생략되면 기본 값이 적용됨*/
.child {
	flex: 1 1 20px /*증가너비 감소너비 기본너비*/
	flex: 1; /*증가너비만 적용되고 감소너비(1), 기본너비(auto)는 기본값으로 적용됨 */
	flex: 1 1; /*증가너비, 감소너비가 적용됨*/
	flex: 1 30px; /*증가너비, 기본너비가 적용됨*/
}
.child {
	flex: 1 1 20px /*증가너비 감소너비 기본너비*/
	flex: 1; /*증가너비만 적용되고 감소너비(1), 기본너비(auto)는 기본값으로 적용됨 */
	flex: 1 1; /*증가너비, 감소너비가 적용됨*/
	flex: 1 30px; /*증가너비, 기본너비가 적용됨*/
}

웹의 동작 (HTTP 프로토콜 이해)

인터넷 != WWW

 

HTTP의 이해

보통 인터넷을 World wide web이라고 생각한다.

그만큼 많은 사람들이 웹 브라우저를 많이 사용한다. 그러나 www가 인터넷의 전부는 아니다

하나의 컴퓨터에는 서버가 많이 존재할 수 있고 각각의 서버는 포트라는 값으로 구분되서 동작한다.

인터넷은 한마디로 네트워크들의 네트워크라고 말할 수 있다.

 

 

TCP/IP라는 약속으로 연결되어 있다.

 

인터넷 중 웹에서는 서로 통신하기 위해서 http를 사용한다.

http는 서버 클라이언트 모델을 사용한다.

 

연결, 요청, 응답

하지만 이 방식의 서버는 요청만 받을 뿐 사용자를 구분하지 못한다.

 

장점은 불특정 다수를 대상으로 하는 서비스에 적합하다.

윈도우의 공유폴더는 접속자가 10명으로 한정되어 있다.

 

위의 이 무접점 방식은 계속 연결되어있지 않기 때문에 많은 사람에게 줄 수 있다.

하지만 그 전의 데이터는 사라질 가능성이 있다.

 

그래서 이런 것들을 해결하기 위해서 Cookie와 같은 기술들이 등장하게 되었다.

 

URL(Uniform Resouce Locator)

URL은 웹상에서 문서와 다른 자원들 이미지라든가 동영상 등의 자원들의 위치를 나타내기 위해서 사용된다.

 

URL은 세 부분으로 나눠지는데

 

첫 번째는 프로토콜의 종류를 나타내고

두 번쨰는 자원이 있는 서버의 IP 주소, 도메인 주소, 포트번호를 나타내고

세 번째는 자원의 위치를 나타낸다.

 

 물리적인 서버를 찾기 위해서 반드시 필요한 것은 IP 주소나 도메인 주소이다.

물리적인 컴퓨터를 찾은 후에 해당 컴퓨터 안에 등장하는 소프트웨어 서버를 찾기 위해서는 포트 값이 필요하다.

 

하나의 컴퓨터에는 IP가 하나 존재하고 집 안의 방들을 포트라고 생각하면 되고,  각 서버는 하나의 포트를 차지해야 한다.

 

요청되는 데이터들은 아무렇게나 그냥 가는 게 아니라 정해진 규칙이 있다. 이것을 요청 데이터 포맷이라고 하는데

 

헤더 부분, 빈 줄 부분, 요청 바디 부분으로 나뉜다.

 

  • 요청 메서드 : GET, PUT, POST, PUSH, OPTIONS 등의 요청 방식이 온다.
  • 요청 URI : 요청하는 자원의 위치를 명시한다.
  • HTTP 프로토콜 버전 : 웹 브라우저가 사용하는 프로토콜 버전이다.

 

참고로 최초의 웹 서버는 GET방식만 지원해줬습니다.

  • GET : 정보를 요청하기 위해서 사용한다. (SELECT)
  • POST : 정보를 밀어 넣기 위해서 사용한다. (INSERT)
  • PUT : 정보를 업데이트하기 위해서 사용한다. (UPDATE)
  • DELETE : 정보를 삭제하기 위해서 사용한다. (DELETE)
  • HEAD : (HTTP) 헤더 정보만 요청한다. 해당 자원이 존재하는지 혹은 서버에 문제가 없는지를 확인하기 위해서 사용한다.
  • OPTIONS : 웹서버가 지원하는 메서드의 종류를 요청한다.
  • TRACE : 클라이언트의 요청을 그대로 반환한다. 예컨대 echo 서비스로 서버 상태를 확인하기 위한 목적으로 주로 사용한다.

바디 요소는 요청 메서드가  POST나 PUT을 사용하게 됐을 때 들어오게 된다.

웹 Front-End와 웹 Back-End-1

 

프런트엔드 사용자에게 웹을 통해 다양한 콘텐츠(문서, 동영상, 사진 등)을 제공한다.

또한 사용자의 요청(요구사항)에 반응해서 동작한다.

문서를 전달한다는 것은 적절한 배치와 일관된 디자인

일관되지 않더라도 보기 좋고 아름다운 다자인을 제공하는 것이 좋다.

 

웹 프런트엔드의 역할

  • 웹 콘텐츠를 잘 보여주기 위해 구조를 만들어야 합니다.(신문, 책 등과 같이) - HTML
  • 적절한 배치와 일관된 디자인 등을 제공해야 합니다.(보기 좋게) - CSS
  • 사용자 요청을 잘 반영해야 합니다.(소통하듯이) - Javascript

HTML 코드 

원하는 문서의 구조를 프로그래밍 언어로 표현해야 합니다.

HTML이라는 것은 그 구조를 잘 표현해 줍니다.

 

스타일 - CSS 코드 예시

웹페이지를 꾸미기 위해서는 각각의 HTML 태그(문서의 구조를 표현한 각 조각 단위)를 꾸미기 위한 규칙이 필요합니다

CSS는 이를 표현할 수 있는 프로그래밍 언어입니다.

.window-header-icon {
left: -28px;
position: absolute;
top: 8px
}

.window-header-inline-content {
cursor: default;
display: inline-block;
margin: 4px 6px 0 0
}

 

동작 - JavaScript 코드 예시

HTML, CSS를 이리저리 움직이고 변경할 필요가 있을 거예요.

JavaScript가 그걸 해줍니다.

let aCardList = [];
for (var i = 0; i < cardList.length; i++) {
let str =`${cardList[i]}번째 카드`;
let id = `list-${cardList[i]}`;
aCardList.push(<li id={id} key={i} draggable='true' onDragStart={dragStart}> {str} </li>)
}

 

 

웹 Front-End와 웹 Back-End-2

 

백 엔드(Back-End)란?

backend는 정보를 처리하고 저장하며, 요청에 따라 정보를 내려주는 역할을 한다. 가령 쇼핑몰이라면, 상품 정보를 가지고 있고, 주문을 받아서 저장하고, 사용자가 관심 있어하는 상품을 골라주는 역할이 back-End의 역할이다

 

백 엔드 개발자가 알아야 할 것들

  • 프로그래밍 언어(JAVA,  Python, PHP, Javascript 등)
  • 웹의 동작 원리
  • 알고리즘(algorithm), 자료구조 등 프로그래밍 기반 지식
  • 운영체제, 네트워크 등에 대한 이해
  • 프레임워크에 대한 이해(예: Spring)
  • DBMS에 대한 이해와 사용방법(예: MySQL, Oracle 등)

 browser의 동작-1

브라우저는 어떻게 동작하는가?

https://d2.naver.com/helloworld/59361


크로미움은 V8 + Blink을 포함한 구글 브라우저 오픈소스 애플리케이션 입니다.  또한 크롬은 바로 이 크로미움을 기반으로 만들어집니다. 크로미움은 여전히 렌더링 엔진으로 Blink를(webkit에서 fork된) 사용합니다. Blink 라는 용어보다도 보통  크롬의 크로미움을 주로 이야기하지만, Blink가 크로미움으로 바뀐 것이 아님을 알려드립니다. 

브라우저는 월드와이드 웹(WWW)에서 정보를 검색, 표현하고 탐색하기 위한 소프트웨어입니다.

 

인터넷에서 특정 정보로 이동할 수 있는 주소 입력창이 있고 서버와 HTTP로 정보를 주고받을 수 있는 네트워크 모듈도 포함하고 있습니다.

그리고 서버에서 받은 문서(HTML, CSS, Javascript)를 해석하고 실행하여 화면에 표현하기 위한 해석기(Parser)들을 가지고 있습니다.

브라우저마다 서로 다른 엔진을 포함하고 있습니다.

아래 그림이 대표적인 내용입니다.

사파리 브라우저에서 처리되는 webkit렌더링엔진의 처리과정출처 https://www.html5rocks.com/en/tutorials/internals/howbrowserswork/

HTML을 해석해서 DOM Tree를 만들고, CSS를 해석해서 역시 CSS Tree(CSS Object Model)을 만듭니다. 

이 과정에서 Parsing 과정이 필요하며 토큰 단위로 해석되는 방식은 일반적인 소스코드의 컴파일 과정이라고 보시면 됩니다.

DOM Tree와 CSS Tree, 이 두 개는 연관되어 있으므로 Render Tree로 다시 조합됩니다.

이렇게 조합된 결과는 화면에 어떻게 배치할지 크기와 위치 정보를 담고 있습니다.

이후에 이렇게 구성된 Render Tree정보를 통해서 화면에 어떤 부분에 어떻게 색칠을 할지 Painting과정을 거치게 됩니다.

 

 브라우저 엔진: 소스코드를 화면에 실행해서 보여주는 엔진/ 브라우저 소프트웨어를 구동시키는 핵심 엔진

 

1.HTML을 parsing을 하게 되어 있다. 문자 단위로 해석해서 의미를 파악하는 것을 어떠한 데이터 객체로 구조화시킨다.

2.트리 구조의 형태로 html태그를 가지게 되고

3.랜더 트리를 기준으로 css랑 합치고 스타일 정보와 구조를 합쳐서 화면의 위치를 결정하고

4.그림을 그리게 된다.

 

렌더링 엔진: 화면에 위치를 잡고 색칠을 해 주는 픽셀 단위로 그려져서 우리가 다양한 형태를 볼 수 있다

브라우저 별로 메인 다르다.

 

browser의 동작-2

parsing general- 일반적인 파싱의 방법에 대해서 설명

2 + 3 - 1 을 분석하기 위해서

개개를 다 분리해서 이것들이 가진 의미 더하기면 +면 앞과 뒤를 합치고 그 결과

기호를 만나면 앞의 값과 숫자를 토큰이라고 하는데 이렇게 트리를 만들어서

트리에 따라서 값이 처리가 일어나게 된다.

 

파싱을 컴파일러 부분인데 토큰 단위로 잘라서 의미를 해석하고 의미에 따라서 실행

HTML 파서 부분이 있다.

HTML 문법은 태그를 쓰고 꺾쇠를 닫고 이런 코드를 다룰 수 있다.

HTML을 짤 것이기 때문에 기본적으로 마크업 형태로 이루어져 있는데

 마크업의 구조

html 파싱 과정

css도 룰이 있고 벨류가 있고 key와 valu의 구조로 되어있는데.

css 파싱

그리기 순서

CSS 2는 그리기 과정의 순서를 정의했다. 이것은 실제로 요소가 stacking contexts에 쌓이는 순서다. 스택은 뒤에서 앞으로 그려지기 때문에 이 순서는 그리기에 영향을 미친다. 블록 렌더러가 쌓이는 순서는 다음과 같다.

  1. 배경 색 
  2. 배경 이미지 
  3. 테두리 
  4. 자식 
  5. 아웃라인

browser에서의 웹 개발-1

HTML 문서 구조

뜯어보자 웹사이트!

  1. 먼저 크롬 브라우저가 없다면 설치하기
  2. 크롬 브라우저를 열고 크롬 개발자 도구 열기
  3. 윈도우 (Ctrl + Shift + I)
    맥(Option + Command + i)
  4. 접속 : http://www.amazon.com

 

알게 된 몇 가지 특징

  • HTML 문서는 html이라는 태그로 시작해서 html태그로 끝납니다.
  • head는 무엇을 하는 걸까요?
  • body는 무엇을 하는 걸까요?
  • HTML은 계층적입니다.
  • HTML은 tag를 사용해서 표현합니다.

 

<tag class ="title">안녕하세요</tag>

 

  • JavaScript와 CSS가 html 안에 여기저기 존재합니다.
  • JavaScript는 </body>태그 위에 위치하는 것이 권장된다.

 

웹서버

웹 서버란?

  • 웹 서버는 소프트웨어(Software)를 보통 말하지만, 웹 서버 소프트웨어가 동작하는 컴퓨터를 말합니다.
  • 웹 서버의 가장 중요한 기능은 클라이언트(Client)가 요청하는 HTML 문서나 각종 리소스(Resource)를 전달하는 것입니다.
  • 만약 리소스가 존재하지 않거나 요청한 리소스를 전송할 때 문제가 발생한다면 에러 메시지를 전송하게 됩니다.
  • 웹 브라우저나 웹 크롤러가 요청하는 리소스는 컴퓨터에 저장된 정적(static)인 데이터이거나 동적인 결과가 될 수 있습니다.
  • 정적인 데이터란 보통 이미지, HTML, CSS, JavaScript같이 컴퓨터에 저장되어 있는 파일들을 의미한다.
  • 동적인 결과란 웹 서버에 의해서 실행되는 프로그램을 통해서 만들어진 결과물을 이야기한다.
  • 웹 크롤러는 네이버나 구글에서 다른 웹사이트 정보를 읽을 때 사용하는 소프트웨어이다.

 

웹 서버 소프트웨어의 종류

  • 가장 많이 사용하는 웹 서버는 Apache, Nginx, Microsoft IIS
  • Apache 웹 서버는 Apache Software Foundation에서 개발한 웹서버로 오픈소스 소프트웨어(Open-source Software)이며, 거의 대부분 운영체제에서 설치 및 사용을 할 수 있습니다.
  • Nginx는 차세대 웹서버로 불리며 더 적은 자원으로 더 빠르게 데이터를 서비스하는 것을 목적으로 만들어진 서버이며 Apache웹 서버와 마찬가지로 오픈소스 소프트웨어입니다.

 

HTTP(Hypertext Transfer Protocol)으로 인터넷상의 데이터를 주고받기 위한 프로토콜을 이야기한다.

프로토콜은 규약이라는 의미를 가지고 있다.

인터넷상의 데이터를 주고받기 위한 규약을 이야기한다.

클라이언트와 서버는 미리 정해놓은 규칙을 가지고 통신을 하고 있다.

개발자도구 네트워크 창

1. 주소에서 HTML 문서를 요청

 

2. 서버는 HTML 문서를 브라우저에 전달

 

3. 웹 브라우저는 문서를 읽고 해석 리소스들에 URL 추출하고

 

4. 웹 서버에 동시에 여러 개의 리소스를 요청

 

5. 웹 서버는 동시에 요청한 여러 개의 요청을 받아들여서 그 결과를 브라우저에게 전송한다.

 

6. 웹 브라우저는 아까 해석했던 HTML 문서와 그리고 읽어 들인 여러 개의 응답을 

하나로 합쳐서 그 결과를 화면에 보이게 한다.

 

이렇게 하나로 합쳐서 보여주는 작업을 렌더링이라고 한다.

웹 서버의 소프트웨어 종류는 여러 가지가 존재하는데

가장 많이 사용되고 있는 웹 서버는 Apache가 있고

Nginix나 마소, 구글 웹 서버들이 존재한다.

 

WAS

 

클라이언트/서버 구조

클라이언트(Client)는 서비스(Service)를 제공하는 서버(Server)에게 정보를 요청하여 응답받은 결과를 사용합니다.

서비를 제공한다고 해서 서버라고 한다.

클라이언트/서버 구조

DBMS (DataBase Management System)

다수의 사용자가 데이터베이스 내의 데이터에 접근할 수 있도록 해주는 소프트웨어입니다.

DBMS가 등장하기 이전에는 개발자들이 파일의 데이터를 저장하고 읽어 들이는 등의 기능을 모두 구현해야 했다.

DBMS의 최초의 개념은 IBM의 논문이었고 구현은 Oracled에서 시작했다.

DBMS는 보통 서버 형태로 서비스를 제공하여 이러한 프로그램이 많아졌지만

이러한 방식의 문제점은 클라이언트의 로직이 많아지고, 클라이언트 프로그램의 크기가 커진다는 문제가 있었다.

프로그램 로직이 변경되면 매번 클라이언트가 배포되어야 했었고,

대부분의 로직이 클라이언트에 포함되어 배포가 되기 때문에 보안이 나쁘다는 문제를 가지고 있었다.

 

DBMS (DataBase Management System)

미들웨어 (MiddleWare)

위의 문제를 해결하기 위해 등장한 것이 미들웨어라는 개념이다. 클라이언트와 DBMS사이에 그림과 같이 서버를 두는 방식이다.

클라이언트 쪽에 비즈니스 로직이 많을 경우, 클라이언트 관리로 인해 비용이 많이 발생하는 문제가 있습니다.

비즈니스 로직을 클라이언트와 DBMS사이의 미들웨어 서버에서 동작하도록 함으로써 클라이언트는 입력과 출력만 담당하도록 합니다.

미들웨어(MiddleWare)
WAS (Web Application Server)

 

최초의 웹이 등장했을 때는 웹 브라우저는 정적인 데이터만 보여주었다.

그러나 웹에서 데이터를 입력하고 조회하는 등의 프로그램을 요구하였고 동적인 기능은 프로그램을 통해서만 가능했다.

웹 서버에서 프로그래밍 기능이 들어가는 방식을 cgi(Common Gateway Interface)라고 불렀다.

이러한 기능은 DBMS와 연결되어 있었고 미들웨어가 필요하게 되었고 was가 필요하게 되었다.

WAS는 일종의 미들웨어로 웹 클라이언트(보통 웹 브라우저)의 요청 중 웹 애플리케이션이 동작하도록 지원하는 목적을 가집니다.

 

was의 기능

1. 프로그램 실행 환경과 데이터베이스 접속 기능을 제공

2. 여러 개의 트랜잭션을 관리한다.

3. 비즈니스 로직을 수행한다.

4. 기본적인 웹 서버의 기능 ex) 톰캣(was)이 웹서버의 기능을 가지고 있기 때문에 Apache(웹서버)를 사용하지 않아도 된다.

 

트랜잭션: 논리적인 작업 단위

 

WAS (Web Application Server)

 

웹서버는 상대적으로 was보다 간단한 구조로 만들어져 있다.

사람들이 많이 접속하는 대형 웹 애플리케이션은 서버가 여러 대일 수 있어서

was에서 동작하도록 개발자가 만든 프로그램이 오작동이 발생해서

was자체에 문제가 발생할 수 있고, 이때 was를 재시작할 수 있는데

문제가 있는 was를 재시작할 때 앞단의 웹 서버에서 해당 was를 사용하지 못하게 하고

was를 재시작한다면 해당 웹 앱을 사용하는 사람은 장애를 인지하지 못할 것이다.

이러한 처리를 장애 극복 기능이라고 한다.

 

 

 

 

이번 부스트캠프를 공부하며 느낀 점이 있습니다

 그것은 IT를 공부한다는 것은 힘을 들여서 공부한다기보다는  

어쩌면 재미있게 공부하며 광범위한 영역을 탐구하고 여행하는 듯한 느낌이 듭니다. 

이 IT분야에서 얼마나 살아가게 될지 어디까지 공부하게 될지 정하지는 않았습니다만,

제가 아는 건 삶에서는 선택과 집중이 필요하고, 선택과 집중에는 반드시 포기라는 대가가 필요하다고 생각합니다.

훗날 저를 뒤돌아봐도 10년 뒤의 저한테 물어봐도 이 선택이 잘한 선택이라고 말할 수 있는 길을 가고 있었으면 좋겠습니다.

 

그리고 그것을 위해선 상당히 여러 가지의 요구사항을 필요로 할 것 입니다.

금전적 대가뿐만 아니라 문화적인 부분과, 정서적인 부분까지 충족할 수 있는 방향.

 

조금 더 재미있게, 신이 나게, 빠르다 느리다에 구애받지 않으며, 느리더라도 좀 더 같이 하는 길.

혹은 결국 모든 것에는 절대 시간이 필요하다는 것은 바뀌지 않으며

조금은 즐길 줄 아는 사람이 되고 싶다는 바램이 생기는 것 같습니다.

아무리 빨리 간다고 할지라도, 결국엔 혼자서 많은 것들을 할 수 없다고 생각합니다.

 

결국 기술이란 사용되고 활용되어야 합니다.

기술의 발전에 탑승하여 우리는 어디로 가고 있는 것일지에 대한 의문과

그 거대한 파도 속에서 나는 어떤 배역을 맡게 될 것인지에 대해서

두근거림과 한편으로 느껴지는 허전함 중에서 정답을 찾고 싶습니다.

 

웹 프로그래밍 코스란?

이 과정은 웹 개발의 전반적인 과정을 알 수 있다.

 

백엔드는 웹이 어떻게 동작하는지 살펴보고 서버, 프로토콜이 무엇인지 살펴볼 것이다.

백엔드는 자바를 기반으로 진행하여 서브릿 jsp의 동작방법과 사용법에 대해서 알게된다.

이런 기술들을 스프링을 이용해서 진행하게 될 것이다. 낯선 용어가 나오는데 차차 나오게 될 것이다.

끝까지 따라오신다면 낯설다고 생각한 용어들을 잘 하는 자신들이 있을 것이다

 

프론트 엔드에서는 어떤 것을 배우게 되는지 확인하자 

html, css, javascript를 배우게 된다.

네이버와 같은 포털에서 볼 수 있는 화면 슬라이딩을 개발하며 익힐 수 있다.

이 코스는 어떻게 배우게 될까? 6개의 파트로 나눠져 있다. 각각 배워야 할 지식이 있고

파트별로 프로젝트가 있어서 프로젝트도 6개를 해야한다.

 

프로젝트 시간동안 개발하면 배운 지식을 본인의 것으로 만들 수 있을 것이다.

코드리뷰를 받을 수 있는데 유료 프로그램이다.

제시된 요구사항에 맞게 잘 작성되었는지 확인할 것이고 요구사항 뿐 아니라 코드의 리뷰도 진행이 되고

잘못된 부분이 있거나 더 효율적인 방법으로 구현할 수 있다면 해당 부분에 대한 리뷰를 통해서 더 좋은 코드를 구현할 수 있다.

 

이 과정 이후에 수강생이 무엇을 할 수 있을까? 간단한 웹 서비스를 직접 만들 수 있을 것이다.

게시판이나 블로그를 만들고 싶다면 배운 지식을 활용해서 도전해볼 수 있을 것이다.

 

2. 프론트 엔드

프론트엔드는 css에 익숙해지고 사용자에게 더 좋은 ux를 제공하기 위하는 프로그래밍과 성능도 고려해야 한다.

그리고 무엇보다 자바스크립트가 중요하고 html css를 통해 구조화와 스타일을 구성하는 법을 배워야 한다.

 

3.백 엔드 

기술이 발달하고 있고, 새로운 것을  거부감 없이 받아들이는 열린 마음이 필요하다

그리고 특히 웹은 혼자서 개발보다는 여러명이 개발하는 경우가 많아서 커뮤니케이션 능력이 중요하다는 생각이 들고 있다.

혼자보다는 가능한 여러명이 스터디하는 것을 추천한다. 처음 공부할 때는 다른 사람이 만든 것을 사용하는 경우가 많고, 

이 구현체를 만든 사람이 왜 이렇게 만들었을까를 분석하고

좋은 구현체를 만들려면 어떻게 해야할까를 생각하는 것이 중요한 역량이라고 생각한다.

 

백엔드 개발자가 되려면 하나의 언어를 능숙하게 만드는 것이 중요하고

웹 개발자는 웹에 관련된 것들을 이해하고 웹의 역사도 아는 것이 좋을 것 같다.

그리고 직접 만들고 싶은 주제를 가지고 만들어갈 때 성장할 수 있는 것 같다.

여러가지의 프로그램을 만들면 만들수록 프로그래머로써 완성될 것이다.

 

 

 

 

 

 

CSS는 밋밋한 HTML 태그에 디자인을 씌워주는 언어입니다. 보통 웹 개발을 할 때 HTML 태그로 요소들을 구현하고 CSS로 디자인을 입히고 배치를 도와줍니다.

 

 

선택자 { 
	속성1 : 값;
	속성2 : 값;
}

css에는 선택자와 속성이 있다.

 

선택자(Selector)

선택자는 스타일을 적용할 대상입니다.  태그, id, class 등을 선택할 수 있습니다.

 

/* 태그를 선택자로 했을 때 */
p {
	color: orange;
}

/* 태그를 id로 했을 때 */
#title {
	color: blue;
}

/* 태그를 class로 했을 때 */
.item {
	color: red;
}

태그를 선택자로 하면 모든 태그에 스타일이 적용됩니다.

  • **id는 딱 한 요소에게만 적용됩니다.** 우리의 주민등록번호는 고유한 것처럼 id도 마찬가지로 한 요소에게만 적용됩니다 (태그에 동일한 id를 넣어도 한 개만 적용됨)
  • **class는 class가 적용된 모든 요소에게 적용됩니다.** 상품리스트에서 상품의 디자인이 다 동일한 것은 class를 부여해줬기에 가능한 일입니다.

선택자 조합

선택자 여럿을  ,로 묶어서 같은 속성을 적용해줄 수 있습니다.

#item1, #item2 {
	background-color : red;
}

 

복합 선택자

태그, id, class가 기본 선택자라고 한다면 이들을 결합한 선택자를 **복합 선택자**라고 합니다.

우리가 많이 사용하게 되는 복합 선택자로 **하위 선택자(Descendant Selector)  자식 선택자(child selector)** 가 있습니다.

  1. 하위 선택자는 **선택자a 선택자b** 로 띄어쓰기를 해주면 됩니다. 하위 선택자는 상위 선택자(선택자a) 내부에 있는 모든 요소들 중에서 선택자2에 해당하는 태그를 선택합니다.
  2. 자식 선택자는 **선택자a > 선택자b**로 >를 통해서 구분해줍니다. 자식 선택자는 상위 선택자(선택자 a)의 내부에서 가장 바깥에 있는 태그들 중에서 선택자2에 해당하는 태그를 선택합니다.

하위 선택자는 자식 선택자를 포함하는 넓은 선택자인 것을 알 수 있죠?

 💡 제가 앞으로 언급하는 상위 선택자는 특정 선택자를 기준으로 바깥, 즉 상위에 있는 선택자를 칭한다고 보시면 됩니다.

<html>
    <head>
        <style>
						/* 하위 선택자 */
            #item-list p {
                color: blue;
            }
						
						/* 자식 선택자 */
            #item-list > p {
                color: red;
            }
        </style>
    </head>
    <body>
        <div id="item-list">
            <p>자식 아이템1</p>
            <p>자식 아이템2</p>
            <div>
                <p>하위 아이템1</p>
                <p>하위 아이템2</p>
            </div>
        </div>
    </body>
</html>

 

CSS 에서 자주 쓰이는 속성들

**속성**과 **값**을 통해서 실질적으로 디자인을 씌운다고 보면 됩니다. 여기서는 필수적으로 알아둬야 할 속성들을 다룹니다. 추가적으로 다룰 속성은 강의에서 다뤄집니다.

 

<html>
  <head>
    <style type="text/css">
				/*이 곳에 CSS를 작성합니다.*/
		</style>
  </head>
  <body>
    <div id="item1">1번 아이템</div>
    <div id="item2">2번 아이템</div>
    <div id="item-list">
      <div id="item3">3번 아이템</div>
      <div id="item4">4번 아이템</div>
    </div>
  </body>
</html>

 

크기 : width, height

크기는 웹의 기본 단위인 px 혹은 부모 태그의 크기를 기준으로 한 % 가 있습니다.

width: 선택자 태그의 너비

height : 선택자 태그의 높이

#item {
	width: 300px; /* 웹에서 px은 크기의 기본 단위입니다 */
	height: 30%; /* 부모의 크기 대비 30%를 차지합니다 */
}

색상 : color, background-color

색상은 css에서 기본으로 설정되어 있는 예약 색상(red,blue 등)과 rgb로 표현됩니다.

color : 폰트의 색상을 정하는 속성

background-color : 선택자 태그의 배경색을 정하는 속성

#item {
	color: red; /* red, blue 등 css에서 이미 예약된 색상입니다 */
	color: rgb(255,0,0) /* rgb는 색상을 표현하는 표준 색상값입니다 */
	color: #ff0000; /* rgb를 16진수 형태로 표시할 수도 있습니다 */
	background-color: red
}

폰트 : font-size, font-weight

font-size : 선택자 안에 있는 텍스트의 크기를 정하는 속성 (단위 : px)

font-weight : 선택자 안에 있는 텍스트의 굵기를 정하는 속성 (100 ~ 900)

#item {
	font-size: 32px;
	font-weight: 500;
}

여백: margin, padding

태그의 여백을 나타내는 속성으로 margin  padding이 있습니다.

margin : 선택자의 바깥의 여백을 설정합니다

padding : 선택자의 내부의 여백을 설정합니다.

#item {
	margin: 16px; /*상하좌우 모두 margin 16px이 적용됩니다*/	
	margin-right: 8px; /*오른쪽에 margin 8px을 줍니다*/	
	padding: 0 8px 0 0; /*순서대로 상 우 좌 하에 padding 값을 줍니다.*/ 
}

테두리: border

태그의 테두리에 선을 적용하는 속성입니다.

border 값은 순차적으로 너비 스타일 색상이 들어갑니다.

#item {
	border: 1px solid #ff0000 /*너비 : 1px, 스타일 : 실선, 색상 : 빨강(rgb)*/
}

이 외 더 사용되는 CSS는 아래 링크를 참고하세요

http://www.walterz.net/2017/08/18/자주-사용되는-css-속성/

+ Recent posts