Ace-T's Blog 내 검색 [네이버 커넥트 이웃 합니다~^-^/ 요청 大 환영~~]

Spring Boot + Spring Batch 분석_01

OpenSource/Spring Batch 2018.10.12 15:51
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T


주저리 

   spring boot를 사용하여 
   spring batch를 해보려는데 막상 spring batch를 잘모르면 제대로 못할것 같은 생각이 들었다.
   springframework를 spring boot기반으로 해볼때도 마찬가지였다.


구성

  • Job과 Step으로 구성.
    • Job
      • 여러개의 Step으로 구성.
        • Step은 ItemReader, ItemProcessor, ItemWriter의 구조이거나 
          이런 전형적인 구조가 아닐 경우 Tasklet 구조.

분석

    2018/09/12 - [OpenSource/Spring Batch] - SpringBatch 예제

    에서 처럼 https://spring.io/guides/gs/batch-processing/
   공식 사이트를 살펴보도록 하자.


org.springframework.boot:spring-boot-starter-batch 디펜던시는 요녀석!

Batch Job을 구성할 때 
Spring Batch는 따로 작성할 필요없이 비즈니스 로직에 집중할 수 있도록 많은 유틸리티를 제공한다.


BatchConfiguration! 이부분은 옛날 Spring Batch에서 xml로 구성되던 녀석이다.

@Configuration
@EnableBatchProcessing
public class BatchConfiguration {


하나하나씩 보도록 하자. 우선 Factory를 DI 하는 것을 볼수 있다.

    @Autowired
    public JobBuilderFactory jobBuilderFactory;

    @Autowired
    public StepBuilderFactory stepBuilderFactory;

Factory는 Job과 Step에서 사용!
// tag::jobstep[]
    @Bean
    public Job importUserJob(JobCompletionNotificationListener listener, Step step1) {
        return jobBuilderFactory.get("importUserJob")
            .incrementer(new RunIdIncrementer())
            .listener(listener)
            .flow(step1)
            .end()
            .build();
    }

    @Bean
    public Step step1(JdbcBatchItemWriter<Person> writer) {
        return stepBuilderFactory.get("step1")
            .<Person, Person> chunk(10)
            .reader(reader())
            .processor(processor())
            .writer(writer)
            .build();
    }
    // end::jobstep[]


그리고 Step에서 사용되어지는 reader, processor, writer도 함께 구성.

    // tag::readerwriterprocessor[]
    @Bean
    public FlatFileItemReader<Person> reader() {
        return new FlatFileItemReaderBuilder<Person>()
            .name("personItemReader")
            .resource(new ClassPathResource("sample-data.csv"))
            .delimited()
            .names(new String[]{"firstName", "lastName"})
            .fieldSetMapper(new BeanWrapperFieldSetMapper<Person>() {{
                setTargetType(Person.class);
            }})
            .build();
    }

    @Bean
    public PersonItemProcessor processor() {
        return new PersonItemProcessor();
    }

    @Bean
    public JdbcBatchItemWriter<Person> writer(DataSource dataSource) {
        return new JdbcBatchItemWriterBuilder<Person>()
            .itemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider<>())
            .sql("INSERT INTO people (first_name, last_name) VALUES (:firstName, :lastName)")
            .dataSource(dataSource)
            .build();
    }
    // end::readerwriterprocessor[]


구조는 이러하고..이제 조금 더 자세하게 보도록 하자.

More and More


