반응형

페이스북에 올라온 자료 공유합니다.

발표자료 : https://docs.google.com/presentation/d/1E7Y_L8TO6ZRZfFjBO6f_GBZxzdV0Klw0XNuH1Kv4JWA/edit?fbclid=IwAR1Wl_UMMj-xwv2-JPp6_KnAkZ35vkJwvZBwEJLnUsB3TKygci-ZYLYw-6I

샘플코드 : https://github.com/mhyeon-lee/spring-data-sample-codes

반응형
반응형

첫 입사 후 개발 만 3년이 지나고 개발 4년차 개발자로 일하는 동안 내가 가진 아웃풋이 없다는 것에 최근 많은 반성을 하게 되었다.

 

회사에서 개발 업무를 하면 현재 하는것은 내 것이 아니기 때문에 쉽게 수정도 못하고, 내가 만들었더라도 수정하고 배포를 할때는 모두한테 전달하고 허락을 맡아야 한다. 회사가 해당 프로젝트에 대한 관심이 없다면 계속해서 리소스를 투입할 수도 없고, 점차적으로 해당 프로젝트를 맡고 있는 나는 자연스레 할 일 없어졌다.

 

나는 개발하고자 하는 욕구가 있는데도 종종 백수가 된 느낌이 들었다. 그러면서 내 커리어를 정리하는 아웃풋이 전혀 없었다는 생각이 들었고, 블로그 및 개인적인 개발 output에 대한 필요성을 느끼게 되었다.

 

최근에 velog 라는 블로그 템플릿은 보았는데, velopert 라는 개발자가 만들었다는 사실을 알았다. 

취업직전에 velopert 라는 분의 react 오프라인 강의를 우연히 들었던 적이 있었는데, 그 동안 그 분은 자신만의 아웃풋을 꾸준히 만들었다는 사실때문에 대단하다는 생각과 존경심 마저 들었다.

velog 잠시 써보니 정말 잘 만들었다. 회사를 다시면서 만들수 있을만한 퀄리티가 아니라는 생각이 들정도로 정말 잘 만들었다.

 

 

개발자로서 동기는 필요하다.

연봉협상, 다른 개발자들의 블로그 및 개발 output 같은 이유로 최근 많은 자극을 받았다.

꾸준한 블로깅과 개발 배포를 나를 위해서 앞으로 할 예정이다.

반응형
반응형

차이

  Autowired Inject Resource
범용 스프링전용 자바에서 지원 자바에서 지원
연결방식 타입에 맞춰서 연결 타입에 맞춰서 연결 이름으로 연결
강제연결 @Qualifier("title")   @Resource(name="title")
@Autowired와 @Inject는 타입에 맞춰서 하는 반면, @Resource는 이름에 맞춰서 연결      

@Autowired

private Chicken penguin;  //Chicken 타입으로 연결

@Inject

private Penguin chicken; //Penguin 타입으로 연결

@Resource

private Chicken penguin;  //penguin 타입으로 연결됩니다만, Chicken 클래스를 자료형으로 두었기에 캐스팅이 되지 않아 에러가 난다.

@Resource

private Bird penguin;      //penguin 타입으로 연결되어 호출해보면 penguin 클래스의 값을 호출

Resource를 추천.

어느 프레임워크에 종속적이지 않기 때문에

이것또한 Bean를 생성하며 싱글톤 패턴이 자동으로 적용.

타입으로 연결 하기 때문에 같은 타입인 여러개의 필드는 오류가 날 것 이다.

반응형

'Spring > spring framework 기본 및 이론' 카테고리의 다른 글

[Spring] 스케쥴 설정  (0) 2020.05.15
[Spring] @Resource @Inject @Autowired 차이  (0) 2020.05.15
component 과 bean 의 차이점  (0) 2020.05.10
localeResolver 란  (0) 2020.05.10
spring webjars란  (0) 2020.05.08
반응형

Bean 과 Component 의 차이점

@Bean의 경우 개발자가 컨트롤이 불가능한 외부 라이브러리들을 Bean으로 등록하고 싶은 경우에 사용된다.
@Bean은 @Configuration으로 선언된 클래스 내에 있는 메소드를 정의할 때 사용한다. 이 메소드가 반환하는 객체가 bean이 되며 default로 메소드 이름이 bean의 이름이 된다.


@Bean

setter나 builder 등을 통해서

사용자가 프로퍼티를 변경해서 생성한 인스턴스를

Spring에게 관리하라고 맡기는 것이다.

개발자가 직접 컨트롤이 가능한 Class들의 경우엔 @Component
@Component 의 종류에는 @Repository @Service @Controller 로 나뉜다.


@Component는

클래스를 Spring에게 알아서

**인스턴스 생성**및**Bean 등록**하는 과정을 맡기는 것이다.

