URL (Iniform Resource Locator) URL은 인터넷의 리소스(웹에서 사용되는 식별할 수 있는 모든 자원)를 가리키는 표준 이름이다. URL은 전자 정보 일부를 가리키고 그것이 어디에있고 어떻게 접근할 수 있는지 알려준다. 브라우저가 정보를 찾는데 필요한 리소스의 위치를 기리킨다. URL을 통해 사람이 HTTP 및 다른 프로토콜을 통해 접근할 수 있다. 사용자는 브라우저에 URL을 입력하고 브라우저는 화면 뒤에서 사용자가 원하는 리소스를 얻기 위해서 적절한 프로토콜을 사용하여 메시지를 전송한다. URL 구조 http://www.test.com/index.html 1) http : 웹 클라이언트가 리소스에 어떻게 접근하는지 알려주는 URL의 스킴이다. HTTP 프로토콜을 사용한다. 2) ..
도입부 많은 사람들이 웹을 통해 개인적인 업무를 보거나 개인적인 데이터에 접근한다. 웹은 이런 편리함을 제공해주지만, 모든 정보나 업무가 공용은 아니기 때문에, 허가된 사람만이 데이터에 접근하고 업무를 처리할 수 있어야한다. 웹 사이트에 있는 개인의 프로필이나 개인이 작성한 문서는 해당 소유자의 동의 없이는 권한 없는 사용자가 볼 수 없어야한다. 그러기 위해서는 서버가 사용자가 누구인지 식별할 수 있어야한다. 서버가 사용자가 누군지 알면, 그 사용자가 어떤 작업이나 리소스에 접근할 수 있는지 결정할 수 있다. 인증이란, 당신이 누구인지 증명하는 것이다. 보통 사용자 이름과 비밀번호를 입력해서 인증한다. HTTP는 자체적인 인증 관련 기능을 제공한다. HTTP의 인증요구/응답 프레임워크 HTTP는 사용자 ..
웹 서버란? 웹 서버는 HTTP 요청(request)을 처리하고 응답(response)을 제공한다. 웹 서버라는 용어는 웹 서버 소프트웨어와 웹페이지 제공에 특화된 장비 모두를 가리킨다. 모든 웹 서버는 리소스에 대한 HTTP 요청을 받아서 콘텐츠를 클라이언트에게 돌려준다. 1) 웹 서버는 HTTP 및 그와 관련된 TCP 처리를 구현한 것이다. 2) 웹 서버는 자신이 제공하는 리소스를 관리하고 웹 서버를 설정, 통제, 확장하기 위한 관리 기능을 제공한다. 3) 웹 서버는 HTTP 프로토콜을 구현하고, 웹 리소스를 관리하고, 웹 서버 관리기능을 제공한다. 4) 웹 서버는 TCP 커넥션 관리에 대한 책임을 운영체제와 나눠갖는다. 5) 다목적 소프트웨어 웹서버 : 네트워크에 연결된 표준 컴퓨터 시스템에서 작동..
에러발견 스프링부트 환경설정을 진행하다가 공통 에러처리를 하는데 발견한 에러였다. 404 eroor가 발생하면 내가 생성한 공통 에러처리 부분을 타야하는데 계속해서 스프링부트에서 제공하는 404 에러페이지가 나왔다. 해결방안 **.yml 파일 안에 아래 코드를 넣어주자. spring: # error 404 mvc: throw-exception-if-no-handler-found: true dispatch-options-request: false
@Override 어노테이션의 사용 자바 코드에서 메소드에만 선언할 수 있는 @Override 어노테이션이 있다. @Override public boolean equals(Object b) { return b.test == test } 위 예제코드로 @Override 어노테이션의 의미를 설명해보자. 상위 타입의 메서드를 재정의했다는 의미인데, 위 예제의 클래스가 Object 클래스(상위 타입)의 equals 메서드를 재정의한 것이다. 기존의 Object 클래스의 equals 메서드가 아닌 해당 메서드를 재선언하여 새로 선언한 로직을 실행하겠다는 의미이다. @Override 어노테이션을 일관되게 사용하면 여러 버그들을 예방할 수 있다. @Override 메서드의 잘못된 사용 예제 main 메서드를 보면 똑..
스프링 DI (Dependency Injection)란? 자바에서 객체를 생성하기 위해서는 Test test = new Test(); 을 사용한다. new 연산자를 사용하여 인스턴스를 생성하는 행위이다. 이와 다르게, DI는 위 코드처럼 객체를 생성시키는게 아닌, 외부에서 객체를 생성해서 주입시켜주는 방식이다. DI는 필요한 객체를 해당 .java 파일 안에서 new 연산자를 통해 생성하는 것이 아닌, 외부에서 생성된 객체 중 필요한 객체를 연결하는 것이다. 필드 주입 결론적으로, 필드 주입을 사용하는 것은 추천하지 않는다. @Autowired private Mapper mapper; 위 코드를 IntelliJ IDE에서 사용하면 @Autowired 에 경고가 뜨게된다. Field injection is..
Map null값 체크 //collections4 compile "org.apache.commons:commons-collections4:4.0" MapUtils를 사용하여 map 객체의 null 체크가 가능하다. Map map = new HashMap; MapUtils.isEmpty(map); MapUtils.isEmpty() /** * Null-safe check if the specified map is empty. * * Null returns true. * * @param map the map to check, may be null * @return true if empty or null * @since 3.2 */ public static boolean isEmpty (final Map map..
src/resources 폴더 안의 파일 읽기 package io.security.basicsecurity.controller; import java.io .*; public class GetFile { public static void main(String[] args) { FileInputStream file = null; BufferedReader br = null; ClassLoader loader = GetFile.class.getClassLoader(); try { file = new FileInputStream(loader.getResource("F1014/file.txt").getFile()); br = new BufferedReader(new InputStreamReader(file, "..
24시간(하루) 이내에 업로드된 데이터 찾기 SELECT COUNT(*) FROM test WHERE created_date > DATE_ADD(now(), INTERVAL -1 DAY); 작성날짜 컬럼 created_date 일때, DATE_ADD(now(), INTERVAL -1 DAY)를 사용하면된다.
ORDER BY - 정렬 ORDER BY idx DESC LIMIT #{offset}, #{limit} DESC : 데이터 내림차순 (idx가 5-4-3-2-1 순으로 내림차순되어 조회된다) ASC : 데이터 오름차순 (idx가 1-2-3-4-5 순으로 오름차순되어 조회된다) -> DESC를 쓰지 않으면 default 값으로 ASC(오름차순)되어 정렬된다. LIMIT - 개수제한 (페이징) Mysql에서는 LIMIT을 사용하여 쉽게 페이징을 구현할 수 있다. LIMIT #{offset], #{limit} 예를들어, offset이 0이고 limit이 10일때, 0번째 데이터부터 10개를 조회한다는 의미이다. 따라서 페이징의 기능을 구현해보고자할때 limit값이 10일때에 하나의 페이지에서 10개씩의 게시글..
mysql에서 검색어를 찾는 select 쿼리를 알아보자 SELECT col1, col2 FROM text WHERE title LIKE CONCAT('%', #{searchText}, '%') 위 쿼리는 검색어 변수 searchText가 null이 아니고, 빈문자열("")이 아닐때 검색어 searchText를 포함하는 제목을 가진 게시글을 찾는다. if test 조건문을 사용하여 검색어가 입력되어있는지, 아닌지 확인하고 검색어가 입력되어있다면 mysql에서는 LIKE CONCAT 을 통해 해당 검색어를 포함한 데이터를 찾을 수 있다. '%'를 searchText의 앞과 뒤에 모두 적어준 이유는 아래와 같다. searchText = "게시글" 일때, AA게시글과 게시글AA를 모두 찾기위함이다.
String의 계속된 인스턴스 생성 자바 코드에서 만약, 하나의 객체의 기능이 반복이 될 경우 해당 객체와 같은 객체를 여러개 만드는 것보다 하나의 객체를 재사용하는 편이 낫다. 잘못된 String 객체 생성 String s = new String("abd"); 위 코드는 잘못된 코드이다. 문법 상으로는 문제가 없지만, 완전히 쓸데없는 행위이다. 생성자에 넘겨진 “abd” 자체와 생성자의 호출로 만들어지는 String 객체가 기능적으로 완전히 똑같기 때문이다. 위 코드 한줄이 반복문같은 여러번 호출되는 코드라면 String 인스턴스를 무의미하게 수백만개 만들 수 있다. 하나의 String 인스턴스 String s = "abd"; 위 코드 한줄로 String 인스턴스 s를 생성하였고, 만약 “abd”가 필..
* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.