BatchConfiguration.java

  1. @Configuration : 설정 파일임을 알려준다. @MVC에서 @service @controller와 같다고 보면 된다.
  2. @EnableBatchProcessing : Batch 관련 유용한 유틸을 제공가능케 한다. 영어 고대로 Enable하겠다는 뜻.
  3. 위에서 언급한 내용처럼 Factory를 DI 하여 Job과 Step을 구성한다.
    1. Job은 Step으로 구성하여 만들어지고 Step은 reader, processor, writer를 구성할 수 있다.
  • 어노테이션 @Autowired로 DI 해주는 부분.
    @Autowired
    public JobBuilderFactory jobBuilderFactory;

    @Autowired
    public StepBuilderFactory stepBuilderFactory;
  • Job과 Step을 설정 해주는 부분.
    @Bean
    public Job importUserJob(JobCompletionNotificationListener listener, Step step1) {
        return jobBuilderFactory.get("importUserJob")
            .incrementer(new RunIdIncrementer())
            .listener(listener)
            .flow(step1)
            .end()
            .build();
    }

    @Bean
    public Step step1(JdbcBatchItemWriter<Person> writer) {
        return stepBuilderFactory.get("step1")
            .<Person, Person> chunk(10)
            .reader(reader())
            .processor(processor())
            .writer(writer)
            .build();
    } 
    • Job은 아래와 같이 importUserJob이라는 함수명을 가지며, 파라미터로는 listener, step
    • return으로는 JobBuilderFactory를 이용하여 Job을 리턴하는 구조이다.
      • jobBuilderFactory.get은 job builder를 생성하고 JobRepository를 초기화 시킨다.

[ Spring Batch 흐름도]

         

      • 아래를 좀 더 심화있게 이해하려면 builder pattern을 이해해야한다. 
      • 하지만 우선적으로 Spring Batch에 대해서 파악하는게 우선이다. 
      • 이제 돌아와서 incremeter를 보자.
        • JobBuilderHelper Class에 속해있는 method이다. 
        • JobBuilderHelper는 JobBuilder의 부모 클래스이다.
        • 포맷은 아래와 같다.
          • public B incrementer(JobParametersIncrementer jobParametersIncrementer)
          • 파라미터로 JobPrametersIncrementer를 가지는데 이것은 Interface 형태이다.
          • 이 Interface를 구현한 녀석이 위에 사용되어진 RunIdIncrementer Class 이다.
        • 그리고 incrementer 이녀석이 하는 역할은 JobParametersIncrementer 인터페이스의 
          역할을 보면 알수 있다. JobParameters를 취득하기 위한 인터페이스이기 때문이다.
        • JobParameters..! 이녀석을 이해하려면 아래의 그림을 이해해야한다.
        • 동시 다발적으로 돌아가는 Job들의 차이는 어떻게 알수가 있나? Job들 간의 구별? 그 해답은 JobParameters에 있다. 그래서 batch job을 시작할 때 이처럼 JobParameters를 취득한다.
          더욱 더 자세한 내용은 해당 링크를 참조. 

           

        • 그 다음으로 listener.
          • JobBuilderHelper Class에 속해 있는 Method이며, format은 아래와 같다.
            public B listener(JobExecutionListener listener)
          • JobExecutionListener도 Interface이며 지금 설명하는 소스에서는 
            JobCompletionNotificationListener Class에서 extends하고 있다.
          • JobCompletionNotificationListener.java
            package hello;
            
            import org.slf4j.Logger;
            import org.slf4j.LoggerFactory;
            import org.springframework.batch.core.BatchStatus;
            import org.springframework.batch.core.JobExecution;
            import org.springframework.batch.core.listener.JobExecutionListenerSupport;
            import org.springframework.beans.factory.annotation.Autowired;
            import org.springframework.jdbc.core.JdbcTemplate;
            import org.springframework.stereotype.Component;
            
            @Component
            public class JobCompletionNotificationListener extends JobExecutionListenerSupport {
            
            	private static final Logger log = LoggerFactory.getLogger(JobCompletionNotificationListener.class);
            
            	private final JdbcTemplate jdbcTemplate;
            
            	@Autowired
            	public JobCompletionNotificationListener(JdbcTemplate jdbcTemplate) {
            		this.jdbcTemplate = jdbcTemplate;
            	}
            
            	@Override
            	public void afterJob(JobExecution jobExecution) {
            		if(jobExecution.getStatus() == BatchStatus.COMPLETED) {
            			log.info("!!! JOB FINISHED! Time to verify the results");
            
            			jdbcTemplate.query("SELECT first_name, last_name FROM people",
            				(rs, row) -> new Person(
            					rs.getString(1),
            					rs.getString(2))
            			).forEach(person -> log.info("Found <" + person + "> in the database."));
            		}
            	}
            }
          • 위의 소스는 job이 BatchStatus.COMPLETED인가에 대해서 listen하고 있다. 그리고나서 JdbcTemplate를 사용한다.
        • 다음으로 flow.
          • JobBuilder Class에 속해 있는 Method이며, format은 아래와 같다.
            public JobFlowBuilder flow(Step step)
            딱 봐도 job과 step의 연결 & 수행. return으로는 a SimpleJobBuilder.
        • 다음으로 end. 즉, builder를 종료.
        • 다음으로 build() : 호출하여 최종적으로 a job builder를 리턴. 

