스스스 스칼라맛

궁금해 허니

빠지면 점점 파고든 함수형 프로그래밍 맛


원래 뭔가 맛보기만 하고 이런 거 안좋아하는데

Kevin방송을 보다 빠져들게 됐다

하지만 맛만 봐야 하는게 참 안타깝다.

파고들고 싶지만 아직 자바로 해야 될게 너무 많다.


처음에 Scalar인줄 알았다 vector에 나오는 scalar인줄 알았다

그래서 뭔가 정적인언어 함수형 언어라고 하니 closure 개념과 연관된 것인 줄 알았다.

찾아보니 scalar가 아니라 scalable language라는 뜻이였다.

Java가 너무 장황한 언어라 Java 사용자들이 빠르게 배울 수 있는 함수형 언어라는 이야기도 있다.


그럼 맛 좀 보자

공홈에 들어가면 inteliJ 와 sbt 두가지로 나뉜다.

나는 akka를 보다가 유입되서

sbt를 받아서 설치했다.

sbt는 scala build tool 이다.

또한 eclipse 유저는 sbt로 빌드하고 eclipse로 임포트하라고 한다.

eclipse에 scala플러그인이 있어서 바로 만들 수 있는 것 같은데 그건 나중에 한다.


그 밖에 java랑 똑같은 방법으로 쓸 수 도있다.

맞는 스칼라 버전을 다운 받아서 설치하고 java처럼 컴파일하고 실행하면 된다.


sbt 공홈에 나온 걸 요약하면


1. sbt로 새 프로젝트를 만든다.

커맨드 라인에서 아래와 같이 입력

sbt new sbt/scala-seed.g8

scalla-seed-project라는 폴더에 프로젝트가 생성된다.

hello를 찍는 greet 함수가 생성된 간단한 프로젝트다.


2. sbt에 eclipse plugin 추가

scala용 eclipse라고 스칼라 프로젝트를 바로 임포트가 안된다.

scala에 eclipse plugin을 추가해야 한다.


https://github.com/sbt/sbteclipse 에 가면 방법이 나와있다.


1에서 생성한 폴더에 /project 라는 폴더가 있을 것이다. 없으면 만든다.

거기에 plugins.sbt라는 파일을 만들어 추가한다.

addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "5.2.4")

그런후 다시 project root폴더(/scalla-seed-project)로 가서 

sbt eclipse 를 실행

.classpath, .project 등 이클립스 프로젝트 관련 파일이 만들어 진다.


3. 이클립스에서 스칼라 프로젝트 임포트

existing project로 해당 프로젝트를 가져오면 된다.


describe명령어 말고 테이블 정보를 가져 올 수 있다. column_name만 가져오는게 필요 할 때가 있다.


select column_name, data_type, character_maximum_length
    from INFORMATION_SCHEMA.COLUMNS 
    where table_name = 'table_name';


mysql -h host -u user_name -pPassword database < file.sql


'데이터베이스' 카테고리의 다른 글

mysql 로그 보기  (0) 2018.04.24
max group by  (0) 2018.02.14
첫 트리거  (0) 2017.12.19
dataSource에 initSql 설정 (alter session 적용하기)  (0) 2017.11.23
oracel timestamp_fomat session 바꾸기  (0) 2017.11.22

애노테이션에 AOP를 걸려고 검색했더니 애노테이션 이름만 달랑 걸어긴거 따라했더니 안된다.

aspectJ 표현식도 import랑 마찬가지라 package 찾아서 간다.

같은 패키지면 이름만 걸어도 찾지만 다를 경우 패키지 명까지 풀네임 적어줘야 한다.


예) @Around("@annotation(test.annotation.ConfigureProperties)")

$ echo 'id:password' | chpasswd

ConfigurerAdapter 클래스에 다음과 같은 설정을 해주면 DB에서 인증을 할 수 있다.

@Autowired     private PasswordEncoder passwordEncoder;     @Autowired

DataSource dataSource; @Override public void configure(AuthenticationManagerBuilder auth) throws Exception { String selectUserQuery = "select id, password, enabled from user where id = ?"; String selectRolesQuery = "select id, roles from user_roles where id = ?"; auth.jdbcAuthentication().dataSource(dataSource).usersByUsernameQuery(selectUserQuery)

.authoritiesByUsernameQuery(selectRolesQuery);

}

시큐리티 쿼리 실행은 JDBCTemplate을 통해서 이뤄진다.

?에는 username 파라메터가 들어간다.

userByUsernameQuery는 select username, password, enabled 순이다.

authoritiesByUsernameQuery는 select username, authorities 순이다.


default setting에 순서에 맞게 매칭 시켜준다.




java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet


집과 회사 톰캣버전을 다르게 해서 git를 써보려고 이짓 저짓 했더니
에러가 속출 이것저것 고치다가 있는데 왜 못찾는지 모르는 에러가 발생

https://stackoverflow.com/questions/11227395/java-lang-classnotfoundexception-org-springframework-web-servlet-dispatcherserv
여기에 해결책이 나왔다.
  • right click on your project and choose properties.
  • click on Deployment Assembly.
  • click add
  • click on "Java Build Path Entries"
  • select Maven Dependencies"
  • click Finish.
댓글도 완변한 솔루션이라고 한다.
하지만 이해가 잘 안된다.
build path에 메이븐 디펜던시가 포함이 안되서 그런건데
그냥 build path설정으로는 안되고
deployment Assembly로 하는게 무슨 의미 일까?


'개발환경 설정' 카테고리의 다른 글

port 6000  (0) 2018.06.28
mac iterm 편리한 커서 이동  (0) 2018.06.13
tomcat CORSFilter  (0) 2018.01.08
tomcat https설정하기(SSL/TLS 설정)  (0) 2018.01.03
svn 권한설정  (0) 2017.11.06

인터넷에서 spring security를 검색하면 한글 자료는 대부분 xml 설정으로 되어있다.

먼저 web.xml에 DelegateFilterProxy를 설정하는 것부터 나온다.

그리고 나머지 설정을 외우거나 복붙해서 만든다.

반면 java 설정은 자동완성과 클래스를 들여다 보기때문에 공부하는데 더 좋다.

설정도 web.xml에 필터를 등록할 필요 없다.


먼저 필요한 dependency 설정을 한다.
        <dependency>
  		<groupId>org.springframework.security</groupId>
  		<artifactId>spring-security-web</artifactId>
  		<version>5.0.0.RELEASE</version>
  	</dependency>
  	<dependency>
  		<groupId>org.springframework.security</groupId>
  		<artifactId>spring-security-config</artifactId>
  		<version>5.0.0.RELEASE</version>
  	</dependency>
  	<dependency>
  		<groupId>org.springframework.security</groupId>
  		<artifactId>spring-security-taglibs</artifactId>
  		<version>5.0.0.RELEASE</version>
  	</dependency>
자바 설정은 다음 클래스로 시작한다.

@Configuration

@EnableWebSecurity

public class CustomSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter


클래스로 시작하면 된다.


클래스 멤버는 다음과 같다.


아이디와 패스워드 권한을 설정한다. 시작은 인메모리 방식으로~~
    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
          .withUser("user1").password("user1Pass")
          .authorities("ROLE_USER");
    }

    }

경로에 권한 설정과 로그인 페이지 설정을 한다. 로그인 페이지 설정을 안하면 브라우저 prompt로 인증을 요구한다. 로그인 페이지 url을 설정안하면 디폴트 로그인 페이지가 나온다.
        @Override
	protected void configure(HttpSecurity http) throws Exception {
		
		logger.info("http: "+http);
		
		http.httpBasic(); 
		http.authorizeRequests().antMatchers("/main/**").hasRole("USER");		
		http.formLogin().loginPage("/login")
			.usernameParameter("username").passwordParameter("password")
			.permitAll()
			.and();
	}
spring-security 시작은 단순하다.


Invalid character found in method name. HTTP method names must be tokens


https 요청 처리 안되있는데 요청이 들어올 경우


프로토콜을 잘 보길

'스프링(Spring)' 카테고리의 다른 글

spring security#2 DB를 통한 인증  (0) 2018.01.17
spring-security#1 시작하기  (0) 2018.01.16
Spring + Mysql + MyBatis  (0) 2017.10.29
스프링 설정#4 예외처리 하기  (0) 2017.10.06
스프링설정 #3 Transaction설정  (0) 2017.10.06

pseudo code는 dom요소가 아니기때문에 event를 붙일 수가 없다.

하지만 프로그래밍으로 안되는 건 없다.

:after 는 해당 태그의 돔으로 인식된다.

하지만 해당 태그의 width 밖에 있다.

offset.x로 포인터 좌표를 찾을 수 있다.


span = document.querySelector('span');
span.addEventListener('click', function (e) {

    if (e.offsetX > span.offsetWidth) {
        // pseudo event
    } else {
        // orginal dom event
    }
});

멋진 아이디어다.

'javascript' 카테고리의 다른 글

let의 필요성  (0) 2018.03.20
async function 과 await  (0) 2018.03.10
ajax의 자동 encoding  (0) 2017.12.28
mousewheel 이벤트 버그  (0) 2017.12.28
ie, chrom] new Date 관련  (0) 2017.12.27

+ Recent posts