반응형

vue cli 2.X

// vue-cli 전역 설치
npm install -g vue-cli

프로젝트 생성

// vue init <template-name> <project-name>
vue init webpack my-project
//실행
npm install
npm run dev 로 실행

vue-cli 에서는 미리 세팅된 몇가지 템플릿을 제공한다.
제공되는 템플릿은 vuejs-templates 에 각각의 레퍼로 저장되어 있다.
vue list 명령어를 통해서 제공되는 템플릿 리스트를 확인할 수 있다.

vue cli 3.X

//설치
npm install -g @vue/cli

버젼으로 설치

npm install -g @vue/cli@^3.1.0
npm r -g vue-cli --지우고 다시 설치 
//시작하기
vue create my-project
//실행
npm run serve
//관리자 vue 페이지
vue ui

참고문헌

http://vuejs.kr/vue/vue-cli/2018/01/27/vue-cli-3/

반응형

'프론트엔드 > Vuejs' 카테고리의 다른 글

[Vue] vue eventlistener(이벤트리스너) 추가 제거  (0) 2020.06.14
[Vue] vue eventbus 사용  (0) 2020.06.14
vue router  (0) 2020.06.14
vue checkbox 사용  (0) 2020.06.14
vue 를 스프링부트 에서 연동  (0) 2020.06.14
반응형

npm 설명

// vue-cli 전역 설치
{
  "name": "@ashnamuh/vue-npm-example",
  "version": "0.1.0",
  "private": false,
  "main": "dist/ash.common.js",
  "scripts": {
    "serve": "vue-cli-service serve",
    "build": "vue-cli-service build --target lib --name ash src/index.js",
    "lint": "vue-cli-service lint"
  },
  ...
}

name은 npm에 배포할 패키지명입니다. 반드시 유일해야합니다.

version은 semver versioning에 따른 버전입니다.

private를 false로 설정해야 npm에 배포가 가능합니다.

main은 패키지를 사용했을 때 진입지점이 됩니다. 빌드 후 생기는 파일을 설정했습니다.

build 스크립가 중요합니다.

원래 webpack 등을 사용해서 별도의 빌드 코드를 작성해야 합니다.

이젠 vue-cli-service에서 자체적으로 빌드 기능을 지원합니다.

빌드 target을 lib으로 지정하면 npm 배포용으로 빌드됩니다.

진입점 파일인 src/index.js를 빌드했습니다.

—name 옵션은 빌드된 결과물 파일명을 의미합니다.

