2016년 3월 13일 일요일

20160313 인텔리제이(IDEA)로 스프링 코어 파헤치기!

일단 소스포지에서 스프링 코어 소스를 받습니다.
1.0이 제일 좋겠죠? 
간단하고 초기버전이니 굉장히 뼈대만 있을것 같습니다. 라는 류의 글을 읽었던것 같습니다.

https://sourceforge.net/projects/springframework/files/springframework/1.0/

위에서 위스 디펜던시를 받습니다.

인텔리제이를 켠 후
프로젝트 푸롬 이그지스팅 소스를 클릭합니다.
Project from existing source?!

-> Create project from existing sources

이후 잘 읽으며 넥스트를 클릭하면 인텔리제이가 프로젝트로 인식을 합니다.
그 이후 소스를 따라가면서 읽기!

아... 초보라서 이렇게 시작하는것도 힘드네요... 삽질의 년속!

자 그럼 병신년도 화이팅!

2016년 3월 7일 월요일

20160307 MySQL에 뺴놓은 숫자 인덱스 추가하기!

지금까지 잘? 쓰던 테이블에 인덱스가 있기는 한데 모두 변경 가능한 컬럼이었습니다.
... 수정이랑 삭제 기능을 넣어야 하는데...

어?! .... ㅋㅋㅋㅋ

그래서 새로운 컬럼을 추가하고 기존에 있는 로우에는 인덱스(숫자)를 부여!
새로 추가하는 로우에는 자동으로 하나씩 추가할 수 있도록 설정을 해 봤습니다.

# 테이블에 인덱스로 사용할 컬럼을 추가
alter table 테이블이름 add(컬럼이름 컬럼타입(int, numeric등));
=> alter table test_table add(index int);
# 컬럼 삭제 (잘못 추가했을 경우)
alter table test_table drop index;
# 번호를 1부터 할당
set @num:=0;
update test_table set index = @num := @num+1;

여기까지는 기존의 로우에 인덱스를 부여한 상황

ALTER TABLE `test_table` MODIFY COLUMN `index` INT AUTO_INCREMENT;

이렇게 해주면 추후 생성되는 로우에도 인덱스가 자동으로 들어가게됩니다.
물론 insert할 때 index컬럼은 자동으로 추가됩니다. 강제로 지정하지 않으셔도 됩니다.



덧. 인덱스라고 하면 검색을 더욱 빠르게 해주는 인덱스를 생각하실 수 있는데, 그것은 따로 공부를...ㅎㅎ
비슷한 의미이긴 합니다만... 
이런곳을 참조하시거나 검색하시길 바랍니다...^^;
20000.

2016년 3월 1일 화요일

20160301 스프링 타임리프 + 로그 설정 간단하게

스프링은 일단...
pom.xml(메이븐),
src/main/resources,
config 패키지(각종 설정들),
controller 패키지 들을 중점으로 보면 뭔가 실마리가 하나씩 풀리는 것 같습니다.

일단 pom.xml
                <!-- thymeleaf -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>net.sourceforge.nekohtml</groupId>
<artifactId>nekohtml</artifactId>
</dependency>

<!-- logger -->
<dependency>
       <groupId>ch.qos.logback</groupId>
       <artifactId>logback-classic</artifactId>
                </dependency>

resources/logback-test.xml (스프링이 읽는 순서가 있고 logback-test는 2순위입니다.)
<?xml version="1.0" encoding="UTF-8"?>
<configuration>

<!-- Console -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>%d{HH:mm} %-5level %logger{36} - %msg%n</Pattern>
        </layout>
    </appender>

    <logger name="com.jongsam.*" level="DEBUG"/>
    <root level="INFO">
        <appender-ref ref="STDOUT" />
    </root>
</configuration>

config 패키지 ThymeleafConfig.java - 클래스 명은 상관없음
타임리프의 경우 한글 인코딩 문제나 엄격한 XHtml의 문제가 있어 조금 변경했는데
일단은 작동하는 것 같습니다.

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.thymeleaf.spring4.SpringTemplateEngine;
import org.thymeleaf.spring4.view.ThymeleafViewResolver;
import org.thymeleaf.templateresolver.ServletContextTemplateResolver;
import org.thymeleaf.templateresolver.TemplateResolver;

import nz.net.ultraq.thymeleaf.LayoutDialect;

@Configuration
public class ThymeleafConfig {

@Bean
public TemplateResolver templateResolver() {
ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver();
templateResolver.setPrefix("/views/");
templateResolver.setSuffix(".html");
templateResolver.setTemplateMode("LEGACYHTML5"); // HTML5가 기본인데 엄격한
// HTML을 선호하는 타임리프이기
// 때문에 일단 템플릿 모드를
// LEGACYHTML5로 변경
templateResolver.setCacheable(false);
return templateResolver;
}

@Bean
public SpringTemplateEngine templateEngine() {
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(templateResolver());
templateEngine.addDialect(new LayoutDialect()); // setDialect를 사용하면 안됨!
return templateEngine;
}

@Bean
public ViewResolver viewResolver() {
ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
viewResolver.setCharacterEncoding("UTF-8"); // 한글관련 인코딩에서는 ViewResolver의 케릭터 셋을 추가해준다.
viewResolver.setTemplateEngine(templateEngine());
viewResolver.setOrder(1);
return viewResolver;
}

}

마지막으로 로그 쓰는법
자세한 것은 다른 블로그들을 참조하시면 될것 같습니다.
저는 사용법만을 기록 예정입니다.

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

...

private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
...
void test() {
  logger.info("This is Logger - slf4j");
}

이렇게 몇일간의 삽질을 마무리 합니다.
이제 프론트 엔드와 싸우고 난 후 백엔드와 어드민을...ㅠㅠ

웹을 시작하는게 아니었는데...ㅠㅠ