본문 바로가기

전체 글564

UPPER / LOWER UPPER와 LOWER는 SQL에서 문자열의 대소문자를 변환하는 함수입니다.📌 UPPER 함수UPPER 함수는 문자열의 모든 문자를 대문자로 변환합니다.기본 구문UPPER(문자열)문자열: 대문자로 변환할 문자열입니다.사용 예시SELECT UPPER('Hello World') AS result;--결과: HELLO WORLD 설명:'Hello World' 문자열의 모든 문자를 대문자로 변환하여 'HELLO WORLD'를 반환합니다.📌 LOWER 함수LOWER 함수는 문자열의 모든 문자를 소문자로 변환합니다.기본 구문LOWER(문자열)문자열: 소문자로 변환할 문자열입니다.사용 예시SELECT LOWER('Hello World') AS result;--결과: hello world 설명:'Hello Worl.. 2024. 8. 26.
SUBSTR SUBSTR 함수는 SQL에서 문자열의 일부를 추출할 때 사용하는 함수입니다. 원하는 문자열에서 특정 위치부터 지정한 길이만큼의 부분 문자열을 얻을 수 있습니다.📌 기본 구문SUBSTR(문자열, 시작위치, [길이])문자열: 부분 문자열을 추출할 원본 문자열입니다.시작위치: 추출을 시작할 위치를 나타내는 정수입니다.양의 정수일 경우 문자열의 왼쪽부터 계산합니다.음의 정수일 경우 문자열의 오른쪽부터 계산합니다.길이 (선택사항): 추출할 문자 수를 나타내는 정수입니다.생략하면 시작위치부터 문자열의 끝까지를 추출합니다.데이터베이스 시스템에 따라 SUBSTRING이라는 이름으로도 사용됩니다.Oracle, PostgreSQL: SUBSTRMySQL, SQL Server: SUBSTRING📚 사용 예시예시 1: .. 2024. 8. 26.
REPLACE REPLACE 함수는 SQL에서 문자열 내의 특정 부분을 다른 문자열로 바꾸는 데 사용되는 함수입니다. 이 함수는 지정한 문자열을 찾아서 다른 문자열로 대체한 새로운 문자열을 반환합니다.기본 구문:REPLACE(원본문자열, 찾을문자열, 대체할문자열)원본 문자열: 바꾸려는 작업을 수행할 대상 문자열입니다.찾을 문자열: 원본 문자열에서 찾을 부분 문자열입니다.대체 할 문자열: 찾은 문자열을 대체할 새 문자열입니다. 예시:SELECT REPLACE('Hello World', 'World', 'SQL') AS replaced_text FROM dual;이 예시에서는 'Hello World'라는 문자열에서 'World'라는 부분을 찾아 'SQL'로 대체하여, 결과적으로 'Hello SQL'이라는 문자열이 반환됩니.. 2024. 8. 26.
날짜 함수 정의날짜 함수란? 날짜 데이터를 조작하기 위한 함수1. CURRENT_DATE기능: 현재 날짜를 반환합니다.예시: 이 쿼리는 현재 시스템 날짜를 반환합니다.SELECT CURRENT_DATE FROM dual;2. SYSDATE기능: 현재 날짜와 시간을 반환합니다. Oracle에서 주로 사용됩니다.예시: 이 쿼리는 현재 시스템의 날짜와 시간을 반환합니다.SELECT SYSDATE FROM dual;3. NOW()기능: 현재 날짜와 시간을 반환합니다. MySQL에서 주로 사용됩니다.예시: 이 쿼리는 현재 날짜와 시간을 반환합니다.SELECT NOW();4. TO_DATE기능: 문자열을 날짜 형식으로 변환합니다.예시: 이 쿼리는 문자열 '2023-08-25'를 날짜 형식으로 변환합니다.SELECT TO_DA.. 2024. 8. 26.
OUTER JOIN 정의OUTER JOIN란? 두 테이블을 결합할 때 공통된 데이터 뿐만 아니라 한쪽 테이블에만 있는 데이터도 포함하여 결과를 조회하는 방법이다. 종류종류에는 총 3가지 종류가 있다. 먼저  A와 B 테이블을 결합한다고 해보자.LEFT OUTER JOINA 테이블의 모든 행을 포함하고, B 테이블에서 일치하는 데이터가 있으면 결합한다. B 테이블에 일치하는 것이 없으면 'NULL'로 채워진다. RIGHT OUTER JOINB테이블의 모든 행을 포함하고, A 테이블에서 일치하는 데이터가 있으면 결합한다.A 테이블에 일치하는 것이 없으면 'NULL'로 채워진다.FULL OUTER JOIN두 테이블의 모든 행을 포함하며, 일치하는 데이터가 있으면 결합한다.일치하지 않는 데이터는 각각 'NULL'로 채워진다. 주요.. 2024. 8. 26.
INNER JOIN 정의INNER JOIN란? 두 테이블에서 공통된 값을 가진 행들만 결합하여 조회한다. 주요 기능공통된 값을 가진 행들만 결합하여 조회 한다.예시[기본 구조]-- 방법 1SELECT 조회할 데이터 열들FROM 비교할 테이블1INNER JOIN 비교할 테이블2ON 비교할 조건(공통으로 갖고 있는 조건)-- 방법 2SELECT 조회할 데이터 열들FROM 비교할 테이블들(2개)WHERE 비교할 조건(공통으로 갖고 있는 조건) [사용 예시]SELECT A.VIDEO_NAME, A.CATEGORY, B.CAST_MEMBER FROM NETFLIX A, NETFLIX_CAST BWHERE A.VIDEO_NAME = B.VIDEO_NAME ;-- 넷플릭스 테이블과 넷플릭스 캐스트 테이블의 비디오 이름이 같은 것만 .. 2024. 8. 26.
GROUP BY 정의SELECT란? 데이터를 특정한 열을 기준으로 그룹화하여 집계하여 사용하는 절이다. 주요 기능데이터를 특정한 열을 기준으로 그룹화하여 집계하여 사용한다.예시[기본 구조]SELECT 열1, 집계함수(열2)FROM 테이블명GROUP BY 열1;--SELECT 결과로 출력할 열, 집계함수(집꼐할 열) --FROM 테이블명 --GROUP BY 그룹화할 열; [사용 예시]SELECT CATEGORY, COUNT(*) FROM NETFLIX GROUP BY CATEGORY;-- CATEGORY(카테고리)별로 그룹화하여, 각 카테고리의 모든 데이터 개수를 출력SELECT CATEGORY, SUM(VIEW_CNT) FROM NETFLIX GROUP BY CATEGORY ;-- CATEGORY(카테고리)별로 그룹화하.. 2024. 8. 26.
ORDER BY 정의ORDER BY란? 특정 열을 기준으로 정렬할 때 사용하는 절이다. 주요 기능데이터를 정렬할 때 사용한다.예시[기본 구조]SELECT 열1, 열2, ...FROM 테이블명ORDER BY 열1 [ASC|DESC], 열2 [ASC|DESC], ...; [사용 예시 - 열 1개]SELECT * FROM NETFLIX ORDER BY REG_DATE ASC;--REG_DATE열을 오름차순으로 정렬하여 조회한다. (ORDER BY의 기본값은 오름차순이기 때문에 ASC 생략가능)SELECT * FROM NETFLIX ORDER BY REG_DATE DESC;--REG_DATE열을 내림차순으로 정렬하여 조회한다.SELECT * FROM NETFLIX ORDER BY VIDEO_NAME DESC;--VIDEO_NA.. 2024. 8. 26.
WHERE 정의WHERE이란? 쿼리문에 조건을 부여한다. 주요 기능쿼리문에 조건을 부여한다.예시[사용 예시 - WHERE 1개]SELECT * FROM NETFLIX WHERE CATEGORY ='애니메이션'; -- 카테고리가 애니메이션인 데이터 조회 --SELECT * FROM NETFLIX WHERE CATEGORY IN ('애니메이션','영화'); -- 카테고리가 애닌메이션 또는 영화인 데이터 조회--SELECT * FROM NETFLIX WHERE CATEGORY NOT IN ('애니메이션','영화'); -- 카테고리가 애닌메이션 또는 영화가 아닌 데이터 조회--SELECT * FROM NETFLIX WHERE VIEW_CNT   [사용 예시 - WHERE 2개]SELECT * FROM NETFLIX WHE.. 2024. 8. 26.
SELECT 정의SELECT란? 데이터를 조회할 떄 사용하는 가장 기본적이고 중요한 명령어이다. 주요 기능데이터를 조회한다.예시[기본 구조]SELECT 열1, 열2, ...FROM 테이블명WHERE 조건; [사용 예시]SELECT * FROM NETFLIX n ; --모든 데이터 출력SELECT * FROM NETFLIX n WHERE VIDEO_NAME = '나의 아저씨'; --비디오 이름이 나의 아저씨 인것만 출력SELECT * FROM NETFLIX n WHERE VIDEO_NAME '나의 아저씨'; --비디오 이름이 나의 아저씨가 아닌 나머지 데이터 모두 출력SELECT * FROM NETFLIX n WHERE REG_DATE > SYSDATE-30; --최근 한달동안 등록된 데이터를 출력SELECT * F.. 2024. 8. 26.
DELETE 정의DELETE이란? 테이블의 특정 행을 삭제할 떄 사용하는 명령어이다. 주요 기능특정 행을 삭제한다.예시[기본 구조]DELETE FROM 테이블명WHERE 조건; -- 삭제하고 싶은 행을 가르키는 조건-- 만약 카테고리가 드라마이면서 조회수가 35 아래인 것을 삭제하고 싶다면?-- -> WHRER CATEGORY = '드라마' AND VIEW_CNT  [사용 예시]DELETE FROM studentsWHERE name = 'John';COMMIT; 2024. 8. 26.
UPDATE 정의UPDATE이란? 기존 데이터를 수정할 때 사용하는 명령어이다. 주요 기능데이터를 수정한다.예시[기본 구조]UPDATE 테이블명SET 컬럼1 = 값1, 컬럼2 = 값2, ... //어떤 열을 변경할지(세로)WHERE 조건; //어떤 행을 변경할지(가로)COMMIT; [사용 예시]UPDATE studentsSET age = 21WHERE name = 'John';COMMIT; 2024. 8. 26.
INSERT 보호되어 있는 글 입니다. 2024. 8. 26.
DROP/TRUNCATE 정의DROP이란? 테이블을 제거하거나 데이터를 삭제하는데 사용된다. 주요 기능테이블 자체를 완전히 삭제한다.테이블 구조(스키마)와 모든 테이터를 제거한다.예시DROP TABLE my_table;정의TRUNCATE이란? 테이블을 제거하거나 데이터를 삭제하는데 사용된다. 주요 기능테이블의 모든 테이터를 삭제하지만, 테이블의 구조는 그대로 남겨둔다.즉, 테이블을 다시 사용하려면 새 데이터를 삽입할 수 있다.TRUNCATE TABLE my_table;  주요 차이점DROP: 테이블 전체(구조와 데이터)를 제거한다.TRUNCATE: 테이블 구조는 남겨두고 데이터만 모두 삭제한다. 2024. 8. 26.
ALTER 정의:ALTER란? SQL에서 데이터베이스  객체(테이블, 뷰, 인덱스)를 수정할 떄 사용하는 명령어 주요 기능:테이블 구조 변경: 테이블에 새로운 열(Column)을 추가하거나, 기존 열의 데이터 유형을 변경하거나, 열을 삭제하는 등의 작업을 할 수 있다.기타 변경 작업: 인덱스 추가, 기본 키 설정 변경, 제약 조건 추가 등도 가능하다. SELECT * FROM NETFLIX n ; -- 넷플릭스 테이블 전체 조회 --ALTER TABLE NEFLIX ADD (CAST_MEMBER VARCHAR2(20)); -- 새로운 컬럼 추가 --ALTER TABLE NEFLIX MODIFY (CAST_MEMBER VARCHAR2(50)); -- 추가한 컬럼 사이즈 변경 --ALTER TABLE NEFLIX MO.. 2024. 8. 26.
CREATE [주요 SQL 데이터 유형과 그에 해당하는 키워를 정리한 표]데이터 유형키워드설명문자열VARCHAR(n)가변 길이 문자열, 최대 n 글자까지 저장 가능 CHAR(n)고정 길이 문자열, 길이가 부족할 경우 공백으로 채움 TEXT매우 긴 문자열, 길이 제한 없음숫자INT정수 BIGINT아주 큰 정수 SMALLINT작은 범위의 정수 DECIMAL(p, s)소수점이 있는 숫자, p는 전체 자릿수, s는 소수점 이하 자릿수 FLOAT부동 소수점 숫자날짜와 시간DATE날짜 (YYYY-MM-DD 형식) TIME시간 (HH:MM:SS 형식) DATETIME날짜와 시간 (YYYY-MM-DD HH:MM:SS 형식) TIMESTAMP날짜와 시간, 자동으로 현재 시간 기록 가능논리형BOOLEAN참(true) 또는 거짓(fal.. 2024. 8. 25.
테이블 테이블은 데이터베이스에서 정보를 정리해서 저장하는 큰 표 같은 것이다. 이 표는 가로줄(행)과 세로줄(열)로 이루어져 있다.행(Row): 테이블에서 가로로 있는 줄로, 하나의 데이터를 의미한다. 예를 들어, 친구 명단이 있는 표에서는 한 명의 친구에 대한 정보가 하나의 행이 된다.열(Column): 테이블에서 세로로 있는 줄로, 각 열은 특정한 종류의 정보를 나타낸다. 예를 들어, 친구 명단에서 "이름", "나이", "전화번호" 같은 것이 각각 하나의 열이 된다.예를 들어, 친구들의 정보를 저장하는 테이블이 있다고 하면, 다음과 같이 생길 수 있다: 번호이름나이전화번호1철수14010-1234-56782영희13010-8765-4321 2024. 8. 25.
회원 관리 - 프론트) 3. 모든 회원 조회하기 1. 멤버 컨트롤러에 회원 조회 처리 메소드 추가하기@GetMapping("/members")public String list(Model model) { List members = memberService.findMembers(); model.addAttribute("members", members); return "members/memberList";} [작동 방식]1. 리스트에 서비스 메소드인 findMemebers를 이용해 모든 회원을 저장한다.2. model(컨트롤러가 뷰로 데이터를 전달할 때 사용하는 객체)에 members라는 키로 members 리스트를 저장3. 회원 목록화면 렌더링 2. HTML 작성파일 경로: main/resources/templates/member/memb.. 2024. 8. 25.
회원 관리 - 프론트) 2. 회원 등록하기 1. 파일 생성파일 경로: main/java/파일명/Controller/MemberForm 해당 경로로 MemberForm.java를 만들어준다. package section4.section4_spring.controller;public class MemberForm { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; }} 해당 파일을 만든 이유는 폼을 들어올 데이터를 처리하기 위해서 이다.  2. 멤버 컨트롤러에 메서드 추가//URL 진입 시 처리될 코드@GetMapping("/members/ne.. 2024. 8. 25.
회원 관리 - 프론트) 1. 홈화면 추가하기 1. 파일 생성파일 경로: main/java/파일명/Controller/HomeController 해당 경로로 HomeController.java를 만들어준다.  2. 홈 컨트롤러 추가package hello.hellospring.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.GetMapping;@Controllerpublic class HomeController { @GetMapping("/") public String home() { return "home"; }} 위의 코드를 간단하게 설명하자면 /라는 경로로 들어오면 home.. 2024. 8. 25.
스프링 빈 등록하기 - 2. 자바코드로 직접 빈 등록하기 컴포넌트를 이용하는 방법은 자동으로 빈을 등록해주는 것이었다. 이번에는 자바 코드로 직접 빈을 등록해보자. ❓왜 자동이 있는데 수동으로 빈을 등록하는가?❓-> 세밀한 제어, 외부 라이브러리 통합 등 복잡하고 특정한 요수사항을 처리할 수 있다는 점이 있다. -> 우리가 수동으로 빈을 등록하는 것을 채택한 가장 큰 이유는 나중에 Repository에서 DB로 쉽게 변경하기 위해서 이다.   1. 자바를 작성할 config 파일 만들기파일 경로: src/main/java/SpringConfig 해당 경로에 SpringConfig 파일을 만든다. 2. 코드 작성하기 package section4.section4_spring;import org.springframework.context.annotation.Bea.. 2024. 8. 25.
스프링 빈 등록하기 - 1. 컴포넌트 스캔과 자동 의존관계 설정 private final MemberRepository memberRepository = new MemoryMemberRepository();기존에 필요한 객체가 있다면 위의 코드와 같이 직접 객체를 만들어와서 사용해왔다.  다만, 이렇게 할 경우 아래의 단점 들이 생기게 된다. 1. 높은 결합도: 클래스들이 서로 강하게 연결되어, 변경이 어려워집니다.2. 유연성 부족: 다른 구현체(클래스)로 쉽게 교체하기 어렵습니다.3. 테스트 어려움: 테스트할 때 실제 객체를 사용해야 하므로 느려지고 복잡해집니다.4. 가독성 및 유지보수성 저하: 코드에서 의존성을 파악하기 어렵고, 관리가 힘들어집니다.5. 재사용성 저하: 특정 상황에 맞게 유연하게 재사용하기 어렵습니다.  따라서 우리는 @Component와 @Au.. 2024. 8. 25.
회원관리 - 백엔드 개발) 4. 회원 서비스 테스트하기 우선 테스트하기 전 조치를 해야할 것이 있다.  MemberService memberService = new MemberService();MemoryMemberRepository memberRepository = new MemoryMemberRepository();우리는 위의 코드와 같이 필요할 때마다 객체를 새로 만들어 주고 있다. 다만 이렇게 되었을 때의 문제 점은 테스트 할 때마다 매번 새로운 객체를 만들면 테스트 간에 공유해야 할 데이터나 상태가 초기화되어 일관성이 없는 결과가 나올 수 있다.  즉, 한 객체에 데이터를 저장한 후 다른 테스트에서 그 데이터를 확인해야 하는데, 객체가 새로 만들어지면 이전 데이터가 사라져서 테스트가 실패할 수 있다.   따라서 우리는 DI(Dependency Inj.. 2024. 8. 25.
회원관리 - 백엔드 개발) 3. 회원 서비스 개발하기 💡 서비스란, 비즈니스 로직을 처리하는 계층을 말한다. 즉, 사용자를 등록하거나 주문을 처리하는 비즈니스 로직 이 여기에 담긴다. 컨트롤러에서 요청을 받으면, 서비스가 일을 처리하고, 필요하면 데이터베이스와 연결해 데이터를 가져오거나 저장한다. 파일 경로: src/main/java/만든 파일명/service(만들어야함)/MemberService package section4.section4_spring.service;import section4.section4_spring.domain.Member;import section4.section4_spring.repository.MemberRepository;import section4.section4_spring.repository.MemoryMemberR.. 2024. 8. 24.
회원관리 - 백엔드 개발) 2. 각각의 repository 메소드 테스트 하기 test폴더를 통해서 테스트를 해보자.파일 경로: test/java/만든 파일명/repository/MemoryMemberRepositoryTest [MemoryMemberRepositoryTest.java]package section4.section4_spring.repository;import org.junit.jupiter.api.Assertions;import org.junit.jupiter.api.Test;import section4.section4_spring.domain.Member;import java.util.List;import static org.assertj.core.api.Assertions.*;class MemoryMemberRepositoryTest { MemoryMemb.. 2024. 8. 24.
회원관리 - 백엔드 개발) 1. 회원 도메인과 Repository 만들기 1. 도메인 만들기💡 도메인이란, 애플리케이션이 다루는 비즈니스 문제 영역과 그 영역을 표현하는 객체들을 의미한다. 파일위치: src/main/java/만든 파일명/domain(직접 만들어야하는 패키지)/Member [Member.java] package section4.section4_spring.domain;public class Member { private Long id; private String name; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; .. 2024. 8. 24.
JSON 데이터를 직접 반환하여, 템플릿을 거치지 않고 API 응답을 처리하기(API 활용하여 개체 JSON으로 반환하기) (파일 경로: src/main/java/hello_spring/controller/HelloController) 특정 경로로 전달된 특정 매개변수 값을 받아 JSON으로 반환하기@GetMapping("hello-api")@ResponseBodypublic Hello helloString(@RequestParam("name") String name){ Hello hello = new Hello(); hello.setName(name); return hello; //객체 반환}static class Hello { private String name; public String getName() { return name; } public void setName(.. 2024. 8. 24.
HTML 페이지 렌더링 시 요청받은 데이터 포함하기(매개변수를 MVC패턴으로 전달해 렌더링하기) 1. MVC 패턴을 이용하여 특정 경로로 들어오는 GET 요청 처리하는 컨트롤러 만들기(파일 경로: src/main/java/hello_spring/controller/HelloController) @GetMapping("hello-mvc")public String helloMvc(@RequestParam("name") String name, Model model){ model.addAttribute("name", name); return "hello-template";}  코드를 하나씩 해석보자. @GetMapping("hello-mvc")-> /hello-mvc 경로로 들어오는 HTTP GET 요청을 처리할 메서드를 지정합니다. public String helloMvc(@RequestPar.. 2024. 8. 24.
HTML 페이지 렌더링 시 고정된 데이터 포함하기(MVC와 템플릿엔진 이용해보기) 1. Welcome Page 만들기 (파일 경로: src/main/resources/static/index.html) 아래의 html을 구성해서 간단한 Welcome Page를 만들어보자.HelloVisit Hello Page  2. MVC 패턴을 이용하여 특정 경로로 들어오는 GET 요청 처리하는 컨트롤러 만들기(파일 경로: src/main/java/hello_spring/controller/HelloController) package hello.hello_spring.controller;import org.springframework.ui.Model;import org.springframework.stereotype.Controller;import org.springframework.web.bind... 2024. 8. 24.
에어컨 절감 어플 - Save on bills 보호되어 있는 글 입니다. 2024. 8. 9.