지금까지 Job 관련 내용들을 살펴 보았습니다.

다음 포스팅에서는 비즈니스 로직을 당담하고 있는 Step에 대해서 알아보도록 하겠습니다.



'OpenSource > Spring Batch' 카테고리의 다른 글

Spring Boot + Spring Batch 분석_01  (0) 2018.10.12
SpringBatch 예제  (0) 2018.09.12
MyBatisPagingItemReader를 사용할 때 유의점  (0) 2015.10.02
Spring Batch 환경 셋팅  (0) 2012.09.03

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

SpringBatch 예제

OpenSource/Spring Batch 2018.09.12 17:32
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T

스프링배치 버전이 낮아서 이참에 스프링부트+스프링배치로 변경해보려고 한다.

"라스트 제다이"가 아닌 "라스트 스프링" ㅋㅋ 

설명에 앞서 주저리를 하자면..요즘 스프링 관련 업무가 없어서..너무 뒤쳐진거 같다..ㅜ.ㅜ..마지막 남은 스프링인가? ㅋㅋ 


예제는 아래 사이트를 참고
  - https://spring.io/guides/gs/batch-processing/ 


결과는 아래와 같다.


위 사이트 내용을 요약해서 보면

간단한 배치 서비스를 만들껀데
이 서비스는 csv파일의 데이터를 가져와서 입맛에 맞게 변경 한 뒤 데이터베이스에 저장하는게 목표이다.

정형적인 배치서비스를 축약한 내용의 소스인것 같아서 선택했다.

데이터를 수집해서 변경 후에 데이터베이스에 저장(insert) or 변경(update)하는 style이 되겠다.

위 소스를 위해서 필요한것은


src/main/java/hello/Person.java  : 데이터를 저장&전달하는 DTO.

src/main/java/hello/PersonItemProcessor.java : 데이터 가공 하는 부분.

src/main/java/hello/BatchConfiguration.java : input / prossessor / output ,  job과 step을 설정 

src/main/java/hello/JobCompletionNotificationListener.java : 배치 완료 후 노티 




'OpenSource > Spring Batch' 카테고리의 다른 글

Spring Boot + Spring Batch 분석_01  (0) 2018.10.12
SpringBatch 예제  (0) 2018.09.12
MyBatisPagingItemReader를 사용할 때 유의점  (0) 2015.10.02
Spring Batch 환경 셋팅  (0) 2012.09.03

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

보호글

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력해주세요.

카카오미니 C 롯데백화점 잠실점 오픈!

Life of AceT/Good Info 2018.09.10 10:50
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T


카카오미니C 흥해라~


acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

개인정보를 청소할 수 있는 정부주관 사이트

Life of AceT/Good Info 2018.09.10 10:47
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T



개인정보를 청소할 수 있는 정부주관 사이트 

https://www.eprivacy.go.kr/

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

Vue.js 맛보기

Front/Vue.js 2018.09.10 10:23
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T

vue-cli 설치

terrypark@localhost  ~  sudo npm install vue-cli -g

Password:

npm WARN deprecated coffee-script@1.12.7: CoffeeScript on NPM has moved to "coffeescript" (no hyphen)

⸨░░░░░░░░░░░░░░░░░░⸩ ⠴ fetchMetadata: WARN deprecated coffee-script@1.12.7: CoffeeScript on NPM has moved to "coffeescript" (no hyphen)

/usr/local/bin/vue -> /usr/local/lib/node_modules/vue-cli/bin/vue

/usr/local/bin/vue-list -> /usr/local/lib/node_modules/vue-cli/bin/vue-list

