본문 바로가기

Dev

(53)
Java - 입력: BufferedReader, StringTokenizer - BufferedReader : 문자열로 입력을 받게 되어있음. 받을 때 마다 적절한 형변환이 필요함. 그러나 스캐너보다 빠름 - InputStream : 자바에서 기본이 되는 입출력, Stream이란 출발지와 도착지를 이어주는 다리임 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 버퍼리더를 사용하면 위의 방식으로 사용하게 되는데 코드를 해석해보면 1. 텍스트를 읽어 메모리에 저장해둠 (BufferReader) 2. InputStreamReader(System.in) 에서 바이트 스트림을 문자 스트림으로 변환 이제 br을 통해 값을 입력받을 수 있음. 단, 이것을 사용하려면 예외처리 IOException e가 필요함 ..
C++ vector 초기화 방법 vector는 자유롭게 크기에 상관없이 데이터를 삽입할 수 있지만 초기화를 해놓고 행렬처럼 사용하고 싶을 수가 있다. 그럴 때 사용하는 방법이다. vector vec(3); //1 vector vec(3, -1); //2 1번 : 크기 3으로 모두 0으로 초기화 2번 : 크기 3으로 모두 -1로 초기화 vector vec(n, vector(m,-1)); 다차원 벡터 초기화. n행 m열로 초기화
Spring Security - 로그인 처리 과정 스프링 시큐리티가 로그인 인증을 하는 로직은 다음과 같다. Http 요청이 들어오고 필터를 거처 마지막에 SecurityContextHolder에 들어간다. 세션에 들어갈 수 있는 오브젝트는 스프링 시큐리티에서 정해져있다. 그것이 위의 있는 Authentication 이다. 이 안에는 유저 정보가 들어있고 유저 정보가 있는 오브젝트 타입은 UserDetail이다. 위 6번에서 알 수 있듯, UserDetatils는 인터페이스로 제공이 된다. 이제 저 인터페이스를 구현해보자 PrincipalDetails로 UserDetails 인터페이스를 구현한다. 이제 구현한 프린시펄디테일을 어떻게 세션에 넣는 걸까? 방법은 간단하다. 간편한 서비스가 이미 구현되어 있기 때문에 우린 그 인터페이스를 구현하여 사용하면 된..
우분투에서 MySql 실행법 MySql 설치는 되어있다는 가정하에 sudo mysql -u root -p 하면 엑세스 거부 에러가 날 수 있다. 이때는 mysql의 경로를 지정해주면 해결된다. 보통은 sudo /usr/bin/mysql -u root -p 이다. 이후 비밀번호를 입력하면 mysql 실행 로그가 뜰 것 이다.
React - 상태 감지(useState), 컴포넌트 플러터에서 상태를 바꾸려면 setState를 하여 페이지를 다시 불러오는 작업을 하는 것이 일반적이다. 그러나 남은 타임세일 시간이라거나 카운트다운 같은 것은 setState로 표현 할 수 없다. 리엑트에서는 어떻게 할까? 다음과 같은 아주 간단한 버튼과 기능을 만들었다. 여기서 더하기 버튼을 누르면 a값이 변화한다. 확인해보면 콘솔에서 보면 확실히 a값은 바뀌고 있지만 렌더링은 되지 않는다. 여기서 실시간으로 바꾸고 싶으면 useState로 값을 관리해야한다. 이렇게 관리하면 리엑트는 a의 값을 실시간으로 감지하고 변화하면 화면에 다시 그려주는 편리한 기능을 제공한다. 상태가 바뀌면 모두 다시 그리게 되는데 이것은 매우 비효율적이다. 이 비효율을 해결하기 위한 방법이 부모자식간의 관계를 따지는 것이다...
Spring Security - configure, WebSecurityConfigurerAdapter를 사용하여 권한 체크 Spring boot 에서 configure란 "스프링이 돌아가는 설정을 관리하는 객체" 라고한다. 다시 말하면 스프링이 기본으로 돌아가는 기본 설정을 configure 어노테이션을 붙혀 우리가 관리할 수 있다는 말이다. 이는 Bean과는 조금 다른 의미인데, Bean은 Ioc (제어의 역전)에 개발자가 직접 클래스를 삽입하여 사용할 수 있는 것이라면 configure는 아에 규칙을 바꿔버릴 수 있다. 스프링부트에서 로그인 기능을 위해 WebSecurityConfigurerAdapter @EnableWebSecurity 두가지를 사용할 수 있다. 먼저 아래 어노테이션은 시큐리티 필터가 스프링 필터 체인에 등록이된다. 이를 통해 기본적인 스프링 시큐리티 설정이 실행되고 위의 클래스를 상속받으면 여러가지 스..
React - 화면의 변화감지, 배열(map, filter, slice, concat, spread 연산자) 만약 화면의 알림 표시가 왔다고 하자. 그렇다면 화면의 알림표시를 위해 렌더링을 다시해야 할 것이다. 알림 하나 때문에 화면을 전부 다시 그리는 것(렌더링)은 비효율적이다. 리액트 엔진은 컴포넌트를 통해 이를 해결한다. 최상위 렌더링이 Return A 일 때, A { 파란색 return B } 여기서 색을 변화시켰다고 하자 A { 빨간색 return B } 여기서 return A 를 할 경우 B는 어쩔 수 없이 바뀐것이 없어도 다시 렌더링될 것이다. 리엑트는 여기서 B를 검사하여 변화가 있으면 다시 그리고 변화없을 경우 그리지 않는다. 여기서 연산은 렌더링은 안되지만 연산은 된다. 연산을 위해 필요한 것이 바로 불변함수이다. 위는 얕은 복사이다. 즉, b는 새로운 자신의 주소를 갖고 있는 것이 아닌 a를..
Java - 문자열 자르기, 문자열 교체, 문자열 카피 1. 문자열 자르기 split : 문자열을 기준에 따라 자른다. 원본 문자열은 바뀌지 않는다. 새롭게 문자열 배열을 구성해야한다. String str = "Java is very hard,C++ is very hard"; String[] splitstr = str.split(","); for(String spl : splitstr) System.out.println(spl); subString : 문자열을 범위에 따라 자른다. 원본 문자열은 바뀌지 않는다. 즉 반환형이다. String substr = str.substring(0, 3); System.out.println(substr); 이 함수의 특징은 0~3부터가 아니라 0~2 까지이다. 2. 문자열 확인, 교체 contain : 포함하고있는가 확인...