개발자가 생성한 Class에 @Bean은 선언은 안된다.

개발자가 생성한 class에 @Component 를 선언한다.

반응형

'Spring > spring framework 기본 및 이론' 카테고리의 다른 글

[Spring] @Resource @Inject @Autowired 차이  (0) 2020.05.15
@Autowired @Resource @Inject 차이  (0) 2020.05.10
localeResolver 란  (0) 2020.05.10
spring webjars란  (0) 2020.05.08
servelt context 사용  (0) 2020.05.08
반응형

스프링 localeResolver

기본설정

@Configuration
@EnableAutoConfiguration
@ComponentScan
public class I18nConfig extends WebMvcConfigurerAdapter {
    @Bean
    public LocaleResolver localeResolver() {
        // 쿠키를 사용한 예제
        CookieLocaleResolver resolver = new CookieLocaleResolver();
        resolver.setCookieName("lang");
        return resolver;
    }

    /** 언어 변경시 아래 코드 추가  */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor();
        localeChangeInterceptor.setParamName("lang"); // ?lang={언어코드} 로 언어를 바꿀 수 있습니다.
        registry.addInterceptor(localeChangeInterceptor);
    }

    @Bean
    public MessageSource messageSource() {
        ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
        messageSource.setBasename("classpath:/i18n/messages");
        messageSource.setDefaultEncoding("UTF-8");
        return messageSource;
    }
}

메시지 소스 설정 파일

리소스/i18n/messages.properties (기본값)
리소스/i18n/messages_ko.properties (한국어)
리소스/i18n/messages_{언어코드}.properties

메시지 설정

리소스/i18n/messages_ko.properties
title: 타이틀(한국어)
hello: 안녕
home: 홈

리소스/i18n/messages_en.properties
hello: hello
home: home

뷰(타임리프)

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8"/>
    <title th:text="#{title}"></title>
</head>
<body>
<div>
    <h1 th:text="#{home}"></h1>
    <h2 th:text="#{hello}"></h2>
    <a href="?lang=ko">한국어</a>
    <a href="?lang=en">영어</a>
</div>
</body>
</html>

Locale Resolever

@Bean
public LocaleResolver localeResolver() {
    // 세션을 사용한 예제
//        SessionLocaleResolver resolver = new SessionLocaleResolver();
//        resolver.setDefaultLocale(Locale.KOREAN);
    // 쿠키를 사용한 예제
    CookieLocaleResolver resolver = new CookieLocaleResolver();
//    resolver.setDefaultLocale(Locale.KOREAN); // 기본값 강제 한국어 설정.
    resolver.setCookieName("lang");
    return resolver;
}

http의 해더의 Accept-Language 에 의해 선택된다.
특이하게 setLocale 가 지원되지않는다. 오직 브라우저 설정에 의해서만 설정된다.

SessionLocaleResolver

처음 들어갈때에는 AcceptHeaderLocaleResolver 처럼 브라우저의 언어 설정에 의한 Accept-Language 로 값이 결정됩니다.
물론 setDefaultLocale 을 설정한다면 해당 기본값이 최우선입니다. (다음 문단에서 설명)
세션으로 저장되며, 필자의 버전기준으로 org.springframework.web.servlet.i18n.SessionLocaleResolver.LOCALE 라는 세션 속성이름으로 클래스를 시리얼라이징 되어 저장됩니다.

CookieLocaleResolver

SessionLocaleResolver와 속성이 동일하지만 lang 값이 바뀔경우 세션이 아닌 쿠키에 저장합니다.
때문에 세션의 경우 세션이 끊어지면 언어설정이 되돌아오지만 이 리졸버를 이용할 경우 쿠키에 값을 우선으로 불러옴.
CookieLocaleResolver추천

LocaleResolver.setDefaultLocale

SessionLocaleResolver 에서도 설명했지만 setDefaultLocale 을 설정할 땐 주의해야 함.
setDefaultLocale을 설정하게되면 해당 값이 의도적으로 설정된다.
즉, setDefaultLocale 의 값이 Accept-Language 보다 더 높은 우선순위에 있다.
예를들어 영어로 설정한다면 한국어 브라우저로 접속하더라도 기본값이 영어로 설정이 된다.
다만 아에 디폴트를 설정하지 않을 경우 Accept-Language 에서 가장 높은 우선순위 값이 기본값으로 설정됨.
기본값이 없을때 브라우저별 기본값을 확인해보고 싶으신경우 의도적으로 Accept-Language 값을 바꿔서 보내거나,
브라우저 설정의 인터페이스 언어 같은 것 을 다른언어로 바꾼뒤에 접근하면 된다.

LocaleResolver 의 종류

