자료 파일 정리중인데, 크게 많이 바뀐 것 같지는 않습니다.

HW > OS > JVM > Spring 을 만들고 있다는 생각. 애플리케이션 컴포넌트들을 만들고 레고처럼 조립하게 만드는 방향으로 가는 듯 합니다. IoC, PSA 덕분에 조립하기가 쉬운 프레임워크이니까요.

문서화가 약하다는 오픈소스의 편견을 깬 문서 목록입니다. 미친 속도입니다.

http://spring.io/docs


Spring Projects

Projects in Incubation

Projects in the Attic

스프링 웹MVC로 코드 만들어 실행할 때 WAR로 빌드해서 톰캣 설치된 곳에 복사해서 실행하지 않아도 되는 세상입니다. 빌드 도구를 통해서 톰캣 관련 jar 다운받아서 바로 실행할 수 있게 되어 있으니까요.


라고 생각했었습니다. mvn 쓸 때까지는요.


스프링 한 술 더 뜨네요.


package hello;

import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.context.annotation.ComponentScan;

@ComponentScan
@EnableAutoConfiguration
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

이러면 서버가 뜹니다.

자바 공부할 때 흔히 보던 main() 메소드로 말이죠.


Download http://repo1.maven.org/maven2/org/apache/tomcat/embed/tomcat-embed-core/7.0.42/tomcat-embed-core-7.0.42.jar

Download http://repo1.maven.org/maven2/org/apache/tomcat/embed/tomcat-embed-logging-juli/7.0.42/tomcat-embed-logging-juli-7.0.42.jar

빌드에서 확인한 파일입니다.


관련 글입니다. 아래 문서는 spring-boot 를 사용합니다.

http://spring.io/guides/gs/serving-web-content/#initial




메일로 온 질문에 답변을 공유합니다.


====

Q:

좋은 강의 감사드립니다.

강의 내용을 정리하면서 몇가지 질문이 생겼습니다.


1. Junit 을 사용할 테스트는 무조건 return 구문과 출력 구문을 만들어야 하나요?

return 값이 void 인 경우는 어떻게 하나요?


2. 예전 책을 보면 tomcat을 컨테이너라고 하고

웹서버와 구분을 합니다. 웹서버 아파치와 구분을 하는데

정확히 웹서버와 was, 컨테이너의 차이를 모르겠습니다.


동적인 페이지를 처리하기위해 was가 필요하다고 하니

was가 웹서버의 역할까지 포함하고 있는 것이라고 생각했는데

was와 웹서버를 같이 사용하는 경우도 있고...개념이 헷갈립니다.


3. Spring에서 service와 controller의 차이가 어떤 것인지 알고 싶습니다.

실제로 서비스에서 하는 행위를 컨트롤러 단에서 해도 상관이 없다고 생각됩니다.


4. Spring과 스트럭쳐를 같이 사용할 이유가 있는지 알고 싶습니다.

처음 공부할 때 두가지를 같이 병행하는데 역시 spring만으로 구현이 가능한 것 같습니다.


마지막으로 가능하다면 강의에 사용하셨던 구글 문서 주소를 다시 알려주셨으면 합니다.

이번에 윈도우 8.1을 써본다고 하다가 그만 즐겨찾기를 지워버리는 실수를 해서....

단순히 업데이트로 생각했다가 많은 자료가 사라져 버렸습니다.

구글 크롬에 북마크는 정리가 끝난 사이트만 관리하다보니 이런 불상사가 생겼네요.


더운 날이 계속되는 여름입니다.

건강관리에 유의하시기 바랍니다.

다시 한번 좋은 강좌와 okjsp에 많은 도움에 감사드립니다.


A:

안녕하세요.

답변 드리겠습니다.


1. void 인 함수의 역할이 무엇인지, 상태값을 변화시킨다면 그리고 그것을 검증해야 한다면, 

테스트를 위해, 상태값을 읽어오는 함수를 통해서 테스트할 수 있을 것입니다.