npm 등록(https://www.npmjs.com/)은 배포는 아래 참고문헌 링크

참고문헌

https://velog.io/@ashnamuh/Vue-%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8%EB%A5%BC-%EC%98%A4%ED%94%88%EC%86%8C%EC%8A%A4%EB%A1%9C-npm%EC%97%90-%EB%B0%B0%ED%8F%AC%ED%95%98%EA%B8%B0-dxjxfg5v7e [Vue 컴포넌트를 오픈소스로 npm에 배포하기]

반응형

'프론트엔드' 카테고리의 다른 글

[webpack] webpack의 entry 사용법  (0) 2020.07.31
[npm] babel polyfill  (1) 2020.06.14
반응형

디폴트 메서드

자바8은 기본 구현을 포함하는 인터페이스를 정의하는 두 가지 방법을 제공한다.

  • 정적 메서드(static method)
    • 인터페이스 내부에 정적 메서드 사용
  • 디폴트 메서드(default method)
    • 인터페이스의 기본 구현을 제공할 수 있도록 디폴트 메서드 사용

즉, 자바8 에서는 메서드 구현을 포함하는 인터페이스를 정의할 수 있다.

인터페이스를 구현하는 클래스는 자동으로 인터페이스에 추가된 새로운 메서드의 디폴트 메서드를 상속받게 된다. 이렇게 하면 기존의 코드 구현을 바꾸도록 강요하지 않으면서도 인터페이스를 바꿀 수 있다.

디폴트 메서드는 다중 상속 동작 이라는 유연성을 제공하면서 프로그램 구성에도 도움을 준다.
디폴트 메소드를 이용하면 자바 API의 호환성을 유지하면서 라이브러리를 바꿀 수 있다. 
기존 구현을 고치지 않고도 인터페이스를 바쑬 수 있다. - 다중상속 동작이라는 유연성 제공

  • 특징
    • 디폴트 메서드는 default 키워드로 시작한다.
    • 메서드 바디를 포함한다 {}
public interface Sized {
  int size();
  default boolean isEmpty() {
    return size() == 0;
  }
}

13.3 디폴트 메서드 활용 패턴

디폴트 메소드 이용하는 방식

  1. 선택형 메서드(optional method)
  2. 동작 다중 상속(multiple inheritance of behavior)

13.3.1 선택형 메서드

13.3.2 동작 다중상속

  • 클래스는 한 개만 상속 받을 수 있지만, 인터페이스는 여러 개 구현할 수 있다.
public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, Serializable {}

13.4 해석규칙

규칙

  1. 클래스가 항상 이긴다. 클래스나 슈퍼클래스에서 정의한 메서드가 디폴트 메서드보다 우선권을 가짐
  2. 클래스 제외하고 서브인터페이스가 이긴다. 상속관계를 갖는 인터페이스에서 같은 시그니처를 갖는 메서드를 정의할 때는 서브인터페이스가 이긴다. 즉 B 가 A를 상속받는다면 B가 A를 이긴다.
  3. 위에서 결정이 안된다면 여러 인터페이스를 상속받는 클래스가 명시적으로 디폴트 메서드를 오버라이드하고 호출해야 한다.

클래스와 메서드 관계로 디폴트 메서드를 선택할 수 없는 경우에는 명시적으로 선택해야한다 -> super

- X.super.m(....)

반응형
반응형

Bitbucket 사용 시작하기

 

 

https://bitbucket.org/

 

Bitbucket | The Git solution for professional teams

Collaborate on code with inline comments and pull requests. Manage and share your Git repositories to build and ship software, as a team.

bitbucket.org

1. 사용한 이유

Bitbucket 은 Attlasian 이라는 곳에서 만들었는데, 여기에서 제공하는 Jira(협업툴) 및 소스트리 같은 툴들이 너무 좋다.

 

나는 git 저장소로 태초에는 github 이라는 곳을 쓰다가 private 하게 사용하려면 금액을 지불해야 하는 것 때문에 쓰지 않았다.

그러다 gitlab 도커이미지를 내 안쓰는 노트북 컴퓨터에 세팅해서 깃랩서버로 사용을 했다. 

gitlab 도커이미지를 사용하려면 권장사항은 2코어 4G 으로 윈도우 노트북에 놓고 쓰면 충분할 줄 알았는데, 예전에 구매했던 노트북이다 보니 너무 랙도 심하고 쓰기 어려웠다.

그렇다고 AWS ec2 에 올려놨더니 2코어 4G 에 맞는 스팩의 서버를 사용하면 금액이 매달 몇만원 지불이 된다.

차라리 이럴거면 gitgub 에서 돈주고 사용하지, 왜 gitlab을 쓰는 의미가 없었다.

 

소스트리라는 툴을 git gui툴로서 쓰고 있던 찰라에 Bitbucket 을 쓰면 어떨까 싶어서 새로 git 저장소로서 선택을 했다.

 

회사에서 trello 도 사용하고 있는데, 트렐로도 Attlasian 사의 제품이다.

그래서 로그인을 하고 있으면 자동으로 회사 계정으로 로그인이 되어서, Attlasian 제품을 하나라도 다른 계정으로 사용하시는 분은 시크릿 브라우져를 사용해야 한다는 불편함은 있다.

전부 한계정만 쓰시면 정말 이점이 클 것 같다.

Confluence 도 Attlasian 꺼다. 

 

2. 사용

처음 로그인 후 대쉬보드다.

 

 

  • Your work : 최근 한 일에 대한 간단한 대시보드이다.
  • Repositories : 리파지토리가 있는 곳이다.
  • Projects : 비트버켓에서 프로젝트와 팀을 만들면 다른 비트버켓 유저를 팀원으로 추가 할 수 있다. 그러면 해당 팀원은 이 프로젝트에 연결된 리파지토리에 접근 권한을 갖게되고 협업 할 수 있는 환경이 된다.
  • Pull requests : 본인의 pull request또는 본인이 reviewer로 지정된 pull request들을 볼 수 있다.
  • Issues : 비트버켓에서 제공하는 기본적인 이슈 트래킹 툴이다.
  • Snippets : 코드 스니펫을 공유하기 위한 툴이다.

처음 Repositories와 Projects 가 헷갈렸는데, Repositories 가 우리가 주로 알고 있는 git 저장소이다.

Projects 는 여러 git repository 를 하나의 프로젝트로 관리해서 다른 팀원 및 유저와 공유하고 싶을 때 사용하는 공간이다.

 

소스코드를 업로드 하는 방법은 다른 git 레포지토리와 같을 것이라 올리지 않았다.

 

아직 기존 소스코드를 올리고 사용해보지 않아, 사용 후기는 실제로 사용해보면서 해당 글 수정예정이다.

앞으로 다른 Attlasian 사 제품들 리뷰하려고 한다.

 

Attlasian 사 필자기준 많이 사용하는 제품

1. Bitbucket

2. Jira

3. Trello

4. Confluence

5. SourceTree

 

반응형

'Tool 사용 > 개발툴' 카테고리의 다른 글

[vscode] mac vscode 단축키(keymap)  (0) 2020.08.11
[vscode] 터미널에서 vscode 실행하기  (0) 2020.07.04
[vscode] 맥 vscode 단축키  (1) 2020.07.03
[Intellij] 맥 인텔리제이 단축키  (0) 2020.06.28
jMeter 사용  (0) 2020.05.14
반응형

Transactions

마이바티스 스프링 연동모듈을 사용하는 중요한 이유중 하나는 마이바티스가 스프링 트랜잭션에 자연스럽게 연동될수 있다는 것이다.
마이바티스에 종속되는 새로운 트랜잭션 관리를 만드는 것보다는 마이바티스 스프링 연동모듈이 스프링의 DataSourceTransactionManager과 융합되는 것이 좋다.

설정을 하면 스프링에서 트랜잭션 가능

@Transactional 애노테이션과 AOP스타일의 설정 모두 지원한다. 하나의 SqlSession객체가 생성되고 트랜잭션이 동작하는 동안 지속적으로 사용될것이다. 세션은 트랜잭션이 완료되면 적절히 커밋이 되거나 롤백될것이다.

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  <property name="dataSource" ref="dataSource" />
</bean>

트랜잭션 관리자에 명시된 DataSource가 SqlSessionFactoryBean을 생성할때 사용된 것과 반드시 동일한 것이어야 하는 것만 꼭 기억하자. 그렇지 않으면 트랜잭션 관리가 제대로 되지 않을것이다.

Transactions 주의사항

@Transactional 어노테이션은 Proxy기반이므로 내부 메소드 호출인 경우 트랜잭션이 적용되지 않는다. 즉 현재 클래스의 메소드가 아닌 다른 클래스의 메소드에 트랜잭션을 걸어야 한다.
서비스 메소드에만 가능!!. private 메소드에는 안됨!

문서

http://www.mybatis.org/spring/ko/transactions.html

참고문헌

http://ojc.asia/bbs/board.php?bo_table=LecSpring&wr_id=500

반응형
반응형

mapper 등록하기

xml 설정

매퍼는 다음처럼 XML설정파일에 MapperFactoryBean을 두는 것으로 스프링에 등록된다.

<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
  <property name="mapperInterface" value="org.mybatis.spring.sample.mapper.UserMapper" />
  <property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>

MapperFactoryBean은 SqlSessionFactory 나 SqlSessionTemplate가 필요하다. sqlSessionFactory 와 sqlSessionTemplate 프로퍼티를 셋팅하면 된다. 둘다 셋팅하면 SqlSessionFactory가 무시된다. 세션 팩토리 셋은 SqlSessionTemplate이 필요하고 MapperFactoryBean는 팩토리를 사용할것이다.

자바 설정


@Bean
public SqlSessionFactory sqlSessionFactory() throws Exception {
  SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();
  sqlSessionFactory.setDataSource(dataSource());
  return (SqlSessionFactory) sqlSessionFactory.getObject();
}

@Bean
public UserMapper userMapper() throws Exception {
  SqlSessionTemplate sessionTemplate = new SqlSessionTemplate(sqlSessionFactory());
  return sessionTemplate.getMapper(UserMapper.class);
}

마이바티스의 디폴트 SqlSession에서 매퍼를 리턴받을수 없다. 디폴트 SqlSession은 쓰레드에 안전하지 않고 생성된 SqlSession이 닫힐때까지만 살아있기 때문이다. 대신 샘플코드에서 보여주는 것처럼 SqlSessionTemplate 를 사용해야만 한다

mapper 스캐닝

위는 매퍼를 수동으로 등록하는 방법이고, 정상적이라면 mapper 를 스캔해서 등록해야 한다.
스캔방법에는 3가지가 있다.

    1. mybatis:scan/ 엘리먼트 사용
    1. @MapperScan 애노테이션 사용
    1. 스프링 XML파일을 사용해서 MapperScannerConfigurer를 등록

1. mybatis:scan/ 엘리먼트 사용

'mybatis:scan/' XML엘리먼트는 스프링에서 제공하는 'context:component-scan/' 엘리먼트와 매우 유사한 방법으로 매퍼를 검색할 것이다.

<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:mybatis="http://mybatis.org/schema/mybatis-spring"
  xsi:schemaLocation="
  http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
  http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring.xsd">
  <mybatis:scan base-package="org.mybatis.spring.sample.mapper" />
</beans>

2. @MapperScan 애노테이션 사용

@Configuration 을 사용해서 사용해야 한다.

@Configuration
@MapperScan("org.mybatis.spring.sample.mapper")
public class AppConfig {

  @Bean
  public DataSource dataSource() {
    return new EmbeddedDatabaseBuilder().addScript("schema.sql").build()
  }
  @Bean
  public SqlSessionFactory sqlSessionFactory() throws Exception {
    SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
    sessionFactory.setDataSource(dataSource());
    return sessionFactory.getObject();
  }
}

3. 스프링 XML파일을 사용해서 MapperScannerConfigurer를 등록

MapperScannerConfigurer

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  <property name="basePackage" value="org.mybatis.spring.sample.mapper" />
</bean>

참고문헌

http://www.mybatis.org/spring/ko/mappers.html

반응형
반응형

Locale 을 ko_KR

arguments 를 -encoding UTF-8 -charset UTF-8 -docencoding UTF-8  
로 설정해주면 된다.

다음과 같이 설정해주면 output directory 경로에 index.html 이 생성되고 파일 클릭하면 자바문서를 볼 수 있다.

반응형

'Java' 카테고리의 다른 글

[java] java 로 gzip 압축 및 풀기  (0) 2020.08.10
[Java] mysql aes_encrypt 를 java 코드로 만들기(AES 암호화)  (0) 2020.07.22
junit 사용  (0) 2020.05.08
반응형

SqlSessionFactory

SqlSessionFactory는 데이터베이스와의 연결과 SQL의 실행에 대한 모든 것을 가진 가장 중요한 객체다.
이 객체가 DataSource를 참조하여 MyBatis와 Mysql 서버를 연동시켜준다.

SqlSessionFactory를 생성해주는 SqlSessionFactoryBean 객체를 먼저 설정하여야 한다.
root-context.xml

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"></property>
</bean>

cofing

MyBatis는 SQL Mapping 프레임워크로 별도의 설정 파일을 가질 수 있다.
src/main/resources에 mybatis-config.xml 파일을 추가

<!-- mybatis-config.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
    PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

</configuration>

Mybatis에 별도의 설정을 주고 싶으면 위의 파일을 이용
root-context.xml의 sqlSessionFactory에 다음과 같이 configLocation 속성을 추가

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"></property>
    <property name="configLocation" value="classpath:/mybatis-config.xml"></property>
</bean>

설정파일이 필요한 다른 이유는 마이바티스 XML파일이 매퍼 클래스와 동일한 클래스패스에 있지 않은 경우이다. 이 설정을 사용하면 두가지 옵션이 있다.
첫번째는 마이바티스 설정파일에 섹션을 사용해서 XML파일의 클래스패스를 지정하는 것이다.
두번째는 팩토리 빈의 mapperLocations 프로퍼티를 사용하는 것이다.

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  <property name="dataSource" ref="dataSource" />
  <property name="mapperLocations" value="classpath*:sample/config/mappers/**/*.xml" />
</bean>

Test

SqlSessionFactory를 이용해 MyBatis와 Mysql 서버가 제대로 연결되는지 테스트
rc/test/java 폴더에 MyBatisTest라는 파일 생성

public class MyBatisTest {
    //SqlSessionFactory 객체를 자동으로 생성
    @Inject
    private SqlSessionFactory sqlFactory;
    //SqlSessionFactory 객체가 제대로 만들어졌는지 Test
    @Test
    public void testFactory() {
        System.out.println(sqlFactory);
    }
    //MyBatis와 Mysql 서버가 제대로 연결되었는지 Test
    @Test
    public void testSession() throws Exception{
        try(SqlSession session = sqlFactory.openSession()){
            System.out.println(session);
        }catch(Exception e) {
            e.printStackTrace();
        }
    }
}

API 문서

https://mybatis.org/mybatis-3/apidocs/org/apache/ibatis/session/SqlSessionFactory.html

참고문헌

http://www.mybatis.org/spring/ko/factorybean.html

반응형

+ Recent posts