※ 스프링이 제공하는 LocaleResolver 구현 클래스

 클래스

 설 명

 AcceptHeaderLocaleResolver

 웹 브라우저가 전송한 Accept-Language 헤더로부터 Locale 선택한다. setLocale() 메서드를 지원  하지 않는다.

 CookieLocaleResolver

 쿠키를 이용해서 Locale 정보를 구한다. setLocale() 메서드는 쿠키에 Locale 정보를 저장한다.

 SessionLocaleResolver

 세션으로부터 Locale 정보를 구한다. setLocale() 메서드는 세션에 Locale 정보를 저장한다.

 FixedLocaleResolver

 웹 요청에 상관없이 특정한 Locale로 설정한다. setLocale() 메서드를 지원하지 않는다.

참고문헌

https://devbox.tistory.com/entry/Spring-Locale-처리 [spring locale처리]

반응형

'Spring > spring framework 기본 및 이론' 카테고리의 다른 글

@Autowired @Resource @Inject 차이  (0) 2020.05.10
component 과 bean 의 차이점  (0) 2020.05.10
spring webjars란  (0) 2020.05.08
servelt context 사용  (0) 2020.05.08
스프링 이해하기  (1) 2020.05.07
반응형

ClounFront 란

.html, .css, .js 및 이미지 파일과 같은 정적 및 동적 웹 콘텐츠를 사용자에게 더 빨리 배포하도록 지원하는 웹 서비스
CloudFront는 엣지 로케이션이라고 하는 데이터 센터의 전 세계 네트워크를 통해 콘텐츠를 제공. CloudFront를 통해 서비스하는 콘텐츠를 사용자가 요청하면 지연 시간이 가장 낮은 엣지 로케이션으로 라우팅되므로 콘텐츠 전송 성능이 뛰어남.

ClundFront 를 구성하는 방법

Amazon S3 버킷 또는 고유 HTTP 서버와 같은 오리진 서버,를 지정하고, CloudFront는 이로부터 파일을 가져온 다음 전 세계 CloudFront 엣지 로케이션에 배포
오리진 서버는 객체의 최종 원본 버전을 저장
HTTP를 통해 콘텐츠를 서비스하는 경우 오리진 서버가 Amazon S3 버킷 또는 웹 서버 같은 HTTP 서버

참고문헌

https://www.slideshare.net/awskorea/route53-cloudfront-cdn-gsneotek [route53-cloudfront-cdn 슬라이드쉐어]
https://docs.aws.amazon.com/ko_kr/AmazonCloudFront/latest/DeveloperGuide/Introduction.html [AWS 공식문서]
https://real-dongsoo7.tistory.com/86 [AWS CloudFront 설명]

반응형
반응형

Junit이란

자바용 단위 테스트 도구

Annotation 소개

@Before
Test 함수보다 먼저 수행되도록 정의하는 Annotation.
테스트에 필요한 공통적인 내용들을 정의해두면 좋다.
해당 Annotation을 사용하는 함수는 public void로 정의되어야 하며, 상속받은 Superclass 들에
정의된 @Before Annotation을 사용한 함수가 가장 먼저 수행된다.

@After
위에 정의한 Before Annotation과 반대되는 개념으로 Test 함수 이후에 수행된다.
보통 Before Annotation으로 정의된 함수에서 할당한 자원들을 해제하는 용도로 사용됨.
(DB Connection 이 대표적인 예)
이 역시도 public void로 선언하여야 Test 함수 이후에 수행될 수 있음.
Before 또는 Test 함수에서 예외가 발생하더라도 After Annotation이 붙은 함수는 수행된다.
Superclass에서 정의된 After 함수는 현재 클래스에 정의된 After 함수 수행 이후에 수행됨!!

@BeforeClass
테스트 수행에서 딱! 한 번 수행되도록 하는 공통 설정이 필요한 경우에 사용하면 좋다.
(예를 들어 Database logging과 같은 수행업무)
테스트의 독립성을 손상시킬 수도 있으나 공통의 내용을 뺄 수 있으므로 효율적인 방법이 되기도 한다.
BeforeClass로 사용될 함수는 public static void 로 선언되어야 하며 매개변수가 있어서는 안된다.
Superclass에 선언된 BeforeClass가 있는 경우에 현재 클래스의 선언내용보다 먼저 수행된다.

@AfterClass
Before와 After 같은 관계로 생각하면 쉽다. BeforeClass에서 할당한 자원 해제에 사용된다.
이 역시도 테스트 수행에서 딱! 한 번만 수행되도록 정의되며 public static void로 선언되어야 한다.
BeforeClass에서 예외를 발생시키더라도 AfterClass는 반드시 수행되며, Superclass에서 정의된 내용은
현재 클래스의 AfterClass가 수행된 이후에 수행된다.

