lombok.jar 라이브러리 lombok.jar는 외부 라이브러리다. lombok의 기능을 이용하고자 하는 프로젝트의 lib 폴더에 lombok.jar를 추가 해놓는다. lombok을 이용하는 IDE에 설치를 한다. lombok.jar 파일을 IDE.exe가 있는
INDEX(색인) SQL 구문 중 SELECT 처리 속도를 향상 시키기 위해 컬럼에 대해 생성하는 객체이다. 인덱스 내부 구조는 B* 트리(B-star tree) 형식으로 되어 있다. 장점 이진 트리 형식으로 구성되어 자동 정렬 및 검색 속도가 증가한다. 조회 시
DCL (Data Control Language) 데이터를 다루기 위한 권한을 다루는 언어이다. 사용자 계정에 DB, DB객체에 대한 접근 권한을 부여(GRANT)하고 회수(REVOKE)하는 언어. 권한의 종류 1) 시스템 권한 : DB접속, 객체 생성 권한 1
JDBC Java DataBase Connectivity 의 줄임말이다. Java에서 DB에 접근할 수 있게 해주는 Java Programming API 이다. java.sql 패키지에 존재한다. 각 DBMS에 맞는 Driver를 이용해 JDBC Interface에
XML eXtensible Markup Language 의 줄임말이며 단순화된 데이터 기술 형식을 의미한다. XML에 저장되는 데이터 형식은 Key : Value (Map) 형식이다. -> Key, Value 모두 String(문자열) 형식이다. XML 파일을 읽고 쓰기 위한 IO 관련 클래스가 필요하다. Properties Properties 컬렉...
Template JDBC 관련 작업을 위한 코드를 미리 작성해서 제공하는 클래스이다. 반복적인 코드 또는 자주 쓰는 코드를 모아두고 메서드로 처리한 후 다른 클래스에서 필요한 메서드를 호출하여 그 코드를 수행하게끔 한다. 예시) Connection 생성 AutoCo
driver.xml JDBC를 이용하면서 드라이버 / DB 연결 정보를 읽어오는 형식으로 코드를 변경하기 위함. 이유 1. 보안성을 위해 (DB정보, 사용자계정, 비밀번호 등) 이유 2. DB 연결 정보가 변경될 경우 이 파일의 내용을 수정하면 되기 때문에 Java에서 재컴파일을 할 이유가 없다. -> 개발시간 단축. Key : Value 형식이며 작...
Package 구조(MVC) Run 애플리케이션 실행을 위해 main 메서드를 가지고 있는 패키지. View 사용자 인퍼테이스 요소로 사용자의 요청과 응답을 보여주는 화면이다. Controller View를 통해 받은 클라이언트의 요청에 대해 알맞은 Model을
lombok의 @Builder Builder 패턴 -> 특정 값으로 초기화 된 객체를 쉽게 만드는 방법을 제공한다. -> lombok에서 제공하는 @Builder 어노테이션을 DTO에 작성해두면 사용 가능하다. [작성법] 객체.builder().dto필드명(얻어올
sql.xml 이전의 방법으로 DAO 클래스에 String sql = """SELECT ... """; String sql = "SELECT ... "; 와 같이 귀찮은 방법으로 sql문을 작성하고 Statement나 preparedStatement 로 보내고 받았지만 driver.xml과 같이 Properties와 FileInputStream을 이용해...
파일 경로 쉽게 작성하기 기존엔 직접 파일 경로를 적어줘야했다. String filePath = "/폴더경로/파일명.확장자명"; 클래스명.class.getResource("/폴더경로/파일명.확장자명").getPath(); 를 쓰면 컴파일 된 자바 파일인 .class
Framework Framework는 어플리케이션 개발 시 필요한 기본 구조와 뼈대를 제공하는 툴이다. 제공되는 구조에 맞게 코딩을 진행하면 되기 때문에 개발 시간이 줄고 효율적인 개발을 할 수 있다. 코드의 재활용성을 증가 시키기 위해 일련의 클래스 묶음이나 뼈대,
Data 접근 계층 JDBC나 데이터베이스에 연결하는 모듈, 트랜잭션에 해당하는 기능을 담당하며 영속성 프레임워크의 연결을 담당한다. Web 계층(MVC/Remoting) Spring Framework에서 Servlet 등의 웹 구현 기술과의 연결점을 Spring MVC 구성으로 지원 하기 위해 제공되는 모듈 계층. 스프링의 리모팅 기술로 RMI, He...
IOC 제어 반전 프로그램을 구동하는데 필요한 객체에 대한 생성, 변경 등 관리를 프로그램을 개발하는 사람이 아닌 프로그램을 구동하는 컨테이너에서 직접 관리하는 것. 스프링은 IOC를 통해 구동 시 필요한 객체의 생성~생명 주기까지 해당 객체에 대한 관리를 직접 수
Spring Boot Spring MVC Project 구성 시 필요했던 복잡한 환경 설정을 최소화 해 개발자로 하여금 비즈니스 로직 구현에 집중할 수 있게 하기 위해 개발 됨. 장점 내장된 서버(Tomcat)를 제공해 war 배포 없이 독립 실행이 가능한 웹 어플
템플릿 엔진 템플릿 양식과 특정 데이터 모델에 따른 입력 자료를 합성해 결과 문서(응답 화면)를 출력. -> 만들어둔 화면(HTML)에 데이터를 추가해 하나의 HTML로 만들어서 응답. (JSP도 템플릿 엔진) Thymeleaf 웹 및 독립 실행형 환경 모두를 위한
Spring Boot Controller 클래스 위에 쓴다. @Controller -> 요청, 응답 제어를 명시하고 Bean으로 등록한다는 의미. Bean : 스프링이 만들고 관리하는 객체. RequestMapping("주소") - 요청 방식이 POST든 GET이든
"/" 리눅스에선 주소 경로 맨 앞에 "/"가 있으면 빌드 에러가 났지만 그냥 메인 페이지 주소인 "/"만 적는 것은 문제가 되지 않는다.
Model Model은 Spring에서 데이터 전달 역할을 하는 객체다. org.springframework.ui 패키지에 존재하며 기본 scope는 request scope 이다. @SessionAttribute 와 함께 사용 시 session scope로 변환이 가능하다. [작성법] Model.addAttribute("key", value); 단일...
Spring EL : ${key} : 변수, Model 등을 이용해 세팅한 값을 출력할 수 있다. th:text="${속성값}" : 타임리프를 이용해 속성 값을 작성된 태그의 내용(innerText)으로 출력할 수 있다. th:block 태그 : 마땅히 쓸만한 태
MyBatis 데이터의 입력, 조회, 수정, 삭제(CRUD)를 보다 편하게 하기 위해 xml로 구조화한 Mapper 설정 파일을 통해 JDBC를 구현한 영속성 프레임워크. 기존에 JDBC를 통해 구현했던 상당 부분의 코드와 파라미터 설정 및 결과 매핑을 xml 설정
etc @Transactional 트랜잭션 처리를 수행하라는 지시 어노테이션. 정상 코드 수행 시 COMMIT 기본값 : Service 내부 코드 수행 중 RuntimeException 발생 시 rollback rollbackFor 속성 : 어떤 예외가 발생했을 때
mapper.xml (mapper namespace="패키지명.경로") Mapper 인터페이스 경로가 필수로 작성이 되어야한다. 패키지 경로를 포함한 전체 이름으로 작성한다. mapper.xml 파일에 SQL문을 태그로 작성한다. ex) (select id="testTitle" resultType="string") SELECT TODOTITLE FROM...
config.properties Spring Starter로 프로젝트 생성 시 application.properties 라는 프로젝트 전반의 설정을 적용할 수 있는 파일이 있다. 여기에 일반 프로젝트 설정을 적거나 민감한 정보인 DB 서버 연결 정보를 적을 수도 있다. 하지만 민감한 정보는 따로 다른 파일에 작성해 보관한다. (Github에 올라가면 위험...
mybatis-config.xml (setting name="jdbcTypeForNull" value="NULL" /) -> DB INSERT/UPDATE 시 Java의 null 값을 DB의 NULL 로 인식하도록 설정하는 구문. (setting name="mapUnderscoreToCamelCase" value="true" /) -> DB의 _ 표기법...
data-* 데이터에 대한 확장성을 고려하여 설계된 속성이다. JS에서 요소.dataset 을 이용해 해당 값을 얻어와 사용할 수 있다. 태그에 작성한다. 부분 작성은 마음대로 한다. 타임리프와 함께 쓰면 th:data-*="${객체.필드명}" js에서 사용하는 방법 요소.dataset -> data-* 속성에 저장된 값을 반환한다. data-*에 세팅...
ajax Ajax(Asynchronous JavaScript and XML)는 비동기적으로 서버와 브라우저 간 데이터를 교환하는 기술로 웹 페이지를 새로고침하지 않고도 서버로부터 데이터를 받아와 웹 페이지의 일부분을 업데이트 할 수 있도록 해준다. -> 기존에는 웹
어노테이션 정리 @Controller - 요청, 응답 제어 명시 + Bean으로 등록. @RequestMapping("공통 요청 주소 매핑") @Slf4j - 로그를 사용하고자 할 때 사용함.
캐시(Cache) 자주 쓰는 데이터를 임시로 저장해두는 공간. -> 자주 방문하는 사이트의 이미지, CSS, JS 파일 등을 캐시에 저장. -> 다시 방문할 때 서버에서 새로 받지 않고 캐시에 저장된 파일을 불러와 재사용함. -> 웹 사이트 로딩 속도 빠르게 하기 위
로그인 특정 사이트에 아이디/비밀번호 를 입력해서 해당 정보가 있으면 조회/서비스를 이용함. 로그인한 회원 정보를 session에 기록해 로그아웃 또는 브라우저 종료 시까지 해당 정보를 계속 이용할 수 있게 함. @SessionAttributes("key", "k
cookie @RequestParam(value="saveId", required=false) required=false 지정해줌. K:V 형식. 아이디 저장 쿠키 Cookie cookie = new Cookie("saveId, loginMember.getMemberEmail()); cookie.setPath("/"); -> 쿠키가 적용될 경로를 작성...
아이디(이메일)중복 검사 @ResponseBody @GetMapping("checkEmail") public int checkEmail(@RequestParam("memberEmail") String memberEmail) { return service.checkEmail(memberEmail); } mappers SQL (select id="ch...
@RequiredArgsConstructor 이 어노테이션은 lombok에서 지원하며 final로 선언된 필드에 자동으로 의존성 주입(DI)을 설정해준다. (@Autowired 생성자 방식 코드 자동완성.) 일일이 필드에 @Autowired를 써줄 필요가 없어졌다.
암호화 암호화는 해쉬 알고리즘을 이용해 진행된다. -> 데이터를 고정된 길이의 해쉬값(고유 문자열)으로 변환하는 알고리즘이다. 평문이란 암호화가 진행되지 않은 문장을 뜻한다. 암호화의 종류 SHA256 , SHA512 라는 방법도 있지만 서로 다른 유저가 같은 비
이메일 인증번호 보내기 @ResponseBody @PostMapping("signup") public int signup(@RequestBody String email) { String authKey = service.sendEmail("signup", email)
UUID Universally Unique IDentifier 전 세계에서 고유한 식별자를 생성하기 위한 표준. 매우 낮은 확률로 중복되는 식별자를 생성한다. 주로 DB 기본 키, 고유한 식별자를 생성해야할 때 사용한다. private String createAuthKey() { return UUID.randomUUID().toString().sub...
회원 가입 @ModelAttribute Member inputMember @RequestParam("memberAddress") String[] memberAddress RedirectAttributes ra 등을 파라미터로 추가해주고 서비스 호출 int result = service.signup(inputMember, memberAddress); S...
const regExp = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/; 입력된 이메일이 알맞은 형태로 작성되었는지 검사하는 정규식이다. 영어, 숫자, 특수문자(. _ % + - ) 허용 이메일 형식으로 작성. ( +@
async ~ await 동기식 요청 도중에 비동기식 요청을 원할 때 사용할 수 있는 방법이다. async : 비동기 함수를 만들 때 사용하는 키워드이다. -> 이 함수는 오래 걸리는 작업이 있다라는 뜻이다. await : 비동기 작업의 결과를 기다릴 때 사용하는 키
-- 컨트롤러 @SessionAttribute("loginMember") Member loginMember @RequestParam Map(String, Object) paramMap 을 통해 로그인한 회원의 정보와 입력한 값을 얻어온다. int memberNo =
-- 컨트롤러 @RequestParam("memberPw") String memberPw @SessionAttribute("loginMember") Member loginMember SessionStatus status -> 세션 완료 용도의 객체이고 @SessionAttributes 로 등록된 세션을 완료한다. 클래스 위에 @SessionAttribu...
config.properties 설정 spring.servlet.multipart.file-size-threshold=52428800 // 파일 업로드 임계값 52428800Byte = 50MB -> 업로드되는 파일의 크기가 50MB까지는 메모리에 저장했다가 설정값 초과 시 디스크(HDD,SSD)에 저장함. spring.servlet.multipart....
form 태그의 enctype 속성 enctype 데이터를 서버로 전송할 때 데이터의 형태(인코딩)를 지정하는 속성이다. application/x-www-form-urlencoded (기본값이다.) URL 인코딩된 "문자열" 로 서버에 제출된다. multipart/form-data (무조건 POST 에서만 동작한다.) 제출되는 여러 데이터 타입에 맞춰 ...
필터 요청, 응답 시 걸러내거나 추가할 수 있는 객체. [필터 클래스 생성 법] jakarta.servlet.Filter 인터페이스를 먼저 상속 받기. doFilter() 메서드 오버라이딩 하기. public class LoginFilter implements
프로필 사진을 변경하기 위해 필요한 준비 -- 서버 회원 테이블은 이미 있으므로 파일 경로를 저장하기 위한 테이블을 만든다. CREATE TABLE UPLOAD_FILE ( FILE_NO NUMBER PRIMARY KEY, // 파일번호(PK) FILE_PATH VARCHAR2(500) NOT NULL, // 파일 요청 경로 FILEORI...
ERD Entity Relationship Diagram의 약자. DB 설계 과정 중 사용되는 모델링 기법 중 하나다. DB에 저장될 데이터 엔티티들과 그것들간의 관계를 시각적으로 표현해준다. 원하는 엔티티들과 관계를 다 설정했다면 Export 시 사용하는 DB 프로그램 종류를 고르고 CONSTRAINT 설정을 한 다음 Preview 버튼을 클릭하면 내...
여러 SQL을 실행 하는 방법. 하나의 Service 메서드에서 여러 Mapper 메서드를 호출하는 방법. 수행하려는 SQL이 1) 모두 SELECT 이면서 2) 먼저 조회된 결과 중 일부를 이용해 나중에 수행되는 SQL의 조건으로 삼을 수 있을 경우. --
List(MultipartFile) images 5개 모두 업로드 o -> 0 ~ 4번 인덱스에 파일 저장됨. 5개 모두 업로드 x -> 0 ~ 4번 인덱스에 파일 저장 x. 2번 인덱스만 업로드 -> 2번 인덱스만 파일 저장. 0/1/3/4번 인덱스는 저장 x. [단점] 파일이 선택되지 않은 input 태그도 제출됨. (데이터가 없는 채로 제출) ->...
REST API REST(REpresentational State Transfer) API -> 자원(데이터, 파일)을 이름(주소)으로 구분(representational)하여 자원의 상태(State)를 주고 받는 것(Transfer). -> 자원의 이름(주소)를
Scheduling Spring에서 제공하는 스케줄러. 시간에 따른 특정 작업의 순서를 지정하는 방법이다. 설정 방법. *Application.java 파일에 @EnableScheduling 어노테이션을 추가. 스케줄링 동작을 위한 클래스를 작성한다. @Scheduled 속성. fixedDelay : 이전 작업이 끝난 시점으로부터 고정된 시간(ms)...
스프링에서 예외 처리 하는 방법. (우선 순위) 메서드에서 직접 처리. (try ~ catch, throws) 컨트롤러 클래스에서 클래스 단위로 모아서 처리. ( @ExceptionHandler 어노테이션을 지닌 메서드를 작성. ) 별도 클래스를 만들어 프로젝트 단위로 모아서 처리. ( @ControllerAdvice 어노테이션을 지닌 클래스를 작성....
log 기록을 남기는 걸 말한다. 어플리케이션 운영 시 로그의 효율적인 관리가 가능하다. ( 콘솔 또는 특정 파일. ) 로그의 장점. 프로그램 문제 파악에 용이하다. 빠르고 효율적인 디버깅이 가능하다. 수행 내역의 파악이 쉽다. 로그 이력을 파일, DB 등으로 남길 수 있다. 로그의 단점. 로그에 대한 파일 입출력으로 인해 런타임 오버헤드 발생할 수 ...
Aspect-Oriented Programming의 약자. 분산되어 있는 관심사/관점을 모듈화 시키는 기법. - 주요 비즈니스 로직과 관련이 없는 부가적인 기능을 추가할 때 유용 * ex) 코드 중간 중간에 로그 찍을 때, 트랜잭션 처리하고 싶을 때 등 * 주요 어노테이션 - @Aspect : Aspect를 정의하는데 사용되는 어노테이션으로, 클...
SessionHandshakeInterceptor 클래스. WebSocketHandler 가 동작하기 전/후 에 연결된 클라이언트 세션을 가로채는 동작을 작성하는 클래스. @Component 로 Bean 으로 등록해야한다. Handshake : 클라이언트와 서버가 WebSocket 연결을 수립하기 위해 HTTP 프로토콜을 통해 수행하는 초기 단계. =>...
React React는 Facebook에서 개발한 JavaScript 라이브러리. 웹 애플리케이션의 UI를 효율적으로 만들기 위해 사용된다. React를 사용하면 웹 페이지의 복잡한 구조를 관리하기 쉽게 만들어준다. React는 웹뿐만 아니라 모바일 앱 개발(Reac
Context API React 컴포넌트 트리 전체에서 데이터를 공유할 수 있는 방법을 제공함. 중첩된 구조에서 데이터를 전달하는 데 있어 불필요한 props drilling 을 방지할 수 있다. props drilling은 React 컴포넌트 구조에서 하위 컴포넌트로 데이터를 전달하기 위해 상위 컴포넌트를 거치는 것을 말한다. 컴포넌트의 구조가 깊어지...
spread 연산자 (...) : 기존 배열이나 객체의 전체 또는 일부를 다른 배열이나 객체로 복사한다. 참조 타입(배열이나 객체)인 상태(state)는 불변성을 유지해야 하므로 기존 배열을 직접 수정하지 않고 새로운 배열을 생성해야 한다. 불변성을 유지해야하는 이유
스프링부트 프로젝트를 처음 만들 때 gradle에 dependencies에 testRuntimeOnly 'org.junit.platform:junit-patform-launcher' 의존성 추가가 되어있다.