2. 웹서버는 html, css, js, image들을 서비스하는 아파치 웹서버 (http://httpd.apache.org), 

IIS 등이 있습니다.  WAS는 Web Application Server의 약자이고, JSP/Servlet을 실행할 수 있는

서블릿 컨테이너와 EJB가 실행되는 EJB 컨테이너로 구성되어 있습니다.

초기에는 WAS의 정적인 파일 처리 능력이 낮기 때문에 웹서버와 연결해서 사용했는데, 

(mod_jk, ajp 같은 커넥터류) 요즘은 WAS 자체에서 http 서버의 역할을 감당할 만한 성능이 나와서

단독으로 웹서버의 역할까지 커버하는 경우가 많습니다.


3. 강의 때도 말씀드렸는데, request, response 같은 객체와 분리된 비즈로직이 Service에서 실행됩니다.

저 두 파라미터가 Service에 없다는 것은 Service를 WAS와 분리해서 단독으로 실행할 수 있게 됩니다.

Controller의 역할은 Model과 View를 연결해 준다는 본연의 역할이 있지요.

http://csl.ensm-douai.fr/noury/20 MVC song인데, 동영상과 가사를 함께 생각해보시면 도움이 되실 것입니다.


4. 스트럿츠를 스프링과 연계시키는 이유는 제 생각으로는 당시 스트럿츠로 만들어진 시스템이 많았고,

스트럿츠 개발자들이 많았기 때문이 아닌가 생각됩니다.

지금은 말씀하신대로 스프링MVC로 모두 커버 가능합니다.


감사합니다.


구글문서 주소는 http://bit.ly/eclipse201306 입니다.


으악 DB에 한글이 안들어가요.

Exception in thread "main" java.sql.SQLException: Incorrect string value: '\xEB\xB0\xB1\xEA\xB8\xB0...' for column 'name' at row 1

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)

at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3515)

at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3447)

at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1951)

at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2101)

at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2554)

at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1761)

at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2046)

at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1964)

at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1949)

at springbook.user.dao.UserDao.add(UserDao.java:23)

at springbook.user.dao.UserDao.main(UserDao.java:60)



mysql> SHOW VARIABLES LIKE '%olla%';
+----------------------+-------------------+
| Variable_name        | Value             |
+----------------------+-------------------+
| collation_connection | utf8_general_ci   |
| collation_database   | latin1_swedish_ci |
| collation_server     | latin1_swedish_ci |
+----------------------+-------------------+
3 rows in set (0.00 sec)

mysql> 

Class.forName("com.mysql.jdbc.Driver");

Connection c = DriverManager.getConnection("jdbc:mysql://localhost/springbook?characterEncoding=UTF-8", "spring","book");


방법을 찾았습니다만, 쉽지 않은 문제였습니다. DB에 대한 이해가 필수겠지요. varchar(20)을 longtext  로 잡았습니다.

create table users (

id varchar(10) primary key,

name longtext not null,

password varchar(10) not null

) DEFAULT CHARSET=utf8;



현재 DB 설정과 내용은 다음과 같습니다.
kenuheoyimacbookpro-4:bin kenu$ ./mysql -u spring -p springbook
Enter password: 
...
Server version: 5.5.8 MySQL Community Server (GPL)

Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
...
mysql> show variables like '%olla%';
+----------------------+-------------------+
| Variable_name        | Value             |
+----------------------+-------------------+
| collation_connection | utf8_general_ci   |
| collation_database   | latin1_swedish_ci |
| collation_server     | latin1_swedish_ci |
+----------------------+-------------------+
3 rows in set (0.00 sec)

mysql> select * from users;
+-----------+-----------+----------+
| id        | name      | password |
+-----------+-----------+----------+
| whiteship | 백기선    | married  |
+-----------+-----------+----------+
1 row in set (0.00 sec)

mysql> 



처음 맥에 MySQL을 설치해서 돌려봅니다. 2006년부터 맥을 써왔지만, 이번에 처음입니다.
http://www.mysql.com 에서 mysql-5.5.8-osx10.6-x86_64.dmg 파일을 다운로드 받아서 3가지를 설치했습니다.

./mysql-5.5.8-osx10.6-x86_64.pkg
./MySQLStartupItem.pkg
./MySQL.prefPane

MySQL.prefPane 이후에 이렇게 시스템 환경설정에 만들어집니다.

메뉴에 들어가면 Start/Stop 그리고 현재 DB 사용여부 표시 기능 밖에는 없습니다.

DB를 실행한 뒤에 다음과 같이 토비의 스프링3를 위해서 DB와 table을 만들었습니다.

kenuheoyimacbookpro-4:docs kenu$ mysql -u root mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6081
Server version: 5.5.8 MySQL Community Server (GPL)

Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)

mysql> grant all privileges on *.* to spring@localhost
    -> identified by 'book' with grant option;
Query OK, 0 rows affected (0.04 sec)

mysql> create database springbook;
Query OK, 1 row affected (0.02 sec)

mysql> use springbook;
Database changed

mysql> create table users (
    -> id varchar(10) primary key,
    -> name varchar(20) not null,
    -> password varchar(10) not null
    -> );
Query OK, 0 rows affected (0.46 sec)

mysql> 

spring 아이디에 book 비번으로 접속 가능하게 하고 springbook 이라는 database를 만들고, 그 안에 users라는 table을 만든 것입니다. 

계속 진도 나가야겠습니다. 갈 길이 멉니다.

 토비의 스프링3 책을 보기 시작했습니다. 1,400페이지에 하드커버라 들고 다니기는 버겁지만, 운동삼아 들고 다니고 있습니다. 운동효과는 나중에 알게 되겠지요.