/usr/local/bin/vue-init -> /usr/local/lib/node_modules/vue-cli/bin/vue-init

+ vue-cli@2.9.6

added 235 packages in 62.51s


   ╭─────────────────────────────────────╮

   │                                     │

   │   Update available 5.5.1 → 5.6.0    │

   │     Run npm i -g npm to update      │

   │                                     │

   ╰─────────────────────────────────────╯


Project 만들기

terrypark@localhost  ~  vue init webpack todos-client


? Project name todos-client

? Project description todo list

? Author Terry.Park <terry.park@daumkakao.com>

? Vue build standalone

? Install vue-router? Yes

? Use ESLint to lint your code? No

? Set up unit tests No

? Setup e2e tests with Nightwatch? No

? Should we run `npm install` for you after the project has been created? (recommended) npm


   vue-cli · Generated "todos-client".



# Installing project dependencies ...

# ========================


npm WARN deprecated browserslist@2.11.3: Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools.

npm WARN deprecated bfj-node4@5.3.1: Switch to the `bfj` package for fixes and new features!

npm WARN deprecated browserslist@1.7.7: Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools.

WARN notice [SECURITY] mime has the following vulnerability: 1 moderate. Go here for more details: https://nodesecurity.io/advisories?search=mime&version=1.3.6 - Run `npm i npm@latest -g` to upgrade your npm version, and then `npm audit` to get more info.


> fsevents@1.2.4 install /Users/terrypark/todos-client/node_modules/fsevents

> node install


[fsevents] Success: "/Users/terrypark/todos-client/node_modules/fsevents/lib/binding/Release/node-v57-darwin-x64/fse.node" already installed

Pass --update-binary to reinstall or --build-from-source to recompile


> uglifyjs-webpack-plugin@0.4.6 postinstall /Users/terrypark/todos-client/node_modules/webpack/node_modules/uglifyjs-webpack-plugin

> node lib/post_install.js


npm notice created a lockfile as package-lock.json. You should commit this file.

npm WARN ajv-keywords@3.2.0 requires a peer of ajv@^6.0.0 but none is installed. You must install peer dependencies yourself.


added 1199 packages in 36.165s



   ╭─────────────────────────────────────╮

   │                                     │

   │   Update available 5.5.1 → 6.4.1    │

   │     Run npm i -g npm to update      │

   │                                     │

   ╰─────────────────────────────────────╯



# Project initialization finished!

# ========================


To get started:


  cd todos-client

  npm run dev


Documentation can be found at https://vuejs-templates.github.io/webpack


위의 가이드를 따라해보자
cd todos-client
npm run dev

결과


'Front > Vue.js' 카테고리의 다른 글

Vue.js 맛보기  (0) 2018.09.10

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

http dump

Language/go lang 2018.08.30 13:11
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T



log.WithField("dump=", "start").Debug("auth start")
dump, err := httputil.DumpResponse(resp, true)
if err != nil {
log.Fatal(err)
}
log.WithField("dump??", string(dump[:])).Debug("auth dump")

// fmt.Printf("DUMP => %q", dump)

참고 : https://golang.org/pkg/net/http/httputil/


'Language > go lang' 카테고리의 다른 글

http dump  (0) 2018.08.30
golang 채널에 대해 알아보자!  (0) 2018.05.11
용어 - multiplexer  (0) 2018.03.16
golang + github Permanently added the RSA host key  (0) 2018.03.05
golang + github ignore setting  (0) 2018.03.05
기초) golang project 만들어보기!  (0) 2018.03.05

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

ECMAScript 데이터 유형(Types)

Front/JavaScript 2018.08.14 15:26
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T


6가지 원시 데이터(Primitive Data) 유형

  - null

  - undefined

  - number

  - string

  - boolean

  - symbol(ES6+)


객체(Object) 데이터 유형

  - function object

  - array object  (배열객체)

  - object 


객체 생성 ? new 생성자 함수()



설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

자바스크립트 이벤트 TEST

Front/JavaScript 2018.08.14 14:45
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T
Document

두 수의 합을 출력해봅니다.
+ = 12

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

롯데관광개발 ‘제주 드림타워’ 개발자금 숙제 풀었다