@Ignore
일시적으로 테스트 또는 테스트 그룹을 사용하지 않기를 원할 수도 있다.
@Test가 붙은 함수라고 하더라도 Ignore Annotation이 붙으면 테스트 대상에 포함되지 않고,
또는 Ignore Annotation을 Class에 붙이게 되면 해당 클래스는 테스트 수행되지 않는다.

 @Before
public void setUp(){
    //setup before testing
}
@After
public void tearDown(){
    //teardown after testing
}
@Test
public void testSum(){
    //testing   
}
@Test(timeout=5000)
public void testSum(){
    //testing
}
@Test(expected=RuntimeException.class)
public void testSum(){
    //testing   
}

자주 사용하는 jUnit 메서드

 assertEquals(a,b); 

 객체 a,b의 값이 일치함을 확인한다.

 assertArrayEquals(a,b);

 배열 a,b의 값이 일치함을 확인한다.

 assertSame(a,b);

 객체 a,b가 같은 객체임을 확인한다.

 두 객체의 레퍼런스가 동일한가를 확인한다.

 assertTrue(a);

 조건 a가 참인가 확인한다.

 assertNotNull(a);

 객체 a가 null이 아님을 확인한다.

Spring-Test에서 테스트를 지원하는 어노테이션

@RunWith(SpringJUnit4ClassRunner.class)

- @RunWith는 jUnit 프레임워크의 테스트 실행방법을 확장할 때 사용하는 어노테이션이다.

- SpringJUnit4ClassRunner라는 클래스를 지정해주면 jUnit이 테스트를 진행하는 중에 ApplicationContext를 만들고 관리하는 작업을 진행해준다.

- @RunWith 어노테이션은 각각의 테스트 별로 객체가 새성되더라도 싱글톤(Singletone)의 ApplicationContext를 보장한다.

@ContextConfiguration

- 스프링 빈(Bean) 설정 파일의 위치를 지정할 떄 사용되는 어노테이션이다.

@Autowired

- 스프링 DI에서 사용되는 특별한 어노테이션이다.

- 해당 변수에 자동으로 빈(Bean)을 매핑 해준다.

- 스프링 빈(Bean) 설정 파일을 읽기 위해 굳이 GenericXmlApplicationContext를 사용할 필요가 없다.

- 변수, setter메서드, 생성자, 일반메서드에 적용가능하다.

- 의존하는 객체를 주입할 떄 주로 Type을 이용하게 된다.

- , 태그와 동일한 역할을 한다.

참고문헌

https://junit.org/junit5/docs/current/user-guide/#overview [junit 문서]
https://junit.org/junit5/docs/current/user-guide/#writing-tests-annotations [junit 문서중 어노테이션 정의]
https://ojava.tistory.com/58 [junit을 이용한 테스트수행 블로그]
https://shlee0882.tistory.com/202 [메소드사용]

 

반응형
반응형

js 및 css 스크립트 라이브러리 로드 할 경우 방법

  1. 다운받아서 로컬에 풀기
  2. CDN 주소 사용
  3. bower, grunt, yeoman 같은 프론트 엔트 package manager 사용

WEBJARS 란

webjars 는 jar 파일로 프론트 엔트 리소스를 가져오게 하는 라이브러리이다.

결국 webjars 안에서도 bower 라는 패키지 매니저를 사용 해야함. npm도 있음.

<dependency>
    <groupId>org.webjars.bower</groupId>
    <artifactId>jquery</artifactId>
    <version>2.1.3</version>
</dependency>
<dependency>
    <groupId>org.webjars.bower</groupId>
    <artifactId>bootstrap</artifactId>
    <version>3.3.4</version>
</dependency>

사용방법

<link rel="stylesheet" href="/webjars/bootstrap/3.3.4/dist/css/bootstrap.min.css">
<script src="/webjars/jquery/2.1.3/dist/jquery.min.js"></script>
<script src="/webjars/bootstrap/3.3.4/dist/js/bootstrap.min.js"></script>

빌드를 하면 /resources 경로에 webjars 라는 경로로 라이브러리가 압축이 풀린다.

스프링부트에서는 JARs 에 있는 클래스패스 /META-INF/resources/webjars 를 /webjars 로 요청을 연결하도록 자동구성된다.

프로젝트 구성이 프론트 엔드 구성이 따로 되어 있으면 프론트 엔드 빌드 툴 사용 권장!

참고문헌

http://millky.com/@origoni/post/1147 [webjars를 이용한 bootstrap, jquery 적용해보기]

반응형

'Spring > spring framework 기본 및 이론' 카테고리의 다른 글

component 과 bean 의 차이점  (0) 2020.05.10
localeResolver 란  (0) 2020.05.10
servelt context 사용  (0) 2020.05.08
스프링 이해하기  (1) 2020.05.07
스프링 jdbc 이해하기  (0) 2020.05.07

+ Recent posts