별 내용 없음JREJava Runtime Environment실행만을 위한 환경라이브러리 포함JDKJava Development KitJRE에 컴파일 등 각종 프로그램 포함단순하고 객체지향이며 친숙단순함이란 자바의 기본 컨셉을 배우는 게 쉽다는 것다형성, 캡슐화 등 객
메소드 인자메소드 내에서 사용하는 변수. 메소드를 호출할 때 호출하는 쪽에서 변수 값을 전달해준다.유효 범위는 선언되어 있는 메소드 내로 한정.메모리 상에서는 stack 영역에 저장된다.지역 변수메소드 또는 블록 내에 선언되는 변수.유효 범위 역시 선언되어 있는 메소드
자바는 수를 2진수로 변환하여 저장한다. 10진수로 표현하였을 때는 유한소수지만 2진수로 변환했을 때 무한 소수가 되는 수도 있다. 이 경우에는 근사값을 저장하게 되며 근사값과 원래 값의 오차에 기인하여 0.1 + 0.2 ≠ 0.3 과 같은 결과가 나올 수 있다.Big
유일하게 import하지 않아도 사용할 수 있는 패키지Byte, Short, Integer, Long, Float, Double, Character, BooleanCharacter, Boolean을 제외한 클래스들은 Number라는 추상 클래스를 확장기본 자료형처럼 사
암호화 알고리즘을 이용해 평문의 데이터를 암호문으로 변환하는 것.반대로 암호문을 평문으로 변환하는 과정을 복호화(해독, Decryption)라고 한다.DB에 고객의 데이터를 평문의 데이터로 저장하면 DB의 데이터가 해커로부터 도용 당했을 때 고객의 데이터가 유출되어 악
자바 9부터 지원되기 시작한 String 객체의 새로운 저장 방식.char\[]을 사용해 문자열을 저장하는 것이 아니라 byte\[]을 저장하는 것이 특징이다.0001기본적으로 자바의 char 자료형은 UTF-16 인코딩 방식을 사용하기 때문에 자료형의 크기가 2 by
@RestController@Controller 는 반환 값이 String 이면 뷰 이름으로 인식. 뷰를 찾고 뷰가 랜더링.@RestController 는 반환 값으로 뷰를 찾지 않고, HTTP 메시지 바디에 바로 입력.@ResponseBody 와 관련있다.@Reque
Junit은 테스트 도중에 하나의 테스트 메소드로 인한 테스트 인스턴스의 상태 변화가 다른 테스트 메소드에 영향을 끼치는 것을 막기 위해 각 메소드 실행 전에 테스트 인스턴스를 새로 생성하여 테스트 메소드를 호출한다. 하지만 테스트 인스턴스와는 별개로 테스트에 사용되
@ModelAttributeGET 요청의 요청 파라미터나 POST 요청의 메시지 바디의 내용을 받아서 객체로 변환시켜준다.변환된 객체를 모델에 추가해준다.HelloData 객체를 생성하여 요청 파라미터 이름으로 HelloData 객체의 프로퍼티를 찾는다. 그리고 해당
자바의 배열 타입은 다른 클래스들처럼 명시적으로 클래스 파일이 존재하지 않는다. 자바 언어의 특수적인 기능에 의해 동적으로 객체가 생성되는 것이다.배열은 클래스가 아니다. 동적으로 생성되는 객체다.jls-10Array types are not classes, but a
서버(스프링)이 응답 데이터를 만드는 방법은 3가지다.정적 리소스웹 브라우저에 HTML, css, js를 제공하는 경우뷰 템플릿 사용동적으로 HTML을 생성하여 제공하는 경우HTTP 메시지 바디 사용HTTP API를 제공하는 경우 HTTP 응답 메시지의 바디에 JSON
Remote Procedure Communication.별도의 원격 통신 제어에 대한 코딩 없이 다른 주소 공간에 존재하는 프로시저를 실행할 수 있는 프로세스 간 통신 기술(IPC, Inter-Process Communication)원칙적으로 프로세스는 자신의 주소 공
상위 클래스의 캡슐화 약화 -> 강한 결합도상위 클래스의 캡슐화가 약화되어 하위 클래스가 상위 클래스의 구현에 의존하게 되면 상위 클래스와 하위 클래스는 강한 결합을 가지게 된다.둘의 결합도가 강해지면 상위 클래스의 코드 변경 시 하위 클래스가 많은 영향을 받게 된다.
HTTP 메시지 컨버터 HTTP 메시지 컨버터는 HTTP 메시지 바디의 내용을 객체로 변환하거나 혹은 그 반대로 변환하는 역할을 담당한다. 정적 리소스를 전송하거나 뷰 템플릿으로 동적으로 생성한 HTML을 메시지 바디에 담아서 전송하는 건 제외. 스프링 MVC는
애플리케이션 서버와 DB는 다음의 과정을 통해 데이터를 주고 받는다.커넥션 연결TCP/IP를 사용해 커넥션을 연결한다.SQL 전달결과 응답문제점DB마다 커넥션을 연결하고 SQL을 전달하고 결과를 응답하는 코드가 모두 다르다.DB를 변경하면 애플리케이션 서버의 DB 관련
데이터베이스 커넥션을 매번 획득데이터베이스 커넥션을 매번 획득애플리케이션 로직을 수행할 때마다 DB 커넥션을 새로 생성하는 것은 시간을 너무 많이 소모하고 리소스도 너무 많이 소모한다.사용자 응답 시간이 길어짐.DB와 TCP/IP 연결할 때마다 3 way handsha
목록성 데이터를 처리하는 자료 구조를 통칭Collection 인터페이스Iterable<E> 인터페이스를 확장Iterator 인터페이스를 사용해 데이터를 순차적으로 가져올 수 있다.순서가 있다.List를 구현하는 클래스들ArrayList확장 가능한 배열Thread
트랜잭션이란?일련의 작업을 하나의 작업처럼 간주하는 것트랜잭션 내의 모든 작업이 성공하면 트랜잭션은 성공.트랜잭션 내의 하나의 작업이라도 실패하면 트랜잭션은 실패.커밋(Commit)트랜잭션 내의 모든 작업이 성공해 트랜잭션의 성공 결과를 DB에 반영하는 것.롤백(Rol
중복을 방지하고, 어떤 데이터가 존재하는지 확인하기 위한 용도Set 인터페이스를 구현한 클래스HashSet순서가 필요 없음. 가장 성능 좋음TreeSet데이터 값에 따라 정렬. HashSet보다 성능 약간 느림LinkedHashSet연결된 목록 타입의 해시 테이블에 데
키와 값이 1:1로 매칭된 자료구조키는 중복되면 안 된다.HashMap, TreeMap, LinkedHashMap을 주로 사용HashTableMap을 구현한 클래스지만 다른 구현 클래스들과 특징이 다름HashMap과 HashTable의 차이HashMap의 상속 관계ja
트랜잭션 사용법데이터 변경 쿼리(등록, 수정, 삭제) 실행 후 변경 데이터를 DB에 반영하려면 커밋 호출, 반영하지 않으려면 롤백 호출커밋을 호출하기 전까지는 임시로 데이터를 저장 \- 트랜잭션을 시작한 세션을 임시 데이터 확인 가능 \- select 쿼
PreparedStatement를 설명하기 앞서 SQL Injection을 알아보자.원래 의도된 SQL문에 악의적인 SQL문을 주입하여 데이터베이스가 비정상적으로 동작하도록 하는 공격 기법.가장 대표적인 공격 기법이 Error based SQL Injection이다.논
순수한 서비스 계층웹 애플리케이션은 보통 컨트롤러, 서비스, 리포지토리 계층으로 나뉜다.컨트롤러UI 관련 처리 담당요청, 응답 담당요청으로부터 들어오는 데이터 검증서비스비즈니스 로직 담당리포지토리DB 접근 담당왜 3가지 계층으로 나눌까?서비스 계층을 특정 기술로부터 격
스프링이 제공하는 트랜잭션 매니저를 코드에 직접 적용해보자.DataSourceUtils커넥션 동기화를 고려해 커넥션 객체를 반환하고 종료한다.DataSourceUtils.getConnection(dataSource);트랜잭션 동기화 매니저에 동기화된 커넥션이 있으면 그
트랜잭션 매니저를 사용하면 서비스 계층이 특정 DB 접근 기술의 트랜잭션 처리 코드에 의존하지 않아도 되고 커넥션 동기화를 쉽게 이용할 수 있다.트랜잭션 매니저의 한계트랜잭션 매니저를 사용하더라도 트랜잭션을 시작하고, 비즈니스 로직을 수행하고, 성공하면 커밋하고, 실패
@Transactional은 메소드, 클래스에 붙힐 수 있다.클래스에 붙히면 외부에서 호출 가능한 public 메서드에 모두 트랜잭션 AOP가 적용.@Transactional을 적용해 트랜잭션 AOP를 사용하기 위해서는 스프링 컨테이너가 필요하다.@Transaction
체크 예외 처리try-catch로 잡거나 throws를 명시적으로 선언해 외부로 넘겨야 한다.체크 예외의 장단점장점개발자가 누락할 수 있는 예외 처리 로직을 컴파일러가 잡아준다.단점일일히 예외처리를 해야 하므로 코드가 지저분해지고, 예외에 대한 의존관계가 생긴다.log