재테크 Info/news 2018.08.07 19:06
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T



acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

ansible 주요 역할 정리

CM/ansible 2018.07.31 16:32
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T

inventory file은 

리모트 서버에 대한 meta 데이터를 기술하는 파일.

기본 파일은 /etc/ansible/hosts이나 따로 inventory file을 사용할 수 있는 옵션(-i)을 줄수 있음.

alpha파일이라고 가정하고 그 안의 내용은 아래와 같다.

 acet1 ansible_host=acet-dev.cc

[acet]
acet1 


playbook은 

ansible의 환경 설정, 배포를 가능케 함. 

yaml 문법을 채용하여 정책을 기술

conditional(when), variables, loops(with_items), include, 결과 저장(register) 지원.

하나의 playbook은 하나 이상의 play를 두며 play의 목적은 여러 호스트들에 잘 정의된 role과 task를 매핑하는 역할을 맡음.

task 는

ansible module을 호출하는 단위(필수)

task 종류

1) 간단 task : name / action

  - name: install git
  yum:
    name: git
become: true 

2) Ansible 모듈 이용 task

- copy: src=/srv/myfiles/foo.conf 블라블라 

3) item을 이용한 복수 작업

 - template:
    src: "{{ item }}.j2"
    dest: "{{script_dir}}/{{item}}"
    mode: 0775
  with_items:
    - "delete_xxx_log.sh"
tags: ["cron-deletelog"] 


4) include - 변수 값을 지정해서 include yaml 파일로 넘길수도 있음.

 - include: fluentd.yml user=www group=www
tags: ["fluentd"] 

5) when(conditional)

 vsc_branch: false

 - include: acet-branch.yml
  when: acet_branch
tags: ["branch"]

ansible-playbook -i alpha -l acet deploy.yml -v -e "BUILD_TAG=${ACET_BUILD_TAG}" -e "acet_branch=true" 


6) event 발생(task -> handler)  예제는 pass~


role

structure 기본 단위로서 설치, 사용이 가능

           acet dir 등 사용자가 정의하여 만들수 있다.


참고문서 : 슬라이드쉐어





'CM > ansible' 카테고리의 다른 글

ansible 주요 역할 정리  (0) 2018.07.31

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

2018년07월26일(목) 주식일기

재테크 Info/주식 일기 2018.07.26 16:28
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T

2018/07/25 - [재테크 Info/주식 일기] - 2018년07월25일(수) 주식일기


      

아 11,500원이 떨어지다니..멘붕...ㅋㅋ 장투의 길은 멀고도 험한 것!

하나 샀던것은 쫄아서 다시 팔아버렸는데..오늘 많이 올랐네 ㅋㅋㅋ

내가 사면 떨어지고 팔면 오르는...ㅋㅋㅋㅋㅋㅋㅋㅋㅋ


오늘의 교훈은

장기투자 + 가치투자 + 멘탈 잡자!



'재테크 Info > 주식 일기' 카테고리의 다른 글

2018년07월26일(목) 주식일기  (0) 2018.07.26
2018년07월25일(수) 주식일기  (0) 2018.07.25
2018년07월24일(화) 주식일기  (0) 2018.07.24
2018년07월23일(월) 주식일기  (0) 2018.07.23

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

2018년07월25일(수) 주식일기

재테크 Info/주식 일기 2018.07.25 19:06
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T







2018/07/24 - [재테크 Info/주식 일기] - 2018년07월24일(화) 주식일기


오늘은 한종복 추가! 세금때문에 파랑이..ㅜㅜ 올라가즈앗!



     


'재테크 Info > 주식 일기' 카테고리의 다른 글

2018년07월26일(목) 주식일기  (0) 2018.07.26
2018년07월25일(수) 주식일기  (0) 2018.07.25
2018년07월24일(화) 주식일기  (0) 2018.07.24
2018년07월23일(월) 주식일기  (0) 2018.07.23

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

2018년07월24일(화) 주식일기

재테크 Info/주식 일기 2018.07.24 16:14
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T

2018/07/23 - [재테크 Info/주식 일기] - 2018년07월23일(월) 주식일기