1장을 다 읽고나서 느낀 점은 객체지향 프로그래밍에 대한 또 다른 설명이라고 느껴집니다. 내용 중에 추천하는 소프트웨어 개발의 지혜(Agile PPP), Head First OOAD 두 권의 책을 스프링 설명에 잘 녹였다는 느낌이 들었습니다.

bookinfo.asp.jpg

image from : http://kangcom.com/sub/view.asp?sku=2010F1446912


쉽사리 프레임워크로 가지 못했던 저에게 좋은 가이드가 될 것 같습니다. 현재 한국 기업 개발 시장의 사실상 표준 프레임워크는 스프링이라고 해도 과언이 아닐 것 같습니다.

http://kangcom.com/sub/view.asp?sku=2010F1446912


이일민님, 에이콘출판사 여러분 좋은 책 만드시느라 수고 많으셨습니다.


자바원 $1,800, 스프링원 $1,350
자바원 4일, 스프링원 3일
자바원 15,000명, 스프링원 1,000명
자바원 하루 2번 도시락, 스프링원 하루 세 번 신선한 뷔페
자바원 All about java 300가지 세션, 스프링원 All about spring framework 70가지 세션
벤더 기념품 자바원 가방 한 가득, 스프링원 볼펜 몇 개

색다른 경험이었습니다.
스프링프레임워크라는 주제로 이런 행사가 열릴 수 있다는 게 대단한 듯 합니다. 현존하는 자바 프레임워크 중에서는 유일하지 않나 싶습니다. 스프링프레임워크에 오타쿠인 세 사람(토비,영회,기선)을 보고는 참 부러웠습니다. 저는 로드 존슨 밖에 몰랐는데, 스프링의 모듈별 개발자들을 잘 알고 계시더군요. 어느 분야의 전문가가 되기 위해서는 그 분야에서 활동하는 사람들도 자연스럽게 알게 되나 봅니다.

프레임워크 울렁증이 있는 개발자들이 많겠지만, 프로그래밍에서 재미를 찾는 것이 거의 불가능한 업계 현실을 감안하면 충분히 우리 나라 소프트웨어의 미래를 예측할 수 있습니다. 하지만 이곳에서 프로그래밍에서 즐거움을 느끼는 사람들을 보면 기술을 리딩해 가는 즐거움을 엿보게 됩니다. OK JavaSpringProgrammer 로 사이트를 바꿔야 되나 잠깐 고민도 해봤습니다.

가능하면 가까운 시일 내에 공유하는 시간을 가지면 좋겠습니다. 애니프레임을 키우고 있는 삼성SDS분들과도 재밌게 얘기했었고, 다음커뮤니케이션의 세 분과 만난 것도 즐거웠습니다. 저를 포함해서 10명의 한국인만 확인이 가능했습니다. 중국인들이 많았고, 일본인은 하나도 보질 못했습니다.

일요일 저녁에 한국에 도착합니다. 영회님처럼 예약 포스팅 하나 걸어놔야겠군요. ^^

제 영어가 즈질인 것을 다시 한 번 확인했습니다. 일명 무대뽀식 영어 ㅡㅡ;

아울러 1G 무료로 제공해 준 덕에 수월하게 사진을 공유할 수 있었던 피카사에 감사드립니다. http://picasaweb.google.com/kenu.heo/


스프링프레임워크 작업에서 xml은 java5의 annotation 등장 이후 많이 없어졌습니다. 하지만 완전히 없어지지는 않았지요.

http://springide.org 사이트의 툴을 통하면 xml 편집기에서도 자바 클래스의 코드 완성기능이 지원됩니다.

하지만 JavaConfig 를 통해서 그 꿈을 이뤄가고 있습니다.
<bean />  == @Bean 
위와 같은 개념으로 자바클래스를 통해서 xml의 기능을 처리하게 됩니다.

1.0.0마일스톤4 버전인데, Spring 3.0에 맞춰서 진행할 것 같기도 합니다.
DSL(Domain Specific Language)개념이라고 합니다만 아직 저는 이해가 ^^;

점점 어려워지는 듯 합니다. ^^;

자바원과는 다른 느낌의 행사입니다. 세션 집중도도 좋고, 발표 내용도 좋았습니다.
사진일단 공유합니다.



오늘 들었던 세션 중 제일 괜찮았습니다. Acegi 의 Ben Alex 님입니다.


오늘 들은 주제들입니다.

1. What's New in Spring Framework 3.0

Spring Security 2.5
BASIC authentification
JDBC
LDAP

2. Migration Case Study: MTV Networks
Justin Edelson
from ATG Dynamo to Spring story.

글로벌 미디어 컴퍼니
자바, .net, Ruby, PHP, C++ 이 섞여있는 사이트.

3. Working with Spring Web Flow 2

4. Web Flow 2

5. Keynote: John Rymer

+ Recent posts