오늘 진행한 학습 요약
1. 베이직반 강의 ( 2회차 - Spring Controller )
- Spring Boot의 설정
- RESTful API 설계
- @PathVariable, @RequestParam, @ModelAttribute, @RequestBody
2. 베이직반 강의 ( 3회차 - 데이터베이스 )
- 데이터베이스 정규화와 Spring JDBC 기초
- 1정규화 (1NF): 데이터의 원자성 유지하기
- 2정규화 (2NF): 부분적 종속성 제거하기
- 3정규화 (3NF): 이행적 종속성 제거하기
- BCNF (Boyce-Codd Normal Form): 추가적인 중복성 제거
- 4정규화 (4NF): 다치 종속성 제거하기
- 5정규화 (5NF): 조합적 종속성 제거하기
- 정규화 요약과 실전에서의 적용
- SQL 기초와 JOIN
- SQL 소개와 기본 개념
- 데이터 정의 언어(DDL)
- 데이터 조작 언어(DML)
- JOIN의 이해와 종류
- Spring JDBC를 활용한 SQL과 JOIN
2. 알고리즘 코드카다 Day32~34(작성 생략)
CodingTest Git-hub 링크 : https://github.com/chews26/CodingTest
학습 정리
1. 베이직반 강의 ( 2회차 - Spring Controller )
- Spring Boot의 설정
- build.gradle 파일은 Gradle 빌드 도구를 사용하는 프로젝트에서 매우 중요한 역할
- Gradle은 자바, 코틀린 등을 비롯한 여러 언어의 프로젝트를 위한 오픈소스 빌드 자동화 시스템
- build.gradle의 구조와 역할
- 프로젝트 설정 (Project Configuration)
- 의존성 관리 (Dependencies Management)
- 플러그인 (Plugins)
- 태스크 설정 (Task Configuration)
- 빌드 설정 (Build Configuration)
- RESTful API 설계
- REST(Representational State Transfer)는 웹 표준을 기반으로 하는 API 설계 아키텍처
- RESTful API는 네트워크 상에서 클라이언트와 서버 간의 통신을 위해 자원(Resource)의 상태를 전달하는 방법을 정의
- 클라이언트가 서버의 자원에 접근하고 이를 활용할 수 있도록 하는 역할
- 자원 중심의 URI 설계
- 각 자원은 명확한 URI로 식별되어야 함
- 자원은 동사가 아닌 명사를 사용
- HTTP 메서드를 통한 행위 정의
- GET: 자원을 조회
- POST: 새로운 자원을 생성
- PUT: 자원을 업데이트
- DELETE: 자원을 삭제
- 데이터 포맷
- JSON(JavaScript Object Notation) 형식을 통해 데이터를 교환하는 것이 트렌드
- XML보다 가볍고, 인간이 읽기 쉬움
JSON
{
"판매자정보": {
"이름": "남도일",
"지역": "서울"
},
"판매품목": [
"사과",
"배",
"딸기"
]
}
- @PathVariable, @RequestParam, @ModelAttribute, @RequestBody
- @PathVariable
- @PathVariable은 URL 경로에 포함된 변수를 컨트롤러 메서드의 매개변수로 바인딩하는 데 사용
- URL 경로의 일부를 변수로 사용하여, 동적으로 변하는 URL 경로를 처리
- 간결하고 직관적인 API 경로를 설계
- @RequestParam
- @RequestParam은 클라이언트가 전송하는 HTTP 요청 파라미터를 컨트롤러 메서드의 매개변수로 바인딩하는 데 사용
- URL에서 지정된 이름의 파라미터를 메서드 매개변수로 전달
- 필수 여부, 기본값 설정 등의 추가적인 설정이 가능
- @ModelAttribute
- @ModelAttribute는 요청 파라미터를 객체로 매핑하여, 복잡한 데이터 구조를 쉽게 다루게 해줌
- 폼 데이터의 각 필드가 객체의 필드와 자동으로 매핑
- 복잡한 객체 구조의 데이터를 간편하게 처리
- @RequestBody
- @RequestBody는 클라이언트가 전송하는 HTTP 요청의 본문(body)을 Java 객체로 변환하여 받음
- HTTP 요청 본문의 내용을 자바 객체로 역직렬화
- 주로 JSON형식의 데이터 처리에 사용
- @PathVariable
1. 베이직반 강의 ( 3회차 - 데이터베이스 )
데이터베이스 정규화와 Spring JDBC 기초
- 데이터베이스란 데이터를 체계적으로 저장하고 관리하는 시스템
- DBMS(Database Management System)는 이러한 데이터베이스를 관리하는 소프트웨어
- 정규화(Normalization)는 데이터의 중복을 최소화하고 일관성을 유지하기 위한 데이터베이스 설계 기법
- 이상 현상(Anomalies)을 방지하여 데이터의 무결성을 확보(삽입 이상, 삭제 이상, 갱신 이상)
- Spring JDBC는 Java 애플리케이션에서 데이터베이스 작업을 쉽게 할 수 있도록 도와주는 라이브러리
SQL 쿼리를 실행하고 결과를 매핑하여 객체로 변환하는 과정을 단순화- 1정규화 (1NF): 데이터의 원자성 유지하기
- 원자성(Atomicity): 하나의 칸(셀)에 하나의 값만 저장
- 1정규화는 모든 테이블의 필드가 원자값을 가지도록 보장
- 2정규화 (2NF): 부분적 종속성 제거하기
- 부분적 종속성 제거: 기본 키의 일부가 아닌 전체에 종속되도록 함
- 복합 키를 사용하는 테이블에서 발생
- 3정규화 (3NF): 이행적 종속성 제거하기
- 이행적 종속성 제거: 기본 키가 아닌 컬럼이 다른 기본 키가 아닌 컬럼을 결정하지 않도록 함
- 기본 키 → A → B 형태의 종속성을 제거
- BCNF (Boyce-Codd Normal Form): 추가적인 중복성 제거
- BCNF는 보이스-코드 정규형으로, 3정규화보다 더 엄격한 형태
- 모든 결정자가 후보 키가 되도록 설계
- 결정자: (코스, 강사) → 시간, 하지만 강사만으로도 시간을 결정할 수 있습니다.
- 4정규화 (4NF): 다치 종속성 제거하기
- 다치 종속성 제거: 하나의 테이블에 여러 개의 다치 종속성이 존재할 때 이를 분리
- 다치 종속성: 한 키에 대해 여러 값이 독립적으로 존재하는 경우
- 5정규화 (5NF): 조합적 종속성 제거하기
- 조합적 종속성 제거: 테이블을 가능한 한 분해하여 데이터 중복을 최소화
- 모든 조합 가능한 종속성을 고려하여 분해
- 정규화 요약과 실전에서의 적용
- 1정규화: 모든 필드는 원자값을 가져야 합니다.
- 2정규화: 부분적 종속성을 제거합니다.
- 3정규화: 이행적 종속성을 제거합니다.
- BCNF: 모든 결정자가 후보 키가 되도록 합니다.
- 4정규화: 다치 종속성을 제거합니다.
- 5정규화: 조합적 종속성을 제거합니다.
- 성능 향상을 위해 비정규화(Denormalization)를 적용하기도 함
- JOIN 연산의 감소로 인한 조회 속도 향상
- 데이터 중복을 허용하여 캐싱 효율성 증가
- 1정규화 (1NF): 데이터의 원자성 유지하기
SQL 기초와 JOIN
- SQL 소개와 기본 개념
- SQL(Structured Query Language)은 관계형 데이터베이스 관리 시스템(RDBMS)에서 데이터를 관리하고 조작하기 위한 표준 프로그래밍 언어
- 데이터 정의, 데이터 조작, 데이터 제어 등을 수행할 수 있음
- 관계형 데이터베이스
- 데이터를 테이블(Table) 형태로 저장하며, 테이블 간의 관계를 정의
- 엑셀 시트와 비슷한 형태로 데이터를 저장하지만, 더 구조화되고 관계를 정의
- RDBMS 종류
- MySQL, PostgreSQL, Oracle, SQL Server 등
- 데이터 정의 언어(DDL)
- 데이터베이스의 구조를 정의하거나 변경할 때 사용하는 언어
- 주요 명령어: CREATE, ALTER, DROP
- 데이터 조작 언어(DML)
- 데이터베이스에 저장된 데이터를 조작할 때 사용하는 언어
- 주요 명령어: SELECT, INSERT, UPDATE, DELETE
- JOIN의 이해와 종류
- 두 개 이상의 테이블을 연결하여 데이터를 조회하는 방법
- 관계형 데이터베이스의 핵심 기능 중 하나
- INNER JOIN
- 두 테이블에서 공통된 값이 있는 행만 반환
- LEFT JOIN (LEFT OUTER JOIN)
- 왼쪽 테이블의 모든 행과 오른쪽 테이블에서 매칭되는 행을 반환
- 매칭되지 않는 경우 NULL로 표시
- RIGHT JOIN (RIGHT OUTER JOIN)
- 오른쪽 테이블의 모든 행과 왼쪽 테이블에서 매칭되는 행을 반환
- FULL OUTER JOIN
- 양쪽 테이블의 모든 행을 반환하며, 매칭되지 않는 경우 NULL로 표시
- MySQL에서는 직접 지원하지 않으므로 UNION을 사용하여 구현
- Spring JDBC를 활용한 SQL과 JOIN
- Spring Framework에서 제공하는 JDBC 지원 라이브러리로, 데이터베이스 연동을 간편하게 해줌
- JdbcTemplate 클래스를 사용하여 SQL 쿼리를 실행하고 결과를 처리
- 의존성 추가 (build.gradle)
- 데이터베이스 연결 설정 (application.properties)
- 데이터 조회 예제
-
@Repository public class StudentDao { @Autowired private JdbcTemplate jdbcTemplate; public List<Student> getAllStudents() { String sql = "SELECT * FROM students"; return jdbcTemplate.query(sql, new RowMapper<Student>() { @Override public Student mapRow(ResultSet rs, int rowNum) throws SQLException { Student student = new Student(); student.setStudentId(rs.getInt("student_id")); student.setName(rs.getString("name")); student.setMajor(rs.getString("major")); return student; } }); } }
-
- 데이터 삽입 예제
-
public int addStudent(Student student) { String sql = "INSERT INTO students (student_id, name, major) VALUES (?, ?, ?)"; return jdbcTemplate.update(sql, student.getStudentId(), student.getName(), student.getMajor()); }
-
- 데이터 수정 예제
-
public int updateStudentMajor(int studentId, String newMajor) { String sql = "UPDATE students SET major = ? WHERE student_id = ?"; return jdbcTemplate.update(sql, newMajor, studentId); }
-
- 데이터 삭제 예제
-
public int deleteStudent(int studentId) { String sql = "DELETE FROM students WHERE student_id = ?"; return jdbcTemplate.update(sql, studentId); }
-