장기투자, 가치투자 가즈아~

주식주식~

 

 

 

 












  900원 상승 




  1500원 상승




    0 원






'재테크 Info > 주식 일기' 카테고리의 다른 글

2018년07월26일(목) 주식일기  (0) 2018.07.26
2018년07월25일(수) 주식일기  (0) 2018.07.25
2018년07월24일(화) 주식일기  (0) 2018.07.24
2018년07월23일(월) 주식일기  (0) 2018.07.23

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

보호글

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력해주세요.

2018년07월23일(월) 주식일기

재테크 Info/주식 일기 2018.07.23 15:48
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T

오늘부터 쓰는 주식일기!! ㅋㅋ 회복 하는 그날까지..!!

* 무역전쟁

* 분기별 이익

* 새로운 먹거리 

* 기업의 동태 


'재테크 Info > 주식 일기' 카테고리의 다른 글

2018년07월26일(목) 주식일기  (0) 2018.07.26
2018년07월25일(수) 주식일기  (0) 2018.07.25
2018년07월24일(화) 주식일기  (0) 2018.07.24
2018년07월23일(월) 주식일기  (0) 2018.07.23

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

image map 편하게 사용하기

Front/Html 2018.07.17 19:21
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T

아래의 링크를 통해 쉽게 map을 컨트롤할 수 있다.

https://www.image-map.net/


'Front > Html' 카테고리의 다른 글

image map 편하게 사용하기  (0) 2018.07.17
about HTML 텍스트 레벨 요소  (0) 2018.07.10
about html 요소  (0) 2018.07.10
e-mail 한글 깨짐 현상  (0) 2016.12.02

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

맥북 usb 인식 오류

Life of AceT/Good Info 2018.07.11 09:48
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T

맥북에서 usb가 인식이 안되었다-_-

이럴 경우 아래처럼 시스템 리포트를 켜서 Storage를 확인해보고 명령어를 수행하고 다시 살펴보자!


시스템 리포트 클릭~




아래의 명령어를 수행 한다.


드라이버를 리로드 시키는 명령어라고 한다.

sudo kextunload /System/Library/Extensions/IOUSBMassStorageClass.kext

sudo kextload /System/Library/Extensions/IOUSBMassStorageClass.kext




acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

about HTML 텍스트 레벨 요소

Front/Html 2018.07.10 22:17
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T


<sup> 요소 : 윗첨자

<sub> 요소 : 아래첨자

<mark> 요소 : 관련 참조 목적의 하이라이트된 글자 요소

<abbr> 요소 : 축약요소

<time> 요소 : 기계가 이해할 수 있는 날짜나 시간을 나타내는 요소

<s> 요소 :  더 이상 관련이 없거나 정확하지 않은 요소


참고 자료



'Front > Html' 카테고리의 다른 글

image map 편하게 사용하기  (0) 2018.07.17
about HTML 텍스트 레벨 요소  (0) 2018.07.10
about html 요소  (0) 2018.07.10
e-mail 한글 깨짐 현상  (0) 2016.12.02

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

about html 요소

Front/Html 2018.07.10 19:24
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T


루트 섹션 요소 -> <body>

섹션요소
  - 문서 개요에 명시적으로 나열되는 경우에만 섹션 요소가 적합하다.

<article> : 독립적으로 분류 가능. / 제목 포함 시켜야 함.

<section> : 그룹화된 컨텐츠

<aside> : 보조 컨텐츠, 광고 등

<nav> : 내비게이션을 나타냄

<main> 메인요소 / 화면에는 하나만 보여져야 한다.

컨테이너 요소

html 요소를 묶어주는 컨테이너(의미를 가지지는 않음.) 요소.-> <div>,  <span>

<span>은 블록요소들 (h1~6, p, blockquote, section 등)을 감쌀 수 없다.



'Front > Html' 카테고리의 다른 글

image map 편하게 사용하기  (0) 2018.07.17
about HTML 텍스트 레벨 요소  (0) 2018.07.10
about html 요소  (0) 2018.07.10
e-mail 한글 깨짐 현상  (0) 2016.12.02

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

티스토리 툴바